{"version":3,"file":"webamp.bundle.min.mjs","sources":["../../../node_modules/process-nextick-args/index.js","../../../node_modules/isarray/index.js","../../../node_modules/readable-stream/lib/internal/streams/stream.js","../../../node_modules/readable-stream/node_modules/safe-buffer/index.js","../../../node_modules/core-util-is/lib/util.js","../../../node_modules/readable-stream/lib/internal/streams/BufferList.js","../../../node_modules/readable-stream/lib/internal/streams/destroy.js","../../../node_modules/util-deprecate/node.js","../../../node_modules/readable-stream/lib/_stream_writable.js","../../../node_modules/readable-stream/lib/_stream_duplex.js","../../../node_modules/readable-stream/lib/_stream_readable.js","../../../node_modules/readable-stream/lib/_stream_transform.js","../../../node_modules/readable-stream/lib/_stream_passthrough.js","../../../node_modules/readable-stream/readable.js","../../../node_modules/jszip/lib/support.js","../../../node_modules/jszip/lib/base64.js","../../../node_modules/jszip/lib/nodejsUtils.js","../../../node_modules/immediate/lib/index.js","../../../node_modules/lie/lib/index.js","../../../node_modules/jszip/lib/external.js","../../../node_modules/jszip/lib/utils.js","../../../node_modules/jszip/lib/stream/GenericWorker.js","../../../node_modules/jszip/lib/utf8.js","../../../node_modules/jszip/lib/stream/ConvertWorker.js","../../../node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js","../../../node_modules/jszip/lib/stream/StreamHelper.js","../../../node_modules/jszip/lib/defaults.js","../../../node_modules/jszip/lib/stream/DataWorker.js","../../../node_modules/jszip/lib/crc32.js","../../../node_modules/jszip/lib/stream/Crc32Probe.js","../../../node_modules/jszip/lib/stream/DataLengthProbe.js","../../../node_modules/jszip/lib/compressedObject.js","../../../node_modules/jszip/lib/zipObject.js","../../../node_modules/pako/lib/utils/common.js","../../../node_modules/pako/lib/zlib/trees.js","../../../node_modules/pako/lib/zlib/adler32.js","../../../node_modules/pako/lib/zlib/crc32.js","../../../node_modules/pako/lib/zlib/messages.js","../../../node_modules/pako/lib/zlib/deflate.js","../../../node_modules/pako/lib/utils/strings.js","../../../node_modules/pako/lib/zlib/zstream.js","../../../node_modules/pako/lib/deflate.js","../../../node_modules/pako/lib/zlib/inffast.js","../../../node_modules/pako/lib/zlib/inftrees.js","../../../node_modules/pako/lib/zlib/inflate.js","../../../node_modules/pako/lib/zlib/constants.js","../../../node_modules/pako/lib/zlib/gzheader.js","../../../node_modules/pako/lib/inflate.js","../../../node_modules/pako/index.js","../../../node_modules/jszip/lib/flate.js","../../../node_modules/jszip/lib/compressions.js","../../../node_modules/jszip/lib/signature.js","../../../node_modules/jszip/lib/generate/ZipFileWorker.js","../../../node_modules/jszip/lib/generate/index.js","../../../node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js","../../../node_modules/jszip/lib/object.js","../../../node_modules/jszip/lib/reader/DataReader.js","../../../node_modules/jszip/lib/reader/ArrayReader.js","../../../node_modules/jszip/lib/reader/StringReader.js","../../../node_modules/jszip/lib/reader/Uint8ArrayReader.js","../../../node_modules/jszip/lib/reader/NodeBufferReader.js","../../../node_modules/jszip/lib/reader/readerFor.js","../../../node_modules/jszip/lib/zipEntry.js","../../../node_modules/jszip/lib/zipEntries.js","../../../node_modules/jszip/lib/load.js","../../../node_modules/jszip/lib/index.js","../../../node_modules/debug/node_modules/ms/index.js","../../../node_modules/debug/src/common.js","../../../node_modules/debug/src/browser.js","../../../node_modules/has-flag/index.js","../../../node_modules/supports-color/index.js","../../../node_modules/debug/src/node.js","../../../node_modules/debug/src/index.js","../../../node_modules/strtok3/lib/type.js","../../../node_modules/strtok3/lib/AbstractTokenizer.js","../../../node_modules/then-read-stream/lib/index.js","../../../node_modules/strtok3/lib/ReadStreamTokenizer.js","../../../node_modules/strtok3/lib/BufferTokenizer.js","../../../node_modules/strtok3/lib/core.js","../../../node_modules/music-metadata/node_modules/file-type/util.js","../../../node_modules/music-metadata/node_modules/file-type/index.js","../../../node_modules/media-typer/index.js","../../../node_modules/music-metadata/lib/common/Windows1292Decoder.js","../../../node_modules/music-metadata/lib/common/Util.js","../../../node_modules/ieee754/index.js","../../../node_modules/token-types/index.js","../../../node_modules/music-metadata/lib/common/BasicParser.js","../../../node_modules/music-metadata/lib/id3v1/ID3v1Parser.js","../../../node_modules/music-metadata/lib/common/GenericTagMapper.js","../../../node_modules/music-metadata/lib/id3v1/ID3v1TagMap.js","../../../node_modules/music-metadata/lib/id3v2/ID3v24TagMapper.js","../../../node_modules/music-metadata/lib/asf/AsfTagMapper.js","../../../node_modules/music-metadata/lib/id3v2/ID3v22TagMapper.js","../../../node_modules/music-metadata/lib/apev2/APEv2TagMapper.js","../../../node_modules/music-metadata/lib/mp4/MP4TagMapper.js","../../../node_modules/music-metadata/lib/ogg/vorbis/VorbisTagMapper.js","../../../node_modules/music-metadata/lib/riff/RiffInfoTagMap.js","../../../node_modules/music-metadata/lib/common/CombinedTagMapper.js","../../../node_modules/music-metadata/lib/common/MetadataCollector.js","../../../node_modules/music-metadata/lib/id3v2/ID3v2.js","../../../node_modules/music-metadata/lib/id3v2/FrameParser.js","../../../node_modules/music-metadata/lib/id3v2/ID3v2Parser.js","../../../node_modules/music-metadata/lib/common/FourCC.js","../../../node_modules/music-metadata/lib/aiff/AiffToken.js","../../../node_modules/music-metadata/lib/id3v2/ID3Stream.js","../../../node_modules/music-metadata/lib/aiff/AiffParser.js","../../../node_modules/music-metadata/lib/apev2/APEv2Token.js","../../../node_modules/music-metadata/lib/apev2/APEv2Parser.js","../../../node_modules/music-metadata/lib/asf/GUID.js","../../../node_modules/music-metadata/lib/asf/AsfUtil.js","../../../node_modules/music-metadata/lib/asf/AsfObject.js","../../../node_modules/music-metadata/lib/asf/AsfParser.js","../../../node_modules/music-metadata/lib/ogg/vorbis/Vorbis.js","../../../node_modules/music-metadata/lib/id3v2/AbstractID3Parser.js","../../../node_modules/music-metadata/lib/flac/FlacParser.js","../../../node_modules/music-metadata/lib/mp4/AtomToken.js","../../../node_modules/music-metadata/lib/mp4/Atom.js","../../../node_modules/music-metadata/lib/mp4/MP4Parser.js","../../../node_modules/music-metadata/lib/mpeg/XingTag.js","../../../node_modules/music-metadata/lib/mpeg/MpegParser.js","../../../node_modules/music-metadata/lib/musepack/sv8/StreamVersion8.js","../../../node_modules/music-metadata/lib/musepack/sv8/MpcSv8Parser.js","../../../node_modules/music-metadata/lib/musepack/sv7/StreamVersion7.js","../../../node_modules/music-metadata/lib/musepack/sv7/BitReader.js","../../../node_modules/music-metadata/lib/musepack/sv7/MpcSv7Parser.js","../../../node_modules/music-metadata/lib/musepack/index.js","../../../node_modules/music-metadata/lib/ogg/vorbis/VorbisParser.js","../../../node_modules/music-metadata/lib/ogg/opus/OpusParser.js","../../../node_modules/music-metadata/lib/ogg/speex/SpeexParser.js","../../../node_modules/music-metadata/lib/ogg/OggParser.js","../../../node_modules/music-metadata/lib/riff/RiffChunk.js","../../../node_modules/music-metadata/lib/wav/WaveChunk.js","../../../node_modules/music-metadata/lib/riff/WaveParser.js","../../../node_modules/music-metadata/lib/wavpack/WavPackToken.js","../../../node_modules/music-metadata/lib/wavpack/WavPackParser.js","../../../node_modules/music-metadata/lib/dsf/DsfChunk.js","../../../node_modules/music-metadata/lib/dsf/DsfParser.js","../../../node_modules/music-metadata/lib/dsdiff/DsdiffToken.js","../../../node_modules/music-metadata/lib/dsdiff/DsdiffParser.js","../../../node_modules/music-metadata/lib/ParserFactory.js","../../../node_modules/music-metadata/lib/core.js","../../../node_modules/is-typedarray/index.js","../../../node_modules/typedarray-to-buffer/index.js","../../../node_modules/music-metadata-browser/dist/fetch/Browser2NodeStream.js","../../../node_modules/music-metadata-browser/dist/index.js","../../../node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/react/jsx-runtime.js","../../../node_modules/react-dom/node_modules/scheduler/cjs/scheduler.production.js","../../../node_modules/react-dom/node_modules/scheduler/index.js","../../../node_modules/react/cjs/react.production.js","../../../node_modules/react/index.js","../../../node_modules/react-dom/cjs/react-dom.production.js","../../../node_modules/react-dom/index.js","../../../node_modules/react-dom/cjs/react-dom-client.production.js","../../../node_modules/react-dom/client.js","../../../node_modules/react-redux/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.production.min.js","../../../node_modules/react-redux/node_modules/use-sync-external-store/shim/index.js","../../../node_modules/react-redux/node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.production.min.js","../../../node_modules/react-redux/node_modules/use-sync-external-store/shim/with-selector.js","../../../node_modules/react-redux/es/utils/batch.js","../../../node_modules/react-redux/es/components/Context.js","../../../node_modules/react-redux/es/hooks/useReduxContext.js","../../../node_modules/react-redux/es/utils/useSyncExternalStore.js","../../../node_modules/react-redux/es/hooks/useSelector.js","../../../node_modules/react-is/cjs/react-is.production.min.js","../../../node_modules/react-is/index.js","../../../node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js","../../../node_modules/react-redux/node_modules/react-is/cjs/react-is.production.min.js","../../../node_modules/react-redux/es/utils/Subscription.js","../../../node_modules/react-redux/es/utils/useIsomorphicLayoutEffect.js","../../../node_modules/react-redux/es/components/Provider.js","../../../node_modules/react-redux/es/hooks/useStore.js","../../../node_modules/react-redux/es/hooks/useDispatch.js","../../../node_modules/redux/dist/redux.mjs","../../../node_modules/react-redux/es/index.js","../../../node_modules/redux-thunk/es/index.js","../../../node_modules/redux-devtools-extension/index.js","../../js/actionTypes.ts","../../js/constants.ts","../../js/utils.ts","../../js/reducers/playlist.ts","../../js/reducers/windows.ts","../../js/reducers/media.ts","../../../node_modules/reselect/lib/index.js","../../js/reducers/display.ts","../../js/reducers/userInput.ts","../../js/reducers/equalizer.ts","../../js/reducers/network.ts","../../js/reducers/settings.ts","../../../node_modules/invariant/invariant.js","../../js/fileUtils.ts","../../js/trackUtils.ts","../../js/reducers/tracks.ts","../../js/types.ts","../../js/reducers/milkdrop.ts","../../js/reducers/index.ts","../../js/playlistHtml.tsx","../../js/marqueeUtils.tsx","../../js/resizeUtils.ts","../../js/selectors.ts","../../js/snapUtils.ts","../../js/actionCreators/windows.ts","../../js/actionCreators/media.ts","../../js/actionCreators/equalizer.ts","../../winamp-eqf/constants.js","../../winamp-eqf/parser.js","../../winamp-eqf/creator.js","../../winamp-eqf/index.js","../../js/skinSprites.ts","../../js/regionParser.ts","../../js/skinParserUtils.ts","../js/skinParser.js","../../../node_modules/tinyqueue/index.js","../js/loadQueue.js","../../js/actionCreators/playlist.ts","../../js/actionCreators/files.ts","../../js/actionCreators/milkdrop.ts","../../js/actionCreators/index.ts","../../js/mediaMiddleware.ts","../../js/store.ts","../../../node_modules/fscreen/dist/fscreen.esm.js","../../js/components/Fullscreen.tsx","../../js/hooks.ts","../../../node_modules/classnames/index.js","../../js/components/ResizeTarget.tsx","../../js/components/FocusTarget.tsx","../../js/components/WinampButton.tsx","../../js/components/GenWindow/index.tsx","../../js/components/MilkdropWindow/Visualizer.tsx","../../js/components/MilkdropWindow/Background.tsx","../../js/components/MilkdropWindow/PresetOverlay.tsx","../../js/components/DropTarget.tsx","../../js/components/ContextMenu.tsx","../../js/components/ContextMenuWrapper.tsx","../../js/components/MilkdropWindow/MilkdropContextMenu.tsx","../../js/components/MilkdropWindow/Desktop.tsx","../../js/components/MilkdropWindow/index.tsx","../../js/components/PlaybackContextMenu.tsx","../../js/components/SkinsContextMenu.tsx","../../js/components/OptionsContextMenu.tsx","../../js/components/MainWindow/MainContextMenu.tsx","../../js/components/WindowManager.tsx","../../../node_modules/lodash/_basePropertyOf.js","../../../node_modules/lodash/_deburrLetter.js","../../../node_modules/lodash/_freeGlobal.js","../../../node_modules/lodash/_root.js","../../../node_modules/lodash/_Symbol.js","../../../node_modules/lodash/_arrayMap.js","../../../node_modules/lodash/isArray.js","../../../node_modules/lodash/_getRawTag.js","../../../node_modules/lodash/_objectToString.js","../../../node_modules/lodash/_baseGetTag.js","../../../node_modules/lodash/isObjectLike.js","../../../node_modules/lodash/isSymbol.js","../../../node_modules/lodash/_baseToString.js","../../../node_modules/lodash/toString.js","../../../node_modules/lodash/deburr.js","../../js/components/Character.tsx","../../js/components/MiniTime.tsx","../../js/components/ClickedDiv.tsx","../../js/components/ContextMenuTarget.tsx","../../js/components/FFTNullsoft.ts","../../js/components/VisPainter.ts","../../js/components/Vis.tsx","../../js/components/MainWindow/ActionButtons.tsx","../../js/components/Balance.tsx","../../js/components/MainWindow/MainBalance.tsx","../../js/components/MainWindow/Close.tsx","../../js/components/MainWindow/ClutterBar.tsx","../../js/components/MainWindow/Eject.tsx","../../js/components/MainWindow/EqToggleButton.tsx","../../js/components/MainWindow/PlaylistToggleButton.tsx","../../js/components/CharacterString.tsx","../../js/components/MainWindow/Kbps.tsx","../../js/components/MainWindow/Khz.tsx","../../js/components/MainWindow/Marquee.tsx","../../js/components/MainWindow/MonoStereo.tsx","../../js/components/MainWindow/Position.tsx","../../js/components/MainWindow/Repeat.tsx","../../js/components/MainWindow/Shade.tsx","../../js/components/MainWindow/Minimize.tsx","../../js/components/MainWindow/Shuffle.tsx","../../js/components/MainWindow/Time.tsx","../../js/components/Volume.tsx","../../js/components/MainWindow/MainVolume.tsx","../../js/components/MainWindow/index.tsx","../../js/components/PlaylistWindow/PlaylistResizeTarget.tsx","../../js/components/PlaylistWindow/PlaylistShade.tsx","../../js/components/PlaylistWindow/PlaylistMenuEntry.tsx","../../js/components/PlaylistWindow/PlaylistMenu.tsx","../../js/components/PlaylistWindow/AddMenu.tsx","../../js/components/PlaylistWindow/RemoveMenu.tsx","../../js/components/PlaylistWindow/SelectionMenu.tsx","../../js/components/PlaylistWindow/SortContextMenu.tsx","../../js/components/PlaylistWindow/MiscOptionsContextMenu.tsx","../../js/components/PlaylistWindow/MiscMenu.tsx","../../js/components/PlaylistWindow/ListMenu.tsx","../../js/components/PlaylistWindow/RunningTimeDisplay.tsx","../../js/components/PlaylistWindow/PlaylistActionArea.tsx","../../js/components/PlaylistWindow/TrackCell.tsx","../../js/components/PlaylistWindow/TrackTitle.tsx","../../js/components/PlaylistWindow/TrackList.tsx","../../js/components/VerticalSlider.tsx","../../js/components/PlaylistWindow/PlaylistScrollBar.tsx","../../js/components/PlaylistWindow/index.tsx","../../js/components/EqualizerWindow/Band.tsx","../../js/components/EqualizerWindow/EqOn.tsx","../../js/components/EqualizerWindow/EqAuto.tsx","../js/components/EqualizerWindow/spline.js","../../js/components/EqualizerWindow/EqGraph.tsx","../../js/components/EqualizerWindow/PresetsContextMenu.tsx","../../js/components/EqualizerWindow/EqTitleButtons.tsx","../../js/components/EqualizerWindow/EqualizerShade.tsx","../../js/components/EqualizerWindow/index.tsx","../../js/skinSelectors.ts","../../js/components/Css.tsx","../../js/components/ClipPaths.tsx","../../../node_modules/endianness/endianness.js","../../../node_modules/utf8-buffer/index.js","../../../node_modules/byte-data/lib/int-parser.js","../../../node_modules/ieee754-buffer/index.js","../../../node_modules/byte-data/index.js","../../../node_modules/riff-file/index.js","../node_modules/ani-cursor/dist/parser.js","../node_modules/ani-cursor/dist/index.js","../../js/components/Skin.tsx","../../js/components/App.tsx","../../js/hotkeys.ts","../../js/emitter.ts","../js/media/StereoBalanceNode.js","../../js/media/elementSource.ts","../../js/media/index.ts","../../js/Disposable.ts","../../js/webampLazy.tsx","../../js/setImmediate.ts","../../js/webamp.ts"],"sourcesContent":["'use strict';\n\nif (typeof process === 'undefined' ||\n    !process.version ||\n    process.version.indexOf('v0.') === 0 ||\n    process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = { nextTick: nextTick };\n} else {\n  module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n  var len = arguments.length;\n  var args, i;\n  switch (len) {\n  case 0:\n  case 1:\n    return process.nextTick(fn);\n  case 2:\n    return process.nextTick(function afterTickOne() {\n      fn.call(null, arg1);\n    });\n  case 3:\n    return process.nextTick(function afterTickTwo() {\n      fn.call(null, arg1, arg2);\n    });\n  case 4:\n    return process.nextTick(function afterTickThree() {\n      fn.call(null, arg1, arg2, arg3);\n    });\n  default:\n    args = new Array(len - 1);\n    i = 0;\n    while (i < args.length) {\n      args[i++] = arguments[i];\n    }\n    return process.nextTick(function afterTick() {\n      fn.apply(null, args);\n    });\n  }\n}\n\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};\n","module.exports = require('stream');\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n  for (var key in src) {\n    dst[key] = src[key]\n  }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports)\n  exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number')\n  }\n  return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  var buf = Buffer(size)\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding)\n    } else {\n      buf.fill(fill)\n    }\n  } else {\n    buf.fill(0)\n  }\n  return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number')\n  }\n  return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n  return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null ||\n         typeof arg === 'boolean' ||\n         typeof arg === 'number' ||\n         typeof arg === 'string' ||\n         typeof arg === 'symbol' ||  // ES6 symbol\n         typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('buffer').Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = { data: v, next: null };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = { data: v, next: this.head };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n    while (p = p.next) {\n      ret += s + p.data;\n    }return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n    return ret;\n  };\n\n  return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n  module.exports.prototype[util.inspect.custom] = function () {\n    var obj = util.inspect({ length: this.length });\n    return this.constructor.name + ' ' + obj;\n  };\n}","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err) {\n      if (!this._writableState) {\n        pna.nextTick(emitErrorNT, this, err);\n      } else if (!this._writableState.errorEmitted) {\n        this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, this, err);\n      }\n    }\n\n    return this;\n  }\n\n  // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  }\n\n  // if this is a duplex stream mark the writable part as destroyed as well\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      if (!_this._writableState) {\n        pna.nextTick(emitErrorNT, _this, err);\n      } else if (!_this._writableState.errorEmitted) {\n        _this._writableState.errorEmitted = true;\n        pna.nextTick(emitErrorNT, _this, err);\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n\n  return this;\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finalCalled = false;\n    this._writableState.prefinished = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};","\n/**\n * For Node.js, simply re-export the core `util.deprecate` function.\n */\n\nmodule.exports = require('util').deprecate;\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n  // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n  var hwm = options.highWaterMark;\n  var writableHwm = options.writableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // if _final has been called\n  this.finalCalled = false;\n\n  // drain event flag.\n  this.needDrain = false;\n  // at the start of calling end()\n  this.ending = false;\n  // when end() has been called, and returned\n  this.ended = false;\n  // when 'finish' is emitted\n  this.finished = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n  this.length = 0;\n\n  // a flag to see when we're in the middle of a write.\n  this.writing = false;\n\n  // when true all writes will be buffered until .uncork() call\n  this.corked = 0;\n\n  // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n  this.sync = true;\n\n  // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n  this.bufferProcessing = false;\n\n  // the callback that's passed to _write(chunk,cb)\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  };\n\n  // the callback that the user supplies to write(chunk,encoding,cb)\n  this.writecb = null;\n\n  // the amount that is being written when _write is called.\n  this.writelen = 0;\n\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null;\n\n  // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n  this.pendingcb = 0;\n\n  // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n  this.prefinished = false;\n\n  // True if the error was already emitted and should not be thrown again\n  this.errorEmitted = false;\n\n  // count buffered requests\n  this.bufferedRequestCount = 0;\n\n  // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function (object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function (object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this);\n\n  // legacy.\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n\n    if (typeof options.writev === 'function') this._writev = options.writev;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n    if (typeof options.final === 'function') this._final = options.final;\n  }\n\n  Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end');\n  // TODO: defer error events consistently everywhere, not just the cb\n  stream.emit('error', er);\n  pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  if (er) {\n    stream.emit('error', er);\n    pna.nextTick(cb, er);\n    valid = false;\n  }\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n  if (typeof cb !== 'function') cb = nop;\n\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n\n    if (!state.writing && !state.corked && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n  var len = state.objectMode ? 1 : chunk.length;\n\n  state.length += len;\n\n  var ret = state.length < state.highWaterMark;\n  // we must ensure that previous needDrain will not be reset to false.\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    pna.nextTick(cb, er);\n    // this can emit finish, and it will always happen\n    // after error\n    pna.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n    // this can emit finish, but finish must\n    // always follow error\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n\n  onwriteStateUpdate(state);\n\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n\n    var count = 0;\n    var allBuffers = true;\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n    buffer.allBuffers = allBuffers;\n\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n    // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--;\n      // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n  // .end() fully uncorks\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  }\n\n  // ignore unnecessary end() calls.\n  if (!state.ending) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n    if (err) {\n      stream.emit('error', err);\n    }\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      pna.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n  if (need) {\n    prefinish(stream, state);\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n  if (cb) {\n    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n  }\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  // reuse the free corkReq.\n  state.corkedRequestsFree.next = corkReq;\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function () {\n    if (this._writableState === undefined) {\n      return false;\n    }\n    return this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._writableState.destroyed = value;\n  }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n  for (var key in obj) {\n    keys.push(key);\n  }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n  // avoid scope creep, the keys array can then be collected\n  var keys = objectKeys(Writable.prototype);\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n\n  Readable.call(this, options);\n  Writable.call(this, options);\n\n  if (options && options.readable === false) this.readable = false;\n\n  if (options && options.writable === false) this.writable = false;\n\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n  this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._writableState.highWaterMark;\n  }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return;\n\n  // no more data can be written.\n  // But allow more writes to happen in this tick.\n  pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n\n  pna.nextTick(cb, err);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = (typeof global !== 'undefined' ? global : typeof window !== 'undefined' ? window : typeof self !== 'undefined' ? self : {}).Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n  // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  options = options || {};\n\n  // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n  var isDuplex = stream instanceof Duplex;\n\n  // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n  this.objectMode = !!options.objectMode;\n\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n  // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n  var hwm = options.highWaterMark;\n  var readableHwm = options.readableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n  // cast to ints.\n  this.highWaterMark = Math.floor(this.highWaterMark);\n\n  // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false;\n\n  // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n  this.sync = true;\n\n  // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false;\n\n  // has it been destroyed\n  this.destroyed = false;\n\n  // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n  this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n  // the number of writers that are awaiting a drain event in .pipe()s\n  this.awaitDrain = 0;\n\n  // if true, a maybeReadMore has been scheduled\n  this.readingMore = false;\n\n  this.decoder = null;\n  this.encoding = null;\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n\n  if (!(this instanceof Readable)) return new Readable(options);\n\n  this._readableState = new ReadableState(options, this);\n\n  // legacy\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function () {\n    if (this._readableState === undefined) {\n      return false;\n    }\n    return this._readableState.destroyed;\n  },\n  set: function (value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    }\n\n    // backward compatibility, the user is explicitly\n    // managing destroyed\n    this._readableState.destroyed = value;\n  }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n    if (state.needReadable) emitReadable(stream);\n  }\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n  return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n  return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  }\n  // If we're asking for more than the current hwm, then raise the hwm.\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n;\n  // Don't have enough\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n  return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n\n  if (n !== 0) state.emittedReadable = false;\n\n  // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state);\n\n  // if we've ended, and we're now clear, then finish it up.\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  }\n\n  // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n\n  // if we need a readable event, then we need to do some reading.\n  var doRead = state.needReadable;\n  debug('need readable', doRead);\n\n  // if we currently have less than the highWaterMark, then also read some\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  }\n\n  // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true;\n    // if the length is currently zero, then we *need* a readable event.\n    if (state.length === 0) state.needReadable = true;\n    // call internal read method\n    this._read(state.highWaterMark);\n    state.sync = false;\n    // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true;\n\n    // If we tried to read() past the EOF, then emit end on the next tick.\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n  state.ended = true;\n\n  // emit 'readable' now to make sure it gets picked up.\n  emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    pna.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length)\n      // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n  state.readingMore = false;\n}\n\n// abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n  dest.on('unpipe', onunpipe);\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  }\n\n  // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n\n  var cleanedUp = false;\n  function cleanup() {\n    debug('cleanup');\n    // cleanup event handlers once the pipe is broken\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n\n    cleanedUp = true;\n\n    // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  }\n\n  // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', state.awaitDrain);\n        state.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n      src.pause();\n    }\n  }\n\n  // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  }\n\n  // Make sure our error handler is attached before userland ones.\n  prependListener(dest, 'error', onerror);\n\n  // Both close and finish should trigger unpipe, but only once.\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n  dest.once('close', onclose);\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  }\n\n  // tell the dest that it's being piped to\n  dest.emit('pipe', src);\n\n  // start the flow if it hasn't been started already.\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = { hasUnpiped: false };\n\n  // if we're not piping anywhere, then do nothing.\n  if (state.pipesCount === 0) return this;\n\n  // just one destination.  most common case.\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n\n    if (!dest) dest = state.pipes;\n\n    // got a match.\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  }\n\n  // slow case. multiple pipe destinations.\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, { hasUnpiped: false });\n    }return this;\n  }\n\n  // try to find the right one.\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n  dest.emit('unpipe', this, unpipeInfo);\n\n  return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n      if (!state.reading) {\n        pna.nextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    pna.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n  while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n\n  stream.on('end', function () {\n    debug('wrapped end');\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk);\n\n    // don't skip over falsy values in objectMode\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  });\n\n  // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  }\n\n  // proxy certain important events.\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  }\n\n  // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n  this._read = function (n) {\n    debug('wrapped _read', n);\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function () {\n    return this._readableState.highWaterMark;\n  }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n\n  return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n  return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n      break;\n    }\n    ++c;\n  }\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState;\n\n  // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    pna.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n  return -1;\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return this.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n\n  cb(er);\n\n  var rs = this._readableState;\n  rs.reading = false;\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n\n  Duplex.call(this, options);\n\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  };\n\n  // start out asking for a readable event once data is transformed.\n  this._readableState.needReadable = true;\n\n  // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  }\n\n  // When the writable side finishes, then flush out anything remaining.\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function') {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this2 = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n    _this2.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data);\n\n  // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n  return stream.push(null);\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = Object.create(require('core-util-is'));\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};","var Stream = require('stream');\nif (process.env.READABLE_STREAM === 'disable' && Stream) {\n  module.exports = Stream;\n  exports = module.exports = Stream.Readable;\n  exports.Readable = Stream.Readable;\n  exports.Writable = Stream.Writable;\n  exports.Duplex = Stream.Duplex;\n  exports.Transform = Stream.Transform;\n  exports.PassThrough = Stream.PassThrough;\n  exports.Stream = Stream;\n} else {\n  exports = module.exports = require('./lib/_stream_readable.js');\n  exports.Stream = Stream || exports;\n  exports.Readable = exports;\n  exports.Writable = require('./lib/_stream_writable.js');\n  exports.Duplex = require('./lib/_stream_duplex.js');\n  exports.Transform = require('./lib/_stream_transform.js');\n  exports.PassThrough = require('./lib/_stream_passthrough.js');\n}\n","\"use strict\";\n\nexports.base64 = true;\nexports.array = true;\nexports.string = true;\nexports.arraybuffer = typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\nexports.nodebuffer = typeof Buffer !== \"undefined\";\n// contains true if JSZip can read/generate Uint8Array, false otherwise.\nexports.uint8array = typeof Uint8Array !== \"undefined\";\n\nif (typeof ArrayBuffer === \"undefined\") {\n    exports.blob = false;\n}\nelse {\n    var buffer = new ArrayBuffer(0);\n    try {\n        exports.blob = new Blob([buffer], {\n            type: \"application/zip\"\n        }).size === 0;\n    }\n    catch (e) {\n        try {\n            var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(buffer);\n            exports.blob = builder.getBlob(\"application/zip\").size === 0;\n        }\n        catch (e) {\n            exports.blob = false;\n        }\n    }\n}\n\ntry {\n    exports.nodestream = !!require(\"readable-stream\").Readable;\n} catch(e) {\n    exports.nodestream = false;\n}\n","\"use strict\";\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\n// private property\nvar _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n\n// public method for encoding\nexports.encode = function(input) {\n    var output = [];\n    var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n    var i = 0, len = input.length, remainingBytes = len;\n\n    var isArray = utils.getTypeOf(input) !== \"string\";\n    while (i < input.length) {\n        remainingBytes = len - i;\n\n        if (!isArray) {\n            chr1 = input.charCodeAt(i++);\n            chr2 = i < len ? input.charCodeAt(i++) : 0;\n            chr3 = i < len ? input.charCodeAt(i++) : 0;\n        } else {\n            chr1 = input[i++];\n            chr2 = i < len ? input[i++] : 0;\n            chr3 = i < len ? input[i++] : 0;\n        }\n\n        enc1 = chr1 >> 2;\n        enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n        enc3 = remainingBytes > 1 ? (((chr2 & 15) << 2) | (chr3 >> 6)) : 64;\n        enc4 = remainingBytes > 2 ? (chr3 & 63) : 64;\n\n        output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4));\n\n    }\n\n    return output.join(\"\");\n};\n\n// public method for decoding\nexports.decode = function(input) {\n    var chr1, chr2, chr3;\n    var enc1, enc2, enc3, enc4;\n    var i = 0, resultIndex = 0;\n\n    var dataUrlPrefix = \"data:\";\n\n    if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {\n        // This is a common error: people give a data url\n        // (data:image/png;base64,iVBOR...) with a {base64: true} and\n        // wonders why things don't work.\n        // We can detect that the string input looks like a data url but we\n        // *can't* be sure it is one: removing everything up to the comma would\n        // be too dangerous.\n        throw new Error(\"Invalid base64 input, it looks like a data url.\");\n    }\n\n    input = input.replace(/[^A-Za-z0-9+/=]/g, \"\");\n\n    var totalLength = input.length * 3 / 4;\n    if(input.charAt(input.length - 1) === _keyStr.charAt(64)) {\n        totalLength--;\n    }\n    if(input.charAt(input.length - 2) === _keyStr.charAt(64)) {\n        totalLength--;\n    }\n    if (totalLength % 1 !== 0) {\n        // totalLength is not an integer, the length does not match a valid\n        // base64 content. That can happen if:\n        // - the input is not a base64 content\n        // - the input is *almost* a base64 content, with a extra chars at the\n        //   beginning or at the end\n        // - the input uses a base64 variant (base64url for example)\n        throw new Error(\"Invalid base64 input, bad content length.\");\n    }\n    var output;\n    if (support.uint8array) {\n        output = new Uint8Array(totalLength|0);\n    } else {\n        output = new Array(totalLength|0);\n    }\n\n    while (i < input.length) {\n\n        enc1 = _keyStr.indexOf(input.charAt(i++));\n        enc2 = _keyStr.indexOf(input.charAt(i++));\n        enc3 = _keyStr.indexOf(input.charAt(i++));\n        enc4 = _keyStr.indexOf(input.charAt(i++));\n\n        chr1 = (enc1 << 2) | (enc2 >> 4);\n        chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n        chr3 = ((enc3 & 3) << 6) | enc4;\n\n        output[resultIndex++] = chr1;\n\n        if (enc3 !== 64) {\n            output[resultIndex++] = chr2;\n        }\n        if (enc4 !== 64) {\n            output[resultIndex++] = chr3;\n        }\n\n    }\n\n    return output;\n};\n","\"use strict\";\n\nmodule.exports = {\n    /**\n     * True if this is running in Nodejs, will be undefined in a browser.\n     * In a browser, browserify won't include this file and the whole module\n     * will be resolved an empty object.\n     */\n    isNode : typeof Buffer !== \"undefined\",\n    /**\n     * Create a new nodejs Buffer from an existing content.\n     * @param {Object} data the data to pass to the constructor.\n     * @param {String} encoding the encoding to use.\n     * @return {Buffer} a new Buffer.\n     */\n    newBufferFrom: function(data, encoding) {\n        if (Buffer.from && Buffer.from !== Uint8Array.from) {\n            return Buffer.from(data, encoding);\n        } else {\n            if (typeof data === \"number\") {\n                // Safeguard for old Node.js versions. On newer versions,\n                // Buffer.from(number) / Buffer(number, encoding) already throw.\n                throw new Error(\"The \\\"data\\\" argument must not be a number\");\n            }\n            return new Buffer(data, encoding);\n        }\n    },\n    /**\n     * Create a new nodejs Buffer with the specified size.\n     * @param {Integer} size the size of the buffer.\n     * @return {Buffer} a new Buffer.\n     */\n    allocBuffer: function (size) {\n        if (Buffer.alloc) {\n            return Buffer.alloc(size);\n        } else {\n            var buf = new Buffer(size);\n            buf.fill(0);\n            return buf;\n        }\n    },\n    /**\n     * Find out if an object is a Buffer.\n     * @param {Object} b the object to test.\n     * @return {Boolean} true if the object is a Buffer, false otherwise.\n     */\n    isBuffer : function(b){\n        return Buffer.isBuffer(b);\n    },\n\n    isStream : function (obj) {\n        return obj &&\n            typeof obj.on === \"function\" &&\n            typeof obj.pause === \"function\" &&\n            typeof obj.resume === \"function\";\n    }\n};\n","'use strict';\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\n\nvar scheduleDrain;\n\nif (process.browser) {\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n    scheduleDrain = function () {\n      element.data = (called = ++called % 2);\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n    scheduleDrain = function () {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function () {\n\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function () {\n      setTimeout(nextTick, 0);\n    };\n  }\n} else {\n  scheduleDrain = function () {\n    process.nextTick(nextTick);\n  };\n}\n\nvar draining;\nvar queue = [];\n//named nextTick for less confusing stack traces\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n    while (++i < len) {\n      oldQueue[i]();\n    }\n    len = queue.length;\n  }\n  draining = false;\n}\n\nmodule.exports = immediate;\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}\n","'use strict';\nvar immediate = require('immediate');\n\n/* istanbul ignore next */\nfunction INTERNAL() {}\n\nvar handlers = {};\n\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\n/* istanbul ignore else */\nif (!process.browser) {\n  // in which we actually take advantage of JS scoping\n  var UNHANDLED = ['UNHANDLED'];\n}\n\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n  /* istanbul ignore else */\n  if (!process.browser) {\n    this.handled = UNHANDLED;\n  }\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype.finally = function (callback) {\n  if (typeof callback !== 'function') {\n    return this;\n  }\n  var p = this.constructor;\n  return this.then(resolve, reject);\n\n  function resolve(value) {\n    function yes () {\n      return value;\n    }\n    return p.resolve(callback()).then(yes);\n  }\n  function reject(reason) {\n    function no () {\n      throw reason;\n    }\n    return p.resolve(callback()).then(no);\n  }\n};\nPromise.prototype.catch = function (onRejected) {\n  return this.then(null, onRejected);\n};\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED ||\n    typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n  var promise = new this.constructor(INTERNAL);\n  /* istanbul ignore else */\n  if (!process.browser) {\n    if (this.handled === UNHANDLED) {\n      this.handled = null;\n    }\n  }\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n  return self;\n};\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  /* istanbul ignore else */\n  if (!process.browser) {\n    if (self.handled === UNHANDLED) {\n      immediate(function () {\n        if (self.handled === UNHANDLED) {\n          process.emit('unhandledRejection', error, self);\n        }\n      });\n    }\n  }\n  var i = -1;\n  var len = self.queue.length;\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n  if (obj && (typeof obj === 'object' || typeof obj === 'function') && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n  function onError(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n  return out;\n}\n\nPromise.resolve = resolve;\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\nfunction all(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n  return promise;\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\nfunction race(iterable) {\n  var self = this;\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n  return promise;\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}\n","\"use strict\";\n\n// load the global object first:\n// - it should be better integrated in the system (unhandledRejection in node)\n// - the environment may have a custom Promise implementation (see zone.js)\nvar ES6Promise = null;\nif (typeof Promise !== \"undefined\") {\n    ES6Promise = Promise;\n} else {\n    ES6Promise = require(\"lie\");\n}\n\n/**\n * Let the user use/change some implementations.\n */\nmodule.exports = {\n    Promise: ES6Promise\n};\n","\"use strict\";\n\nvar support = require(\"./support\");\nvar base64 = require(\"./base64\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar external = require(\"./external\");\nrequire(\"setimmediate\");\n\n\n/**\n * Convert a string that pass as a \"binary string\": it should represent a byte\n * array but may have > 255 char codes. Be sure to take only the first byte\n * and returns the byte array.\n * @param {String} str the string to transform.\n * @return {Array|Uint8Array} the string in a binary format.\n */\nfunction string2binary(str) {\n    var result = null;\n    if (support.uint8array) {\n        result = new Uint8Array(str.length);\n    } else {\n        result = new Array(str.length);\n    }\n    return stringToArrayLike(str, result);\n}\n\n/**\n * Create a new blob with the given content and the given type.\n * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use\n * an Uint8Array because the stock browser of android 4 won't accept it (it\n * will be silently converted to a string, \"[object Uint8Array]\").\n *\n * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge:\n * when a large amount of Array is used to create the Blob, the amount of\n * memory consumed is nearly 100 times the original data amount.\n *\n * @param {String} type the mime type of the blob.\n * @return {Blob} the created blob.\n */\nexports.newBlob = function(part, type) {\n    exports.checkSupport(\"blob\");\n\n    try {\n        // Blob constructor\n        return new Blob([part], {\n            type: type\n        });\n    }\n    catch (e) {\n\n        try {\n            // deprecated, browser only, old way\n            var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n            var builder = new Builder();\n            builder.append(part);\n            return builder.getBlob(type);\n        }\n        catch (e) {\n\n            // well, fuck ?!\n            throw new Error(\"Bug : can't construct the Blob.\");\n        }\n    }\n\n\n};\n/**\n * The identity function.\n * @param {Object} input the input.\n * @return {Object} the same input.\n */\nfunction identity(input) {\n    return input;\n}\n\n/**\n * Fill in an array with a string.\n * @param {String} str the string to use.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n */\nfunction stringToArrayLike(str, array) {\n    for (var i = 0; i < str.length; ++i) {\n        array[i] = str.charCodeAt(i) & 0xFF;\n    }\n    return array;\n}\n\n/**\n * An helper for the function arrayLikeToString.\n * This contains static information and functions that\n * can be optimized by the browser JIT compiler.\n */\nvar arrayToStringHelper = {\n    /**\n     * Transform an array of int into a string, chunk by chunk.\n     * See the performances notes on arrayLikeToString.\n     * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n     * @param {String} type the type of the array.\n     * @param {Integer} chunk the chunk size.\n     * @return {String} the resulting string.\n     * @throws Error if the chunk is too big for the stack.\n     */\n    stringifyByChunk: function(array, type, chunk) {\n        var result = [], k = 0, len = array.length;\n        // shortcut\n        if (len <= chunk) {\n            return String.fromCharCode.apply(null, array);\n        }\n        while (k < len) {\n            if (type === \"array\" || type === \"nodebuffer\") {\n                result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n            }\n            else {\n                result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n            }\n            k += chunk;\n        }\n        return result.join(\"\");\n    },\n    /**\n     * Call String.fromCharCode on every item in the array.\n     * This is the naive implementation, which generate A LOT of intermediate string.\n     * This should be used when everything else fail.\n     * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n     * @return {String} the result.\n     */\n    stringifyByChar: function(array){\n        var resultStr = \"\";\n        for(var i = 0; i < array.length; i++) {\n            resultStr += String.fromCharCode(array[i]);\n        }\n        return resultStr;\n    },\n    applyCanBeUsed : {\n        /**\n         * true if the browser accepts to use String.fromCharCode on Uint8Array\n         */\n        uint8array : (function () {\n            try {\n                return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1;\n            } catch (e) {\n                return false;\n            }\n        })(),\n        /**\n         * true if the browser accepts to use String.fromCharCode on nodejs Buffer.\n         */\n        nodebuffer : (function () {\n            try {\n                return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1;\n            } catch (e) {\n                return false;\n            }\n        })()\n    }\n};\n\n/**\n * Transform an array-like object to a string.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\nfunction arrayLikeToString(array) {\n    // Performances notes :\n    // --------------------\n    // String.fromCharCode.apply(null, array) is the fastest, see\n    // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n    // but the stack is limited (and we can get huge arrays !).\n    //\n    // result += String.fromCharCode(array[i]); generate too many strings !\n    //\n    // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n    // TODO : we now have workers that split the work. Do we still need that ?\n    var chunk = 65536,\n        type = exports.getTypeOf(array),\n        canUseApply = true;\n    if (type === \"uint8array\") {\n        canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array;\n    } else if (type === \"nodebuffer\") {\n        canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer;\n    }\n\n    if (canUseApply) {\n        while (chunk > 1) {\n            try {\n                return arrayToStringHelper.stringifyByChunk(array, type, chunk);\n            } catch (e) {\n                chunk = Math.floor(chunk / 2);\n            }\n        }\n    }\n\n    // no apply or chunk error : slow and painful algorithm\n    // default browser on android 4.*\n    return arrayToStringHelper.stringifyByChar(array);\n}\n\nexports.applyFromCharCode = arrayLikeToString;\n\n\n/**\n * Copy the data from an array-like to an other array-like.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n */\nfunction arrayLikeToArrayLike(arrayFrom, arrayTo) {\n    for (var i = 0; i < arrayFrom.length; i++) {\n        arrayTo[i] = arrayFrom[i];\n    }\n    return arrayTo;\n}\n\n// a matrix containing functions to transform everything into everything.\nvar transform = {};\n\n// string to ?\ntransform[\"string\"] = {\n    \"string\": identity,\n    \"array\": function(input) {\n        return stringToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"string\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return stringToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": function(input) {\n        return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length));\n    }\n};\n\n// array to ?\ntransform[\"array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": identity,\n    \"arraybuffer\": function(input) {\n        return (new Uint8Array(input)).buffer;\n    },\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(input);\n    }\n};\n\n// arraybuffer to ?\ntransform[\"arraybuffer\"] = {\n    \"string\": function(input) {\n        return arrayLikeToString(new Uint8Array(input));\n    },\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n    },\n    \"arraybuffer\": identity,\n    \"uint8array\": function(input) {\n        return new Uint8Array(input);\n    },\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(new Uint8Array(input));\n    }\n};\n\n// uint8array to ?\ntransform[\"uint8array\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return input.buffer;\n    },\n    \"uint8array\": identity,\n    \"nodebuffer\": function(input) {\n        return nodejsUtils.newBufferFrom(input);\n    }\n};\n\n// nodebuffer to ?\ntransform[\"nodebuffer\"] = {\n    \"string\": arrayLikeToString,\n    \"array\": function(input) {\n        return arrayLikeToArrayLike(input, new Array(input.length));\n    },\n    \"arraybuffer\": function(input) {\n        return transform[\"nodebuffer\"][\"uint8array\"](input).buffer;\n    },\n    \"uint8array\": function(input) {\n        return arrayLikeToArrayLike(input, new Uint8Array(input.length));\n    },\n    \"nodebuffer\": identity\n};\n\n/**\n * Transform an input into any type.\n * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.\n * If no output type is specified, the unmodified input will be returned.\n * @param {String} outputType the output type.\n * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n * @throws {Error} an Error if the browser doesn't support the requested output type.\n */\nexports.transformTo = function(outputType, input) {\n    if (!input) {\n        // undefined, null, etc\n        // an empty string won't harm.\n        input = \"\";\n    }\n    if (!outputType) {\n        return input;\n    }\n    exports.checkSupport(outputType);\n    var inputType = exports.getTypeOf(input);\n    var result = transform[inputType][outputType](input);\n    return result;\n};\n\n/**\n * Resolve all relative path components, \".\" and \"..\", in a path. If these relative components\n * traverse above the root then the resulting path will only contain the final path component.\n *\n * All empty components, e.g. \"//\", are removed.\n * @param {string} path A path with / or \\ separators\n * @returns {string} The path with all relative path components resolved.\n */\nexports.resolve = function(path) {\n    var parts = path.split(\"/\");\n    var result = [];\n    for (var index = 0; index < parts.length; index++) {\n        var part = parts[index];\n        // Allow the first and last component to be empty for trailing slashes.\n        if (part === \".\" || (part === \"\" && index !== 0 && index !== parts.length - 1)) {\n            continue;\n        } else if (part === \"..\") {\n            result.pop();\n        } else {\n            result.push(part);\n        }\n    }\n    return result.join(\"/\");\n};\n\n/**\n * Return the type of the input.\n * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n * @param {Object} input the input to identify.\n * @return {String} the (lowercase) type of the input.\n */\nexports.getTypeOf = function(input) {\n    if (typeof input === \"string\") {\n        return \"string\";\n    }\n    if (Object.prototype.toString.call(input) === \"[object Array]\") {\n        return \"array\";\n    }\n    if (support.nodebuffer && nodejsUtils.isBuffer(input)) {\n        return \"nodebuffer\";\n    }\n    if (support.uint8array && input instanceof Uint8Array) {\n        return \"uint8array\";\n    }\n    if (support.arraybuffer && input instanceof ArrayBuffer) {\n        return \"arraybuffer\";\n    }\n};\n\n/**\n * Throw an exception if the type is not supported.\n * @param {String} type the type to check.\n * @throws {Error} an Error if the browser doesn't support the requested type.\n */\nexports.checkSupport = function(type) {\n    var supported = support[type.toLowerCase()];\n    if (!supported) {\n        throw new Error(type + \" is not supported by this platform\");\n    }\n};\n\nexports.MAX_VALUE_16BITS = 65535;\nexports.MAX_VALUE_32BITS = -1; // well, \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\" is parsed as -1\n\n/**\n * Prettify a string read as binary.\n * @param {string} str the string to prettify.\n * @return {string} a pretty string.\n */\nexports.pretty = function(str) {\n    var res = \"\",\n        code, i;\n    for (i = 0; i < (str || \"\").length; i++) {\n        code = str.charCodeAt(i);\n        res += \"\\\\x\" + (code < 16 ? \"0\" : \"\") + code.toString(16).toUpperCase();\n    }\n    return res;\n};\n\n/**\n * Defer the call of a function.\n * @param {Function} callback the function to call asynchronously.\n * @param {Array} args the arguments to give to the callback.\n */\nexports.delay = function(callback, args, self) {\n    setImmediate(function () {\n        callback.apply(self || null, args || []);\n    });\n};\n\n/**\n * Extends a prototype with an other, without calling a constructor with\n * side effects. Inspired by nodejs' `utils.inherits`\n * @param {Function} ctor the constructor to augment\n * @param {Function} superCtor the parent constructor to use\n */\nexports.inherits = function (ctor, superCtor) {\n    var Obj = function() {};\n    Obj.prototype = superCtor.prototype;\n    ctor.prototype = new Obj();\n};\n\n/**\n * Merge the objects passed as parameters into a new one.\n * @private\n * @param {...Object} var_args All objects to merge.\n * @return {Object} a new object with the data of the others.\n */\nexports.extend = function() {\n    var result = {}, i, attr;\n    for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers\n        for (attr in arguments[i]) {\n            if (Object.prototype.hasOwnProperty.call(arguments[i], attr) && typeof result[attr] === \"undefined\") {\n                result[attr] = arguments[i][attr];\n            }\n        }\n    }\n    return result;\n};\n\n/**\n * Transform arbitrary content into a Promise.\n * @param {String} name a name for the content being processed.\n * @param {Object} inputData the content to process.\n * @param {Boolean} isBinary true if the content is not an unicode string\n * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character.\n * @param {Boolean} isBase64 true if the string content is encoded with base64.\n * @return {Promise} a promise in a format usable by JSZip.\n */\nexports.prepareContent = function(name, inputData, isBinary, isOptimizedBinaryString, isBase64) {\n\n    // if inputData is already a promise, this flatten it.\n    var promise = external.Promise.resolve(inputData).then(function(data) {\n\n\n        var isBlob = support.blob && (data instanceof Blob || [\"[object File]\", \"[object Blob]\"].indexOf(Object.prototype.toString.call(data)) !== -1);\n\n        if (isBlob && typeof FileReader !== \"undefined\") {\n            return new external.Promise(function (resolve, reject) {\n                var reader = new FileReader();\n\n                reader.onload = function(e) {\n                    resolve(e.target.result);\n                };\n                reader.onerror = function(e) {\n                    reject(e.target.error);\n                };\n                reader.readAsArrayBuffer(data);\n            });\n        } else {\n            return data;\n        }\n    });\n\n    return promise.then(function(data) {\n        var dataType = exports.getTypeOf(data);\n\n        if (!dataType) {\n            return external.Promise.reject(\n                new Error(\"Can't read the data of '\" + name + \"'. Is it \" +\n                          \"in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\")\n            );\n        }\n        // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n        if (dataType === \"arraybuffer\") {\n            data = exports.transformTo(\"uint8array\", data);\n        } else if (dataType === \"string\") {\n            if (isBase64) {\n                data = base64.decode(data);\n            }\n            else if (isBinary) {\n                // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask\n                if (isOptimizedBinaryString !== true) {\n                    // this is a string, not in a base64 format.\n                    // Be sure that this is a correct \"binary string\"\n                    data = string2binary(data);\n                }\n            }\n        }\n        return data;\n    });\n};\n","\"use strict\";\n\n/**\n * A worker that does nothing but passing chunks to the next one. This is like\n * a nodejs stream but with some differences. On the good side :\n * - it works on IE 6-9 without any issue / polyfill\n * - it weights less than the full dependencies bundled with browserify\n * - it forwards errors (no need to declare an error handler EVERYWHERE)\n *\n * A chunk is an object with 2 attributes : `meta` and `data`. The former is an\n * object containing anything (`percent` for example), see each worker for more\n * details. The latter is the real data (String, Uint8Array, etc).\n *\n * @constructor\n * @param {String} name the name of the stream (mainly used for debugging purposes)\n */\nfunction GenericWorker(name) {\n    // the name of the worker\n    this.name = name || \"default\";\n    // an object containing metadata about the workers chain\n    this.streamInfo = {};\n    // an error which happened when the worker was paused\n    this.generatedError = null;\n    // an object containing metadata to be merged by this worker into the general metadata\n    this.extraStreamInfo = {};\n    // true if the stream is paused (and should not do anything), false otherwise\n    this.isPaused = true;\n    // true if the stream is finished (and should not do anything), false otherwise\n    this.isFinished = false;\n    // true if the stream is locked to prevent further structure updates (pipe), false otherwise\n    this.isLocked = false;\n    // the event listeners\n    this._listeners = {\n        \"data\":[],\n        \"end\":[],\n        \"error\":[]\n    };\n    // the previous worker, if any\n    this.previous = null;\n}\n\nGenericWorker.prototype = {\n    /**\n     * Push a chunk to the next workers.\n     * @param {Object} chunk the chunk to push\n     */\n    push : function (chunk) {\n        this.emit(\"data\", chunk);\n    },\n    /**\n     * End the stream.\n     * @return {Boolean} true if this call ended the worker, false otherwise.\n     */\n    end : function () {\n        if (this.isFinished) {\n            return false;\n        }\n\n        this.flush();\n        try {\n            this.emit(\"end\");\n            this.cleanUp();\n            this.isFinished = true;\n        } catch (e) {\n            this.emit(\"error\", e);\n        }\n        return true;\n    },\n    /**\n     * End the stream with an error.\n     * @param {Error} e the error which caused the premature end.\n     * @return {Boolean} true if this call ended the worker with an error, false otherwise.\n     */\n    error : function (e) {\n        if (this.isFinished) {\n            return false;\n        }\n\n        if(this.isPaused) {\n            this.generatedError = e;\n        } else {\n            this.isFinished = true;\n\n            this.emit(\"error\", e);\n\n            // in the workers chain exploded in the middle of the chain,\n            // the error event will go downward but we also need to notify\n            // workers upward that there has been an error.\n            if(this.previous) {\n                this.previous.error(e);\n            }\n\n            this.cleanUp();\n        }\n        return true;\n    },\n    /**\n     * Add a callback on an event.\n     * @param {String} name the name of the event (data, end, error)\n     * @param {Function} listener the function to call when the event is triggered\n     * @return {GenericWorker} the current object for chainability\n     */\n    on : function (name, listener) {\n        this._listeners[name].push(listener);\n        return this;\n    },\n    /**\n     * Clean any references when a worker is ending.\n     */\n    cleanUp : function () {\n        this.streamInfo = this.generatedError = this.extraStreamInfo = null;\n        this._listeners = [];\n    },\n    /**\n     * Trigger an event. This will call registered callback with the provided arg.\n     * @param {String} name the name of the event (data, end, error)\n     * @param {Object} arg the argument to call the callback with.\n     */\n    emit : function (name, arg) {\n        if (this._listeners[name]) {\n            for(var i = 0; i < this._listeners[name].length; i++) {\n                this._listeners[name][i].call(this, arg);\n            }\n        }\n    },\n    /**\n     * Chain a worker with an other.\n     * @param {Worker} next the worker receiving events from the current one.\n     * @return {worker} the next worker for chainability\n     */\n    pipe : function (next) {\n        return next.registerPrevious(this);\n    },\n    /**\n     * Same as `pipe` in the other direction.\n     * Using an API with `pipe(next)` is very easy.\n     * Implementing the API with the point of view of the next one registering\n     * a source is easier, see the ZipFileWorker.\n     * @param {Worker} previous the previous worker, sending events to this one\n     * @return {Worker} the current worker for chainability\n     */\n    registerPrevious : function (previous) {\n        if (this.isLocked) {\n            throw new Error(\"The stream '\" + this + \"' has already been used.\");\n        }\n\n        // sharing the streamInfo...\n        this.streamInfo = previous.streamInfo;\n        // ... and adding our own bits\n        this.mergeStreamInfo();\n        this.previous =  previous;\n        var self = this;\n        previous.on(\"data\", function (chunk) {\n            self.processChunk(chunk);\n        });\n        previous.on(\"end\", function () {\n            self.end();\n        });\n        previous.on(\"error\", function (e) {\n            self.error(e);\n        });\n        return this;\n    },\n    /**\n     * Pause the stream so it doesn't send events anymore.\n     * @return {Boolean} true if this call paused the worker, false otherwise.\n     */\n    pause : function () {\n        if(this.isPaused || this.isFinished) {\n            return false;\n        }\n        this.isPaused = true;\n\n        if(this.previous) {\n            this.previous.pause();\n        }\n        return true;\n    },\n    /**\n     * Resume a paused stream.\n     * @return {Boolean} true if this call resumed the worker, false otherwise.\n     */\n    resume : function () {\n        if(!this.isPaused || this.isFinished) {\n            return false;\n        }\n        this.isPaused = false;\n\n        // if true, the worker tried to resume but failed\n        var withError = false;\n        if(this.generatedError) {\n            this.error(this.generatedError);\n            withError = true;\n        }\n        if(this.previous) {\n            this.previous.resume();\n        }\n\n        return !withError;\n    },\n    /**\n     * Flush any remaining bytes as the stream is ending.\n     */\n    flush : function () {},\n    /**\n     * Process a chunk. This is usually the method overridden.\n     * @param {Object} chunk the chunk to process.\n     */\n    processChunk : function(chunk) {\n        this.push(chunk);\n    },\n    /**\n     * Add a key/value to be added in the workers chain streamInfo once activated.\n     * @param {String} key the key to use\n     * @param {Object} value the associated value\n     * @return {Worker} the current worker for chainability\n     */\n    withStreamInfo : function (key, value) {\n        this.extraStreamInfo[key] = value;\n        this.mergeStreamInfo();\n        return this;\n    },\n    /**\n     * Merge this worker's streamInfo into the chain's streamInfo.\n     */\n    mergeStreamInfo : function () {\n        for(var key in this.extraStreamInfo) {\n            if (!Object.prototype.hasOwnProperty.call(this.extraStreamInfo, key)) {\n                continue;\n            }\n            this.streamInfo[key] = this.extraStreamInfo[key];\n        }\n    },\n\n    /**\n     * Lock the stream to prevent further updates on the workers chain.\n     * After calling this method, all calls to pipe will fail.\n     */\n    lock: function () {\n        if (this.isLocked) {\n            throw new Error(\"The stream '\" + this + \"' has already been used.\");\n        }\n        this.isLocked = true;\n        if (this.previous) {\n            this.previous.lock();\n        }\n    },\n\n    /**\n     *\n     * Pretty print the workers chain.\n     */\n    toString : function () {\n        var me = \"Worker \" + this.name;\n        if (this.previous) {\n            return this.previous + \" -> \" + me;\n        } else {\n            return me;\n        }\n    }\n};\n\nmodule.exports = GenericWorker;\n","\"use strict\";\n\nvar utils = require(\"./utils\");\nvar support = require(\"./support\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * The following functions come from pako, from pako/lib/utils/strings\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new Array(256);\nfor (var i=0; i<256; i++) {\n    _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1);\n}\n_utf8len[254]=_utf8len[254]=1; // Invalid sequence start\n\n// convert string to array (typed, when possible)\nvar string2buf = function (str) {\n    var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n    // count binary size\n    for (m_pos = 0; m_pos < str_len; m_pos++) {\n        c = str.charCodeAt(m_pos);\n        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n            c2 = str.charCodeAt(m_pos+1);\n            if ((c2 & 0xfc00) === 0xdc00) {\n                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n                m_pos++;\n            }\n        }\n        buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n    }\n\n    // allocate buffer\n    if (support.uint8array) {\n        buf = new Uint8Array(buf_len);\n    } else {\n        buf = new Array(buf_len);\n    }\n\n    // convert\n    for (i=0, m_pos = 0; i < buf_len; m_pos++) {\n        c = str.charCodeAt(m_pos);\n        if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) {\n            c2 = str.charCodeAt(m_pos+1);\n            if ((c2 & 0xfc00) === 0xdc00) {\n                c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n                m_pos++;\n            }\n        }\n        if (c < 0x80) {\n            /* one byte */\n            buf[i++] = c;\n        } else if (c < 0x800) {\n            /* two bytes */\n            buf[i++] = 0xC0 | (c >>> 6);\n            buf[i++] = 0x80 | (c & 0x3f);\n        } else if (c < 0x10000) {\n            /* three bytes */\n            buf[i++] = 0xE0 | (c >>> 12);\n            buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n            buf[i++] = 0x80 | (c & 0x3f);\n        } else {\n            /* four bytes */\n            buf[i++] = 0xf0 | (c >>> 18);\n            buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n            buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n            buf[i++] = 0x80 | (c & 0x3f);\n        }\n    }\n\n    return buf;\n};\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nvar utf8border = function(buf, max) {\n    var pos;\n\n    max = max || buf.length;\n    if (max > buf.length) { max = buf.length; }\n\n    // go back from last position, until start of sequence found\n    pos = max-1;\n    while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n    // Fuckup - very small and broken sequence,\n    // return max, because we should return something anyway.\n    if (pos < 0) { return max; }\n\n    // If we came to start of buffer - that means vuffer is too small,\n    // return max too.\n    if (pos === 0) { return max; }\n\n    return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n\n// convert array to string\nvar buf2string = function (buf) {\n    var i, out, c, c_len;\n    var len = buf.length;\n\n    // Reserve max possible length (2 words per char)\n    // NB: by unknown reasons, Array is significantly faster for\n    //     String.fromCharCode.apply than Uint16Array.\n    var utf16buf = new Array(len*2);\n\n    for (out=0, i=0; i<len;) {\n        c = buf[i++];\n        // quick process ascii\n        if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n        c_len = _utf8len[c];\n        // skip 5 & 6 byte codes\n        if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; }\n\n        // apply mask on first byte\n        c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n        // join the rest\n        while (c_len > 1 && i < len) {\n            c = (c << 6) | (buf[i++] & 0x3f);\n            c_len--;\n        }\n\n        // terminated by end of string?\n        if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n        if (c < 0x10000) {\n            utf16buf[out++] = c;\n        } else {\n            c -= 0x10000;\n            utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n            utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n        }\n    }\n\n    // shrinkBuf(utf16buf, out)\n    if (utf16buf.length !== out) {\n        if(utf16buf.subarray) {\n            utf16buf = utf16buf.subarray(0, out);\n        } else {\n            utf16buf.length = out;\n        }\n    }\n\n    // return String.fromCharCode.apply(null, utf16buf);\n    return utils.applyFromCharCode(utf16buf);\n};\n\n\n// That's all for the pako functions.\n\n\n/**\n * Transform a javascript string into an array (typed if possible) of bytes,\n * UTF-8 encoded.\n * @param {String} str the string to encode\n * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.\n */\nexports.utf8encode = function utf8encode(str) {\n    if (support.nodebuffer) {\n        return nodejsUtils.newBufferFrom(str, \"utf-8\");\n    }\n\n    return string2buf(str);\n};\n\n\n/**\n * Transform a bytes array (or a representation) representing an UTF-8 encoded\n * string into a javascript string.\n * @param {Array|Uint8Array|Buffer} buf the data de decode\n * @return {String} the decoded string.\n */\nexports.utf8decode = function utf8decode(buf) {\n    if (support.nodebuffer) {\n        return utils.transformTo(\"nodebuffer\", buf).toString(\"utf-8\");\n    }\n\n    buf = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", buf);\n\n    return buf2string(buf);\n};\n\n/**\n * A worker to decode utf8 encoded binary chunks into string chunks.\n * @constructor\n */\nfunction Utf8DecodeWorker() {\n    GenericWorker.call(this, \"utf-8 decode\");\n    // the last bytes if a chunk didn't end with a complete codepoint.\n    this.leftOver = null;\n}\nutils.inherits(Utf8DecodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8DecodeWorker.prototype.processChunk = function (chunk) {\n\n    var data = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", chunk.data);\n\n    // 1st step, re-use what's left of the previous chunk\n    if (this.leftOver && this.leftOver.length) {\n        if(support.uint8array) {\n            var previousData = data;\n            data = new Uint8Array(previousData.length + this.leftOver.length);\n            data.set(this.leftOver, 0);\n            data.set(previousData, this.leftOver.length);\n        } else {\n            data = this.leftOver.concat(data);\n        }\n        this.leftOver = null;\n    }\n\n    var nextBoundary = utf8border(data);\n    var usableData = data;\n    if (nextBoundary !== data.length) {\n        if (support.uint8array) {\n            usableData = data.subarray(0, nextBoundary);\n            this.leftOver = data.subarray(nextBoundary, data.length);\n        } else {\n            usableData = data.slice(0, nextBoundary);\n            this.leftOver = data.slice(nextBoundary, data.length);\n        }\n    }\n\n    this.push({\n        data : exports.utf8decode(usableData),\n        meta : chunk.meta\n    });\n};\n\n/**\n * @see GenericWorker.flush\n */\nUtf8DecodeWorker.prototype.flush = function () {\n    if(this.leftOver && this.leftOver.length) {\n        this.push({\n            data : exports.utf8decode(this.leftOver),\n            meta : {}\n        });\n        this.leftOver = null;\n    }\n};\nexports.Utf8DecodeWorker = Utf8DecodeWorker;\n\n/**\n * A worker to endcode string chunks into utf8 encoded binary chunks.\n * @constructor\n */\nfunction Utf8EncodeWorker() {\n    GenericWorker.call(this, \"utf-8 encode\");\n}\nutils.inherits(Utf8EncodeWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nUtf8EncodeWorker.prototype.processChunk = function (chunk) {\n    this.push({\n        data : exports.utf8encode(chunk.data),\n        meta : chunk.meta\n    });\n};\nexports.Utf8EncodeWorker = Utf8EncodeWorker;\n","\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which convert chunks to a specified type.\n * @constructor\n * @param {String} destType the destination type.\n */\nfunction ConvertWorker(destType) {\n    GenericWorker.call(this, \"ConvertWorker to \" + destType);\n    this.destType = destType;\n}\nutils.inherits(ConvertWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nConvertWorker.prototype.processChunk = function (chunk) {\n    this.push({\n        data : utils.transformTo(this.destType, chunk.data),\n        meta : chunk.meta\n    });\n};\nmodule.exports = ConvertWorker;\n","\"use strict\";\n\nvar Readable = require(\"readable-stream\").Readable;\n\nvar utils = require(\"../utils\");\nutils.inherits(NodejsStreamOutputAdapter, Readable);\n\n/**\n* A nodejs stream using a worker as source.\n* @see the SourceWrapper in http://nodejs.org/api/stream.html\n* @constructor\n* @param {StreamHelper} helper the helper wrapping the worker\n* @param {Object} options the nodejs stream options\n* @param {Function} updateCb the update callback.\n*/\nfunction NodejsStreamOutputAdapter(helper, options, updateCb) {\n    Readable.call(this, options);\n    this._helper = helper;\n\n    var self = this;\n    helper.on(\"data\", function (data, meta) {\n        if (!self.push(data)) {\n            self._helper.pause();\n        }\n        if(updateCb) {\n            updateCb(meta);\n        }\n    })\n        .on(\"error\", function(e) {\n            self.emit(\"error\", e);\n        })\n        .on(\"end\", function () {\n            self.push(null);\n        });\n}\n\n\nNodejsStreamOutputAdapter.prototype._read = function() {\n    this._helper.resume();\n};\n\nmodule.exports = NodejsStreamOutputAdapter;\n","\"use strict\";\n\nvar utils = require(\"../utils\");\nvar ConvertWorker = require(\"./ConvertWorker\");\nvar GenericWorker = require(\"./GenericWorker\");\nvar base64 = require(\"../base64\");\nvar support = require(\"../support\");\nvar external = require(\"../external\");\n\nvar NodejsStreamOutputAdapter = null;\nif (support.nodestream) {\n    try {\n        NodejsStreamOutputAdapter = require(\"../nodejs/NodejsStreamOutputAdapter\");\n    } catch(e) {\n        // ignore\n    }\n}\n\n/**\n * Apply the final transformation of the data. If the user wants a Blob for\n * example, it's easier to work with an U8intArray and finally do the\n * ArrayBuffer/Blob conversion.\n * @param {String} type the name of the final type\n * @param {String|Uint8Array|Buffer} content the content to transform\n * @param {String} mimeType the mime type of the content, if applicable.\n * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format.\n */\nfunction transformZipOutput(type, content, mimeType) {\n    switch(type) {\n    case \"blob\" :\n        return utils.newBlob(utils.transformTo(\"arraybuffer\", content), mimeType);\n    case \"base64\" :\n        return base64.encode(content);\n    default :\n        return utils.transformTo(type, content);\n    }\n}\n\n/**\n * Concatenate an array of data of the given type.\n * @param {String} type the type of the data in the given array.\n * @param {Array} dataArray the array containing the data chunks to concatenate\n * @return {String|Uint8Array|Buffer} the concatenated data\n * @throws Error if the asked type is unsupported\n */\nfunction concat (type, dataArray) {\n    var i, index = 0, res = null, totalLength = 0;\n    for(i = 0; i < dataArray.length; i++) {\n        totalLength += dataArray[i].length;\n    }\n    switch(type) {\n    case \"string\":\n        return dataArray.join(\"\");\n    case \"array\":\n        return Array.prototype.concat.apply([], dataArray);\n    case \"uint8array\":\n        res = new Uint8Array(totalLength);\n        for(i = 0; i < dataArray.length; i++) {\n            res.set(dataArray[i], index);\n            index += dataArray[i].length;\n        }\n        return res;\n    case \"nodebuffer\":\n        return Buffer.concat(dataArray);\n    default:\n        throw new Error(\"concat : unsupported type '\"  + type + \"'\");\n    }\n}\n\n/**\n * Listen a StreamHelper, accumulate its content and concatenate it into a\n * complete block.\n * @param {StreamHelper} helper the helper to use.\n * @param {Function} updateCallback a callback called on each update. Called\n * with one arg :\n * - the metadata linked to the update received.\n * @return Promise the promise for the accumulation.\n */\nfunction accumulate(helper, updateCallback) {\n    return new external.Promise(function (resolve, reject){\n        var dataArray = [];\n        var chunkType = helper._internalType,\n            resultType = helper._outputType,\n            mimeType = helper._mimeType;\n        helper\n            .on(\"data\", function (data, meta) {\n                dataArray.push(data);\n                if(updateCallback) {\n                    updateCallback(meta);\n                }\n            })\n            .on(\"error\", function(err) {\n                dataArray = [];\n                reject(err);\n            })\n            .on(\"end\", function (){\n                try {\n                    var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType);\n                    resolve(result);\n                } catch (e) {\n                    reject(e);\n                }\n                dataArray = [];\n            })\n            .resume();\n    });\n}\n\n/**\n * An helper to easily use workers outside of JSZip.\n * @constructor\n * @param {Worker} worker the worker to wrap\n * @param {String} outputType the type of data expected by the use\n * @param {String} mimeType the mime type of the content, if applicable.\n */\nfunction StreamHelper(worker, outputType, mimeType) {\n    var internalType = outputType;\n    switch(outputType) {\n    case \"blob\":\n    case \"arraybuffer\":\n        internalType = \"uint8array\";\n        break;\n    case \"base64\":\n        internalType = \"string\";\n        break;\n    }\n\n    try {\n        // the type used internally\n        this._internalType = internalType;\n        // the type used to output results\n        this._outputType = outputType;\n        // the mime type\n        this._mimeType = mimeType;\n        utils.checkSupport(internalType);\n        this._worker = worker.pipe(new ConvertWorker(internalType));\n        // the last workers can be rewired without issues but we need to\n        // prevent any updates on previous workers.\n        worker.lock();\n    } catch(e) {\n        this._worker = new GenericWorker(\"error\");\n        this._worker.error(e);\n    }\n}\n\nStreamHelper.prototype = {\n    /**\n     * Listen a StreamHelper, accumulate its content and concatenate it into a\n     * complete block.\n     * @param {Function} updateCb the update callback.\n     * @return Promise the promise for the accumulation.\n     */\n    accumulate : function (updateCb) {\n        return accumulate(this, updateCb);\n    },\n    /**\n     * Add a listener on an event triggered on a stream.\n     * @param {String} evt the name of the event\n     * @param {Function} fn the listener\n     * @return {StreamHelper} the current helper.\n     */\n    on : function (evt, fn) {\n        var self = this;\n\n        if(evt === \"data\") {\n            this._worker.on(evt, function (chunk) {\n                fn.call(self, chunk.data, chunk.meta);\n            });\n        } else {\n            this._worker.on(evt, function () {\n                utils.delay(fn, arguments, self);\n            });\n        }\n        return this;\n    },\n    /**\n     * Resume the flow of chunks.\n     * @return {StreamHelper} the current helper.\n     */\n    resume : function () {\n        utils.delay(this._worker.resume, [], this._worker);\n        return this;\n    },\n    /**\n     * Pause the flow of chunks.\n     * @return {StreamHelper} the current helper.\n     */\n    pause : function () {\n        this._worker.pause();\n        return this;\n    },\n    /**\n     * Return a nodejs stream for this helper.\n     * @param {Function} updateCb the update callback.\n     * @return {NodejsStreamOutputAdapter} the nodejs stream.\n     */\n    toNodejsStream : function (updateCb) {\n        utils.checkSupport(\"nodestream\");\n        if (this._outputType !== \"nodebuffer\") {\n            // an object stream containing blob/arraybuffer/uint8array/string\n            // is strange and I don't know if it would be useful.\n            // I you find this comment and have a good usecase, please open a\n            // bug report !\n            throw new Error(this._outputType + \" is not supported by this method\");\n        }\n\n        return new NodejsStreamOutputAdapter(this, {\n            objectMode : this._outputType !== \"nodebuffer\"\n        }, updateCb);\n    }\n};\n\n\nmodule.exports = StreamHelper;\n","\"use strict\";\nexports.base64 = false;\nexports.binary = false;\nexports.dir = false;\nexports.createFolders = true;\nexports.date = null;\nexports.compression = null;\nexports.compressionOptions = null;\nexports.comment = null;\nexports.unixPermissions = null;\nexports.dosPermissions = null;\n","\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n// the size of the generated chunks\n// TODO expose this as a public variable\nvar DEFAULT_BLOCK_SIZE = 16 * 1024;\n\n/**\n * A worker that reads a content and emits chunks.\n * @constructor\n * @param {Promise} dataP the promise of the data to split\n */\nfunction DataWorker(dataP) {\n    GenericWorker.call(this, \"DataWorker\");\n    var self = this;\n    this.dataIsReady = false;\n    this.index = 0;\n    this.max = 0;\n    this.data = null;\n    this.type = \"\";\n\n    this._tickScheduled = false;\n\n    dataP.then(function (data) {\n        self.dataIsReady = true;\n        self.data = data;\n        self.max = data && data.length || 0;\n        self.type = utils.getTypeOf(data);\n        if(!self.isPaused) {\n            self._tickAndRepeat();\n        }\n    }, function (e) {\n        self.error(e);\n    });\n}\n\nutils.inherits(DataWorker, GenericWorker);\n\n/**\n * @see GenericWorker.cleanUp\n */\nDataWorker.prototype.cleanUp = function () {\n    GenericWorker.prototype.cleanUp.call(this);\n    this.data = null;\n};\n\n/**\n * @see GenericWorker.resume\n */\nDataWorker.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if (!this._tickScheduled && this.dataIsReady) {\n        this._tickScheduled = true;\n        utils.delay(this._tickAndRepeat, [], this);\n    }\n    return true;\n};\n\n/**\n * Trigger a tick a schedule an other call to this function.\n */\nDataWorker.prototype._tickAndRepeat = function() {\n    this._tickScheduled = false;\n    if(this.isPaused || this.isFinished) {\n        return;\n    }\n    this._tick();\n    if(!this.isFinished) {\n        utils.delay(this._tickAndRepeat, [], this);\n        this._tickScheduled = true;\n    }\n};\n\n/**\n * Read and push a chunk.\n */\nDataWorker.prototype._tick = function() {\n\n    if(this.isPaused || this.isFinished) {\n        return false;\n    }\n\n    var size = DEFAULT_BLOCK_SIZE;\n    var data = null, nextIndex = Math.min(this.max, this.index + size);\n    if (this.index >= this.max) {\n        // EOF\n        return this.end();\n    } else {\n        switch(this.type) {\n        case \"string\":\n            data = this.data.substring(this.index, nextIndex);\n            break;\n        case \"uint8array\":\n            data = this.data.subarray(this.index, nextIndex);\n            break;\n        case \"array\":\n        case \"nodebuffer\":\n            data = this.data.slice(this.index, nextIndex);\n            break;\n        }\n        this.index = nextIndex;\n        return this.push({\n            data : data,\n            meta : {\n                percent : this.max ? this.index / this.max * 100 : 0\n            }\n        });\n    }\n};\n\nmodule.exports = DataWorker;\n","\"use strict\";\n\nvar utils = require(\"./utils\");\n\n/**\n * The following functions come from pako, from pako/lib/zlib/crc32.js\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n    var c, table = [];\n\n    for(var n =0; n < 256; n++){\n        c = n;\n        for(var k =0; k < 8; k++){\n            c = ((c&1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n        }\n        table[n] = c;\n    }\n\n    return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n    var t = crcTable, end = pos + len;\n\n    crc = crc ^ (-1);\n\n    for (var i = pos; i < end; i++ ) {\n        crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n    }\n\n    return (crc ^ (-1)); // >>> 0;\n}\n\n// That's all for the pako functions.\n\n/**\n * Compute the crc32 of a string.\n * This is almost the same as the function crc32, but for strings. Using the\n * same function for the two use cases leads to horrible performances.\n * @param {Number} crc the starting value of the crc.\n * @param {String} str the string to use.\n * @param {Number} len the length of the string.\n * @param {Number} pos the starting position for the crc32 computation.\n * @return {Number} the computed crc32.\n */\nfunction crc32str(crc, str, len, pos) {\n    var t = crcTable, end = pos + len;\n\n    crc = crc ^ (-1);\n\n    for (var i = pos; i < end; i++ ) {\n        crc = (crc >>> 8) ^ t[(crc ^ str.charCodeAt(i)) & 0xFF];\n    }\n\n    return (crc ^ (-1)); // >>> 0;\n}\n\nmodule.exports = function crc32wrapper(input, crc) {\n    if (typeof input === \"undefined\" || !input.length) {\n        return 0;\n    }\n\n    var isArray = utils.getTypeOf(input) !== \"string\";\n\n    if(isArray) {\n        return crc32(crc|0, input, input.length, 0);\n    } else {\n        return crc32str(crc|0, input, input.length, 0);\n    }\n};\n","\"use strict\";\n\nvar GenericWorker = require(\"./GenericWorker\");\nvar crc32 = require(\"../crc32\");\nvar utils = require(\"../utils\");\n\n/**\n * A worker which calculate the crc32 of the data flowing through.\n * @constructor\n */\nfunction Crc32Probe() {\n    GenericWorker.call(this, \"Crc32Probe\");\n    this.withStreamInfo(\"crc32\", 0);\n}\nutils.inherits(Crc32Probe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nCrc32Probe.prototype.processChunk = function (chunk) {\n    this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0);\n    this.push(chunk);\n};\nmodule.exports = Crc32Probe;\n","\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"./GenericWorker\");\n\n/**\n * A worker which calculate the total length of the data flowing through.\n * @constructor\n * @param {String} propName the name used to expose the length\n */\nfunction DataLengthProbe(propName) {\n    GenericWorker.call(this, \"DataLengthProbe for \" + propName);\n    this.propName = propName;\n    this.withStreamInfo(propName, 0);\n}\nutils.inherits(DataLengthProbe, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nDataLengthProbe.prototype.processChunk = function (chunk) {\n    if(chunk) {\n        var length = this.streamInfo[this.propName] || 0;\n        this.streamInfo[this.propName] = length + chunk.data.length;\n    }\n    GenericWorker.prototype.processChunk.call(this, chunk);\n};\nmodule.exports = DataLengthProbe;\n\n","\"use strict\";\n\nvar external = require(\"./external\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar DataLengthProbe = require(\"./stream/DataLengthProbe\");\n\n/**\n * Represent a compressed object, with everything needed to decompress it.\n * @constructor\n * @param {number} compressedSize the size of the data compressed.\n * @param {number} uncompressedSize the size of the data after decompression.\n * @param {number} crc32 the crc32 of the decompressed file.\n * @param {object} compression the type of compression, see lib/compressions.js.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data.\n */\nfunction CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) {\n    this.compressedSize = compressedSize;\n    this.uncompressedSize = uncompressedSize;\n    this.crc32 = crc32;\n    this.compression = compression;\n    this.compressedContent = data;\n}\n\nCompressedObject.prototype = {\n    /**\n     * Create a worker to get the uncompressed content.\n     * @return {GenericWorker} the worker.\n     */\n    getContentWorker: function () {\n        var worker = new DataWorker(external.Promise.resolve(this.compressedContent))\n            .pipe(this.compression.uncompressWorker())\n            .pipe(new DataLengthProbe(\"data_length\"));\n\n        var that = this;\n        worker.on(\"end\", function () {\n            if (this.streamInfo[\"data_length\"] !== that.uncompressedSize) {\n                throw new Error(\"Bug : uncompressed data size mismatch\");\n            }\n        });\n        return worker;\n    },\n    /**\n     * Create a worker to get the compressed content.\n     * @return {GenericWorker} the worker.\n     */\n    getCompressedWorker: function () {\n        return new DataWorker(external.Promise.resolve(this.compressedContent))\n            .withStreamInfo(\"compressedSize\", this.compressedSize)\n            .withStreamInfo(\"uncompressedSize\", this.uncompressedSize)\n            .withStreamInfo(\"crc32\", this.crc32)\n            .withStreamInfo(\"compression\", this.compression)\n        ;\n    }\n};\n\n/**\n * Chain the given worker with other workers to compress the content with the\n * given compression.\n * @param {GenericWorker} uncompressedWorker the worker to pipe.\n * @param {Object} compression the compression object.\n * @param {Object} compressionOptions the options to use when compressing.\n * @return {GenericWorker} the new worker compressing the content.\n */\nCompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) {\n    return uncompressedWorker\n        .pipe(new Crc32Probe())\n        .pipe(new DataLengthProbe(\"uncompressedSize\"))\n        .pipe(compression.compressWorker(compressionOptions))\n        .pipe(new DataLengthProbe(\"compressedSize\"))\n        .withStreamInfo(\"compression\", compression);\n};\n\nmodule.exports = CompressedObject;\n","\"use strict\";\n\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar DataWorker = require(\"./stream/DataWorker\");\nvar utf8 = require(\"./utf8\");\nvar CompressedObject = require(\"./compressedObject\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\n/**\n * A simple object representing a file in the zip file.\n * @constructor\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data\n * @param {Object} options the options of the file\n */\nvar ZipObject = function(name, data, options) {\n    this.name = name;\n    this.dir = options.dir;\n    this.date = options.date;\n    this.comment = options.comment;\n    this.unixPermissions = options.unixPermissions;\n    this.dosPermissions = options.dosPermissions;\n\n    this._data = data;\n    this._dataBinary = options.binary;\n    // keep only the compression\n    this.options = {\n        compression : options.compression,\n        compressionOptions : options.compressionOptions\n    };\n};\n\nZipObject.prototype = {\n    /**\n     * Create an internal stream for the content of this object.\n     * @param {String} type the type of each chunk.\n     * @return StreamHelper the stream.\n     */\n    internalStream: function (type) {\n        var result = null, outputType = \"string\";\n        try {\n            if (!type) {\n                throw new Error(\"No output type specified.\");\n            }\n            outputType = type.toLowerCase();\n            var askUnicodeString = outputType === \"string\" || outputType === \"text\";\n            if (outputType === \"binarystring\" || outputType === \"text\") {\n                outputType = \"string\";\n            }\n            result = this._decompressWorker();\n\n            var isUnicodeString = !this._dataBinary;\n\n            if (isUnicodeString && !askUnicodeString) {\n                result = result.pipe(new utf8.Utf8EncodeWorker());\n            }\n            if (!isUnicodeString && askUnicodeString) {\n                result = result.pipe(new utf8.Utf8DecodeWorker());\n            }\n        } catch (e) {\n            result = new GenericWorker(\"error\");\n            result.error(e);\n        }\n\n        return new StreamHelper(result, outputType, \"\");\n    },\n\n    /**\n     * Prepare the content in the asked type.\n     * @param {String} type the type of the result.\n     * @param {Function} onUpdate a function to call on each internal update.\n     * @return Promise the promise of the result.\n     */\n    async: function (type, onUpdate) {\n        return this.internalStream(type).accumulate(onUpdate);\n    },\n\n    /**\n     * Prepare the content as a nodejs stream.\n     * @param {String} type the type of each chunk.\n     * @param {Function} onUpdate a function to call on each internal update.\n     * @return Stream the stream.\n     */\n    nodeStream: function (type, onUpdate) {\n        return this.internalStream(type || \"nodebuffer\").toNodejsStream(onUpdate);\n    },\n\n    /**\n     * Return a worker for the compressed content.\n     * @private\n     * @param {Object} compression the compression object to use.\n     * @param {Object} compressionOptions the options to use when compressing.\n     * @return Worker the worker.\n     */\n    _compressWorker: function (compression, compressionOptions) {\n        if (\n            this._data instanceof CompressedObject &&\n            this._data.compression.magic === compression.magic\n        ) {\n            return this._data.getCompressedWorker();\n        } else {\n            var result = this._decompressWorker();\n            if(!this._dataBinary) {\n                result = result.pipe(new utf8.Utf8EncodeWorker());\n            }\n            return CompressedObject.createWorkerFrom(result, compression, compressionOptions);\n        }\n    },\n    /**\n     * Return a worker for the decompressed content.\n     * @private\n     * @return Worker the worker.\n     */\n    _decompressWorker : function () {\n        if (this._data instanceof CompressedObject) {\n            return this._data.getContentWorker();\n        } else if (this._data instanceof GenericWorker) {\n            return this._data;\n        } else {\n            return new DataWorker(this._data);\n        }\n    }\n};\n\nvar removedMethods = [\"asText\", \"asBinary\", \"asNodeBuffer\", \"asUint8Array\", \"asArrayBuffer\"];\nvar removedFn = function () {\n    throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n};\n\nfor(var i = 0; i < removedMethods.length; i++) {\n    ZipObject.prototype[removedMethods[i]] = removedFn;\n}\nmodule.exports = ZipObject;\n","'use strict';\n\n\nvar TYPED_OK =  (typeof Uint8Array !== 'undefined') &&\n                (typeof Uint16Array !== 'undefined') &&\n                (typeof Int32Array !== 'undefined');\n\nfunction _has(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj /*from1, from2, from3, ...*/) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n  while (sources.length) {\n    var source = sources.shift();\n    if (!source) { continue; }\n\n    if (typeof source !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n};\n\n\n// reduce buffer size, avoiding mem copy\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) { return buf; }\n  if (buf.subarray) { return buf.subarray(0, size); }\n  buf.length = size;\n  return buf;\n};\n\n\nvar fnTyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    }\n    // Fallback to ordinary array\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    var i, l, len, pos, chunk, result;\n\n    // calculate data length\n    len = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    }\n\n    // join chunks\n    result = new Uint8Array(len);\n    pos = 0;\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\n\nvar fnUntyped = {\n  arraySet: function (dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function (chunks) {\n    return [].concat.apply([], chunks);\n  }\n};\n\n\n// Enable/Disable typed arrays use, for testing\n//\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8  = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8  = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n//var Z_FILTERED          = 1;\n//var Z_HUFFMAN_ONLY      = 2;\n//var Z_RLE               = 3;\nvar Z_FIXED               = 4;\n//var Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\nvar Z_BINARY              = 0;\nvar Z_TEXT                = 1;\n//var Z_ASCII             = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n/*============================================================================*/\n\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n// From zutil.h\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES    = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH    = 3;\nvar MAX_MATCH    = 258;\n/* The minimum and maximum match lengths */\n\n// From deflate.h\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES       = 30;\n/* number of distance codes */\n\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS      = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size      = 16;\n/* size of bit buffer in bi_buf */\n\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK   = 256;\n/* end of block literal code */\n\nvar REP_3_6     = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10   = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\nvar extra_lbits =   /* extra bits for each length code */\n  [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];\n\nvar extra_dbits =   /* extra bits for each distance code */\n  [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];\n\nvar extra_blbits =  /* extra bits for each bit length code */\n  [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];\n\nvar bl_order =\n  [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512; /* see definition of array dist_code below */\n\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\nvar static_ltree  = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree  = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code    = new Array(DIST_CODE_LEN);\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code  = new Array(MAX_MATCH - MIN_MATCH + 1);\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length   = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist     = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n\n  this.static_tree  = static_tree;  /* static tree or NULL */\n  this.extra_bits   = extra_bits;   /* extra bits for each code or NULL */\n  this.extra_base   = extra_base;   /* base index for extra_bits */\n  this.elems        = elems;        /* max number of elements in the tree */\n  this.max_length   = max_length;   /* max bit length for the codes */\n\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n  this.has_stree    = static_tree && static_tree.length;\n}\n\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;     /* the dynamic tree */\n  this.max_code = 0;            /* largest code with non zero frequency */\n  this.stat_desc = stat_desc;   /* the corresponding static tree */\n}\n\n\n\nfunction d_code(dist) {\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n\n\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\nfunction put_short(s, w) {\n//    put_byte(s, (uch)((w) & 0xff));\n//    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = (w) & 0xff;\n  s.pending_buf[s.pending++] = (w >>> 8) & 0xff;\n}\n\n\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\nfunction send_bits(s, value, length) {\n  if (s.bi_valid > (Buf_size - length)) {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> (Buf_size - s.bi_valid);\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= (value << s.bi_valid) & 0xffff;\n    s.bi_valid += length;\n  }\n}\n\n\nfunction send_code(s, c, tree) {\n  send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/);\n}\n\n\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\nfunction bi_reverse(code, len) {\n  var res = 0;\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n  return res >>> 1;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\nfunction bi_flush(s) {\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n}\n\n\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\nfunction gen_bitlen(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  var tree            = desc.dyn_tree;\n  var max_code        = desc.max_code;\n  var stree           = desc.stat_desc.static_tree;\n  var has_stree       = desc.stat_desc.has_stree;\n  var extra           = desc.stat_desc.extra_bits;\n  var base            = desc.stat_desc.extra_base;\n  var max_length      = desc.stat_desc.max_length;\n  var h;              /* heap index */\n  var n, m;           /* iterate over the tree elements */\n  var bits;           /* bit length */\n  var xbits;          /* extra bits */\n  var f;              /* frequency */\n  var overflow = 0;   /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n  tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1;\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n    tree[n * 2 + 1]/*.Len*/ = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) { continue; } /* not a leaf node */\n\n    s.bl_count[bits]++;\n    xbits = 0;\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n    f = tree[n * 2]/*.Freq*/;\n    s.opt_len += f * (bits + xbits);\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits);\n    }\n  }\n  if (overflow === 0) { return; }\n\n  // Trace((stderr,\"\\nbit length overflow\\n\"));\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n  do {\n    bits = max_length - 1;\n    while (s.bl_count[bits] === 0) { bits--; }\n    s.bl_count[bits]--;      /* move one leaf down the tree */\n    s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n    overflow -= 2;\n  } while (overflow > 0);\n\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n    while (n !== 0) {\n      m = s.heap[--h];\n      if (m > max_code) { continue; }\n      if (tree[m * 2 + 1]/*.Len*/ !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/;\n        tree[m * 2 + 1]/*.Len*/ = bits;\n      }\n      n--;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\nfunction gen_codes(tree, max_code, bl_count)\n//    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */\n  var code = 0;              /* running code value */\n  var bits;                  /* bit index */\n  var n;                     /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = (code + bl_count[bits - 1]) << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n  for (n = 0;  n <= max_code; n++) {\n    var len = tree[n * 2 + 1]/*.Len*/;\n    if (len === 0) { continue; }\n    /* Now reverse the bits */\n    tree[n * 2]/*.Code*/ = bi_reverse(next_code[len]++, len);\n\n    //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n}\n\n\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\nfunction tr_static_init() {\n  var n;        /* iterates over tree elements */\n  var bits;     /* bit counter */\n  var length;   /* length value */\n  var code;     /* code value */\n  var dist;     /* distance index */\n  var bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n/*#ifdef NO_INIT_GLOBAL_POINTERS\n  static_l_desc.static_tree = static_ltree;\n  static_l_desc.extra_bits = extra_lbits;\n  static_d_desc.static_tree = static_dtree;\n  static_d_desc.extra_bits = extra_dbits;\n  static_bl_desc.extra_bits = extra_blbits;\n#endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n  length = 0;\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n    for (n = 0; n < (1 << extra_lbits[code]); n++) {\n      _length_code[length++] = code;\n    }\n  }\n  //Assert (length == 256, \"tr_static_init: length != 256\");\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n  _length_code[length - 1] = code;\n\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n  dist = 0;\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n    for (n = 0; n < (1 << extra_dbits[code]); n++) {\n      _dist_code[dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: dist != 256\");\n  dist >>= 7; /* from now on, all distances are divided by 128 */\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n    for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  }\n  //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 9;\n    n++;\n    bl_count[9]++;\n  }\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 7;\n    n++;\n    bl_count[7]++;\n  }\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]/*.Len*/ = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n\n  /* The static distance tree is trivial: */\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]/*.Len*/ = 5;\n    static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5);\n  }\n\n  // Now data ready and we can init static trees\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0,          D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0,         BL_CODES, MAX_BL_BITS);\n\n  //static_init_done = true;\n}\n\n\n/* ===========================================================================\n * Initialize a new block.\n */\nfunction init_block(s) {\n  var n; /* iterates over tree elements */\n\n  /* Initialize the trees. */\n  for (n = 0; n < L_CODES;  n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < D_CODES;  n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; }\n  for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; }\n\n  s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n}\n\n\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\nfunction bi_windup(s)\n{\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n}\n\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\nfunction copy_block(s, buf, len, header)\n//DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);        /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  }\n//  while (len--) {\n//    put_byte(s, *buf++);\n//  }\n  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n  s.pending += len;\n}\n\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\nfunction smaller(tree, n, m, depth) {\n  var _n2 = n * 2;\n  var _m2 = m * 2;\n  return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ ||\n         (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m]));\n}\n\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\nfunction pqdownheap(s, tree, k)\n//    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  var v = s.heap[k];\n  var j = k << 1;  /* left son of k */\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len &&\n      smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n    if (smaller(tree, v, s.heap[j], s.depth)) { break; }\n\n    /* Exchange v with the smallest son */\n    s.heap[k] = s.heap[j];\n    k = j;\n\n    /* And continue down the tree, setting j to the left son of k */\n    j <<= 1;\n  }\n  s.heap[k] = v;\n}\n\n\n// inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\nfunction compress_block(s, ltree, dtree)\n//    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  var dist;           /* distance of matched string */\n  var lc;             /* match length or unmatched char (if dist == 0) */\n  var lx = 0;         /* running index in l_buf */\n  var code;           /* the code to send */\n  var extra;          /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]);\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree); /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree); /* send the length code */\n        extra = extra_lbits[code];\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);       /* send the extra length bits */\n        }\n        dist--; /* dist is now the match distance - 1 */\n        code = d_code(dist);\n        //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);       /* send the distance code */\n        extra = extra_dbits[code];\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);   /* send the extra distance bits */\n        }\n      } /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n}\n\n\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\nfunction build_tree(s, desc)\n//    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  var tree     = desc.dyn_tree;\n  var stree    = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var elems    = desc.stat_desc.elems;\n  var n, m;          /* iterate over heap elements */\n  var max_code = -1; /* largest code with non zero frequency */\n  var node;          /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]/*.Freq*/ !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n\n    } else {\n      tree[n * 2 + 1]/*.Len*/ = 0;\n    }\n  }\n\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0);\n    tree[node * 2]/*.Freq*/ = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]/*.Len*/;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n  }\n  desc.max_code = max_code;\n\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n  for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); }\n\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n  node = elems;              /* next internal node of the tree */\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n    /*** pqremove ***/\n    n = s.heap[1/*SMALLEST*/];\n    s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n    /***/\n\n    m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */\n    s.heap[--s.heap_max] = m;\n\n    /* Create a new node father of n and m */\n    tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node;\n\n    /* and insert the new node in the heap */\n    s.heap[1/*SMALLEST*/] = node++;\n    pqdownheap(s, tree, 1/*SMALLEST*/);\n\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/];\n\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n  gen_bitlen(s, desc);\n\n  /* The field len is now set, we can generate the bit codes */\n  gen_codes(tree, max_code, s.bl_count);\n}\n\n\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\nfunction scan_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n  tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]/*.Freq*/ += count;\n\n    } else if (curlen !== 0) {\n\n      if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; }\n      s.bl_tree[REP_3_6 * 2]/*.Freq*/++;\n\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++;\n\n    } else {\n      s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\nfunction send_tree(s, tree, max_code)\n//    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  var n;                     /* iterates over all tree elements */\n  var prevlen = -1;          /* last emitted length */\n  var curlen;                /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */\n\n  var count = 0;             /* repeat count of the current code */\n  var max_count = 7;         /* max repeat count */\n  var min_count = 4;         /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */  /* guard already set */\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]/*.Len*/;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n\n    } else if (count < min_count) {\n      do { send_code(s, curlen, s.bl_tree); } while (--count !== 0);\n\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      }\n      //Assert(count >= 3 && count <= 6, \" 3_6?\");\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n\n\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\nfunction build_bl_tree(s) {\n  var max_blindex;  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n\n  /* Build the bit length tree: */\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4;\n  //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n}\n\n\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\nfunction send_all_trees(s, lcodes, dcodes, blcodes)\n//    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  var rank;                    /* index in bl_order */\n\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n  send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */\n  send_bits(s, dcodes - 1,   5);\n  send_bits(s, blcodes - 4,  4); /* not -3 as stated in appnote.txt */\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3);\n  }\n  //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n\n\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\nfunction detect_data_type(s) {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  var black_mask = 0xf3ffc07f;\n  var n;\n\n  /* Check for non-textual (\"black-listed\") bytes. */\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) {\n      return Z_BINARY;\n    }\n  }\n\n  /* Check for textual (\"white-listed\") bytes. */\n  if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 ||\n      s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) {\n    return Z_TEXT;\n  }\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) {\n      return Z_TEXT;\n    }\n  }\n\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n  return Z_BINARY;\n}\n\n\nvar static_init_done = false;\n\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\nfunction _tr_init(s)\n{\n\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc  = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc  = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n\n  /* Initialize the first block of the first file: */\n  init_block(s);\n}\n\n\n/* ===========================================================================\n * Send a stored block\n */\nfunction _tr_stored_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);    /* send block type */\n  copy_block(s, buf, stored_len, true); /* with header */\n}\n\n\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\nfunction _tr_align(s) {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n}\n\n\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\nfunction _tr_flush_block(s, buf, stored_len, last)\n//DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  var opt_lenb, static_lenb;  /* opt_len and static_len in bytes */\n  var max_blindex = 0;        /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n  if (s.level > 0) {\n\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n\n    /* Construct the literal and distance trees */\n    build_tree(s, s.l_desc);\n    // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc);\n    // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n    max_blindex = build_bl_tree(s);\n\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n    opt_lenb = (s.opt_len + 3 + 7) >>> 3;\n    static_lenb = (s.static_len + 3 + 7) >>> 3;\n\n    // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; }\n\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5; /* force a stored block */\n  }\n\n  if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  }\n  // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  }\n  // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n}\n\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\nfunction _tr_tally(s, dist, lc)\n//    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //var out_length, in_length, dcode;\n\n  s.pending_buf[s.d_buf + s.last_lit * 2]     = (dist >>> 8) & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2]/*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n    dist--;             /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++;\n  }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n\n//#ifdef TRUNCATE_BLOCK\n//  /* Try to guess if it is profitable to stop the current block here */\n//  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n//    /* Compute an upper bound for the compressed length */\n//    out_length = s.last_lit*8;\n//    in_length = s.strstart - s.block_start;\n//\n//    for (dcode = 0; dcode < D_CODES; dcode++) {\n//      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n//    }\n//    out_length >>>= 3;\n//    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n//    //       s->last_lit, in_length, out_length,\n//    //       100L - out_length*100L/in_length));\n//    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n//      return true;\n//    }\n//  }\n//#endif\n\n  return (s.last_lit === s.lit_bufsize - 1);\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n}\n\nexports._tr_init  = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block  = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;\n","'use strict';\n\n// Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = (adler & 0xffff) |0,\n      s2 = ((adler >>> 16) & 0xffff) |0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = (s1 + buf[pos++]) |0;\n      s2 = (s2 + s1) |0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return (s1 | (s2 << 16)) |0;\n}\n\n\nmodule.exports = adler32;\n","'use strict';\n\n// Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// Use ordinary array, since untyped makes no boost here\nfunction makeTable() {\n  var c, table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n    for (var k = 0; k < 8; k++) {\n      c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1));\n    }\n    table[n] = c;\n  }\n\n  return table;\n}\n\n// Create table on load. Just 255 signed longs. Not a problem.\nvar crcTable = makeTable();\n\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return (crc ^ (-1)); // >>> 0;\n}\n\n\nmodule.exports = crc32;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2:      'need dictionary',     /* Z_NEED_DICT       2  */\n  1:      'stream end',          /* Z_STREAM_END      1  */\n  0:      '',                    /* Z_OK              0  */\n  '-1':   'file error',          /* Z_ERRNO         (-1) */\n  '-2':   'stream error',        /* Z_STREAM_ERROR  (-2) */\n  '-3':   'data error',          /* Z_DATA_ERROR    (-3) */\n  '-4':   'insufficient memory', /* Z_MEM_ERROR     (-4) */\n  '-5':   'buffer error',        /* Z_BUF_ERROR     (-5) */\n  '-6':   'incompatible version' /* Z_VERSION_ERROR (-6) */\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils   = require('../utils/common');\nvar trees   = require('./trees');\nvar adler32 = require('./adler32');\nvar crc32   = require('./crc32');\nvar msg     = require('./messages');\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\nvar Z_NO_FLUSH      = 0;\nvar Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\nvar Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\n//var Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\n//var Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\n//var Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n\n/* compression levels */\n//var Z_NO_COMPRESSION      = 0;\n//var Z_BEST_SPEED          = 1;\n//var Z_BEST_COMPRESSION    = 9;\nvar Z_DEFAULT_COMPRESSION = -1;\n\n\nvar Z_FILTERED            = 1;\nvar Z_HUFFMAN_ONLY        = 2;\nvar Z_RLE                 = 3;\nvar Z_FIXED               = 4;\nvar Z_DEFAULT_STRATEGY    = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY              = 0;\n//var Z_TEXT                = 1;\n//var Z_ASCII               = 1; // = Z_TEXT\nvar Z_UNKNOWN             = 2;\n\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n/*============================================================================*/\n\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_MEM_LEVEL = 8;\n\n\nvar LENGTH_CODES  = 29;\n/* number of length codes, not counting the special END_BLOCK code */\nvar LITERALS      = 256;\n/* number of literal bytes 0..255 */\nvar L_CODES       = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\nvar D_CODES       = 30;\n/* number of distance codes */\nvar BL_CODES      = 19;\n/* number of codes used to transfer the bit lengths */\nvar HEAP_SIZE     = 2 * L_CODES + 1;\n/* maximum heap size */\nvar MAX_BITS  = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1);\n\nvar PRESET_DICT = 0x20;\n\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\n\nvar BS_NEED_MORE      = 1; /* block not completed, need more input or more output */\nvar BS_BLOCK_DONE     = 2; /* block flush performed */\nvar BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */\nvar BS_FINISH_DONE    = 4; /* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n  strm.msg = msg[errorCode];\n  return errorCode;\n}\n\nfunction rank(f) {\n  return ((f) << 1) - ((f) > 4 ? 9 : 0);\n}\n\nfunction zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } }\n\n\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\nfunction flush_pending(strm) {\n  var s = strm.state;\n\n  //_tr_flush_bits(s);\n  var len = s.pending;\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n  if (len === 0) { return; }\n\n  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n}\n\n\nfunction flush_block_only(s, last) {\n  trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last);\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n}\n\n\nfunction put_byte(s, b) {\n  s.pending_buf[s.pending++] = b;\n}\n\n\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\nfunction putShortMSB(s, b) {\n//  put_byte(s, (Byte)(b >> 8));\n//  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = (b >>> 8) & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n}\n\n\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\nfunction read_buf(strm, buf, start, size) {\n  var len = strm.avail_in;\n\n  if (len > size) { len = size; }\n  if (len === 0) { return 0; }\n\n  strm.avail_in -= len;\n\n  // zmemcpy(buf, strm->next_in, len);\n  utils.arraySet(buf, strm.input, strm.next_in, len, start);\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  }\n\n  else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n\n  return len;\n}\n\n\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\nfunction longest_match(s, cur_match) {\n  var chain_length = s.max_chain_length;      /* max hash chain length */\n  var scan = s.strstart; /* current string */\n  var match;                       /* matched string */\n  var len;                           /* length of current match */\n  var best_len = s.prev_length;              /* best match length so far */\n  var nice_match = s.nice_match;             /* stop if match long enough */\n  var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ?\n      s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/;\n\n  var _win = s.window; // shortcut\n\n  var wmask = s.w_mask;\n  var prev  = s.prev;\n\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  var strend = s.strstart + MAX_MATCH;\n  var scan_end1  = _win[scan + best_len - 1];\n  var scan_end   = _win[scan + best_len];\n\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n  if (nice_match > s.lookahead) { nice_match = s.lookahead; }\n\n  // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len]     !== scan_end  ||\n        _win[match + best_len - 1] !== scan_end1 ||\n        _win[match]                !== _win[scan] ||\n        _win[++match]              !== _win[scan + 1]) {\n      continue;\n    }\n\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n    scan += 2;\n    match++;\n    // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             _win[++scan] === _win[++match] && _win[++scan] === _win[++match] &&\n             scan < strend);\n\n    // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n      if (len >= nice_match) {\n        break;\n      }\n      scan_end1  = _win[scan + best_len - 1];\n      scan_end   = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n  return s.lookahead;\n}\n\n\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\nfunction fill_window(s) {\n  var _w_size = s.w_size;\n  var p, n, m, more, str;\n\n  //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart;\n\n    // JS ints have 32 bit, block below not needed\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n\n      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n      s.block_start -= _w_size;\n\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n      do {\n        m = s.head[--p];\n        s.head[p] = (m >= _w_size ? m - _w_size : 0);\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n      do {\n        m = s.prev[--p];\n        s.prev[p] = (m >= _w_size ? m - _w_size : 0);\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n\n    /* Initialize the hash value now that we have some input: */\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask;\n//#if MIN_MATCH != 3\n//        Call update_hash() MIN_MATCH-3 more times\n//#endif\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n//  if (s.high_water < s.window_size) {\n//    var curr = s.strstart + s.lookahead;\n//    var init = 0;\n//\n//    if (s.high_water < curr) {\n//      /* Previous high water mark below current data -- zero WIN_INIT\n//       * bytes or up to end of window, whichever is less.\n//       */\n//      init = s.window_size - curr;\n//      if (init > WIN_INIT)\n//        init = WIN_INIT;\n//      zmemzero(s->window + curr, (unsigned)init);\n//      s->high_water = curr + init;\n//    }\n//    else if (s->high_water < (ulg)curr + WIN_INIT) {\n//      /* High water mark at or above current data, but below current data\n//       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n//       * to end of window, whichever is less.\n//       */\n//      init = (ulg)curr + WIN_INIT - s->high_water;\n//      if (init > s->window_size - s->high_water)\n//        init = s->window_size - s->high_water;\n//      zmemzero(s->window + s->high_water, (unsigned)init);\n//      s->high_water += init;\n//    }\n//  }\n//\n//  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n//    \"not enough room for search\");\n}\n\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\nfunction deflate_stored(s, flush) {\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  var max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n\n  /* Copy as much as possible from input to output: */\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n//      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n//        s.block_start >= s.w_size)) {\n//        throw  new Error(\"slide too late\");\n//      }\n\n      fill_window(s);\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n    }\n    //Assert(s->block_start >= 0L, \"block gone\");\n//    if (s.block_start < 0) throw new Error(\"block gone\");\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n\n    /* Emit a stored block if pending_buf will be full: */\n    var max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n    if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_NEED_MORE;\n}\n\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\nfunction deflate_fast(s, flush) {\n  var hash_head;        /* head of the hash chain */\n  var bflush;           /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) {\n        break; /* flush the current block */\n      }\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n    if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n      if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) {\n        s.match_length--; /* string at strstart already in table */\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n        s.strstart++;\n      } else\n      {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n        s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask;\n\n//#if MIN_MATCH != 3\n//                Call UPDATE_HASH() MIN_MATCH-3 more times\n//#endif\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1);\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\nfunction deflate_slow(s, flush) {\n  var hash_head;          /* head of hash chain */\n  var bflush;              /* set if current block must be flushed */\n\n  var max_insert;\n\n  /* Process the input block. */\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n    hash_head = 0/*NIL*/;\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n\n    /* Find the longest match, discarding those <= prev_length.\n     */\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match &&\n        s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n\n      if (s.match_length <= 5 &&\n         (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) {\n\n        /* If prev_match is also MIN_MATCH, match_start is garbage\n         * but we will ignore the current match anyway.\n         */\n        s.match_length = MIN_MATCH - 1;\n      }\n    }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n      }\n\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n      s.strstart++;\n      s.lookahead--;\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  }\n  //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n    s.match_available = 0;\n  }\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n\n  return BS_BLOCK_DONE;\n}\n\n\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\nfunction deflate_rle(s, flush) {\n  var bflush;            /* set if current block must be flushed */\n  var prev;              /* byte at distance one to match */\n  var scan, strend;      /* scan goes up to strend for length of run */\n\n  var _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n      if (s.lookahead === 0) { break; } /* flush the current block */\n    }\n\n    /* See how many times the previous byte repeats */\n    s.match_length = 0;\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 prev === _win[++scan] && prev === _win[++scan] &&\n                 scan < strend);\n        s.match_length = MAX_MATCH - (strend - scan);\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      }\n      //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n    }\n\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n\n      s.lookahead--;\n      s.strstart++;\n    }\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\nfunction deflate_huff(s, flush) {\n  var bflush;             /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n        break;      /* flush the current block */\n      }\n    }\n\n    /* Output a literal byte */\n    s.match_length = 0;\n    //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n    }\n  }\n  s.insert = 0;\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n    return BS_FINISH_DONE;\n  }\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n  }\n  return BS_BLOCK_DONE;\n}\n\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nvar configuration_table;\n\nconfiguration_table = [\n  /*      good lazy nice chain */\n  new Config(0, 0, 0, 0, deflate_stored),          /* 0 store only */\n  new Config(4, 4, 8, 4, deflate_fast),            /* 1 max speed, no lazy matches */\n  new Config(4, 5, 16, 8, deflate_fast),           /* 2 */\n  new Config(4, 6, 32, 32, deflate_fast),          /* 3 */\n\n  new Config(4, 4, 16, 16, deflate_slow),          /* 4 lazy matches */\n  new Config(8, 16, 32, 32, deflate_slow),         /* 5 */\n  new Config(8, 16, 128, 128, deflate_slow),       /* 6 */\n  new Config(8, 32, 128, 256, deflate_slow),       /* 7 */\n  new Config(32, 128, 258, 1024, deflate_slow),    /* 8 */\n  new Config(32, 258, 258, 4096, deflate_slow)     /* 9 max compression */\n];\n\n\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\nfunction lm_init(s) {\n  s.window_size = 2 * s.w_size;\n\n  /*** CLEAR_HASH(s); ***/\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n}\n\n\nfunction DeflateState() {\n  this.strm = null;            /* pointer back to this zlib stream */\n  this.status = 0;            /* as the name implies */\n  this.pending_buf = null;      /* output still pending */\n  this.pending_buf_size = 0;  /* size of pending_buf */\n  this.pending_out = 0;       /* next pending byte to output to the stream */\n  this.pending = 0;           /* nb of bytes in the pending buffer */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.gzhead = null;         /* gzip header information to write */\n  this.gzindex = 0;           /* where in extra, name, or comment */\n  this.method = Z_DEFLATED; /* can only be DEFLATED */\n  this.last_flush = -1;   /* value of flush param for previous deflate call */\n\n  this.w_size = 0;  /* LZ77 window size (32K by default) */\n  this.w_bits = 0;  /* log2(w_size)  (8..16) */\n  this.w_mask = 0;  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;   /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;       /* hash index of string to be inserted */\n  this.hash_size = 0;   /* number of elements in hash table */\n  this.hash_bits = 0;   /* log2(hash_size) */\n  this.hash_mask = 0;   /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;      /* length of best match */\n  this.prev_match = 0;        /* previous match */\n  this.match_available = 0;   /* set if previous match exists */\n  this.strstart = 0;          /* start of string to insert */\n  this.match_start = 0;       /* start of matching string */\n  this.lookahead = 0;         /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;     /* compression level (1..9) */\n  this.strategy = 0;  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0; /* Stop searching when current match exceeds this */\n\n              /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n  this.dyn_ltree  = new utils.Buf16(HEAP_SIZE * 2);\n  this.dyn_dtree  = new utils.Buf16((2 * D_CODES + 1) * 2);\n  this.bl_tree    = new utils.Buf16((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n\n  this.l_desc   = null;         /* desc. for literal tree */\n  this.d_desc   = null;         /* desc. for distance tree */\n  this.bl_desc  = null;         /* desc. for bit length tree */\n\n  //ush bl_count[MAX_BITS+1];\n  this.bl_count = new utils.Buf16(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n  this.heap = new utils.Buf16(2 * L_CODES + 1);  /* heap used to build the Huffman trees */\n  zero(this.heap);\n\n  this.heap_len = 0;               /* number of elements in the heap */\n  this.heap_max = 0;               /* element of largest frequency */\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;          /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;      /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;       /* bit length of current block with optimal trees */\n  this.static_len = 0;    /* bit length of current block with static trees */\n  this.matches = 0;       /* number of string matches in current block */\n  this.insert = 0;        /* bytes at end of window left to insert */\n\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\n\nfunction deflateResetKeep(strm) {\n  var s;\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n\n  s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n  s.status = (s.wrap ? INIT_STATE : BUSY_STATE);\n  strm.adler = (s.wrap === 2) ?\n    0  // crc32(0, Z_NULL, 0)\n  :\n    1; // adler32(0, Z_NULL, 0)\n  s.last_flush = Z_NO_FLUSH;\n  trees._tr_init(s);\n  return Z_OK;\n}\n\n\nfunction deflateReset(strm) {\n  var ret = deflateResetKeep(strm);\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n  return ret;\n}\n\n\nfunction deflateSetHeader(strm, head) {\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; }\n  strm.state.gzhead = head;\n  return Z_OK;\n}\n\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n  if (!strm) { // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n  var wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) { /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n\n  else if (windowBits > 15) {\n    wrap = 2;           /* write gzip wrapper instead */\n    windowBits -= 16;\n  }\n\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED ||\n    windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||\n    strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n  var s = new DeflateState();\n\n  strm.state = s;\n  s.strm = strm;\n\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n\n  s.window = new utils.Buf8(s.w_size * 2);\n  s.head = new utils.Buf16(s.hash_size);\n  s.prev = new utils.Buf16(s.w_size);\n\n  // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4;\n\n  //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n  s.pending_buf = new utils.Buf8(s.pending_buf_size);\n\n  // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n  s.d_buf = 1 * s.lit_bufsize;\n\n  //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n\n  return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\n\nfunction deflate(strm, flush) {\n  var old_flush, s;\n  var beg, val; // for gzip header write only\n\n  if (!strm || !strm.state ||\n    flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n\n  if (!strm.output ||\n      (!strm.input && strm.avail_in !== 0) ||\n      (s.status === FINISH_STATE && flush !== Z_FINISH)) {\n    return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm; /* just in case */\n  old_flush = s.last_flush;\n  s.last_flush = flush;\n\n  /* Write the header */\n  if (s.status === INIT_STATE) {\n\n    if (s.wrap === 2) { // GZIP header\n      strm.adler = 0;  //crc32(0L, Z_NULL, 0);\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n      if (!s.gzhead) { // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      }\n      else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) +\n                    (s.gzhead.hcrc ? 2 : 0) +\n                    (!s.gzhead.extra ? 0 : 4) +\n                    (!s.gzhead.name ? 0 : 8) +\n                    (!s.gzhead.comment ? 0 : 16)\n        );\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, (s.gzhead.time >> 8) & 0xff);\n        put_byte(s, (s.gzhead.time >> 16) & 0xff);\n        put_byte(s, (s.gzhead.time >> 24) & 0xff);\n        put_byte(s, s.level === 9 ? 2 :\n                    (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ?\n                     4 : 0));\n        put_byte(s, s.gzhead.os & 0xff);\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, (s.gzhead.extra.length >> 8) & 0xff);\n        }\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    }\n    else // DEFLATE header\n    {\n      var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8;\n      var level_flags = -1;\n\n      if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n        level_flags = 0;\n      } else if (s.level < 6) {\n        level_flags = 1;\n      } else if (s.level === 6) {\n        level_flags = 2;\n      } else {\n        level_flags = 3;\n      }\n      header |= (level_flags << 6);\n      if (s.strstart !== 0) { header |= PRESET_DICT; }\n      header += 31 - (header % 31);\n\n      s.status = BUSY_STATE;\n      putShortMSB(s, header);\n\n      /* Save the adler32 of the preset dictionary: */\n      if (s.strstart !== 0) {\n        putShortMSB(s, strm.adler >>> 16);\n        putShortMSB(s, strm.adler & 0xffff);\n      }\n      strm.adler = 1; // adler32(0L, Z_NULL, 0);\n    }\n  }\n\n//#ifdef GZIP\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n\n      while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            break;\n          }\n        }\n        put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n        s.gzindex++;\n      }\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (s.gzindex === s.gzhead.extra.length) {\n        s.gzindex = 0;\n        s.status = NAME_STATE;\n      }\n    }\n    else {\n      s.status = NAME_STATE;\n    }\n  }\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.name.length) {\n          val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.gzindex = 0;\n        s.status = COMMENT_STATE;\n      }\n    }\n    else {\n      s.status = COMMENT_STATE;\n    }\n  }\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment/* != Z_NULL*/) {\n      beg = s.pending;  /* start of bytes to update crc */\n      //int val;\n\n      do {\n        if (s.pending === s.pending_buf_size) {\n          if (s.gzhead.hcrc && s.pending > beg) {\n            strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n          }\n          flush_pending(strm);\n          beg = s.pending;\n          if (s.pending === s.pending_buf_size) {\n            val = 1;\n            break;\n          }\n        }\n        // JS specific: little magic to add zero terminator to end of string\n        if (s.gzindex < s.gzhead.comment.length) {\n          val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n        } else {\n          val = 0;\n        }\n        put_byte(s, val);\n      } while (val !== 0);\n\n      if (s.gzhead.hcrc && s.pending > beg) {\n        strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n      }\n      if (val === 0) {\n        s.status = HCRC_STATE;\n      }\n    }\n    else {\n      s.status = HCRC_STATE;\n    }\n  }\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, (strm.adler >> 8) & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n        s.status = BUSY_STATE;\n      }\n    }\n    else {\n      s.status = BUSY_STATE;\n    }\n  }\n//#endif\n\n  /* Flush as much pending output as possible */\n  if (s.pending !== 0) {\n    flush_pending(strm);\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) &&\n    flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* User must not provide more input after the first FINISH: */\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n\n  /* Start a new block or continue the current one.\n   */\n  if (strm.avail_in !== 0 || s.lookahead !== 0 ||\n    (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) {\n    var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) :\n      (s.strategy === Z_RLE ? deflate_rle(s, flush) :\n        configuration_table[s.level].func(s, flush));\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        trees._tr_align(s);\n      }\n      else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */\n\n        trees._tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/             /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n      flush_pending(strm);\n      if (strm.avail_out === 0) {\n        s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */\n        return Z_OK;\n      }\n    }\n  }\n  //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n  if (flush !== Z_FINISH) { return Z_OK; }\n  if (s.wrap <= 0) { return Z_STREAM_END; }\n\n  /* Write the trailer */\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, (strm.adler >> 8) & 0xff);\n    put_byte(s, (strm.adler >> 16) & 0xff);\n    put_byte(s, (strm.adler >> 24) & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, (strm.total_in >> 8) & 0xff);\n    put_byte(s, (strm.total_in >> 16) & 0xff);\n    put_byte(s, (strm.total_in >> 24) & 0xff);\n  }\n  else\n  {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n  if (s.wrap > 0) { s.wrap = -s.wrap; }\n  /* write the trailer only once! */\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n  var status;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  status = strm.state.status;\n  if (status !== INIT_STATE &&\n    status !== EXTRA_STATE &&\n    status !== NAME_STATE &&\n    status !== COMMENT_STATE &&\n    status !== HCRC_STATE &&\n    status !== BUSY_STATE &&\n    status !== FINISH_STATE\n  ) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n\n\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\nfunction deflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var s;\n  var str, n;\n  var wrap;\n  var avail;\n  var next;\n  var input;\n  var tmpDict;\n\n  if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n  wrap = s.wrap;\n\n  if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;   /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {            /* already empty otherwise */\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n    tmpDict = new utils.Buf8(s.w_size);\n    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n  avail = strm.avail_in;\n  next = strm.next_in;\n  input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n  while (s.lookahead >= MIN_MATCH) {\n    str = s.strstart;\n    n = s.lookahead - (MIN_MATCH - 1);\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n}\n\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/\n","// String encode/decode helpers\n'use strict';\n\n\nvar utils = require('./common');\n\n\n// Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; }\ntry { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; }\n\n\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\nvar _utf8len = new utils.Buf8(256);\nfor (var q = 0; q < 256; q++) {\n  _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1);\n}\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n\n\n// convert string to array (typed, when possible)\nexports.string2buf = function (str) {\n  var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0;\n\n  // count binary size\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  }\n\n  // allocate buffer\n  buf = new utils.Buf8(buf_len);\n\n  // convert\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n    if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) {\n      c2 = str.charCodeAt(m_pos + 1);\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | (c >>> 6);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | (c >>> 12);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | (c >>> 18);\n      buf[i++] = 0x80 | (c >>> 12 & 0x3f);\n      buf[i++] = 0x80 | (c >>> 6 & 0x3f);\n      buf[i++] = 0x80 | (c & 0x3f);\n    }\n  }\n\n  return buf;\n};\n\n// Helper (used in 2 places)\nfunction buf2binstring(buf, len) {\n  // On Chrome, the arguments in a function call that are allowed is `65534`.\n  // If the length of the buffer is smaller than that, we can use this optimization,\n  // otherwise we will take a slower path.\n  if (len < 65534) {\n    if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) {\n      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n    }\n  }\n\n  var result = '';\n  for (var i = 0; i < len; i++) {\n    result += String.fromCharCode(buf[i]);\n  }\n  return result;\n}\n\n\n// Convert byte array to binary string\nexports.buf2binstring = function (buf) {\n  return buf2binstring(buf, buf.length);\n};\n\n\n// Convert binary string (typed, when possible)\nexports.binstring2buf = function (str) {\n  var buf = new utils.Buf8(str.length);\n  for (var i = 0, len = buf.length; i < len; i++) {\n    buf[i] = str.charCodeAt(i);\n  }\n  return buf;\n};\n\n\n// convert array to string\nexports.buf2string = function (buf, max) {\n  var i, out, c, c_len;\n  var len = max || buf.length;\n\n  // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n  var utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    c = buf[i++];\n    // quick process ascii\n    if (c < 0x80) { utf16buf[out++] = c; continue; }\n\n    c_len = _utf8len[c];\n    // skip 5 & 6 byte codes\n    if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; }\n\n    // apply mask on first byte\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07;\n    // join the rest\n    while (c_len > 1 && i < len) {\n      c = (c << 6) | (buf[i++] & 0x3f);\n      c_len--;\n    }\n\n    // terminated by end of string?\n    if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff);\n      utf16buf[out++] = 0xdc00 | (c & 0x3ff);\n    }\n  }\n\n  return buf2binstring(utf16buf, out);\n};\n\n\n// Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\nexports.utf8border = function (buf, max) {\n  var pos;\n\n  max = max || buf.length;\n  if (max > buf.length) { max = buf.length; }\n\n  // go back from last position, until start of sequence found\n  pos = max - 1;\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; }\n\n  // Very small and broken sequence,\n  // return max, because we should return something anyway.\n  if (pos < 0) { return max; }\n\n  // If we came to start of buffer - that means buffer is too small,\n  // return max too.\n  if (pos === 0) { return max; }\n\n  return (pos + _utf8len[buf[pos]] > max) ? pos : max;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n  this.next_in = 0;\n  /* number of bytes available at input */\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n  this.total_in = 0;\n  /* next output byte should be put there */\n  this.output = null; // JS specific, because we have no pointers\n  this.next_out = 0;\n  /* remaining free space at output */\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n  this.msg = ''/*Z_NULL*/;\n  /* not visible by applications */\n  this.state = null;\n  /* best guess about the data type: binary or text */\n  this.data_type = 2/*Z_UNKNOWN*/;\n  /* adler32 value of the uncompressed data */\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;\n","'use strict';\n\n\nvar zlib_deflate = require('./zlib/deflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH      = 0;\nvar Z_FINISH        = 4;\n\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_SYNC_FLUSH    = 2;\n\nvar Z_DEFAULT_COMPRESSION = -1;\n\nvar Z_DEFAULT_STRATEGY    = 0;\n\nvar Z_DEFLATED  = 8;\n\n/* ===========================================================================*/\n\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param)  or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n *   - `text` (Boolean) - true if compressed data believed to be text\n *   - `time` (Number) - modification time, unix timestamp\n *   - `os` (Number) - operation system code\n *   - `extra` (Array) - array of bytes with extra data (max 65536)\n *   - `name` (String) - file name (binary string)\n *   - `comment` (String) - comment (binary string)\n *   - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true);  // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\nfunction Deflate(options) {\n  if (!(this instanceof Deflate)) return new Deflate(options);\n\n  this.options = utils.assign({\n    level: Z_DEFAULT_COMPRESSION,\n    method: Z_DEFLATED,\n    chunkSize: 16384,\n    windowBits: 15,\n    memLevel: 8,\n    strategy: Z_DEFAULT_STRATEGY,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  if (opt.raw && (opt.windowBits > 0)) {\n    opt.windowBits = -opt.windowBits;\n  }\n\n  else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) {\n    opt.windowBits += 16;\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status = zlib_deflate.deflateInit2(\n    this.strm,\n    opt.level,\n    opt.method,\n    opt.windowBits,\n    opt.memLevel,\n    opt.strategy\n  );\n\n  if (status !== Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  if (opt.header) {\n    zlib_deflate.deflateSetHeader(this.strm, opt.header);\n  }\n\n  if (opt.dictionary) {\n    var dict;\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      // If we need to compress text, change encoding to utf8.\n      dict = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      dict = new Uint8Array(opt.dictionary);\n    } else {\n      dict = opt.dictionary;\n    }\n\n    status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n    if (status !== Z_OK) {\n      throw new Error(msg[status]);\n    }\n\n    this._dict_set = true;\n  }\n}\n\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n *   converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nDeflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var status, _mode;\n\n  if (this.ended) { return false; }\n\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // If we need to compress text, change encoding to utf8.\n    strm.input = strings.string2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n    status = zlib_deflate.deflate(strm, _mode);    /* no bad return value */\n\n    if (status !== Z_STREAM_END && status !== Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n    if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) {\n      if (this.options.to === 'string') {\n        this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n      } else {\n        this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n      }\n    }\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END);\n\n  // Finalize on the last chunk.\n  if (_mode === Z_FINISH) {\n    status = zlib_deflate.deflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === Z_SYNC_FLUSH) {\n    this.onEnd(Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nDeflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nDeflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK) {\n    if (this.options.to === 'string') {\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\nfunction deflate(input, options) {\n  var deflator = new Deflate(options);\n\n  deflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (deflator.err) { throw deflator.msg || msg[deflator.err]; }\n\n  return deflator.result;\n}\n\n\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction deflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return deflate(input, options);\n}\n\n\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\nfunction gzip(input, options) {\n  options = options || {};\n  options.gzip = true;\n  return deflate(input, options);\n}\n\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n// See state defs from inflate.js\nvar BAD = 30;       /* got a data error -- remain here until reset */\nvar TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\nmodule.exports = function inflate_fast(strm, start) {\n  var state;\n  var _in;                    /* local strm.input */\n  var last;                   /* have enough input while in < last */\n  var _out;                   /* local strm.output */\n  var beg;                    /* inflate()'s initial strm.output */\n  var end;                    /* while out < end, enough space available */\n//#ifdef INFLATE_STRICT\n  var dmax;                   /* maximum distance from zlib header */\n//#endif\n  var wsize;                  /* window size or zero if not using window */\n  var whave;                  /* valid bytes in the window */\n  var wnext;                  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n  var s_window;               /* allocated sliding window, if wsize != 0 */\n  var hold;                   /* local strm.hold */\n  var bits;                   /* local strm.bits */\n  var lcode;                  /* local strm.lencode */\n  var dcode;                  /* local strm.distcode */\n  var lmask;                  /* mask for first level of length codes */\n  var dmask;                  /* mask for first level of distance codes */\n  var here;                   /* retrieved table entry */\n  var op;                     /* code bits, operation, extra bits, or */\n                              /*  window position, window bytes to copy */\n  var len;                    /* match length, unused bytes */\n  var dist;                   /* match distance */\n  var from;                   /* where to copy match from */\n  var from_source;\n\n\n  var input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n  state = strm.state;\n  //here = state.here;\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257);\n//#ifdef INFLATE_STRICT\n  dmax = state.dmax;\n//#endif\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n\n\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top:\n  do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen:\n    for (;;) { // Goto emulation\n      op = here >>> 24/*here.bits*/;\n      hold >>>= op;\n      bits -= op;\n      op = (here >>> 16) & 0xff/*here.op*/;\n      if (op === 0) {                          /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff/*here.val*/;\n      }\n      else if (op & 16) {                     /* length base */\n        len = here & 0xffff/*here.val*/;\n        op &= 15;                           /* number of extra bits */\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n          len += hold & ((1 << op) - 1);\n          hold >>>= op;\n          bits -= op;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n        here = dcode[hold & dmask];\n\n        dodist:\n        for (;;) { // goto emulation\n          op = here >>> 24/*here.bits*/;\n          hold >>>= op;\n          bits -= op;\n          op = (here >>> 16) & 0xff/*here.op*/;\n\n          if (op & 16) {                      /* distance base */\n            dist = here & 0xffff/*here.val*/;\n            op &= 15;                       /* number of extra bits */\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n            dist += hold & ((1 << op) - 1);\n//#ifdef INFLATE_STRICT\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            }\n//#endif\n            hold >>>= op;\n            bits -= op;\n            //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n            op = _out - beg;                /* max distance in output */\n            if (dist > op) {                /* see if copy from window */\n              op = dist - op;               /* distance back in window */\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                }\n\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//                if (len <= op - whave) {\n//                  do {\n//                    output[_out++] = 0;\n//                  } while (--len);\n//                  continue top;\n//                }\n//                len -= op - whave;\n//                do {\n//                  output[_out++] = 0;\n//                } while (--op > whave);\n//                if (op === 0) {\n//                  from = _out - dist;\n//                  do {\n//                    output[_out++] = output[from++];\n//                  } while (--len);\n//                  continue top;\n//                }\n//#endif\n              }\n              from = 0; // window index\n              from_source = s_window;\n              if (wnext === 0) {           /* very common case */\n                from += wsize - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              else if (wnext < op) {      /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n                if (op < len) {         /* some from end of window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = 0;\n                  if (wnext < len) {  /* some from start of window */\n                    op = wnext;\n                    len -= op;\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n                    from = _out - dist;      /* rest from output */\n                    from_source = output;\n                  }\n                }\n              }\n              else {                      /* contiguous in window */\n                from += wnext - op;\n                if (op < len) {         /* some from window */\n                  len -= op;\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n                  from = _out - dist;  /* rest from output */\n                  from_source = output;\n                }\n              }\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n              if (len) {\n                output[_out++] = from_source[from++];\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            }\n            else {\n              from = _out - dist;          /* copy direct from output */\n              do {                        /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n              if (len) {\n                output[_out++] = output[from++];\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          }\n          else if ((op & 64) === 0) {          /* 2nd level distance code */\n            here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n            continue dodist;\n          }\n          else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      }\n      else if ((op & 64) === 0) {              /* 2nd level length code */\n        here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))];\n        continue dolen;\n      }\n      else if (op & 32) {                     /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE;\n        break top;\n      }\n      else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n\n  /* update state and return */\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last));\n  strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end));\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\nvar lbase = [ /* Length codes 257..285 base */\n  3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n  35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0\n];\n\nvar lext = [ /* Length codes 257..285 extra */\n  16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,\n  19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78\n];\n\nvar dbase = [ /* Distance codes 0..29 base */\n  1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n  257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n  8193, 12289, 16385, 24577, 0, 0\n];\n\nvar dext = [ /* Distance codes 0..29 extra */\n  16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,\n  23, 23, 24, 24, 25, 25, 26, 26, 27, 27,\n  28, 28, 29, 29, 64, 64\n];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts)\n{\n  var bits = opts.bits;\n      //here = opts.here; /* table entry for duplication */\n\n  var len = 0;               /* a code's length in bits */\n  var sym = 0;               /* index of code symbols */\n  var min = 0, max = 0;          /* minimum and maximum code lengths */\n  var root = 0;              /* number of index bits for root table */\n  var curr = 0;              /* number of index bits for current table */\n  var drop = 0;              /* code bits to drop for sub-table */\n  var left = 0;                   /* number of prefix codes available */\n  var used = 0;              /* code entries in table used */\n  var huff = 0;              /* Huffman code */\n  var incr;              /* for incrementing code, index */\n  var fill;              /* index for replicating entries */\n  var low;               /* low bits for current root entry */\n  var mask;              /* mask for low root bits */\n  var next;             /* next available space in table */\n  var base = null;     /* base value table to use */\n  var base_index = 0;\n//  var shoextra;    /* extra bits table to use */\n  var end;                    /* use base and extra for symbol > end */\n  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n  var extra = null;\n  var extra_index = 0;\n\n  var here_bits, here_op, here_val;\n\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n\n   This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n\n   The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n\n   The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n\n  /* bound code lengths, force root to be within code lengths */\n  root = bits;\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) { break; }\n  }\n  if (root > max) {\n    root = max;\n  }\n  if (max === 0) {                     /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n\n    //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n    table[table_index++] = (1 << 24) | (64 << 16) | 0;\n\n    opts.bits = 1;\n    return 0;     /* no symbols, but wait for decoding to report error */\n  }\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) { break; }\n  }\n  if (root < min) {\n    root = min;\n  }\n\n  /* check for an over-subscribed or incomplete set of lengths */\n  left = 1;\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n    if (left < 0) {\n      return -1;\n    }        /* over-subscribed */\n  }\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;                      /* incomplete set */\n  }\n\n  /* generate offsets into symbol table for each length for sorting */\n  offs[1] = 0;\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n\n  /* sort symbols by length, by symbol order within each length */\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n\n   root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n\n   When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n\n   used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n\n   sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n  if (type === CODES) {\n    base = extra = work;    /* dummy value--not used */\n    end = 19;\n\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n\n  } else {                    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n\n  /* initialize opts for loop */\n  huff = 0;                   /* starting code */\n  sym = 0;                    /* starting code symbol */\n  len = min;                  /* starting code length */\n  next = table_index;              /* current table to fill in */\n  curr = root;                /* current table index bits */\n  drop = 0;                   /* current bits to drop from code for index */\n  low = -1;                   /* trigger new sub-table when len > root */\n  used = 1 << root;          /* use root table entries */\n  mask = used - 1;            /* mask for comparing low */\n\n  /* check available table space */\n  if ((type === LENS && used > ENOUGH_LENS) ||\n    (type === DISTS && used > ENOUGH_DISTS)) {\n    return 1;\n  }\n\n  /* process all codes and make table entries */\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    }\n    else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    }\n    else {\n      here_op = 32 + 64;         /* end of block */\n      here_val = 0;\n    }\n\n    /* replicate for those indices with low len bits equal to huff */\n    incr = 1 << (len - drop);\n    fill = 1 << curr;\n    min = fill;                 /* save offset to next table */\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0;\n    } while (fill !== 0);\n\n    /* backwards increment the len-bit code huff */\n    incr = 1 << (len - 1);\n    while (huff & incr) {\n      incr >>= 1;\n    }\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n\n    /* go to next symbol, update count, len */\n    sym++;\n    if (--count[len] === 0) {\n      if (len === max) { break; }\n      len = lens[lens_index + work[sym]];\n    }\n\n    /* create new sub-table if needed */\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n\n      /* increment past last table */\n      next += min;            /* here min is 1 << curr */\n\n      /* determine length of next table */\n      curr = len - drop;\n      left = 1 << curr;\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n        if (left <= 0) { break; }\n        curr++;\n        left <<= 1;\n      }\n\n      /* check for enough space */\n      used += 1 << curr;\n      if ((type === LENS && used > ENOUGH_LENS) ||\n        (type === DISTS && used > ENOUGH_DISTS)) {\n        return 1;\n      }\n\n      /* point entry in root table to sub-table */\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n      table[low] = (root << 24) | (curr << 16) | (next - table_index) |0;\n    }\n  }\n\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = ((len - drop) << 24) | (64 << 16) |0;\n  }\n\n  /* set return parameters */\n  //opts.table_index += used;\n  opts.bits = root;\n  return 0;\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils         = require('../utils/common');\nvar adler32       = require('./adler32');\nvar crc32         = require('./crc32');\nvar inflate_fast  = require('./inffast');\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n\n/* Public constants ==========================================================*/\n/* ===========================================================================*/\n\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH      = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\n//var Z_FULL_FLUSH    = 3;\nvar Z_FINISH        = 4;\nvar Z_BLOCK         = 5;\nvar Z_TREES         = 6;\n\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\nvar Z_OK            = 0;\nvar Z_STREAM_END    = 1;\nvar Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\nvar Z_STREAM_ERROR  = -2;\nvar Z_DATA_ERROR    = -3;\nvar Z_MEM_ERROR     = -4;\nvar Z_BUF_ERROR     = -5;\n//var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\nvar Z_DEFLATED  = 8;\n\n\n/* STATES ====================================================================*/\n/* ===========================================================================*/\n\n\nvar    HEAD = 1;       /* i: waiting for magic header */\nvar    FLAGS = 2;      /* i: waiting for method and flags (gzip) */\nvar    TIME = 3;       /* i: waiting for modification time (gzip) */\nvar    OS = 4;         /* i: waiting for extra flags and operating system (gzip) */\nvar    EXLEN = 5;      /* i: waiting for extra length (gzip) */\nvar    EXTRA = 6;      /* i: waiting for extra bytes (gzip) */\nvar    NAME = 7;       /* i: waiting for end of file name (gzip) */\nvar    COMMENT = 8;    /* i: waiting for end of comment (gzip) */\nvar    HCRC = 9;       /* i: waiting for header crc (gzip) */\nvar    DICTID = 10;    /* i: waiting for dictionary check value */\nvar    DICT = 11;      /* waiting for inflateSetDictionary() call */\nvar        TYPE = 12;      /* i: waiting for type bits, including last-flag bit */\nvar        TYPEDO = 13;    /* i: same, but skip check to exit inflate on new block */\nvar        STORED = 14;    /* i: waiting for stored size (length and complement) */\nvar        COPY_ = 15;     /* i/o: same as COPY below, but only first time in */\nvar        COPY = 16;      /* i/o: waiting for input or output to copy stored block */\nvar        TABLE = 17;     /* i: waiting for dynamic block table lengths */\nvar        LENLENS = 18;   /* i: waiting for code length code lengths */\nvar        CODELENS = 19;  /* i: waiting for length/lit and distance code lengths */\nvar            LEN_ = 20;      /* i: same as LEN below, but only first time in */\nvar            LEN = 21;       /* i: waiting for length/lit/eob code */\nvar            LENEXT = 22;    /* i: waiting for length extra bits */\nvar            DIST = 23;      /* i: waiting for distance code */\nvar            DISTEXT = 24;   /* i: waiting for distance extra bits */\nvar            MATCH = 25;     /* o: waiting for output space to copy string */\nvar            LIT = 26;       /* o: waiting for output space to write literal */\nvar    CHECK = 27;     /* i: waiting for 32-bit check value */\nvar    LENGTH = 28;    /* i: waiting for 32-bit length (gzip) */\nvar    DONE = 29;      /* finished check, done -- remain here until reset */\nvar    BAD = 30;       /* got a data error -- remain here until reset */\nvar    MEM = 31;       /* got an inflate() memory error -- remain here until reset */\nvar    SYNC = 32;      /* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\n\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592;\n//var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\nvar DEF_WBITS = MAX_WBITS;\n\n\nfunction zswap32(q) {\n  return  (((q >>> 24) & 0xff) +\n          ((q >>> 8) & 0xff00) +\n          ((q & 0xff00) << 8) +\n          ((q & 0xff) << 24));\n}\n\n\nfunction InflateState() {\n  this.mode = 0;             /* current inflate mode */\n  this.last = false;          /* true if processing last block */\n  this.wrap = 0;              /* bit 0 true for zlib, bit 1 true for gzip */\n  this.havedict = false;      /* true if dictionary provided */\n  this.flags = 0;             /* gzip header method and flags (0 if zlib) */\n  this.dmax = 0;              /* zlib header max distance (INFLATE_STRICT) */\n  this.check = 0;             /* protected copy of check value */\n  this.total = 0;             /* protected copy of output count */\n  // TODO: may be {}\n  this.head = null;           /* where to save gzip header information */\n\n  /* sliding window */\n  this.wbits = 0;             /* log base 2 of requested window size */\n  this.wsize = 0;             /* window size or zero if not using window */\n  this.whave = 0;             /* valid bytes in the window */\n  this.wnext = 0;             /* window write index */\n  this.window = null;         /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n  this.hold = 0;              /* input bit accumulator */\n  this.bits = 0;              /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n  this.length = 0;            /* literal or length of data to copy */\n  this.offset = 0;            /* distance back to copy string from */\n\n  /* for table and code decoding */\n  this.extra = 0;             /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n  this.lencode = null;          /* starting table for length/literal codes */\n  this.distcode = null;         /* starting table for distance codes */\n  this.lenbits = 0;           /* index bits for lencode */\n  this.distbits = 0;          /* index bits for distcode */\n\n  /* dynamic table building */\n  this.ncode = 0;             /* number of code length code lengths */\n  this.nlen = 0;              /* number of length code lengths */\n  this.ndist = 0;             /* number of distance code lengths */\n  this.have = 0;              /* number of code lengths in lens[] */\n  this.next = null;              /* next available space in codes[] */\n\n  this.lens = new utils.Buf16(320); /* temporary storage for code lengths */\n  this.work = new utils.Buf16(288); /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n  this.lendyn = null;              /* dynamic table for length/literal codes (JS specific) */\n  this.distdyn = null;             /* dynamic table for distance codes (JS specific) */\n  this.sane = 0;                   /* if false, allow invalid distance too far */\n  this.back = 0;                   /* bits back of last unprocessed length/lit */\n  this.was = 0;                    /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = ''; /*Z_NULL*/\n  if (state.wrap) {       /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null/*Z_NULL*/;\n  state.hold = 0;\n  state.bits = 0;\n  //state.lencode = state.distcode = state.next = state.codes;\n  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n\n  state.sane = 1;\n  state.back = -1;\n  //Tracev((stderr, \"inflate: reset\\n\"));\n  return Z_OK;\n}\n\nfunction inflateReset(strm) {\n  var state;\n\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n\n}\n\nfunction inflateReset2(strm, windowBits) {\n  var wrap;\n  var state;\n\n  /* get the state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  /* extract wrap request from windowBits parameter */\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  }\n  else {\n    wrap = (windowBits >> 4) + 1;\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n\n  /* set number of window bits, free window if different */\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n\n  /* update state and reset the rest of it */\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n  var ret;\n  var state;\n\n  if (!strm) { return Z_STREAM_ERROR; }\n  //strm.msg = Z_NULL;                 /* in case we return an error */\n\n  state = new InflateState();\n\n  //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n  strm.state = state;\n  state.window = null/*Z_NULL*/;\n  ret = inflateReset2(strm, windowBits);\n  if (ret !== Z_OK) {\n    strm.state = null/*Z_NULL*/;\n  }\n  return ret;\n}\n\nfunction inflateInit(strm) {\n  return inflateInit2(strm, DEF_WBITS);\n}\n\n\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\nvar virgin = true;\n\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    var sym;\n\n    lenfix = new utils.Buf32(512);\n    distfix = new utils.Buf32(32);\n\n    /* literal/length table */\n    sym = 0;\n    while (sym < 144) { state.lens[sym++] = 8; }\n    while (sym < 256) { state.lens[sym++] = 9; }\n    while (sym < 280) { state.lens[sym++] = 7; }\n    while (sym < 288) { state.lens[sym++] = 8; }\n\n    inflate_table(LENS,  state.lens, 0, 288, lenfix,   0, state.work, { bits: 9 });\n\n    /* distance table */\n    sym = 0;\n    while (sym < 32) { state.lens[sym++] = 5; }\n\n    inflate_table(DISTS, state.lens, 0, 32,   distfix, 0, state.work, { bits: 5 });\n\n    /* do this just once */\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n}\n\n\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\nfunction updatewindow(strm, src, end, copy) {\n  var dist;\n  var state = strm.state;\n\n  /* if it hasn't been done already, allocate space for the window */\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n\n    state.window = new utils.Buf8(state.wsize);\n  }\n\n  /* copy state->wsize or less output bytes into the circular window */\n  if (copy >= state.wsize) {\n    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  }\n  else {\n    dist = state.wsize - state.wnext;\n    if (dist > copy) {\n      dist = copy;\n    }\n    //zmemcpy(state->window + state->wnext, end - copy, dist);\n    utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n    copy -= dist;\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      utils.arraySet(state.window, src, end - copy, copy, 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    }\n    else {\n      state.wnext += dist;\n      if (state.wnext === state.wsize) { state.wnext = 0; }\n      if (state.whave < state.wsize) { state.whave += dist; }\n    }\n  }\n  return 0;\n}\n\nfunction inflate(strm, flush) {\n  var state;\n  var input, output;          // input/output buffers\n  var next;                   /* next input INDEX */\n  var put;                    /* next output INDEX */\n  var have, left;             /* available input and output */\n  var hold;                   /* bit buffer */\n  var bits;                   /* bits in bit buffer */\n  var _in, _out;              /* save starting available input and output */\n  var copy;                   /* number of stored or match bytes to copy */\n  var from;                   /* where to copy match bytes from */\n  var from_source;\n  var here = 0;               /* current decoding table entry */\n  var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //var last;                   /* parent table entry */\n  var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n  var len;                    /* length to copy for repeats, bits to drop */\n  var ret;                    /* return code */\n  var hbuf = new utils.Buf8(4);    /* buffer for gzip header crc calculation */\n  var opts;\n\n  var n; // temporary var for NEED_BITS\n\n  var order = /* permutation of code lengths */\n    [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n\n  if (!strm || !strm.state || !strm.output ||\n      (!strm.input && strm.avail_in !== 0)) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  if (state.mode === TYPE) { state.mode = TYPEDO; }    /* skip check */\n\n\n  //--- LOAD() ---\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits;\n  //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        }\n        //=== NEEDBITS(16);\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((state.wrap & 2) && hold === 0x8b1f) {  /* gzip header */\n          state.check = 0/*crc32(0L, Z_NULL, 0)*/;\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          state.mode = FLAGS;\n          break;\n        }\n        state.flags = 0;           /* expect zlib header */\n        if (state.head) {\n          state.head.done = false;\n        }\n        if (!(state.wrap & 1) ||   /* check if zlib header allowed */\n          (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n        if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n        len = (hold & 0x0f)/*BITS(4)*/ + 8;\n        if (state.wbits === 0) {\n          state.wbits = len;\n        }\n        else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n        state.dmax = 1 << len;\n        //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = hold & 0x200 ? DICTID : TYPE;\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        break;\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.flags = hold;\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n        if (state.head) {\n          state.head.text = ((hold >> 8) & 1);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = TIME;\n        /* falls through */\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.time = hold;\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          hbuf[2] = (hold >>> 16) & 0xff;\n          hbuf[3] = (hold >>> 24) & 0xff;\n          state.check = crc32(state.check, hbuf, 4, 0);\n          //===\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = OS;\n        /* falls through */\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if (state.head) {\n          state.head.xflags = (hold & 0xff);\n          state.head.os = (hold >> 8);\n        }\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = (hold >>> 8) & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0);\n          //===//\n        }\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = EXLEN;\n        /* falls through */\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length = hold;\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = (hold >>> 8) & 0xff;\n            state.check = crc32(state.check, hbuf, 2, 0);\n            //===//\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        else if (state.head) {\n          state.head.extra = null/*Z_NULL*/;\n        }\n        state.mode = EXTRA;\n        /* falls through */\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n          if (copy > have) { copy = have; }\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Array(state.head.extra_len);\n              }\n              utils.arraySet(\n                state.head.extra,\n                input,\n                next,\n                // extra field is limited to 65536 bytes\n                // - no need for additional size check\n                copy,\n                /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n                len\n              );\n              //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n            if (state.flags & 0x0200) {\n              state.check = crc32(state.check, input, copy, next);\n            }\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n          if (state.length) { break inf_leave; }\n        }\n        state.length = 0;\n        state.mode = NAME;\n        /* falls through */\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.name_max*/)) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.name = null;\n        }\n        state.length = 0;\n        state.mode = COMMENT;\n        /* falls through */\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) { break inf_leave; }\n          copy = 0;\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n            if (state.head && len &&\n                (state.length < 65536 /*state.head.comm_max*/)) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n          have -= copy;\n          next += copy;\n          if (len) { break inf_leave; }\n        }\n        else if (state.head) {\n          state.head.comment = null;\n        }\n        state.mode = HCRC;\n        /* falls through */\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n        }\n        if (state.head) {\n          state.head.hcrc = ((state.flags >> 9) & 1);\n          state.head.done = true;\n        }\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        strm.adler = state.check = zswap32(hold);\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = DICT;\n        /* falls through */\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          return Z_NEED_DICT;\n        }\n        strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/;\n        state.mode = TYPE;\n        /* falls through */\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7;\n          //---//\n          state.mode = CHECK;\n          break;\n        }\n        //=== NEEDBITS(3); */\n        while (bits < 3) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.last = (hold & 0x01)/*BITS(1)*/;\n        //--- DROPBITS(1) ---//\n        hold >>>= 1;\n        bits -= 1;\n        //---//\n\n        switch ((hold & 0x03)/*BITS(2)*/) {\n          case 0:                             /* stored block */\n            //Tracev((stderr, \"inflate:     stored block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = STORED;\n            break;\n          case 1:                             /* fixed block */\n            fixedtables(state);\n            //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = LEN_;             /* decode codes */\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n              break inf_leave;\n            }\n            break;\n          case 2:                             /* dynamic block */\n            //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = TABLE;\n            break;\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        }\n        //--- DROPBITS(2) ---//\n        hold >>>= 2;\n        bits -= 2;\n        //---//\n        break;\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7;\n        //---//\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n        state.length = hold & 0xffff;\n        //Tracev((stderr, \"inflate:       stored length %u\\n\",\n        //        state.length));\n        //=== INITBITS();\n        hold = 0;\n        bits = 0;\n        //===//\n        state.mode = COPY_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case COPY_:\n        state.mode = COPY;\n        /* falls through */\n      case COPY:\n        copy = state.length;\n        if (copy) {\n          if (copy > have) { copy = have; }\n          if (copy > left) { copy = left; }\n          if (copy === 0) { break inf_leave; }\n          //--- zmemcpy(put, next, copy); ---\n          utils.arraySet(output, input, next, copy, put);\n          //---//\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       stored end\\n\"));\n        state.mode = TYPE;\n        break;\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        }\n        //===//\n        state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1;\n        //--- DROPBITS(5) ---//\n        hold >>>= 5;\n        bits -= 5;\n        //---//\n        state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4;\n        //--- DROPBITS(4) ---//\n        hold >>>= 4;\n        bits -= 4;\n        //---//\n//#ifndef PKZIP_BUG_WORKAROUND\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n        state.have = 0;\n        state.mode = LENLENS;\n        /* falls through */\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.lens[order[state.have++]] = (hold & 0x07);//BITS(3);\n          //--- DROPBITS(3) ---//\n          hold >>>= 3;\n          bits -= 3;\n          //---//\n        }\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        }\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n        state.have = 0;\n        state.mode = CODELENS;\n        /* falls through */\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits;\n            //---//\n            state.lens[state.have++] = here_val;\n          }\n          else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03);//BITS(2);\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2;\n              //---//\n            }\n            else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 3 + (hold & 0x07);//BITS(3);\n              //--- DROPBITS(3) ---//\n              hold >>>= 3;\n              bits -= 3;\n              //---//\n            }\n            else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n              while (bits < n) {\n                if (have === 0) { break inf_leave; }\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              }\n              //===//\n              //--- DROPBITS(here.bits) ---//\n              hold >>>= here_bits;\n              bits -= here_bits;\n              //---//\n              len = 0;\n              copy = 11 + (hold & 0x7f);//BITS(7);\n              //--- DROPBITS(7) ---//\n              hold >>>= 7;\n              bits -= 7;\n              //---//\n            }\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n\n        /* handle error breaks in while */\n        if (state.mode === BAD) { break; }\n\n        /* check for end-of-block code (better have one) */\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n        state.lenbits = 9;\n\n        opts = { bits: state.lenbits };\n        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.lenbits = opts.bits;\n        // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6;\n        //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n        state.distcode = state.distdyn;\n        opts = { bits: state.distbits };\n        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts);\n        // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n        state.distbits = opts.bits;\n        // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        }\n        //Tracev((stderr, 'inflate:       codes ok\\n'));\n        state.mode = LEN_;\n        if (flush === Z_TREES) { break inf_leave; }\n        /* falls through */\n      case LEN_:\n        state.mode = LEN;\n        /* falls through */\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits;\n          //---\n          inflate_fast(strm, _out);\n          //--- LOAD() ---\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits;\n          //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n          break;\n        }\n        state.back = 0;\n        for (;;) {\n          here = state.lencode[hold & ((1 << state.lenbits) - 1)];  /*BITS(state.lenbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.lencode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        state.length = here_val;\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          state.mode = LIT;\n          break;\n        }\n        if (here_op & 32) {\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n        /* falls through */\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n        //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n        state.was = state.length;\n        state.mode = DIST;\n        /* falls through */\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/\n          here_bits = here >>> 24;\n          here_op = (here >>> 16) & 0xff;\n          here_val = here & 0xffff;\n\n          if ((here_bits) <= bits) { break; }\n          //--- PULLBYTE() ---//\n          if (have === 0) { break inf_leave; }\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n          //---//\n        }\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n          for (;;) {\n            here = state.distcode[last_val +\n                    ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)];\n            here_bits = here >>> 24;\n            here_op = (here >>> 16) & 0xff;\n            here_val = here & 0xffff;\n\n            if ((last_bits + here_bits) <= bits) { break; }\n            //--- PULLBYTE() ---//\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n            //---//\n          }\n          //--- DROPBITS(last.bits) ---//\n          hold >>>= last_bits;\n          bits -= last_bits;\n          //---//\n          state.back += last_bits;\n        }\n        //--- DROPBITS(here.bits) ---//\n        hold >>>= here_bits;\n        bits -= here_bits;\n        //---//\n        state.back += here_bits;\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n        state.offset = here_val;\n        state.extra = (here_op) & 15;\n        state.mode = DISTEXT;\n        /* falls through */\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n          while (bits < n) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/;\n          //--- DROPBITS(state.extra) ---//\n          hold >>>= state.extra;\n          bits -= state.extra;\n          //---//\n          state.back += state.extra;\n        }\n//#ifdef INFLATE_STRICT\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        }\n//#endif\n        //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n        state.mode = MATCH;\n        /* falls through */\n      case MATCH:\n        if (left === 0) { break inf_leave; }\n        copy = _out - left;\n        if (state.offset > copy) {         /* copy from window */\n          copy = state.offset - copy;\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            }\n// (!) This block is disabled in zlib defaults,\n// don't enable it for binary compatibility\n//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n//          Trace((stderr, \"inflate.c too far\\n\"));\n//          copy -= state.whave;\n//          if (copy > state.length) { copy = state.length; }\n//          if (copy > left) { copy = left; }\n//          left -= copy;\n//          state.length -= copy;\n//          do {\n//            output[put++] = 0;\n//          } while (--copy);\n//          if (state.length === 0) { state.mode = LEN; }\n//          break;\n//#endif\n          }\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          }\n          else {\n            from = state.wnext - copy;\n          }\n          if (copy > state.length) { copy = state.length; }\n          from_source = state.window;\n        }\n        else {                              /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n        if (copy > left) { copy = left; }\n        left -= copy;\n        state.length -= copy;\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n        if (state.length === 0) { state.mode = LEN; }\n        break;\n      case LIT:\n        if (left === 0) { break inf_leave; }\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            // Use '|' instead of '+' to make sure that result is signed\n            hold |= input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n          if (_out) {\n            strm.adler = state.check =\n                /*UPDATE(state.check, put - _out, _out);*/\n                (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out));\n\n          }\n          _out = left;\n          // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n        }\n        state.mode = LENGTH;\n        /* falls through */\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) { break inf_leave; }\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          }\n          //===//\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          }\n          //=== INITBITS();\n          hold = 0;\n          bits = 0;\n          //===//\n          //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n        }\n        state.mode = DONE;\n        /* falls through */\n      case DONE:\n        ret = Z_STREAM_END;\n        break inf_leave;\n      case BAD:\n        ret = Z_DATA_ERROR;\n        break inf_leave;\n      case MEM:\n        return Z_MEM_ERROR;\n      case SYNC:\n        /* falls through */\n      default:\n        return Z_STREAM_ERROR;\n    }\n  }\n\n  // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n\n  //--- RESTORE() ---\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits;\n  //---\n\n  if (state.wsize || (_out !== strm.avail_out && state.mode < BAD &&\n                      (state.mode < CHECK || flush !== Z_FINISH))) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n  if (state.wrap && _out) {\n    strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/\n      (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out));\n  }\n  strm.data_type = state.bits + (state.last ? 64 : 0) +\n                    (state.mode === TYPE ? 128 : 0) +\n                    (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n  if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n  return ret;\n}\n\nfunction inflateEnd(strm) {\n\n  if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) {\n    return Z_STREAM_ERROR;\n  }\n\n  var state = strm.state;\n  if (state.window) {\n    state.window = null;\n  }\n  strm.state = null;\n  return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n  var state;\n\n  /* check state */\n  if (!strm || !strm.state) { return Z_STREAM_ERROR; }\n  state = strm.state;\n  if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; }\n\n  /* save header structure */\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n\n  var state;\n  var dictid;\n  var ret;\n\n  /* check state */\n  if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; }\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n\n  /* check for correct dictionary identifier */\n  if (state.mode === DICT) {\n    dictid = 1; /* adler32(0, null, 0)*/\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n  state.havedict = 1;\n  // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n  return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH:         0,\n  Z_PARTIAL_FLUSH:    1,\n  Z_SYNC_FLUSH:       2,\n  Z_FULL_FLUSH:       3,\n  Z_FINISH:           4,\n  Z_BLOCK:            5,\n  Z_TREES:            6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK:               0,\n  Z_STREAM_END:       1,\n  Z_NEED_DICT:        2,\n  Z_ERRNO:           -1,\n  Z_STREAM_ERROR:    -2,\n  Z_DATA_ERROR:      -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR:       -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION:         0,\n  Z_BEST_SPEED:             1,\n  Z_BEST_COMPRESSION:       9,\n  Z_DEFAULT_COMPRESSION:   -1,\n\n\n  Z_FILTERED:               1,\n  Z_HUFFMAN_ONLY:           2,\n  Z_RLE:                    3,\n  Z_FIXED:                  4,\n  Z_DEFAULT_STRATEGY:       0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY:                 0,\n  Z_TEXT:                   1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN:                2,\n\n  /* The deflate compression method */\n  Z_DEFLATED:               8\n  //Z_NULL:                 null // Use -1 or null inline, depending on var type\n};\n","'use strict';\n\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n  /* true if compressed data believed to be text */\n  this.text       = 0;\n  /* modification time */\n  this.time       = 0;\n  /* extra flags (not used when writing a gzip file) */\n  this.xflags     = 0;\n  /* operating system */\n  this.os         = 0;\n  /* pointer to extra field or Z_NULL if none */\n  this.extra      = null;\n  /* extra field length (valid if extra != Z_NULL) */\n  this.extra_len  = 0; // Actually, we don't need it in JS,\n                       // but leave for few code modifications\n\n  //\n  // Setup limits is not necessary because in js we should not preallocate memory\n  // for inflate use constant limit in 65536 bytes\n  //\n\n  /* space at extra (only when reading header) */\n  // this.extra_max  = 0;\n  /* pointer to zero-terminated file name or Z_NULL */\n  this.name       = '';\n  /* space at name (only when reading header) */\n  // this.name_max   = 0;\n  /* pointer to zero-terminated comment or Z_NULL */\n  this.comment    = '';\n  /* space at comment (only when reading header) */\n  // this.comm_max   = 0;\n  /* true if there was or will be a header crc */\n  this.hcrc       = 0;\n  /* true when done reading gzip header (not used when writing a gzip file) */\n  this.done       = false;\n}\n\nmodule.exports = GZheader;\n","'use strict';\n\n\nvar zlib_inflate = require('./zlib/inflate');\nvar utils        = require('./utils/common');\nvar strings      = require('./utils/strings');\nvar c            = require('./zlib/constants');\nvar msg          = require('./zlib/messages');\nvar ZStream      = require('./zlib/zstream');\nvar GZheader     = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true);  // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\nfunction Inflate(options) {\n  if (!(this instanceof Inflate)) return new Inflate(options);\n\n  this.options = utils.assign({\n    chunkSize: 16384,\n    windowBits: 0,\n    to: ''\n  }, options || {});\n\n  var opt = this.options;\n\n  // Force window size for `raw` data, if not set directly,\n  // because we have no header for autodetect.\n  if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) {\n    opt.windowBits = -opt.windowBits;\n    if (opt.windowBits === 0) { opt.windowBits = -15; }\n  }\n\n  // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n  if ((opt.windowBits >= 0) && (opt.windowBits < 16) &&\n      !(options && options.windowBits)) {\n    opt.windowBits += 32;\n  }\n\n  // Gzip header has no info about windows size, we can do autodetect only\n  // for deflate. So, if window size not set, force it to max when gzip possible\n  if ((opt.windowBits > 15) && (opt.windowBits < 48)) {\n    // bit 3 (16) -> gzipped data\n    // bit 4 (32) -> autodetect gzip/deflate\n    if ((opt.windowBits & 15) === 0) {\n      opt.windowBits |= 15;\n    }\n  }\n\n  this.err    = 0;      // error code, if happens (0 = Z_OK)\n  this.msg    = '';     // error message\n  this.ended  = false;  // used to avoid multiple onEnd() calls\n  this.chunks = [];     // chunks of compressed data\n\n  this.strm   = new ZStream();\n  this.strm.avail_out = 0;\n\n  var status  = zlib_inflate.inflateInit2(\n    this.strm,\n    opt.windowBits\n  );\n\n  if (status !== c.Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  this.header = new GZheader();\n\n  zlib_inflate.inflateGetHeader(this.strm, this.header);\n\n  // Setup dictionary\n  if (opt.dictionary) {\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      opt.dictionary = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      opt.dictionary = new Uint8Array(opt.dictionary);\n    }\n    if (opt.raw) { //In raw mode we need to set the dictionary early\n      status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n      if (status !== c.Z_OK) {\n        throw new Error(msg[status]);\n      }\n    }\n  }\n}\n\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\nInflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var dictionary = this.options.dictionary;\n  var status, _mode;\n  var next_out_utf8, tail, utf8str;\n\n  // Flag to properly process Z_BUF_ERROR on testing inflate call\n  // when we check that all output data was flushed.\n  var allowBufError = false;\n\n  if (this.ended) { return false; }\n  _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH);\n\n  // Convert data if needed\n  if (typeof data === 'string') {\n    // Only binary strings can be decompressed on practice\n    strm.input = strings.binstring2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);    /* no bad return value */\n\n    if (status === c.Z_NEED_DICT && dictionary) {\n      status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);\n    }\n\n    if (status === c.Z_BUF_ERROR && allowBufError === true) {\n      status = c.Z_OK;\n      allowBufError = false;\n    }\n\n    if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n\n    if (strm.next_out) {\n      if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) {\n\n        if (this.options.to === 'string') {\n\n          next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n\n          tail = strm.next_out - next_out_utf8;\n          utf8str = strings.buf2string(strm.output, next_out_utf8);\n\n          // move tail\n          strm.next_out = tail;\n          strm.avail_out = chunkSize - tail;\n          if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); }\n\n          this.onData(utf8str);\n\n        } else {\n          this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n        }\n      }\n    }\n\n    // When no more input data, we should check that internal inflate buffers\n    // are flushed. The only way to do it when avail_out = 0 - run one more\n    // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n    // Here we set flag to process this error properly.\n    //\n    // NOTE. Deflate does not return error in this case and does not needs such\n    // logic.\n    if (strm.avail_in === 0 && strm.avail_out === 0) {\n      allowBufError = true;\n    }\n\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n  if (status === c.Z_STREAM_END) {\n    _mode = c.Z_FINISH;\n  }\n\n  // Finalize on the last chunk.\n  if (_mode === c.Z_FINISH) {\n    status = zlib_inflate.inflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === c.Z_OK;\n  }\n\n  // callback interim results if Z_SYNC_FLUSH.\n  if (_mode === c.Z_SYNC_FLUSH) {\n    this.onEnd(c.Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n\n\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\nInflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n\n\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\nInflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === c.Z_OK) {\n    if (this.options.to === 'string') {\n      // Glue & convert here, until we teach pako to send\n      // utf8 aligned strings to onData\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n\n\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n *   , output;\n *\n * try {\n *   output = pako.inflate(input);\n * } catch (err)\n *   console.log(err);\n * }\n * ```\n **/\nfunction inflate(input, options) {\n  var inflator = new Inflate(options);\n\n  inflator.push(input, true);\n\n  // That will never happens, if you don't cheat with options :)\n  if (inflator.err) { throw inflator.msg || msg[inflator.err]; }\n\n  return inflator.result;\n}\n\n\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\nfunction inflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return inflate(input, options);\n}\n\n\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip  = inflate;\n","// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign    = require('./lib/utils/common').assign;\n\nvar deflate   = require('./lib/deflate');\nvar inflate   = require('./lib/inflate');\nvar constants = require('./lib/zlib/constants');\n\nvar pako = {};\n\nassign(pako, deflate, inflate, constants);\n\nmodule.exports = pako;\n","\"use strict\";\nvar USE_TYPEDARRAY = (typeof Uint8Array !== \"undefined\") && (typeof Uint16Array !== \"undefined\") && (typeof Uint32Array !== \"undefined\");\n\nvar pako = require(\"pako\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nvar ARRAY_TYPE = USE_TYPEDARRAY ? \"uint8array\" : \"array\";\n\nexports.magic = \"\\x08\\x00\";\n\n/**\n * Create a worker that uses pako to inflate/deflate.\n * @constructor\n * @param {String} action the name of the pako function to call : either \"Deflate\" or \"Inflate\".\n * @param {Object} options the options to use when (de)compressing.\n */\nfunction FlateWorker(action, options) {\n    GenericWorker.call(this, \"FlateWorker/\" + action);\n\n    this._pako = null;\n    this._pakoAction = action;\n    this._pakoOptions = options;\n    // the `meta` object from the last chunk received\n    // this allow this worker to pass around metadata\n    this.meta = {};\n}\n\nutils.inherits(FlateWorker, GenericWorker);\n\n/**\n * @see GenericWorker.processChunk\n */\nFlateWorker.prototype.processChunk = function (chunk) {\n    this.meta = chunk.meta;\n    if (this._pako === null) {\n        this._createPako();\n    }\n    this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false);\n};\n\n/**\n * @see GenericWorker.flush\n */\nFlateWorker.prototype.flush = function () {\n    GenericWorker.prototype.flush.call(this);\n    if (this._pako === null) {\n        this._createPako();\n    }\n    this._pako.push([], true);\n};\n/**\n * @see GenericWorker.cleanUp\n */\nFlateWorker.prototype.cleanUp = function () {\n    GenericWorker.prototype.cleanUp.call(this);\n    this._pako = null;\n};\n\n/**\n * Create the _pako object.\n * TODO: lazy-loading this object isn't the best solution but it's the\n * quickest. The best solution is to lazy-load the worker list. See also the\n * issue #446.\n */\nFlateWorker.prototype._createPako = function () {\n    this._pako = new pako[this._pakoAction]({\n        raw: true,\n        level: this._pakoOptions.level || -1 // default compression\n    });\n    var self = this;\n    this._pako.onData = function(data) {\n        self.push({\n            data : data,\n            meta : self.meta\n        });\n    };\n};\n\nexports.compressWorker = function (compressionOptions) {\n    return new FlateWorker(\"Deflate\", compressionOptions);\n};\nexports.uncompressWorker = function () {\n    return new FlateWorker(\"Inflate\", {});\n};\n","\"use strict\";\n\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nexports.STORE = {\n    magic: \"\\x00\\x00\",\n    compressWorker : function () {\n        return new GenericWorker(\"STORE compression\");\n    },\n    uncompressWorker : function () {\n        return new GenericWorker(\"STORE decompression\");\n    }\n};\nexports.DEFLATE = require(\"./flate\");\n","\"use strict\";\nexports.LOCAL_FILE_HEADER = \"PK\\x03\\x04\";\nexports.CENTRAL_FILE_HEADER = \"PK\\x01\\x02\";\nexports.CENTRAL_DIRECTORY_END = \"PK\\x05\\x06\";\nexports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = \"PK\\x06\\x07\";\nexports.ZIP64_CENTRAL_DIRECTORY_END = \"PK\\x06\\x06\";\nexports.DATA_DESCRIPTOR = \"PK\\x07\\x08\";\n","\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\nvar utf8 = require(\"../utf8\");\nvar crc32 = require(\"../crc32\");\nvar signature = require(\"../signature\");\n\n/**\n * Transform an integer into a string in hexadecimal.\n * @private\n * @param {number} dec the number to convert.\n * @param {number} bytes the number of bytes to generate.\n * @returns {string} the result.\n */\nvar decToHex = function(dec, bytes) {\n    var hex = \"\", i;\n    for (i = 0; i < bytes; i++) {\n        hex += String.fromCharCode(dec & 0xff);\n        dec = dec >>> 8;\n    }\n    return hex;\n};\n\n/**\n * Generate the UNIX part of the external file attributes.\n * @param {Object} unixPermissions the unix permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :\n *\n * TTTTsstrwxrwxrwx0000000000ADVSHR\n * ^^^^____________________________ file type, see zipinfo.c (UNX_*)\n *     ^^^_________________________ setuid, setgid, sticky\n *        ^^^^^^^^^________________ permissions\n *                 ^^^^^^^^^^______ not used ?\n *                           ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only\n */\nvar generateUnixExternalFileAttr = function (unixPermissions, isDir) {\n\n    var result = unixPermissions;\n    if (!unixPermissions) {\n        // I can't use octal values in strict mode, hence the hexa.\n        //  040775 => 0x41fd\n        // 0100664 => 0x81b4\n        result = isDir ? 0x41fd : 0x81b4;\n    }\n    return (result & 0xFFFF) << 16;\n};\n\n/**\n * Generate the DOS part of the external file attributes.\n * @param {Object} dosPermissions the dos permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * Bit 0     Read-Only\n * Bit 1     Hidden\n * Bit 2     System\n * Bit 3     Volume Label\n * Bit 4     Directory\n * Bit 5     Archive\n */\nvar generateDosExternalFileAttr = function (dosPermissions) {\n    // the dir flag is already set for compatibility\n    return (dosPermissions || 0)  & 0x3F;\n};\n\n/**\n * Generate the various parts used in the construction of the final zip file.\n * @param {Object} streamInfo the hash with information about the compressed file.\n * @param {Boolean} streamedContent is the content streamed ?\n * @param {Boolean} streamingEnded is the stream finished ?\n * @param {number} offset the current offset from the start of the zip file.\n * @param {String} platform let's pretend we are this platform (change platform dependents fields)\n * @param {Function} encodeFileName the function to encode the file name / comment.\n * @return {Object} the zip parts.\n */\nvar generateZipParts = function(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) {\n    var file = streamInfo[\"file\"],\n        compression = streamInfo[\"compression\"],\n        useCustomEncoding = encodeFileName !== utf8.utf8encode,\n        encodedFileName = utils.transformTo(\"string\", encodeFileName(file.name)),\n        utfEncodedFileName = utils.transformTo(\"string\", utf8.utf8encode(file.name)),\n        comment = file.comment,\n        encodedComment = utils.transformTo(\"string\", encodeFileName(comment)),\n        utfEncodedComment = utils.transformTo(\"string\", utf8.utf8encode(comment)),\n        useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,\n        useUTF8ForComment = utfEncodedComment.length !== comment.length,\n        dosTime,\n        dosDate,\n        extraFields = \"\",\n        unicodePathExtraField = \"\",\n        unicodeCommentExtraField = \"\",\n        dir = file.dir,\n        date = file.date;\n\n\n    var dataInfo = {\n        crc32 : 0,\n        compressedSize : 0,\n        uncompressedSize : 0\n    };\n\n    // if the content is streamed, the sizes/crc32 are only available AFTER\n    // the end of the stream.\n    if (!streamedContent || streamingEnded) {\n        dataInfo.crc32 = streamInfo[\"crc32\"];\n        dataInfo.compressedSize = streamInfo[\"compressedSize\"];\n        dataInfo.uncompressedSize = streamInfo[\"uncompressedSize\"];\n    }\n\n    var bitflag = 0;\n    if (streamedContent) {\n        // Bit 3: the sizes/crc32 are set to zero in the local header.\n        // The correct values are put in the data descriptor immediately\n        // following the compressed data.\n        bitflag |= 0x0008;\n    }\n    if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) {\n        // Bit 11: Language encoding flag (EFS).\n        bitflag |= 0x0800;\n    }\n\n\n    var extFileAttr = 0;\n    var versionMadeBy = 0;\n    if (dir) {\n        // dos or unix, we set the dos dir flag\n        extFileAttr |= 0x00010;\n    }\n    if(platform === \"UNIX\") {\n        versionMadeBy = 0x031E; // UNIX, version 3.0\n        extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);\n    } else { // DOS or other, fallback to DOS\n        versionMadeBy = 0x0014; // DOS, version 2.0\n        extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir);\n    }\n\n    // date\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html\n    // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html\n\n    dosTime = date.getUTCHours();\n    dosTime = dosTime << 6;\n    dosTime = dosTime | date.getUTCMinutes();\n    dosTime = dosTime << 5;\n    dosTime = dosTime | date.getUTCSeconds() / 2;\n\n    dosDate = date.getUTCFullYear() - 1980;\n    dosDate = dosDate << 4;\n    dosDate = dosDate | (date.getUTCMonth() + 1);\n    dosDate = dosDate << 5;\n    dosDate = dosDate | date.getUTCDate();\n\n    if (useUTF8ForFileName) {\n        // set the unicode path extra field. unzip needs at least one extra\n        // field to correctly handle unicode path, so using the path is as good\n        // as any other information. This could improve the situation with\n        // other archive managers too.\n        // This field is usually used without the utf8 flag, with a non\n        // unicode path in the header (winrar, winzip). This helps (a bit)\n        // with the messy Windows' default compressed folders feature but\n        // breaks on p7zip which doesn't seek the unicode path extra field.\n        // So for now, UTF-8 everywhere !\n        unicodePathExtraField =\n            // Version\n            decToHex(1, 1) +\n            // NameCRC32\n            decToHex(crc32(encodedFileName), 4) +\n            // UnicodeName\n            utfEncodedFileName;\n\n        extraFields +=\n            // Info-ZIP Unicode Path Extra Field\n            \"\\x75\\x70\" +\n            // size\n            decToHex(unicodePathExtraField.length, 2) +\n            // content\n            unicodePathExtraField;\n    }\n\n    if(useUTF8ForComment) {\n\n        unicodeCommentExtraField =\n            // Version\n            decToHex(1, 1) +\n            // CommentCRC32\n            decToHex(crc32(encodedComment), 4) +\n            // UnicodeName\n            utfEncodedComment;\n\n        extraFields +=\n            // Info-ZIP Unicode Path Extra Field\n            \"\\x75\\x63\" +\n            // size\n            decToHex(unicodeCommentExtraField.length, 2) +\n            // content\n            unicodeCommentExtraField;\n    }\n\n    var header = \"\";\n\n    // version needed to extract\n    header += \"\\x0A\\x00\";\n    // general purpose bit flag\n    header += decToHex(bitflag, 2);\n    // compression method\n    header += compression.magic;\n    // last mod file time\n    header += decToHex(dosTime, 2);\n    // last mod file date\n    header += decToHex(dosDate, 2);\n    // crc-32\n    header += decToHex(dataInfo.crc32, 4);\n    // compressed size\n    header += decToHex(dataInfo.compressedSize, 4);\n    // uncompressed size\n    header += decToHex(dataInfo.uncompressedSize, 4);\n    // file name length\n    header += decToHex(encodedFileName.length, 2);\n    // extra field length\n    header += decToHex(extraFields.length, 2);\n\n\n    var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields;\n\n    var dirRecord = signature.CENTRAL_FILE_HEADER +\n        // version made by (00: DOS)\n        decToHex(versionMadeBy, 2) +\n        // file header (common to file and central directory)\n        header +\n        // file comment length\n        decToHex(encodedComment.length, 2) +\n        // disk number start\n        \"\\x00\\x00\" +\n        // internal file attributes TODO\n        \"\\x00\\x00\" +\n        // external file attributes\n        decToHex(extFileAttr, 4) +\n        // relative offset of local header\n        decToHex(offset, 4) +\n        // file name\n        encodedFileName +\n        // extra field\n        extraFields +\n        // file comment\n        encodedComment;\n\n    return {\n        fileRecord: fileRecord,\n        dirRecord: dirRecord\n    };\n};\n\n/**\n * Generate the EOCD record.\n * @param {Number} entriesCount the number of entries in the zip file.\n * @param {Number} centralDirLength the length (in bytes) of the central dir.\n * @param {Number} localDirLength the length (in bytes) of the local dir.\n * @param {String} comment the zip file comment as a binary string.\n * @param {Function} encodeFileName the function to encode the comment.\n * @return {String} the EOCD record.\n */\nvar generateCentralDirectoryEnd = function (entriesCount, centralDirLength, localDirLength, comment, encodeFileName) {\n    var dirEnd = \"\";\n    var encodedComment = utils.transformTo(\"string\", encodeFileName(comment));\n\n    // end of central dir signature\n    dirEnd = signature.CENTRAL_DIRECTORY_END +\n        // number of this disk\n        \"\\x00\\x00\" +\n        // number of the disk with the start of the central directory\n        \"\\x00\\x00\" +\n        // total number of entries in the central directory on this disk\n        decToHex(entriesCount, 2) +\n        // total number of entries in the central directory\n        decToHex(entriesCount, 2) +\n        // size of the central directory   4 bytes\n        decToHex(centralDirLength, 4) +\n        // offset of start of central directory with respect to the starting disk number\n        decToHex(localDirLength, 4) +\n        // .ZIP file comment length\n        decToHex(encodedComment.length, 2) +\n        // .ZIP file comment\n        encodedComment;\n\n    return dirEnd;\n};\n\n/**\n * Generate data descriptors for a file entry.\n * @param {Object} streamInfo the hash generated by a worker, containing information\n * on the file entry.\n * @return {String} the data descriptors.\n */\nvar generateDataDescriptors = function (streamInfo) {\n    var descriptor = \"\";\n    descriptor = signature.DATA_DESCRIPTOR +\n        // crc-32                          4 bytes\n        decToHex(streamInfo[\"crc32\"], 4) +\n        // compressed size                 4 bytes\n        decToHex(streamInfo[\"compressedSize\"], 4) +\n        // uncompressed size               4 bytes\n        decToHex(streamInfo[\"uncompressedSize\"], 4);\n\n    return descriptor;\n};\n\n\n/**\n * A worker to concatenate other workers to create a zip file.\n * @param {Boolean} streamFiles `true` to stream the content of the files,\n * `false` to accumulate it.\n * @param {String} comment the comment to use.\n * @param {String} platform the platform to use, \"UNIX\" or \"DOS\".\n * @param {Function} encodeFileName the function to encode file names and comments.\n */\nfunction ZipFileWorker(streamFiles, comment, platform, encodeFileName) {\n    GenericWorker.call(this, \"ZipFileWorker\");\n    // The number of bytes written so far. This doesn't count accumulated chunks.\n    this.bytesWritten = 0;\n    // The comment of the zip file\n    this.zipComment = comment;\n    // The platform \"generating\" the zip file.\n    this.zipPlatform = platform;\n    // the function to encode file names and comments.\n    this.encodeFileName = encodeFileName;\n    // Should we stream the content of the files ?\n    this.streamFiles = streamFiles;\n    // If `streamFiles` is false, we will need to accumulate the content of the\n    // files to calculate sizes / crc32 (and write them *before* the content).\n    // This boolean indicates if we are accumulating chunks (it will change a lot\n    // during the lifetime of this worker).\n    this.accumulate = false;\n    // The buffer receiving chunks when accumulating content.\n    this.contentBuffer = [];\n    // The list of generated directory records.\n    this.dirRecords = [];\n    // The offset (in bytes) from the beginning of the zip file for the current source.\n    this.currentSourceOffset = 0;\n    // The total number of entries in this zip file.\n    this.entriesCount = 0;\n    // the name of the file currently being added, null when handling the end of the zip file.\n    // Used for the emitted metadata.\n    this.currentFile = null;\n\n\n\n    this._sources = [];\n}\nutils.inherits(ZipFileWorker, GenericWorker);\n\n/**\n * @see GenericWorker.push\n */\nZipFileWorker.prototype.push = function (chunk) {\n\n    var currentFilePercent = chunk.meta.percent || 0;\n    var entriesCount = this.entriesCount;\n    var remainingFiles = this._sources.length;\n\n    if(this.accumulate) {\n        this.contentBuffer.push(chunk);\n    } else {\n        this.bytesWritten += chunk.data.length;\n\n        GenericWorker.prototype.push.call(this, {\n            data : chunk.data,\n            meta : {\n                currentFile : this.currentFile,\n                percent : entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100\n            }\n        });\n    }\n};\n\n/**\n * The worker started a new source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the new source.\n */\nZipFileWorker.prototype.openedSource = function (streamInfo) {\n    this.currentSourceOffset = this.bytesWritten;\n    this.currentFile = streamInfo[\"file\"].name;\n\n    var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n\n    // don't stream folders (because they don't have any content)\n    if(streamedContent) {\n        var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n        this.push({\n            data : record.fileRecord,\n            meta : {percent:0}\n        });\n    } else {\n        // we need to wait for the whole file before pushing anything\n        this.accumulate = true;\n    }\n};\n\n/**\n * The worker finished a source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the finished source.\n */\nZipFileWorker.prototype.closedSource = function (streamInfo) {\n    this.accumulate = false;\n    var streamedContent = this.streamFiles && !streamInfo[\"file\"].dir;\n    var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n\n    this.dirRecords.push(record.dirRecord);\n    if(streamedContent) {\n        // after the streamed file, we put data descriptors\n        this.push({\n            data : generateDataDescriptors(streamInfo),\n            meta : {percent:100}\n        });\n    } else {\n        // the content wasn't streamed, we need to push everything now\n        // first the file record, then the content\n        this.push({\n            data : record.fileRecord,\n            meta : {percent:0}\n        });\n        while(this.contentBuffer.length) {\n            this.push(this.contentBuffer.shift());\n        }\n    }\n    this.currentFile = null;\n};\n\n/**\n * @see GenericWorker.flush\n */\nZipFileWorker.prototype.flush = function () {\n\n    var localDirLength = this.bytesWritten;\n    for(var i = 0; i < this.dirRecords.length; i++) {\n        this.push({\n            data : this.dirRecords[i],\n            meta : {percent:100}\n        });\n    }\n    var centralDirLength = this.bytesWritten - localDirLength;\n\n    var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName);\n\n    this.push({\n        data : dirEnd,\n        meta : {percent:100}\n    });\n};\n\n/**\n * Prepare the next source to be read.\n */\nZipFileWorker.prototype.prepareNextSource = function () {\n    this.previous = this._sources.shift();\n    this.openedSource(this.previous.streamInfo);\n    if (this.isPaused) {\n        this.previous.pause();\n    } else {\n        this.previous.resume();\n    }\n};\n\n/**\n * @see GenericWorker.registerPrevious\n */\nZipFileWorker.prototype.registerPrevious = function (previous) {\n    this._sources.push(previous);\n    var self = this;\n\n    previous.on(\"data\", function (chunk) {\n        self.processChunk(chunk);\n    });\n    previous.on(\"end\", function () {\n        self.closedSource(self.previous.streamInfo);\n        if(self._sources.length) {\n            self.prepareNextSource();\n        } else {\n            self.end();\n        }\n    });\n    previous.on(\"error\", function (e) {\n        self.error(e);\n    });\n    return this;\n};\n\n/**\n * @see GenericWorker.resume\n */\nZipFileWorker.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if (!this.previous && this._sources.length) {\n        this.prepareNextSource();\n        return true;\n    }\n    if (!this.previous && !this._sources.length && !this.generatedError) {\n        this.end();\n        return true;\n    }\n};\n\n/**\n * @see GenericWorker.error\n */\nZipFileWorker.prototype.error = function (e) {\n    var sources = this._sources;\n    if(!GenericWorker.prototype.error.call(this, e)) {\n        return false;\n    }\n    for(var i = 0; i < sources.length; i++) {\n        try {\n            sources[i].error(e);\n        } catch(e) {\n            // the `error` exploded, nothing to do\n        }\n    }\n    return true;\n};\n\n/**\n * @see GenericWorker.lock\n */\nZipFileWorker.prototype.lock = function () {\n    GenericWorker.prototype.lock.call(this);\n    var sources = this._sources;\n    for(var i = 0; i < sources.length; i++) {\n        sources[i].lock();\n    }\n};\n\nmodule.exports = ZipFileWorker;\n","\"use strict\";\n\nvar compressions = require(\"../compressions\");\nvar ZipFileWorker = require(\"./ZipFileWorker\");\n\n/**\n * Find the compression to use.\n * @param {String} fileCompression the compression defined at the file level, if any.\n * @param {String} zipCompression the compression defined at the load() level.\n * @return {Object} the compression object to use.\n */\nvar getCompression = function (fileCompression, zipCompression) {\n\n    var compressionName = fileCompression || zipCompression;\n    var compression = compressions[compressionName];\n    if (!compression) {\n        throw new Error(compressionName + \" is not a valid compression method !\");\n    }\n    return compression;\n};\n\n/**\n * Create a worker to generate a zip file.\n * @param {JSZip} zip the JSZip instance at the right root level.\n * @param {Object} options to generate the zip file.\n * @param {String} comment the comment to use.\n */\nexports.generateWorker = function (zip, options, comment) {\n\n    var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName);\n    var entriesCount = 0;\n    try {\n\n        zip.forEach(function (relativePath, file) {\n            entriesCount++;\n            var compression = getCompression(file.options.compression, options.compression);\n            var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};\n            var dir = file.dir, date = file.date;\n\n            file._compressWorker(compression, compressionOptions)\n                .withStreamInfo(\"file\", {\n                    name : relativePath,\n                    dir : dir,\n                    date : date,\n                    comment : file.comment || \"\",\n                    unixPermissions : file.unixPermissions,\n                    dosPermissions : file.dosPermissions\n                })\n                .pipe(zipFileWorker);\n        });\n        zipFileWorker.entriesCount = entriesCount;\n    } catch (e) {\n        zipFileWorker.error(e);\n    }\n\n    return zipFileWorker;\n};\n","\"use strict\";\n\nvar utils = require(\"../utils\");\nvar GenericWorker = require(\"../stream/GenericWorker\");\n\n/**\n * A worker that use a nodejs stream as source.\n * @constructor\n * @param {String} filename the name of the file entry for this stream.\n * @param {Readable} stream the nodejs stream.\n */\nfunction NodejsStreamInputAdapter(filename, stream) {\n    GenericWorker.call(this, \"Nodejs stream input adapter for \" + filename);\n    this._upstreamEnded = false;\n    this._bindStream(stream);\n}\n\nutils.inherits(NodejsStreamInputAdapter, GenericWorker);\n\n/**\n * Prepare the stream and bind the callbacks on it.\n * Do this ASAP on node 0.10 ! A lazy binding doesn't always work.\n * @param {Stream} stream the nodejs stream to use.\n */\nNodejsStreamInputAdapter.prototype._bindStream = function (stream) {\n    var self = this;\n    this._stream = stream;\n    stream.pause();\n    stream\n        .on(\"data\", function (chunk) {\n            self.push({\n                data: chunk,\n                meta : {\n                    percent : 0\n                }\n            });\n        })\n        .on(\"error\", function (e) {\n            if(self.isPaused) {\n                this.generatedError = e;\n            } else {\n                self.error(e);\n            }\n        })\n        .on(\"end\", function () {\n            if(self.isPaused) {\n                self._upstreamEnded = true;\n            } else {\n                self.end();\n            }\n        });\n};\nNodejsStreamInputAdapter.prototype.pause = function () {\n    if(!GenericWorker.prototype.pause.call(this)) {\n        return false;\n    }\n    this._stream.pause();\n    return true;\n};\nNodejsStreamInputAdapter.prototype.resume = function () {\n    if(!GenericWorker.prototype.resume.call(this)) {\n        return false;\n    }\n\n    if(this._upstreamEnded) {\n        this.end();\n    } else {\n        this._stream.resume();\n    }\n\n    return true;\n};\n\nmodule.exports = NodejsStreamInputAdapter;\n","\"use strict\";\nvar utf8 = require(\"./utf8\");\nvar utils = require(\"./utils\");\nvar GenericWorker = require(\"./stream/GenericWorker\");\nvar StreamHelper = require(\"./stream/StreamHelper\");\nvar defaults = require(\"./defaults\");\nvar CompressedObject = require(\"./compressedObject\");\nvar ZipObject = require(\"./zipObject\");\nvar generate = require(\"./generate\");\nvar nodejsUtils = require(\"./nodejsUtils\");\nvar NodejsStreamInputAdapter = require(\"./nodejs/NodejsStreamInputAdapter\");\n\n\n/**\n * Add a file in the current folder.\n * @private\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file\n * @param {Object} originalOptions the options of the file\n * @return {Object} the new file.\n */\nvar fileAdd = function(name, data, originalOptions) {\n    // be sure sub folders exist\n    var dataType = utils.getTypeOf(data),\n        parent;\n\n\n    /*\n     * Correct options.\n     */\n\n    var o = utils.extend(originalOptions || {}, defaults);\n    o.date = o.date || new Date();\n    if (o.compression !== null) {\n        o.compression = o.compression.toUpperCase();\n    }\n\n    if (typeof o.unixPermissions === \"string\") {\n        o.unixPermissions = parseInt(o.unixPermissions, 8);\n    }\n\n    // UNX_IFDIR  0040000 see zipinfo.c\n    if (o.unixPermissions && (o.unixPermissions & 0x4000)) {\n        o.dir = true;\n    }\n    // Bit 4    Directory\n    if (o.dosPermissions && (o.dosPermissions & 0x0010)) {\n        o.dir = true;\n    }\n\n    if (o.dir) {\n        name = forceTrailingSlash(name);\n    }\n    if (o.createFolders && (parent = parentFolder(name))) {\n        folderAdd.call(this, parent, true);\n    }\n\n    var isUnicodeString = dataType === \"string\" && o.binary === false && o.base64 === false;\n    if (!originalOptions || typeof originalOptions.binary === \"undefined\") {\n        o.binary = !isUnicodeString;\n    }\n\n\n    var isCompressedEmpty = (data instanceof CompressedObject) && data.uncompressedSize === 0;\n\n    if (isCompressedEmpty || o.dir || !data || data.length === 0) {\n        o.base64 = false;\n        o.binary = true;\n        data = \"\";\n        o.compression = \"STORE\";\n        dataType = \"string\";\n    }\n\n    /*\n     * Convert content to fit.\n     */\n\n    var zipObjectContent = null;\n    if (data instanceof CompressedObject || data instanceof GenericWorker) {\n        zipObjectContent = data;\n    } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n        zipObjectContent = new NodejsStreamInputAdapter(name, data);\n    } else {\n        zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64);\n    }\n\n    var object = new ZipObject(name, zipObjectContent, o);\n    this.files[name] = object;\n    /*\n    TODO: we can't throw an exception because we have async promises\n    (we can have a promise of a Date() for example) but returning a\n    promise is useless because file(name, data) returns the JSZip\n    object for chaining. Should we break that to allow the user\n    to catch the error ?\n\n    return external.Promise.resolve(zipObjectContent)\n    .then(function () {\n        return object;\n    });\n    */\n};\n\n/**\n * Find the parent folder of the path.\n * @private\n * @param {string} path the path to use\n * @return {string} the parent folder, or \"\"\n */\nvar parentFolder = function (path) {\n    if (path.slice(-1) === \"/\") {\n        path = path.substring(0, path.length - 1);\n    }\n    var lastSlash = path.lastIndexOf(\"/\");\n    return (lastSlash > 0) ? path.substring(0, lastSlash) : \"\";\n};\n\n/**\n * Returns the path with a slash at the end.\n * @private\n * @param {String} path the path to check.\n * @return {String} the path with a trailing slash.\n */\nvar forceTrailingSlash = function(path) {\n    // Check the name ends with a /\n    if (path.slice(-1) !== \"/\") {\n        path += \"/\"; // IE doesn't like substr(-1)\n    }\n    return path;\n};\n\n/**\n * Add a (sub) folder in the current folder.\n * @private\n * @param {string} name the folder's name\n * @param {boolean=} [createFolders] If true, automatically create sub\n *  folders. Defaults to false.\n * @return {Object} the new folder.\n */\nvar folderAdd = function(name, createFolders) {\n    createFolders = (typeof createFolders !== \"undefined\") ? createFolders : defaults.createFolders;\n\n    name = forceTrailingSlash(name);\n\n    // Does this folder already exist?\n    if (!this.files[name]) {\n        fileAdd.call(this, name, null, {\n            dir: true,\n            createFolders: createFolders\n        });\n    }\n    return this.files[name];\n};\n\n/**\n* Cross-window, cross-Node-context regular expression detection\n* @param  {Object}  object Anything\n* @return {Boolean}        true if the object is a regular expression,\n* false otherwise\n*/\nfunction isRegExp(object) {\n    return Object.prototype.toString.call(object) === \"[object RegExp]\";\n}\n\n// return the actual prototype of JSZip\nvar out = {\n    /**\n     * @see loadAsync\n     */\n    load: function() {\n        throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n    },\n\n\n    /**\n     * Call a callback function for each entry at this folder level.\n     * @param {Function} cb the callback function:\n     * function (relativePath, file) {...}\n     * It takes 2 arguments : the relative path and the file.\n     */\n    forEach: function(cb) {\n        var filename, relativePath, file;\n        // ignore warning about unwanted properties because this.files is a null prototype object\n        /* eslint-disable-next-line guard-for-in */\n        for (filename in this.files) {\n            file = this.files[filename];\n            relativePath = filename.slice(this.root.length, filename.length);\n            if (relativePath && filename.slice(0, this.root.length) === this.root) { // the file is in the current root\n                cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn...\n            }\n        }\n    },\n\n    /**\n     * Filter nested files/folders with the specified function.\n     * @param {Function} search the predicate to use :\n     * function (relativePath, file) {...}\n     * It takes 2 arguments : the relative path and the file.\n     * @return {Array} An array of matching elements.\n     */\n    filter: function(search) {\n        var result = [];\n        this.forEach(function (relativePath, entry) {\n            if (search(relativePath, entry)) { // the file matches the function\n                result.push(entry);\n            }\n\n        });\n        return result;\n    },\n\n    /**\n     * Add a file to the zip file, or search a file.\n     * @param   {string|RegExp} name The name of the file to add (if data is defined),\n     * the name of the file to find (if no data) or a regex to match files.\n     * @param   {String|ArrayBuffer|Uint8Array|Buffer} data  The file data, either raw or base64 encoded\n     * @param   {Object} o     File options\n     * @return  {JSZip|Object|Array} this JSZip object (when adding a file),\n     * a file (when searching by string) or an array of files (when searching by regex).\n     */\n    file: function(name, data, o) {\n        if (arguments.length === 1) {\n            if (isRegExp(name)) {\n                var regexp = name;\n                return this.filter(function(relativePath, file) {\n                    return !file.dir && regexp.test(relativePath);\n                });\n            }\n            else { // text\n                var obj = this.files[this.root + name];\n                if (obj && !obj.dir) {\n                    return obj;\n                } else {\n                    return null;\n                }\n            }\n        }\n        else { // more than one argument : we have data !\n            name = this.root + name;\n            fileAdd.call(this, name, data, o);\n        }\n        return this;\n    },\n\n    /**\n     * Add a directory to the zip file, or search.\n     * @param   {String|RegExp} arg The name of the directory to add, or a regex to search folders.\n     * @return  {JSZip} an object with the new directory as the root, or an array containing matching folders.\n     */\n    folder: function(arg) {\n        if (!arg) {\n            return this;\n        }\n\n        if (isRegExp(arg)) {\n            return this.filter(function(relativePath, file) {\n                return file.dir && arg.test(relativePath);\n            });\n        }\n\n        // else, name is a new folder\n        var name = this.root + arg;\n        var newFolder = folderAdd.call(this, name);\n\n        // Allow chaining by returning a new object with this folder as the root\n        var ret = this.clone();\n        ret.root = newFolder.name;\n        return ret;\n    },\n\n    /**\n     * Delete a file, or a directory and all sub-files, from the zip\n     * @param {string} name the name of the file to delete\n     * @return {JSZip} this JSZip object\n     */\n    remove: function(name) {\n        name = this.root + name;\n        var file = this.files[name];\n        if (!file) {\n            // Look for any folders\n            if (name.slice(-1) !== \"/\") {\n                name += \"/\";\n            }\n            file = this.files[name];\n        }\n\n        if (file && !file.dir) {\n            // file\n            delete this.files[name];\n        } else {\n            // maybe a folder, delete recursively\n            var kids = this.filter(function(relativePath, file) {\n                return file.name.slice(0, name.length) === name;\n            });\n            for (var i = 0; i < kids.length; i++) {\n                delete this.files[kids[i].name];\n            }\n        }\n\n        return this;\n    },\n\n    /**\n     * @deprecated This method has been removed in JSZip 3.0, please check the upgrade guide.\n     */\n    generate: function() {\n        throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n    },\n\n    /**\n     * Generate the complete zip file as an internal stream.\n     * @param {Object} options the options to generate the zip file :\n     * - compression, \"STORE\" by default.\n     * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n     * @return {StreamHelper} the streamed zip file.\n     */\n    generateInternalStream: function(options) {\n        var worker, opts = {};\n        try {\n            opts = utils.extend(options || {}, {\n                streamFiles: false,\n                compression: \"STORE\",\n                compressionOptions : null,\n                type: \"\",\n                platform: \"DOS\",\n                comment: null,\n                mimeType: \"application/zip\",\n                encodeFileName: utf8.utf8encode\n            });\n\n            opts.type = opts.type.toLowerCase();\n            opts.compression = opts.compression.toUpperCase();\n\n            // \"binarystring\" is preferred but the internals use \"string\".\n            if(opts.type === \"binarystring\") {\n                opts.type = \"string\";\n            }\n\n            if (!opts.type) {\n                throw new Error(\"No output type specified.\");\n            }\n\n            utils.checkSupport(opts.type);\n\n            // accept nodejs `process.platform`\n            if(\n                opts.platform === \"darwin\" ||\n                opts.platform === \"freebsd\" ||\n                opts.platform === \"linux\" ||\n                opts.platform === \"sunos\"\n            ) {\n                opts.platform = \"UNIX\";\n            }\n            if (opts.platform === \"win32\") {\n                opts.platform = \"DOS\";\n            }\n\n            var comment = opts.comment || this.comment || \"\";\n            worker = generate.generateWorker(this, opts, comment);\n        } catch (e) {\n            worker = new GenericWorker(\"error\");\n            worker.error(e);\n        }\n        return new StreamHelper(worker, opts.type || \"string\", opts.mimeType);\n    },\n    /**\n     * Generate the complete zip file asynchronously.\n     * @see generateInternalStream\n     */\n    generateAsync: function(options, onUpdate) {\n        return this.generateInternalStream(options).accumulate(onUpdate);\n    },\n    /**\n     * Generate the complete zip file asynchronously.\n     * @see generateInternalStream\n     */\n    generateNodeStream: function(options, onUpdate) {\n        options = options || {};\n        if (!options.type) {\n            options.type = \"nodebuffer\";\n        }\n        return this.generateInternalStream(options).toNodejsStream(onUpdate);\n    }\n};\nmodule.exports = out;\n","\"use strict\";\nvar utils = require(\"../utils\");\n\nfunction DataReader(data) {\n    this.data = data; // type : see implementation\n    this.length = data.length;\n    this.index = 0;\n    this.zero = 0;\n}\nDataReader.prototype = {\n    /**\n     * Check that the offset will not go too far.\n     * @param {string} offset the additional offset to check.\n     * @throws {Error} an Error if the offset is out of bounds.\n     */\n    checkOffset: function(offset) {\n        this.checkIndex(this.index + offset);\n    },\n    /**\n     * Check that the specified index will not be too far.\n     * @param {string} newIndex the index to check.\n     * @throws {Error} an Error if the index is out of bounds.\n     */\n    checkIndex: function(newIndex) {\n        if (this.length < this.zero + newIndex || newIndex < 0) {\n            throw new Error(\"End of data reached (data length = \" + this.length + \", asked index = \" + (newIndex) + \"). Corrupted zip ?\");\n        }\n    },\n    /**\n     * Change the index.\n     * @param {number} newIndex The new index.\n     * @throws {Error} if the new index is out of the data.\n     */\n    setIndex: function(newIndex) {\n        this.checkIndex(newIndex);\n        this.index = newIndex;\n    },\n    /**\n     * Skip the next n bytes.\n     * @param {number} n the number of bytes to skip.\n     * @throws {Error} if the new index is out of the data.\n     */\n    skip: function(n) {\n        this.setIndex(this.index + n);\n    },\n    /**\n     * Get the byte at the specified index.\n     * @param {number} i the index to use.\n     * @return {number} a byte.\n     */\n    byteAt: function() {\n        // see implementations\n    },\n    /**\n     * Get the next number with a given byte size.\n     * @param {number} size the number of bytes to read.\n     * @return {number} the corresponding number.\n     */\n    readInt: function(size) {\n        var result = 0,\n            i;\n        this.checkOffset(size);\n        for (i = this.index + size - 1; i >= this.index; i--) {\n            result = (result << 8) + this.byteAt(i);\n        }\n        this.index += size;\n        return result;\n    },\n    /**\n     * Get the next string with a given byte size.\n     * @param {number} size the number of bytes to read.\n     * @return {string} the corresponding string.\n     */\n    readString: function(size) {\n        return utils.transformTo(\"string\", this.readData(size));\n    },\n    /**\n     * Get raw data without conversion, <size> bytes.\n     * @param {number} size the number of bytes to read.\n     * @return {Object} the raw data, implementation specific.\n     */\n    readData: function() {\n        // see implementations\n    },\n    /**\n     * Find the last occurrence of a zip signature (4 bytes).\n     * @param {string} sig the signature to find.\n     * @return {number} the index of the last occurrence, -1 if not found.\n     */\n    lastIndexOfSignature: function() {\n        // see implementations\n    },\n    /**\n     * Read the signature (4 bytes) at the current position and compare it with sig.\n     * @param {string} sig the expected signature\n     * @return {boolean} true if the signature matches, false otherwise.\n     */\n    readAndCheckSignature: function() {\n        // see implementations\n    },\n    /**\n     * Get the next date.\n     * @return {Date} the date.\n     */\n    readDate: function() {\n        var dostime = this.readInt(4);\n        return new Date(Date.UTC(\n            ((dostime >> 25) & 0x7f) + 1980, // year\n            ((dostime >> 21) & 0x0f) - 1, // month\n            (dostime >> 16) & 0x1f, // day\n            (dostime >> 11) & 0x1f, // hour\n            (dostime >> 5) & 0x3f, // minute\n            (dostime & 0x1f) << 1)); // second\n    }\n};\nmodule.exports = DataReader;\n","\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction ArrayReader(data) {\n    DataReader.call(this, data);\n    for(var i = 0; i < this.data.length; i++) {\n        data[i] = data[i] & 0xFF;\n    }\n}\nutils.inherits(ArrayReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nArrayReader.prototype.byteAt = function(i) {\n    return this.data[this.zero + i];\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nArrayReader.prototype.lastIndexOfSignature = function(sig) {\n    var sig0 = sig.charCodeAt(0),\n        sig1 = sig.charCodeAt(1),\n        sig2 = sig.charCodeAt(2),\n        sig3 = sig.charCodeAt(3);\n    for (var i = this.length - 4; i >= 0; --i) {\n        if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {\n            return i - this.zero;\n        }\n    }\n\n    return -1;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nArrayReader.prototype.readAndCheckSignature = function (sig) {\n    var sig0 = sig.charCodeAt(0),\n        sig1 = sig.charCodeAt(1),\n        sig2 = sig.charCodeAt(2),\n        sig3 = sig.charCodeAt(3),\n        data = this.readData(4);\n    return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3];\n};\n/**\n * @see DataReader.readData\n */\nArrayReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    if(size === 0) {\n        return [];\n    }\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = ArrayReader;\n","\"use strict\";\nvar DataReader = require(\"./DataReader\");\nvar utils = require(\"../utils\");\n\nfunction StringReader(data) {\n    DataReader.call(this, data);\n}\nutils.inherits(StringReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\nStringReader.prototype.byteAt = function(i) {\n    return this.data.charCodeAt(this.zero + i);\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\nStringReader.prototype.lastIndexOfSignature = function(sig) {\n    return this.data.lastIndexOf(sig) - this.zero;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\nStringReader.prototype.readAndCheckSignature = function (sig) {\n    var data = this.readData(4);\n    return sig === data;\n};\n/**\n * @see DataReader.readData\n */\nStringReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    // this will work because the constructor applied the \"& 0xff\" mask.\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = StringReader;\n","\"use strict\";\nvar ArrayReader = require(\"./ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction Uint8ArrayReader(data) {\n    ArrayReader.call(this, data);\n}\nutils.inherits(Uint8ArrayReader, ArrayReader);\n/**\n * @see DataReader.readData\n */\nUint8ArrayReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    if(size === 0) {\n        // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].\n        return new Uint8Array(0);\n    }\n    var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = Uint8ArrayReader;\n","\"use strict\";\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\nvar utils = require(\"../utils\");\n\nfunction NodeBufferReader(data) {\n    Uint8ArrayReader.call(this, data);\n}\nutils.inherits(NodeBufferReader, Uint8ArrayReader);\n\n/**\n * @see DataReader.readData\n */\nNodeBufferReader.prototype.readData = function(size) {\n    this.checkOffset(size);\n    var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n    this.index += size;\n    return result;\n};\nmodule.exports = NodeBufferReader;\n","\"use strict\";\n\nvar utils = require(\"../utils\");\nvar support = require(\"../support\");\nvar ArrayReader = require(\"./ArrayReader\");\nvar StringReader = require(\"./StringReader\");\nvar NodeBufferReader = require(\"./NodeBufferReader\");\nvar Uint8ArrayReader = require(\"./Uint8ArrayReader\");\n\n/**\n * Create a reader adapted to the data.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read.\n * @return {DataReader} the data reader.\n */\nmodule.exports = function (data) {\n    var type = utils.getTypeOf(data);\n    utils.checkSupport(type);\n    if (type === \"string\" && !support.uint8array) {\n        return new StringReader(data);\n    }\n    if (type === \"nodebuffer\") {\n        return new NodeBufferReader(data);\n    }\n    if (support.uint8array) {\n        return new Uint8ArrayReader(utils.transformTo(\"uint8array\", data));\n    }\n    return new ArrayReader(utils.transformTo(\"array\", data));\n};\n","\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar CompressedObject = require(\"./compressedObject\");\nvar crc32fn = require(\"./crc32\");\nvar utf8 = require(\"./utf8\");\nvar compressions = require(\"./compressions\");\nvar support = require(\"./support\");\n\nvar MADE_BY_DOS = 0x00;\nvar MADE_BY_UNIX = 0x03;\n\n/**\n * Find a compression registered in JSZip.\n * @param {string} compressionMethod the method magic to find.\n * @return {Object|null} the JSZip compression object, null if none found.\n */\nvar findCompression = function(compressionMethod) {\n    for (var method in compressions) {\n        if (!Object.prototype.hasOwnProperty.call(compressions, method)) {\n            continue;\n        }\n        if (compressions[method].magic === compressionMethod) {\n            return compressions[method];\n        }\n    }\n    return null;\n};\n\n// class ZipEntry {{{\n/**\n * An entry in the zip file.\n * @constructor\n * @param {Object} options Options of the current file.\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntry(options, loadOptions) {\n    this.options = options;\n    this.loadOptions = loadOptions;\n}\nZipEntry.prototype = {\n    /**\n     * say if the file is encrypted.\n     * @return {boolean} true if the file is encrypted, false otherwise.\n     */\n    isEncrypted: function() {\n        // bit 1 is set\n        return (this.bitFlag & 0x0001) === 0x0001;\n    },\n    /**\n     * say if the file has utf-8 filename/comment.\n     * @return {boolean} true if the filename/comment is in utf-8, false otherwise.\n     */\n    useUTF8: function() {\n        // bit 11 is set\n        return (this.bitFlag & 0x0800) === 0x0800;\n    },\n    /**\n     * Read the local part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readLocalPart: function(reader) {\n        var compression, localExtraFieldsLength;\n\n        // we already know everything from the central dir !\n        // If the central dir data are false, we are doomed.\n        // On the bright side, the local part is scary  : zip64, data descriptors, both, etc.\n        // The less data we get here, the more reliable this should be.\n        // Let's skip the whole header and dash to the data !\n        reader.skip(22);\n        // in some zip created on windows, the filename stored in the central dir contains \\ instead of /.\n        // Strangely, the filename here is OK.\n        // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes\n        // or APPNOTE#4.4.17.1, \"All slashes MUST be forward slashes '/'\") but there are a lot of bad zip generators...\n        // Search \"unzip mismatching \"local\" filename continuing with \"central\" filename version\" on\n        // the internet.\n        //\n        // I think I see the logic here : the central directory is used to display\n        // content and the local directory is used to extract the files. Mixing / and \\\n        // may be used to display \\ to windows users and use / when extracting the files.\n        // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394\n        this.fileNameLength = reader.readInt(2);\n        localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir\n        // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding.\n        this.fileName = reader.readData(this.fileNameLength);\n        reader.skip(localExtraFieldsLength);\n\n        if (this.compressedSize === -1 || this.uncompressedSize === -1) {\n            throw new Error(\"Bug or corrupted zip : didn't get enough information from the central directory \" + \"(compressedSize === -1 || uncompressedSize === -1)\");\n        }\n\n        compression = findCompression(this.compressionMethod);\n        if (compression === null) { // no compression found\n            throw new Error(\"Corrupted zip : compression \" + utils.pretty(this.compressionMethod) + \" unknown (inner file : \" + utils.transformTo(\"string\", this.fileName) + \")\");\n        }\n        this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize));\n    },\n\n    /**\n     * Read the central part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readCentralPart: function(reader) {\n        this.versionMadeBy = reader.readInt(2);\n        reader.skip(2);\n        // this.versionNeeded = reader.readInt(2);\n        this.bitFlag = reader.readInt(2);\n        this.compressionMethod = reader.readString(2);\n        this.date = reader.readDate();\n        this.crc32 = reader.readInt(4);\n        this.compressedSize = reader.readInt(4);\n        this.uncompressedSize = reader.readInt(4);\n        var fileNameLength = reader.readInt(2);\n        this.extraFieldsLength = reader.readInt(2);\n        this.fileCommentLength = reader.readInt(2);\n        this.diskNumberStart = reader.readInt(2);\n        this.internalFileAttributes = reader.readInt(2);\n        this.externalFileAttributes = reader.readInt(4);\n        this.localHeaderOffset = reader.readInt(4);\n\n        if (this.isEncrypted()) {\n            throw new Error(\"Encrypted zip are not supported\");\n        }\n\n        // will be read in the local part, see the comments there\n        reader.skip(fileNameLength);\n        this.readExtraFields(reader);\n        this.parseZIP64ExtraField(reader);\n        this.fileComment = reader.readData(this.fileCommentLength);\n    },\n\n    /**\n     * Parse the external file attributes and get the unix/dos permissions.\n     */\n    processAttributes: function () {\n        this.unixPermissions = null;\n        this.dosPermissions = null;\n        var madeBy = this.versionMadeBy >> 8;\n\n        // Check if we have the DOS directory flag set.\n        // We look for it in the DOS and UNIX permissions\n        // but some unknown platform could set it as a compatibility flag.\n        this.dir = this.externalFileAttributes & 0x0010 ? true : false;\n\n        if(madeBy === MADE_BY_DOS) {\n            // first 6 bits (0 to 5)\n            this.dosPermissions = this.externalFileAttributes & 0x3F;\n        }\n\n        if(madeBy === MADE_BY_UNIX) {\n            this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF;\n            // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8);\n        }\n\n        // fail safe : if the name ends with a / it probably means a folder\n        if (!this.dir && this.fileNameStr.slice(-1) === \"/\") {\n            this.dir = true;\n        }\n    },\n\n    /**\n     * Parse the ZIP64 extra field and merge the info in the current ZipEntry.\n     * @param {DataReader} reader the reader to use.\n     */\n    parseZIP64ExtraField: function() {\n        if (!this.extraFields[0x0001]) {\n            return;\n        }\n\n        // should be something, preparing the extra reader\n        var extraReader = readerFor(this.extraFields[0x0001].value);\n\n        // I really hope that these 64bits integer can fit in 32 bits integer, because js\n        // won't let us have more.\n        if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {\n            this.uncompressedSize = extraReader.readInt(8);\n        }\n        if (this.compressedSize === utils.MAX_VALUE_32BITS) {\n            this.compressedSize = extraReader.readInt(8);\n        }\n        if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {\n            this.localHeaderOffset = extraReader.readInt(8);\n        }\n        if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {\n            this.diskNumberStart = extraReader.readInt(4);\n        }\n    },\n    /**\n     * Read the central part of a zip file and add the info in this object.\n     * @param {DataReader} reader the reader to use.\n     */\n    readExtraFields: function(reader) {\n        var end = reader.index + this.extraFieldsLength,\n            extraFieldId,\n            extraFieldLength,\n            extraFieldValue;\n\n        if (!this.extraFields) {\n            this.extraFields = {};\n        }\n\n        while (reader.index + 4 < end) {\n            extraFieldId = reader.readInt(2);\n            extraFieldLength = reader.readInt(2);\n            extraFieldValue = reader.readData(extraFieldLength);\n\n            this.extraFields[extraFieldId] = {\n                id: extraFieldId,\n                length: extraFieldLength,\n                value: extraFieldValue\n            };\n        }\n\n        reader.setIndex(end);\n    },\n    /**\n     * Apply an UTF8 transformation if needed.\n     */\n    handleUTF8: function() {\n        var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n        if (this.useUTF8()) {\n            this.fileNameStr = utf8.utf8decode(this.fileName);\n            this.fileCommentStr = utf8.utf8decode(this.fileComment);\n        } else {\n            var upath = this.findExtraFieldUnicodePath();\n            if (upath !== null) {\n                this.fileNameStr = upath;\n            } else {\n                // ASCII text or unsupported code page\n                var fileNameByteArray =  utils.transformTo(decodeParamType, this.fileName);\n                this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray);\n            }\n\n            var ucomment = this.findExtraFieldUnicodeComment();\n            if (ucomment !== null) {\n                this.fileCommentStr = ucomment;\n            } else {\n                // ASCII text or unsupported code page\n                var commentByteArray =  utils.transformTo(decodeParamType, this.fileComment);\n                this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray);\n            }\n        }\n    },\n\n    /**\n     * Find the unicode path declared in the extra field, if any.\n     * @return {String} the unicode path, null otherwise.\n     */\n    findExtraFieldUnicodePath: function() {\n        var upathField = this.extraFields[0x7075];\n        if (upathField) {\n            var extraReader = readerFor(upathField.value);\n\n            // wrong version\n            if (extraReader.readInt(1) !== 1) {\n                return null;\n            }\n\n            // the crc of the filename changed, this field is out of date.\n            if (crc32fn(this.fileName) !== extraReader.readInt(4)) {\n                return null;\n            }\n\n            return utf8.utf8decode(extraReader.readData(upathField.length - 5));\n        }\n        return null;\n    },\n\n    /**\n     * Find the unicode comment declared in the extra field, if any.\n     * @return {String} the unicode comment, null otherwise.\n     */\n    findExtraFieldUnicodeComment: function() {\n        var ucommentField = this.extraFields[0x6375];\n        if (ucommentField) {\n            var extraReader = readerFor(ucommentField.value);\n\n            // wrong version\n            if (extraReader.readInt(1) !== 1) {\n                return null;\n            }\n\n            // the crc of the comment changed, this field is out of date.\n            if (crc32fn(this.fileComment) !== extraReader.readInt(4)) {\n                return null;\n            }\n\n            return utf8.utf8decode(extraReader.readData(ucommentField.length - 5));\n        }\n        return null;\n    }\n};\nmodule.exports = ZipEntry;\n","\"use strict\";\nvar readerFor = require(\"./reader/readerFor\");\nvar utils = require(\"./utils\");\nvar sig = require(\"./signature\");\nvar ZipEntry = require(\"./zipEntry\");\nvar support = require(\"./support\");\n//  class ZipEntries {{{\n/**\n * All the entries in the zip file.\n * @constructor\n * @param {Object} loadOptions Options for loading the stream.\n */\nfunction ZipEntries(loadOptions) {\n    this.files = [];\n    this.loadOptions = loadOptions;\n}\nZipEntries.prototype = {\n    /**\n     * Check that the reader is on the specified signature.\n     * @param {string} expectedSignature the expected signature.\n     * @throws {Error} if it is an other signature.\n     */\n    checkSignature: function(expectedSignature) {\n        if (!this.reader.readAndCheckSignature(expectedSignature)) {\n            this.reader.index -= 4;\n            var signature = this.reader.readString(4);\n            throw new Error(\"Corrupted zip or bug: unexpected signature \" + \"(\" + utils.pretty(signature) + \", expected \" + utils.pretty(expectedSignature) + \")\");\n        }\n    },\n    /**\n     * Check if the given signature is at the given index.\n     * @param {number} askedIndex the index to check.\n     * @param {string} expectedSignature the signature to expect.\n     * @return {boolean} true if the signature is here, false otherwise.\n     */\n    isSignature: function(askedIndex, expectedSignature) {\n        var currentIndex = this.reader.index;\n        this.reader.setIndex(askedIndex);\n        var signature = this.reader.readString(4);\n        var result = signature === expectedSignature;\n        this.reader.setIndex(currentIndex);\n        return result;\n    },\n    /**\n     * Read the end of the central directory.\n     */\n    readBlockEndOfCentral: function() {\n        this.diskNumber = this.reader.readInt(2);\n        this.diskWithCentralDirStart = this.reader.readInt(2);\n        this.centralDirRecordsOnThisDisk = this.reader.readInt(2);\n        this.centralDirRecords = this.reader.readInt(2);\n        this.centralDirSize = this.reader.readInt(4);\n        this.centralDirOffset = this.reader.readInt(4);\n\n        this.zipCommentLength = this.reader.readInt(2);\n        // warning : the encoding depends of the system locale\n        // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.\n        // On a windows machine, this field is encoded with the localized windows code page.\n        var zipComment = this.reader.readData(this.zipCommentLength);\n        var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n        // To get consistent behavior with the generation part, we will assume that\n        // this is utf8 encoded unless specified otherwise.\n        var decodeContent = utils.transformTo(decodeParamType, zipComment);\n        this.zipComment = this.loadOptions.decodeFileName(decodeContent);\n    },\n    /**\n     * Read the end of the Zip 64 central directory.\n     * Not merged with the method readEndOfCentral :\n     * The end of central can coexist with its Zip64 brother,\n     * I don't want to read the wrong number of bytes !\n     */\n    readBlockZip64EndOfCentral: function() {\n        this.zip64EndOfCentralSize = this.reader.readInt(8);\n        this.reader.skip(4);\n        // this.versionMadeBy = this.reader.readString(2);\n        // this.versionNeeded = this.reader.readInt(2);\n        this.diskNumber = this.reader.readInt(4);\n        this.diskWithCentralDirStart = this.reader.readInt(4);\n        this.centralDirRecordsOnThisDisk = this.reader.readInt(8);\n        this.centralDirRecords = this.reader.readInt(8);\n        this.centralDirSize = this.reader.readInt(8);\n        this.centralDirOffset = this.reader.readInt(8);\n\n        this.zip64ExtensibleData = {};\n        var extraDataSize = this.zip64EndOfCentralSize - 44,\n            index = 0,\n            extraFieldId,\n            extraFieldLength,\n            extraFieldValue;\n        while (index < extraDataSize) {\n            extraFieldId = this.reader.readInt(2);\n            extraFieldLength = this.reader.readInt(4);\n            extraFieldValue = this.reader.readData(extraFieldLength);\n            this.zip64ExtensibleData[extraFieldId] = {\n                id: extraFieldId,\n                length: extraFieldLength,\n                value: extraFieldValue\n            };\n        }\n    },\n    /**\n     * Read the end of the Zip 64 central directory locator.\n     */\n    readBlockZip64EndOfCentralLocator: function() {\n        this.diskWithZip64CentralDirStart = this.reader.readInt(4);\n        this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);\n        this.disksCount = this.reader.readInt(4);\n        if (this.disksCount > 1) {\n            throw new Error(\"Multi-volumes zip are not supported\");\n        }\n    },\n    /**\n     * Read the local files, based on the offset read in the central part.\n     */\n    readLocalFiles: function() {\n        var i, file;\n        for (i = 0; i < this.files.length; i++) {\n            file = this.files[i];\n            this.reader.setIndex(file.localHeaderOffset);\n            this.checkSignature(sig.LOCAL_FILE_HEADER);\n            file.readLocalPart(this.reader);\n            file.handleUTF8();\n            file.processAttributes();\n        }\n    },\n    /**\n     * Read the central directory.\n     */\n    readCentralDir: function() {\n        var file;\n\n        this.reader.setIndex(this.centralDirOffset);\n        while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) {\n            file = new ZipEntry({\n                zip64: this.zip64\n            }, this.loadOptions);\n            file.readCentralPart(this.reader);\n            this.files.push(file);\n        }\n\n        if (this.centralDirRecords !== this.files.length) {\n            if (this.centralDirRecords !== 0 && this.files.length === 0) {\n                // We expected some records but couldn't find ANY.\n                // This is really suspicious, as if something went wrong.\n                throw new Error(\"Corrupted zip or bug: expected \" + this.centralDirRecords + \" records in central dir, got \" + this.files.length);\n            } else {\n                // We found some records but not all.\n                // Something is wrong but we got something for the user: no error here.\n                // console.warn(\"expected\", this.centralDirRecords, \"records in central dir, got\", this.files.length);\n            }\n        }\n    },\n    /**\n     * Read the end of central directory.\n     */\n    readEndOfCentral: function() {\n        var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);\n        if (offset < 0) {\n            // Check if the content is a truncated zip or complete garbage.\n            // A \"LOCAL_FILE_HEADER\" is not required at the beginning (auto\n            // extractible zip for example) but it can give a good hint.\n            // If an ajax request was used without responseType, we will also\n            // get unreadable data.\n            var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER);\n\n            if (isGarbage) {\n                throw new Error(\"Can't find end of central directory : is this a zip file ? \" +\n                                \"If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\");\n            } else {\n                throw new Error(\"Corrupted zip: can't find end of central directory\");\n            }\n\n        }\n        this.reader.setIndex(offset);\n        var endOfCentralDirOffset = offset;\n        this.checkSignature(sig.CENTRAL_DIRECTORY_END);\n        this.readBlockEndOfCentral();\n\n\n        /* extract from the zip spec :\n            4)  If one of the fields in the end of central directory\n                record is too small to hold required data, the field\n                should be set to -1 (0xFFFF or 0xFFFFFFFF) and the\n                ZIP64 format record should be created.\n            5)  The end of central directory record and the\n                Zip64 end of central directory locator record must\n                reside on the same disk when splitting or spanning\n                an archive.\n         */\n        if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {\n            this.zip64 = true;\n\n            /*\n            Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from\n            the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents\n            all numbers as 64-bit double precision IEEE 754 floating point numbers.\n            So, we have 53bits for integers and bitwise operations treat everything as 32bits.\n            see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators\n            and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5\n            */\n\n            // should look for a zip64 EOCD locator\n            offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n            if (offset < 0) {\n                throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");\n            }\n            this.reader.setIndex(offset);\n            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n            this.readBlockZip64EndOfCentralLocator();\n\n            // now the zip64 EOCD record\n            if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) {\n                // console.warn(\"ZIP64 end of central directory not where expected.\");\n                this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n                if (this.relativeOffsetEndOfZip64CentralDir < 0) {\n                    throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");\n                }\n            }\n            this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);\n            this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n            this.readBlockZip64EndOfCentral();\n        }\n\n        var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize;\n        if (this.zip64) {\n            expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator\n            expectedEndOfCentralDirOffset += 12 /* should not include the leading 12 bytes */ + this.zip64EndOfCentralSize;\n        }\n\n        var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset;\n\n        if (extraBytes > 0) {\n            // console.warn(extraBytes, \"extra bytes at beginning or within zipfile\");\n            if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) {\n                // The offsets seem wrong, but we have something at the specified offset.\n                // So… we keep it.\n            } else {\n                // the offset is wrong, update the \"zero\" of the reader\n                // this happens if data has been prepended (crx files for example)\n                this.reader.zero = extraBytes;\n            }\n        } else if (extraBytes < 0) {\n            throw new Error(\"Corrupted zip: missing \" + Math.abs(extraBytes) + \" bytes.\");\n        }\n    },\n    prepareReader: function(data) {\n        this.reader = readerFor(data);\n    },\n    /**\n     * Read a zip file and create ZipEntries.\n     * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.\n     */\n    load: function(data) {\n        this.prepareReader(data);\n        this.readEndOfCentral();\n        this.readCentralDir();\n        this.readLocalFiles();\n    }\n};\n// }}} end of ZipEntries\nmodule.exports = ZipEntries;\n","\"use strict\";\nvar utils = require(\"./utils\");\nvar external = require(\"./external\");\nvar utf8 = require(\"./utf8\");\nvar ZipEntries = require(\"./zipEntries\");\nvar Crc32Probe = require(\"./stream/Crc32Probe\");\nvar nodejsUtils = require(\"./nodejsUtils\");\n\n/**\n * Check the CRC32 of an entry.\n * @param {ZipEntry} zipEntry the zip entry to check.\n * @return {Promise} the result.\n */\nfunction checkEntryCRC32(zipEntry) {\n    return new external.Promise(function (resolve, reject) {\n        var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());\n        worker.on(\"error\", function (e) {\n            reject(e);\n        })\n            .on(\"end\", function () {\n                if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {\n                    reject(new Error(\"Corrupted zip : CRC32 mismatch\"));\n                } else {\n                    resolve();\n                }\n            })\n            .resume();\n    });\n}\n\nmodule.exports = function (data, options) {\n    var zip = this;\n    options = utils.extend(options || {}, {\n        base64: false,\n        checkCRC32: false,\n        optimizedBinaryString: false,\n        createFolders: false,\n        decodeFileName: utf8.utf8decode\n    });\n\n    if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n        return external.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\"));\n    }\n\n    return utils.prepareContent(\"the loaded zip file\", data, true, options.optimizedBinaryString, options.base64)\n        .then(function (data) {\n            var zipEntries = new ZipEntries(options);\n            zipEntries.load(data);\n            return zipEntries;\n        }).then(function checkCRC32(zipEntries) {\n            var promises = [external.Promise.resolve(zipEntries)];\n            var files = zipEntries.files;\n            if (options.checkCRC32) {\n                for (var i = 0; i < files.length; i++) {\n                    promises.push(checkEntryCRC32(files[i]));\n                }\n            }\n            return external.Promise.all(promises);\n        }).then(function addFiles(results) {\n            var zipEntries = results.shift();\n            var files = zipEntries.files;\n            for (var i = 0; i < files.length; i++) {\n                var input = files[i];\n\n                var unsafeName = input.fileNameStr;\n                var safeName = utils.resolve(input.fileNameStr);\n\n                zip.file(safeName, input.decompressed, {\n                    binary: true,\n                    optimizedBinaryString: true,\n                    date: input.date,\n                    dir: input.dir,\n                    comment: input.fileCommentStr.length ? input.fileCommentStr : null,\n                    unixPermissions: input.unixPermissions,\n                    dosPermissions: input.dosPermissions,\n                    createFolders: options.createFolders\n                });\n                if (!input.dir) {\n                    zip.file(safeName).unsafeOriginalName = unsafeName;\n                }\n            }\n            if (zipEntries.zipComment.length) {\n                zip.comment = zipEntries.zipComment;\n            }\n\n            return zip;\n        });\n};\n","\"use strict\";\n\n/**\n * Representation a of zip file in js\n * @constructor\n */\nfunction JSZip() {\n    // if this constructor is used without `new`, it adds `new` before itself:\n    if(!(this instanceof JSZip)) {\n        return new JSZip();\n    }\n\n    if(arguments.length) {\n        throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");\n    }\n\n    // object containing the files :\n    // {\n    //   \"folder/\" : {...},\n    //   \"folder/data.txt\" : {...}\n    // }\n    // NOTE: we use a null prototype because we do not\n    // want filenames like \"toString\" coming from a zip file\n    // to overwrite methods and attributes in a normal Object.\n    this.files = Object.create(null);\n\n    this.comment = null;\n\n    // Where we are in the hierarchy\n    this.root = \"\";\n    this.clone = function() {\n        var newObj = new JSZip();\n        for (var i in this) {\n            if (typeof this[i] !== \"function\") {\n                newObj[i] = this[i];\n            }\n        }\n        return newObj;\n    };\n}\nJSZip.prototype = require(\"./object\");\nJSZip.prototype.loadAsync = require(\"./load\");\nJSZip.support = require(\"./support\");\nJSZip.defaults = require(\"./defaults\");\n\n// TODO find a better way to handle this version,\n// a require('package.json').version doesn't work with webpack, see #327\nJSZip.version = \"3.10.1\";\n\nJSZip.loadAsync = function (content, options) {\n    return new JSZip().loadAsync(content, options);\n};\n\nJSZip.external = require(\"./external\");\nmodule.exports = JSZip;\n","/**\n * Helpers.\n */\n\nvar s = 1000;\nvar m = s * 60;\nvar h = m * 60;\nvar d = h * 24;\nvar w = d * 7;\nvar y = d * 365.25;\n\n/**\n * Parse or format the given `val`.\n *\n * Options:\n *\n *  - `long` verbose formatting [false]\n *\n * @param {String|Number} val\n * @param {Object} [options]\n * @throws {Error} throw an error if val is not a non-empty string or a number\n * @return {String|Number}\n * @api public\n */\n\nmodule.exports = function(val, options) {\n  options = options || {};\n  var type = typeof val;\n  if (type === 'string' && val.length > 0) {\n    return parse(val);\n  } else if (type === 'number' && isFinite(val)) {\n    return options.long ? fmtLong(val) : fmtShort(val);\n  }\n  throw new Error(\n    'val is not a non-empty string or a valid number. val=' +\n      JSON.stringify(val)\n  );\n};\n\n/**\n * Parse the given `str` and return milliseconds.\n *\n * @param {String} str\n * @return {Number}\n * @api private\n */\n\nfunction parse(str) {\n  str = String(str);\n  if (str.length > 100) {\n    return;\n  }\n  var match = /^(-?(?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(\n    str\n  );\n  if (!match) {\n    return;\n  }\n  var n = parseFloat(match[1]);\n  var type = (match[2] || 'ms').toLowerCase();\n  switch (type) {\n    case 'years':\n    case 'year':\n    case 'yrs':\n    case 'yr':\n    case 'y':\n      return n * y;\n    case 'weeks':\n    case 'week':\n    case 'w':\n      return n * w;\n    case 'days':\n    case 'day':\n    case 'd':\n      return n * d;\n    case 'hours':\n    case 'hour':\n    case 'hrs':\n    case 'hr':\n    case 'h':\n      return n * h;\n    case 'minutes':\n    case 'minute':\n    case 'mins':\n    case 'min':\n    case 'm':\n      return n * m;\n    case 'seconds':\n    case 'second':\n    case 'secs':\n    case 'sec':\n    case 's':\n      return n * s;\n    case 'milliseconds':\n    case 'millisecond':\n    case 'msecs':\n    case 'msec':\n    case 'ms':\n      return n;\n    default:\n      return undefined;\n  }\n}\n\n/**\n * Short format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtShort(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return Math.round(ms / d) + 'd';\n  }\n  if (msAbs >= h) {\n    return Math.round(ms / h) + 'h';\n  }\n  if (msAbs >= m) {\n    return Math.round(ms / m) + 'm';\n  }\n  if (msAbs >= s) {\n    return Math.round(ms / s) + 's';\n  }\n  return ms + 'ms';\n}\n\n/**\n * Long format for `ms`.\n *\n * @param {Number} ms\n * @return {String}\n * @api private\n */\n\nfunction fmtLong(ms) {\n  var msAbs = Math.abs(ms);\n  if (msAbs >= d) {\n    return plural(ms, msAbs, d, 'day');\n  }\n  if (msAbs >= h) {\n    return plural(ms, msAbs, h, 'hour');\n  }\n  if (msAbs >= m) {\n    return plural(ms, msAbs, m, 'minute');\n  }\n  if (msAbs >= s) {\n    return plural(ms, msAbs, s, 'second');\n  }\n  return ms + ' ms';\n}\n\n/**\n * Pluralization helper.\n */\n\nfunction plural(ms, msAbs, n, name) {\n  var isPlural = msAbs >= n * 1.5;\n  return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');\n}\n","\n/**\n * This is the common logic for both the Node.js and web browser\n * implementations of `debug()`.\n */\n\nfunction setup(env) {\n\tcreateDebug.debug = createDebug;\n\tcreateDebug.default = createDebug;\n\tcreateDebug.coerce = coerce;\n\tcreateDebug.disable = disable;\n\tcreateDebug.enable = enable;\n\tcreateDebug.enabled = enabled;\n\tcreateDebug.humanize = require('ms');\n\tcreateDebug.destroy = destroy;\n\n\tObject.keys(env).forEach(key => {\n\t\tcreateDebug[key] = env[key];\n\t});\n\n\t/**\n\t* The currently active debug mode names, and names to skip.\n\t*/\n\n\tcreateDebug.names = [];\n\tcreateDebug.skips = [];\n\n\t/**\n\t* Map of special \"%n\" handling functions, for the debug \"format\" argument.\n\t*\n\t* Valid key names are a single, lower or upper-case letter, i.e. \"n\" and \"N\".\n\t*/\n\tcreateDebug.formatters = {};\n\n\t/**\n\t* Selects a color for a debug namespace\n\t* @param {String} namespace The namespace string for the debug instance to be colored\n\t* @return {Number|String} An ANSI color code for the given namespace\n\t* @api private\n\t*/\n\tfunction selectColor(namespace) {\n\t\tlet hash = 0;\n\n\t\tfor (let i = 0; i < namespace.length; i++) {\n\t\t\thash = ((hash << 5) - hash) + namespace.charCodeAt(i);\n\t\t\thash |= 0; // Convert to 32bit integer\n\t\t}\n\n\t\treturn createDebug.colors[Math.abs(hash) % createDebug.colors.length];\n\t}\n\tcreateDebug.selectColor = selectColor;\n\n\t/**\n\t* Create a debugger with the given `namespace`.\n\t*\n\t* @param {String} namespace\n\t* @return {Function}\n\t* @api public\n\t*/\n\tfunction createDebug(namespace) {\n\t\tlet prevTime;\n\t\tlet enableOverride = null;\n\t\tlet namespacesCache;\n\t\tlet enabledCache;\n\n\t\tfunction debug(...args) {\n\t\t\t// Disabled?\n\t\t\tif (!debug.enabled) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst self = debug;\n\n\t\t\t// Set `diff` timestamp\n\t\t\tconst curr = Number(new Date());\n\t\t\tconst ms = curr - (prevTime || curr);\n\t\t\tself.diff = ms;\n\t\t\tself.prev = prevTime;\n\t\t\tself.curr = curr;\n\t\t\tprevTime = curr;\n\n\t\t\targs[0] = createDebug.coerce(args[0]);\n\n\t\t\tif (typeof args[0] !== 'string') {\n\t\t\t\t// Anything else let's inspect with %O\n\t\t\t\targs.unshift('%O');\n\t\t\t}\n\n\t\t\t// Apply any `formatters` transformations\n\t\t\tlet index = 0;\n\t\t\targs[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {\n\t\t\t\t// If we encounter an escaped % then don't increase the array index\n\t\t\t\tif (match === '%%') {\n\t\t\t\t\treturn '%';\n\t\t\t\t}\n\t\t\t\tindex++;\n\t\t\t\tconst formatter = createDebug.formatters[format];\n\t\t\t\tif (typeof formatter === 'function') {\n\t\t\t\t\tconst val = args[index];\n\t\t\t\t\tmatch = formatter.call(self, val);\n\n\t\t\t\t\t// Now we need to remove `args[index]` since it's inlined in the `format`\n\t\t\t\t\targs.splice(index, 1);\n\t\t\t\t\tindex--;\n\t\t\t\t}\n\t\t\t\treturn match;\n\t\t\t});\n\n\t\t\t// Apply env-specific formatting (colors, etc.)\n\t\t\tcreateDebug.formatArgs.call(self, args);\n\n\t\t\tconst logFn = self.log || createDebug.log;\n\t\t\tlogFn.apply(self, args);\n\t\t}\n\n\t\tdebug.namespace = namespace;\n\t\tdebug.useColors = createDebug.useColors();\n\t\tdebug.color = createDebug.selectColor(namespace);\n\t\tdebug.extend = extend;\n\t\tdebug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.\n\n\t\tObject.defineProperty(debug, 'enabled', {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: false,\n\t\t\tget: () => {\n\t\t\t\tif (enableOverride !== null) {\n\t\t\t\t\treturn enableOverride;\n\t\t\t\t}\n\t\t\t\tif (namespacesCache !== createDebug.namespaces) {\n\t\t\t\t\tnamespacesCache = createDebug.namespaces;\n\t\t\t\t\tenabledCache = createDebug.enabled(namespace);\n\t\t\t\t}\n\n\t\t\t\treturn enabledCache;\n\t\t\t},\n\t\t\tset: v => {\n\t\t\t\tenableOverride = v;\n\t\t\t}\n\t\t});\n\n\t\t// Env-specific initialization logic for debug instances\n\t\tif (typeof createDebug.init === 'function') {\n\t\t\tcreateDebug.init(debug);\n\t\t}\n\n\t\treturn debug;\n\t}\n\n\tfunction extend(namespace, delimiter) {\n\t\tconst newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);\n\t\tnewDebug.log = this.log;\n\t\treturn newDebug;\n\t}\n\n\t/**\n\t* Enables a debug mode by namespaces. This can include modes\n\t* separated by a colon and wildcards.\n\t*\n\t* @param {String} namespaces\n\t* @api public\n\t*/\n\tfunction enable(namespaces) {\n\t\tcreateDebug.save(namespaces);\n\t\tcreateDebug.namespaces = namespaces;\n\n\t\tcreateDebug.names = [];\n\t\tcreateDebug.skips = [];\n\n\t\tlet i;\n\t\tconst split = (typeof namespaces === 'string' ? namespaces : '').split(/[\\s,]+/);\n\t\tconst len = split.length;\n\n\t\tfor (i = 0; i < len; i++) {\n\t\t\tif (!split[i]) {\n\t\t\t\t// ignore empty strings\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tnamespaces = split[i].replace(/\\*/g, '.*?');\n\n\t\t\tif (namespaces[0] === '-') {\n\t\t\t\tcreateDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));\n\t\t\t} else {\n\t\t\t\tcreateDebug.names.push(new RegExp('^' + namespaces + '$'));\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t* Disable debug output.\n\t*\n\t* @return {String} namespaces\n\t* @api public\n\t*/\n\tfunction disable() {\n\t\tconst namespaces = [\n\t\t\t...createDebug.names.map(toNamespace),\n\t\t\t...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)\n\t\t].join(',');\n\t\tcreateDebug.enable('');\n\t\treturn namespaces;\n\t}\n\n\t/**\n\t* Returns true if the given mode name is enabled, false otherwise.\n\t*\n\t* @param {String} name\n\t* @return {Boolean}\n\t* @api public\n\t*/\n\tfunction enabled(name) {\n\t\tif (name[name.length - 1] === '*') {\n\t\t\treturn true;\n\t\t}\n\n\t\tlet i;\n\t\tlet len;\n\n\t\tfor (i = 0, len = createDebug.skips.length; i < len; i++) {\n\t\t\tif (createDebug.skips[i].test(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tfor (i = 0, len = createDebug.names.length; i < len; i++) {\n\t\t\tif (createDebug.names[i].test(name)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t* Convert regexp to namespace\n\t*\n\t* @param {RegExp} regxep\n\t* @return {String} namespace\n\t* @api private\n\t*/\n\tfunction toNamespace(regexp) {\n\t\treturn regexp.toString()\n\t\t\t.substring(2, regexp.toString().length - 2)\n\t\t\t.replace(/\\.\\*\\?$/, '*');\n\t}\n\n\t/**\n\t* Coerce `val`.\n\t*\n\t* @param {Mixed} val\n\t* @return {Mixed}\n\t* @api private\n\t*/\n\tfunction coerce(val) {\n\t\tif (val instanceof Error) {\n\t\t\treturn val.stack || val.message;\n\t\t}\n\t\treturn val;\n\t}\n\n\t/**\n\t* XXX DO NOT USE. This is a temporary stub function.\n\t* XXX It WILL be removed in the next major release.\n\t*/\n\tfunction destroy() {\n\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t}\n\n\tcreateDebug.enable(createDebug.load());\n\n\treturn createDebug;\n}\n\nmodule.exports = setup;\n","/* eslint-env browser */\n\n/**\n * This is the web browser implementation of `debug()`.\n */\n\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.storage = localstorage();\nexports.destroy = (() => {\n\tlet warned = false;\n\n\treturn () => {\n\t\tif (!warned) {\n\t\t\twarned = true;\n\t\t\tconsole.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');\n\t\t}\n\t};\n})();\n\n/**\n * Colors.\n */\n\nexports.colors = [\n\t'#0000CC',\n\t'#0000FF',\n\t'#0033CC',\n\t'#0033FF',\n\t'#0066CC',\n\t'#0066FF',\n\t'#0099CC',\n\t'#0099FF',\n\t'#00CC00',\n\t'#00CC33',\n\t'#00CC66',\n\t'#00CC99',\n\t'#00CCCC',\n\t'#00CCFF',\n\t'#3300CC',\n\t'#3300FF',\n\t'#3333CC',\n\t'#3333FF',\n\t'#3366CC',\n\t'#3366FF',\n\t'#3399CC',\n\t'#3399FF',\n\t'#33CC00',\n\t'#33CC33',\n\t'#33CC66',\n\t'#33CC99',\n\t'#33CCCC',\n\t'#33CCFF',\n\t'#6600CC',\n\t'#6600FF',\n\t'#6633CC',\n\t'#6633FF',\n\t'#66CC00',\n\t'#66CC33',\n\t'#9900CC',\n\t'#9900FF',\n\t'#9933CC',\n\t'#9933FF',\n\t'#99CC00',\n\t'#99CC33',\n\t'#CC0000',\n\t'#CC0033',\n\t'#CC0066',\n\t'#CC0099',\n\t'#CC00CC',\n\t'#CC00FF',\n\t'#CC3300',\n\t'#CC3333',\n\t'#CC3366',\n\t'#CC3399',\n\t'#CC33CC',\n\t'#CC33FF',\n\t'#CC6600',\n\t'#CC6633',\n\t'#CC9900',\n\t'#CC9933',\n\t'#CCCC00',\n\t'#CCCC33',\n\t'#FF0000',\n\t'#FF0033',\n\t'#FF0066',\n\t'#FF0099',\n\t'#FF00CC',\n\t'#FF00FF',\n\t'#FF3300',\n\t'#FF3333',\n\t'#FF3366',\n\t'#FF3399',\n\t'#FF33CC',\n\t'#FF33FF',\n\t'#FF6600',\n\t'#FF6633',\n\t'#FF9900',\n\t'#FF9933',\n\t'#FFCC00',\n\t'#FFCC33'\n];\n\n/**\n * Currently only WebKit-based Web Inspectors, Firefox >= v31,\n * and the Firebug extension (any Firefox version) are known\n * to support \"%c\" CSS customizations.\n *\n * TODO: add a `localStorage` variable to explicitly enable/disable colors\n */\n\n// eslint-disable-next-line complexity\nfunction useColors() {\n\t// NB: In an Electron preload script, document will be defined but not fully\n\t// initialized. Since we know we're in Chrome, we'll just detect this case\n\t// explicitly\n\tif (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {\n\t\treturn true;\n\t}\n\n\t// Internet Explorer and Edge do not support colors.\n\tif (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)) {\n\t\treturn false;\n\t}\n\n\t// Is webkit? http://stackoverflow.com/a/16459606/376773\n\t// document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n\treturn (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||\n\t\t// Is firebug? http://stackoverflow.com/a/398120/376773\n\t\t(typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||\n\t\t// Is firefox >= v31?\n\t\t// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||\n\t\t// Double check webkit in userAgent just in case we are in a worker\n\t\t(typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/));\n}\n\n/**\n * Colorize log arguments if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\targs[0] = (this.useColors ? '%c' : '') +\n\t\tthis.namespace +\n\t\t(this.useColors ? ' %c' : ' ') +\n\t\targs[0] +\n\t\t(this.useColors ? '%c ' : ' ') +\n\t\t'+' + module.exports.humanize(this.diff);\n\n\tif (!this.useColors) {\n\t\treturn;\n\t}\n\n\tconst c = 'color: ' + this.color;\n\targs.splice(1, 0, c, 'color: inherit');\n\n\t// The final \"%c\" is somewhat tricky, because there could be other\n\t// arguments passed either before or after the %c, so we need to\n\t// figure out the correct index to insert the CSS into\n\tlet index = 0;\n\tlet lastC = 0;\n\targs[0].replace(/%[a-zA-Z%]/g, match => {\n\t\tif (match === '%%') {\n\t\t\treturn;\n\t\t}\n\t\tindex++;\n\t\tif (match === '%c') {\n\t\t\t// We only are interested in the *last* %c\n\t\t\t// (the user may have provided their own)\n\t\t\tlastC = index;\n\t\t}\n\t});\n\n\targs.splice(lastC, 0, c);\n}\n\n/**\n * Invokes `console.debug()` when available.\n * No-op when `console.debug` is not a \"function\".\n * If `console.debug` is not available, falls back\n * to `console.log`.\n *\n * @api public\n */\nexports.log = console.debug || console.log || (() => {});\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\ttry {\n\t\tif (namespaces) {\n\t\t\texports.storage.setItem('debug', namespaces);\n\t\t} else {\n\t\t\texports.storage.removeItem('debug');\n\t\t}\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\nfunction load() {\n\tlet r;\n\ttry {\n\t\tr = exports.storage.getItem('debug');\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n\n\t// If debug isn't set in LS, and we're in Electron, try to load $DEBUG\n\tif (!r && typeof process !== 'undefined' && 'env' in process) {\n\t\tr = process.env.DEBUG;\n\t}\n\n\treturn r;\n}\n\n/**\n * Localstorage attempts to return the localstorage.\n *\n * This is necessary because safari throws\n * when a user disables cookies/localstorage\n * and you attempt to access it.\n *\n * @return {LocalStorage}\n * @api private\n */\n\nfunction localstorage() {\n\ttry {\n\t\t// TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context\n\t\t// The Browser also has localStorage in the global context.\n\t\treturn localStorage;\n\t} catch (error) {\n\t\t// Swallow\n\t\t// XXX (@Qix-) should we be logging these?\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.\n */\n\nformatters.j = function (v) {\n\ttry {\n\t\treturn JSON.stringify(v);\n\t} catch (error) {\n\t\treturn '[UnexpectedJSONParseError]: ' + error.message;\n\t}\n};\n","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet forceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tforceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tforceColor = 1;\n}\n\nif ('FORCE_COLOR' in env) {\n\tif (env.FORCE_COLOR === 'true') {\n\t\tforceColor = 1;\n\t} else if (env.FORCE_COLOR === 'false') {\n\t\tforceColor = 0;\n\t} else {\n\t\tforceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, streamIsTTY) {\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (hasFlag('color=16m') ||\n\t\thasFlag('color=full') ||\n\t\thasFlag('color=truecolor')) {\n\t\treturn 3;\n\t}\n\n\tif (hasFlag('color=256')) {\n\t\treturn 2;\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream) {\n\tconst level = supportsColor(stream, stream && stream.isTTY);\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: translateLevel(supportsColor(true, tty.isatty(1))),\n\tstderr: translateLevel(supportsColor(true, tty.isatty(2)))\n};\n","/**\n * Module dependencies.\n */\n\nconst tty = require('tty');\nconst util = require('util');\n\n/**\n * This is the Node.js implementation of `debug()`.\n */\n\nexports.init = init;\nexports.log = log;\nexports.formatArgs = formatArgs;\nexports.save = save;\nexports.load = load;\nexports.useColors = useColors;\nexports.destroy = util.deprecate(\n\t() => {},\n\t'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'\n);\n\n/**\n * Colors.\n */\n\nexports.colors = [6, 2, 3, 4, 5, 1];\n\ntry {\n\t// Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)\n\t// eslint-disable-next-line import/no-extraneous-dependencies\n\tconst supportsColor = require('supports-color');\n\n\tif (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {\n\t\texports.colors = [\n\t\t\t20,\n\t\t\t21,\n\t\t\t26,\n\t\t\t27,\n\t\t\t32,\n\t\t\t33,\n\t\t\t38,\n\t\t\t39,\n\t\t\t40,\n\t\t\t41,\n\t\t\t42,\n\t\t\t43,\n\t\t\t44,\n\t\t\t45,\n\t\t\t56,\n\t\t\t57,\n\t\t\t62,\n\t\t\t63,\n\t\t\t68,\n\t\t\t69,\n\t\t\t74,\n\t\t\t75,\n\t\t\t76,\n\t\t\t77,\n\t\t\t78,\n\t\t\t79,\n\t\t\t80,\n\t\t\t81,\n\t\t\t92,\n\t\t\t93,\n\t\t\t98,\n\t\t\t99,\n\t\t\t112,\n\t\t\t113,\n\t\t\t128,\n\t\t\t129,\n\t\t\t134,\n\t\t\t135,\n\t\t\t148,\n\t\t\t149,\n\t\t\t160,\n\t\t\t161,\n\t\t\t162,\n\t\t\t163,\n\t\t\t164,\n\t\t\t165,\n\t\t\t166,\n\t\t\t167,\n\t\t\t168,\n\t\t\t169,\n\t\t\t170,\n\t\t\t171,\n\t\t\t172,\n\t\t\t173,\n\t\t\t178,\n\t\t\t179,\n\t\t\t184,\n\t\t\t185,\n\t\t\t196,\n\t\t\t197,\n\t\t\t198,\n\t\t\t199,\n\t\t\t200,\n\t\t\t201,\n\t\t\t202,\n\t\t\t203,\n\t\t\t204,\n\t\t\t205,\n\t\t\t206,\n\t\t\t207,\n\t\t\t208,\n\t\t\t209,\n\t\t\t214,\n\t\t\t215,\n\t\t\t220,\n\t\t\t221\n\t\t];\n\t}\n} catch (error) {\n\t// Swallow - we only care if `supports-color` is available; it doesn't have to be.\n}\n\n/**\n * Build up the default `inspectOpts` object from the environment variables.\n *\n *   $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js\n */\n\nexports.inspectOpts = Object.keys(process.env).filter(key => {\n\treturn /^debug_/i.test(key);\n}).reduce((obj, key) => {\n\t// Camel-case\n\tconst prop = key\n\t\t.substring(6)\n\t\t.toLowerCase()\n\t\t.replace(/_([a-z])/g, (_, k) => {\n\t\t\treturn k.toUpperCase();\n\t\t});\n\n\t// Coerce string value into JS value\n\tlet val = process.env[key];\n\tif (/^(yes|on|true|enabled)$/i.test(val)) {\n\t\tval = true;\n\t} else if (/^(no|off|false|disabled)$/i.test(val)) {\n\t\tval = false;\n\t} else if (val === 'null') {\n\t\tval = null;\n\t} else {\n\t\tval = Number(val);\n\t}\n\n\tobj[prop] = val;\n\treturn obj;\n}, {});\n\n/**\n * Is stdout a TTY? Colored output is enabled when `true`.\n */\n\nfunction useColors() {\n\treturn 'colors' in exports.inspectOpts ?\n\t\tBoolean(exports.inspectOpts.colors) :\n\t\ttty.isatty(process.stderr.fd);\n}\n\n/**\n * Adds ANSI color escape codes if enabled.\n *\n * @api public\n */\n\nfunction formatArgs(args) {\n\tconst {namespace: name, useColors} = this;\n\n\tif (useColors) {\n\t\tconst c = this.color;\n\t\tconst colorCode = '\\u001B[3' + (c < 8 ? c : '8;5;' + c);\n\t\tconst prefix = `  ${colorCode};1m${name} \\u001B[0m`;\n\n\t\targs[0] = prefix + args[0].split('\\n').join('\\n' + prefix);\n\t\targs.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\\u001B[0m');\n\t} else {\n\t\targs[0] = getDate() + name + ' ' + args[0];\n\t}\n}\n\nfunction getDate() {\n\tif (exports.inspectOpts.hideDate) {\n\t\treturn '';\n\t}\n\treturn new Date().toISOString() + ' ';\n}\n\n/**\n * Invokes `util.format()` with the specified arguments and writes to stderr.\n */\n\nfunction log(...args) {\n\treturn process.stderr.write(util.format(...args) + '\\n');\n}\n\n/**\n * Save `namespaces`.\n *\n * @param {String} namespaces\n * @api private\n */\nfunction save(namespaces) {\n\tif (namespaces) {\n\t\tprocess.env.DEBUG = namespaces;\n\t} else {\n\t\t// If you set a process.env field to null or undefined, it gets cast to the\n\t\t// string 'null' or 'undefined'. Just delete instead.\n\t\tdelete process.env.DEBUG;\n\t}\n}\n\n/**\n * Load `namespaces`.\n *\n * @return {String} returns the previously persisted debug modes\n * @api private\n */\n\nfunction load() {\n\treturn process.env.DEBUG;\n}\n\n/**\n * Init logic for `debug` instances.\n *\n * Create a new `inspectOpts` object in case `useColors` is set\n * differently for a particular `debug` instance.\n */\n\nfunction init(debug) {\n\tdebug.inspectOpts = {};\n\n\tconst keys = Object.keys(exports.inspectOpts);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tdebug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];\n\t}\n}\n\nmodule.exports = require('./common')(exports);\n\nconst {formatters} = module.exports;\n\n/**\n * Map %o to `util.inspect()`, all on a single line.\n */\n\nformatters.o = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts)\n\t\t.split('\\n')\n\t\t.map(str => str.trim())\n\t\t.join(' ');\n};\n\n/**\n * Map %O to `util.inspect()`, allowing multiple lines if needed.\n */\n\nformatters.O = function (v) {\n\tthis.inspectOpts.colors = this.useColors;\n\treturn util.inspect(v, this.inspectOpts);\n};\n","/**\n * Detect Electron renderer / nwjs process, which is node, but we should\n * treat as a browser.\n */\n\nif (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {\n\tmodule.exports = require('./browser.js');\n} else {\n\tmodule.exports = require('./node.js');\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Used to reject read if end-of-Stream or end-of-file is reached\n * @type {Error}\n */\nexports.endOfFile = \"End-Of-File\";\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst type_1 = require(\"./type\");\nclass AbstractTokenizer {\n    constructor() {\n        this.position = 0;\n        this.numBuffer = Buffer.alloc(4);\n    }\n    readToken(token, position = null, maybeless) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const buffer = Buffer.alloc(token.len);\n            const len = yield this.readBuffer(buffer, 0, token.len, position);\n            if (!maybeless && len < token.len)\n                throw new Error(type_1.endOfFile);\n            return token.get(buffer, 0);\n        });\n    }\n    peekToken(token, position = this.position, maybeless) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const buffer = Buffer.alloc(token.len);\n            const len = yield this.peekBuffer(buffer, 0, token.len, position);\n            if (!maybeless && len < token.len)\n                throw new Error(type_1.endOfFile);\n            return token.get(buffer, 0);\n        });\n    }\n    readNumber(token) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const len = yield this.readBuffer(this.numBuffer, 0, token.len, null);\n            if (len < token.len)\n                throw new Error(type_1.endOfFile);\n            return token.get(this.numBuffer, 0);\n        });\n    }\n    peekNumber(token) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const len = yield this.peekBuffer(this.numBuffer, 0, token.len);\n            if (len < token.len)\n                throw new Error(type_1.endOfFile);\n            return token.get(this.numBuffer, 0);\n        });\n    }\n    close() {\n        return __awaiter(this, void 0, void 0, function* () {\n            // empty\n        });\n    }\n}\nexports.AbstractTokenizer = AbstractTokenizer;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst assert = require(\"assert\");\nclass Deferred {\n    constructor() {\n        this.promise = new Promise((resolve, reject) => {\n            this.reject = reject;\n            this.resolve = resolve;\n        });\n    }\n}\n/**\n * Error message\n */\nexports.endOfStream = 'End-Of-Stream';\nclass StreamReader {\n    constructor(s) {\n        this.s = s;\n        this.endOfStream = false;\n        /**\n         * Store peeked data\n         * @type {Array}\n         */\n        this.peekQueue = [];\n        if (!s.read || !s.once) {\n            throw new Error('Expected an instance of stream.Readable');\n        }\n        this.s.once('end', () => this.reject(new Error(exports.endOfStream)));\n        this.s.once('error', err => this.reject(err));\n        this.s.once('close', () => this.reject(new Error('Stream closed')));\n    }\n    /**\n     * Read ahead (peek) from stream. Subsequent read or peeks will return the same data\n     * @param buffer Buffer to store data read from stream in\n     * @param offset Offset buffer\n     * @param length Number of bytes to read\n     * @param position Source offset\n     * @returns {any}\n     */\n    peek(buffer, offset, length) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const bytesRead = yield this.read(buffer, offset, length);\n            this.peekQueue.push(buffer.slice(offset, offset + bytesRead)); // Put read data back to peek buffer\n            return bytesRead;\n        });\n    }\n    /**\n     * Read chunk from stream\n     * @param buffer Target buffer to store data read from stream in\n     * @param offset Offset of target buffer\n     * @param length Number of bytes to read\n     * @returns {any}\n     */\n    read(buffer, offset, length) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (length === 0) {\n                return 0;\n            }\n            if (this.peekQueue.length === 0 && this.endOfStream) {\n                throw new Error(exports.endOfStream);\n            }\n            let remaining = length;\n            let bytesRead = 0;\n            // consume peeked data first\n            while (this.peekQueue.length > 0 && remaining > 0) {\n                const peekData = this.peekQueue.pop(); // Front of queue\n                const lenCopy = Math.min(peekData.length, remaining);\n                peekData.copy(buffer, offset + bytesRead, 0, lenCopy);\n                bytesRead += lenCopy;\n                remaining -= lenCopy;\n                if (lenCopy < peekData.length) {\n                    // remainder back to queue\n                    this.peekQueue.push(peekData.slice(lenCopy));\n                }\n            }\n            // continue reading from stream if required\n            if (remaining > 0 && !this.endOfStream) {\n                bytesRead += yield this._read(buffer, offset + bytesRead, remaining);\n            }\n            return bytesRead;\n        });\n    }\n    /**\n     * Read chunk from stream\n     * @param buffer Buffer to store data read from stream in\n     * @param offset Offset buffer\n     * @param length Number of bytes to read\n     * @returns {any}\n     */\n    _read(buffer, offset, length) {\n        return __awaiter(this, void 0, void 0, function* () {\n            assert.ok(!this.request, 'Concurrent read operation?');\n            const readBuffer = this.s.read(length);\n            if (readBuffer) {\n                readBuffer.copy(buffer, offset);\n                return readBuffer.length;\n            }\n            else {\n                this.request = {\n                    buffer,\n                    offset,\n                    length,\n                    deferred: new Deferred()\n                };\n                this.s.once('readable', () => {\n                    this.tryRead();\n                });\n                return this.request.deferred.promise.then(n => {\n                    this.request = null;\n                    return n;\n                }).catch(err => {\n                    this.request = null;\n                    throw err;\n                });\n            }\n        });\n    }\n    tryRead() {\n        const readBuffer = this.s.read(this.request.length);\n        if (readBuffer) {\n            readBuffer.copy(this.request.buffer, this.request.offset);\n            this.request.deferred.resolve(readBuffer.length);\n        }\n        else {\n            this.s.once('readable', () => {\n                this.tryRead();\n            });\n        }\n    }\n    reject(err) {\n        this.endOfStream = true;\n        if (this.request) {\n            this.request.deferred.reject(err);\n            this.request = null;\n        }\n    }\n}\nexports.StreamReader = StreamReader;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst AbstractTokenizer_1 = require(\"./AbstractTokenizer\");\nconst type_1 = require(\"./type\");\nconst then_read_stream_1 = require(\"then-read-stream\");\nconst _debug = require(\"debug\");\nconst debug = _debug('strtok3:ReadStreamTokenizer');\nclass ReadStreamTokenizer extends AbstractTokenizer_1.AbstractTokenizer {\n    constructor(stream, fileSize) {\n        super();\n        this.streamReader = new then_read_stream_1.StreamReader(stream);\n        this.fileSize = fileSize;\n    }\n    /**\n     * Read buffer from stream\n     * @param buffer\n     * @param offset is the offset in the buffer to start writing at; if not provided, start at 0\n     * @param length is an integer specifying the number of bytes to read\n     * @returns Promise number of bytes read\n     */\n    readBuffer(buffer, offset = 0, length = buffer.length, position) {\n        return __awaiter(this, void 0, void 0, function* () {\n            // const _offset = position ? position : this.position;\n            // debug(`readBuffer ${_offset}...${_offset + length - 1}`);\n            if (length === 0) {\n                return 0;\n            }\n            if (position) {\n                const skipBytes = position - this.position;\n                if (skipBytes > 0) {\n                    yield this.ignore(position - this.position);\n                    return this.readBuffer(buffer, offset, length);\n                }\n                else if (skipBytes < 0) {\n                    throw new Error('Cannot read from a negative offset in a stream');\n                }\n            }\n            let bytesRead;\n            try {\n                bytesRead = yield this.streamReader.read(buffer, offset, length);\n                this.position += bytesRead;\n            }\n            catch (err) {\n                if (err.message === then_read_stream_1.endOfStream) // Convert EndOfStream into EndOfFile\n                    throw new Error(type_1.endOfFile);\n                else\n                    throw err;\n            }\n            if (bytesRead < length) {\n                throw new Error(type_1.endOfFile);\n            }\n            return bytesRead;\n        });\n    }\n    /**\n     * Peek (read ahead) buffer from tokenizer\n     * @param buffer\n     * @param offset is the offset in the buffer to start writing at; if not provided, start at 0\n     * @param length is an integer specifying the number of bytes to read\n     * @param position is an integer specifying where to begin reading from in the file. If position is null, data will be read from the current file position.\n     * @param maybeless If set, will not throw an EOF error if the less then the requested length could be read\n     * @returns {Promise<number>}\n     */\n    peekBuffer(buffer, offset = 0, length = buffer.length, position, maybeless) {\n        return __awaiter(this, void 0, void 0, function* () {\n            // const _offset = position ? position : this.position;\n            // debug(`peek ${_offset}...${_offset + length - 1}`);\n            let bytesRead;\n            if (position) {\n                const skipBytes = position - this.position;\n                if (skipBytes > 0) {\n                    const skipBuffer = Buffer.alloc(length + skipBytes);\n                    bytesRead = yield this.peekBuffer(skipBuffer, 0, skipBytes + length, undefined, maybeless);\n                    skipBuffer.copy(buffer, offset, skipBytes);\n                    return bytesRead - skipBytes;\n                }\n                else if (skipBytes < 0) {\n                    throw new Error('Cannot peek from a negative offset in a stream');\n                }\n            }\n            try {\n                bytesRead = yield this.streamReader.peek(buffer, offset, length);\n            }\n            catch (err) {\n                if (err.message === then_read_stream_1.endOfStream) // Convert EndOfStream into EndOfFile\n                    throw new Error(type_1.endOfFile);\n                else\n                    throw err;\n            }\n            if (!maybeless && bytesRead < length) {\n                throw new Error(type_1.endOfFile);\n            }\n            return bytesRead;\n        });\n    }\n    ignore(length) {\n        return __awaiter(this, void 0, void 0, function* () {\n            debug(`ignore ${this.position}...${this.position + length - 1}`);\n            // debug(`Ignore ${length} bytes in a stream`);\n            const buf = Buffer.alloc(length);\n            return this.readBuffer(buf); // Stream cannot skip data\n        });\n    }\n}\nexports.ReadStreamTokenizer = ReadStreamTokenizer;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst type_1 = require(\"./type\");\nclass BufferTokenizer {\n    constructor(buffer) {\n        this.buffer = buffer;\n        this.position = 0;\n        this.fileSize = buffer.length;\n    }\n    /**\n     * Read buffer from tokenizer\n     * @param buffer\n     * @param offset is the offset in the buffer to start writing at; if not provided, start at 0\n     * @param length is an integer specifying the number of bytes to read\n     * @param position is an integer specifying where to begin reading from in the file. If position is null, data will be read from the current file position.\n     * @returns {Promise<TResult|number>}\n     */\n    readBuffer(buffer, offset, length, position) {\n        return __awaiter(this, void 0, void 0, function* () {\n            this.position = position || this.position;\n            return this.peekBuffer(buffer, offset, length, this.position).then(bytesRead => {\n                this.position += bytesRead;\n                return bytesRead;\n            });\n        });\n    }\n    /**\n     * Peek (read ahead) buffer from tokenizer\n     * @param buffer\n     * @param offset is the offset in the buffer to start writing at; if not provided, start at 0\n     * @param length is an integer specifying the number of bytes to read\n     * @param position is an integer specifying where to begin reading from in the file. If position is null, data will be read from the current file position.\n     * @param maybeLess If true, will return the bytes available if available bytes is less then length.\n     * @returns {Promise<TResult|number>}\n     */\n    peekBuffer(buffer, offset, length, position, maybeLess = false) {\n        return __awaiter(this, void 0, void 0, function* () {\n            position = position || this.position;\n            if (!length) {\n                length = buffer.length;\n            }\n            const bytes2read = Math.min(this.buffer.length - position, length);\n            if (!maybeLess && bytes2read < length) {\n                throw new Error(type_1.endOfFile);\n            }\n            else {\n                this.buffer.copy(buffer, offset, position, position + bytes2read);\n                return bytes2read;\n            }\n        });\n    }\n    readToken(token, position) {\n        return __awaiter(this, void 0, void 0, function* () {\n            this.position = position || this.position;\n            try {\n                const tv = this.peekToken(token, this.position);\n                this.position += token.len;\n                return tv;\n            }\n            catch (err) {\n                this.position += this.buffer.length - position;\n                throw err;\n            }\n        });\n    }\n    peekToken(token, position = this.position) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (this.buffer.length - position < token.len) {\n                throw new Error(type_1.endOfFile);\n            }\n            return token.get(this.buffer, position);\n        });\n    }\n    readNumber(token) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.readToken(token);\n        });\n    }\n    peekNumber(token) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return this.peekToken(token);\n        });\n    }\n    /**\n     * @return actual number of bytes ignored\n     */\n    ignore(length) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const bytesIgnored = Math.min(this.buffer.length - this.position, length);\n            this.position += bytesIgnored;\n            return bytesIgnored;\n        });\n    }\n    close() {\n        return __awaiter(this, void 0, void 0, function* () {\n            // empty\n        });\n    }\n}\nexports.BufferTokenizer = BufferTokenizer;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ReadStreamTokenizer_1 = require(\"./ReadStreamTokenizer\");\nconst BufferTokenizer_1 = require(\"./BufferTokenizer\");\n/**\n * Construct ReadStreamTokenizer from given Stream.\n * Will set fileSize, if provided given Stream has set the .path property/\n * @param stream Stream.Readable\n * @param size If known the 'file' size in bytes, maybe required to calculate the duration.\n * @returns ReadStreamTokenizer\n */\nfunction fromStream(stream, size) {\n    return new ReadStreamTokenizer_1.ReadStreamTokenizer(stream, size);\n}\nexports.fromStream = fromStream;\n/**\n * Construct ReadStreamTokenizer from given Buffer.\n * @param buffer Buffer to tokenize\n * @returns BufferTokenizer\n */\nfunction fromBuffer(buffer) {\n    return new BufferTokenizer_1.BufferTokenizer(buffer);\n}\nexports.fromBuffer = fromBuffer;\n","'use strict';\n\nexports.stringToBytes = string => [...string].map(character => character.charCodeAt(0));\n\nconst uint8ArrayUtf8ByteString = (array, start, end) => {\n\treturn String.fromCharCode(...array.slice(start, end));\n};\n\nexports.readUInt64LE = (buffer, offset = 0) => {\n\tlet n = buffer[offset];\n\tlet mul = 1;\n\tlet i = 0;\n\n\twhile (++i < 8) {\n\t\tmul *= 0x100;\n\t\tn += buffer[offset + i] * mul;\n\t}\n\n\treturn n;\n};\n\nexports.tarHeaderChecksumMatches = buffer => { // Does not check if checksum field characters are valid\n\tif (buffer.length < 512) { // `tar` header size, cannot compute checksum without it\n\t\treturn false;\n\t}\n\n\tconst MASK_8TH_BIT = 0x80;\n\n\tlet sum = 256; // Intitalize sum, with 256 as sum of 8 spaces in checksum field\n\tlet signedBitSum = 0; // Initialize signed bit sum\n\n\tfor (let i = 0; i < 148; i++) {\n\t\tconst byte = buffer[i];\n\t\tsum += byte;\n\t\tsignedBitSum += byte & MASK_8TH_BIT; // Add signed bit to signed bit sum\n\t}\n\n\t// Skip checksum field\n\n\tfor (let i = 156; i < 512; i++) {\n\t\tconst byte = buffer[i];\n\t\tsum += byte;\n\t\tsignedBitSum += byte & MASK_8TH_BIT; // Add signed bit to signed bit sum\n\t}\n\n\tconst readSum = parseInt(uint8ArrayUtf8ByteString(buffer, 148, 154), 8); // Read sum in header\n\n\t// Some implementations compute checksum incorrectly using signed bytes\n\treturn (\n\t\t// Checksum in header equals the sum we calculated\n\t\treadSum === sum ||\n\n\t\t// Checksum in header equals sum we calculated plus signed-to-unsigned delta\n\t\treadSum === (sum - (signedBitSum << 1))\n\t);\n};\n\nexports.uint8ArrayUtf8ByteString = uint8ArrayUtf8ByteString;\n","'use strict';\nconst {stringToBytes, readUInt64LE, tarHeaderChecksumMatches, uint8ArrayUtf8ByteString} = require('./util');\n\nconst xpiZipFilename = stringToBytes('META-INF/mozilla.rsa');\nconst oxmlContentTypes = stringToBytes('[Content_Types].xml');\nconst oxmlRels = stringToBytes('_rels/.rels');\n\nconst fileType = input => {\n\tif (!(input instanceof Uint8Array || input instanceof ArrayBuffer || Buffer.isBuffer(input))) {\n\t\tthrow new TypeError(`Expected the \\`input\\` argument to be of type \\`Uint8Array\\` or \\`Buffer\\` or \\`ArrayBuffer\\`, got \\`${typeof input}\\``);\n\t}\n\n\tconst buffer = input instanceof Uint8Array ? input : new Uint8Array(input);\n\n\tif (!(buffer && buffer.length > 1)) {\n\t\treturn;\n\t}\n\n\tconst check = (header, options) => {\n\t\toptions = Object.assign({\n\t\t\toffset: 0\n\t\t}, options);\n\n\t\tfor (let i = 0; i < header.length; i++) {\n\t\t\t// If a bitmask is set\n\t\t\tif (options.mask) {\n\t\t\t\t// If header doesn't equal `buf` with bits masked off\n\t\t\t\tif (header[i] !== (options.mask[i] & buffer[i + options.offset])) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else if (header[i] !== buffer[i + options.offset]) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t};\n\n\tconst checkString = (header, options) => check(stringToBytes(header), options);\n\n\tif (check([0xFF, 0xD8, 0xFF])) {\n\t\treturn {\n\t\t\text: 'jpg',\n\t\t\tmime: 'image/jpeg'\n\t\t};\n\t}\n\n\tif (check([0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\treturn {\n\t\t\text: 'png',\n\t\t\tmime: 'image/png'\n\t\t};\n\t}\n\n\tif (check([0x47, 0x49, 0x46])) {\n\t\treturn {\n\t\t\text: 'gif',\n\t\t\tmime: 'image/gif'\n\t\t};\n\t}\n\n\tif (check([0x57, 0x45, 0x42, 0x50], {offset: 8})) {\n\t\treturn {\n\t\t\text: 'webp',\n\t\t\tmime: 'image/webp'\n\t\t};\n\t}\n\n\tif (check([0x46, 0x4C, 0x49, 0x46])) {\n\t\treturn {\n\t\t\text: 'flif',\n\t\t\tmime: 'image/flif'\n\t\t};\n\t}\n\n\t// `cr2`, `orf`, and `arw` need to be before `tif` check\n\tif (\n\t\t(check([0x49, 0x49, 0x2A, 0x0]) || check([0x4D, 0x4D, 0x0, 0x2A])) &&\n\t\tcheck([0x43, 0x52], {offset: 8})\n\t) {\n\t\treturn {\n\t\t\text: 'cr2',\n\t\t\tmime: 'image/x-canon-cr2'\n\t\t};\n\t}\n\n\tif (check([0x49, 0x49, 0x52, 0x4F, 0x08, 0x00, 0x00, 0x00, 0x18])) {\n\t\treturn {\n\t\t\text: 'orf',\n\t\t\tmime: 'image/x-olympus-orf'\n\t\t};\n\t}\n\n\tif (check([0x49, 0x49, 0x2A, 0x00, 0x10, 0xFB, 0x86, 0x01])) {\n\t\treturn {\n\t\t\text: 'arw',\n\t\t\tmime: 'image/x-sony-arw'\n\t\t};\n\t}\n\n\tif (check([0x49, 0x49, 0x2A, 0x00, 0x08, 0x00, 0x00, 0x00, 0x2D])) {\n\t\treturn {\n\t\t\text: 'dng',\n\t\t\tmime: 'image/x-adobe-dng'\n\t\t};\n\t}\n\n\tif (check([0x49, 0x49, 0x2A, 0x00, 0x30, 0x3D, 0x72, 0x01, 0x1C])) {\n\t\treturn {\n\t\t\text: 'nef',\n\t\t\tmime: 'image/x-nikon-nef'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x49, 0x49, 0x2A, 0x0]) ||\n\t\tcheck([0x4D, 0x4D, 0x0, 0x2A])\n\t) {\n\t\treturn {\n\t\t\text: 'tif',\n\t\t\tmime: 'image/tiff'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4D])) {\n\t\treturn {\n\t\t\text: 'bmp',\n\t\t\tmime: 'image/bmp'\n\t\t};\n\t}\n\n\tif (check([0x49, 0x49, 0xBC])) {\n\t\treturn {\n\t\t\text: 'jxr',\n\t\t\tmime: 'image/vnd.ms-photo'\n\t\t};\n\t}\n\n\tif (check([0x38, 0x42, 0x50, 0x53])) {\n\t\treturn {\n\t\t\text: 'psd',\n\t\t\tmime: 'image/vnd.adobe.photoshop'\n\t\t};\n\t}\n\n\t// Zip-based file formats\n\t// Need to be before the `zip` check\n\tif (check([0x50, 0x4B, 0x3, 0x4])) {\n\t\tif (\n\t\t\tcheck([0x6D, 0x69, 0x6D, 0x65, 0x74, 0x79, 0x70, 0x65, 0x61, 0x70, 0x70, 0x6C, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x2F, 0x65, 0x70, 0x75, 0x62, 0x2B, 0x7A, 0x69, 0x70], {offset: 30})\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'epub',\n\t\t\t\tmime: 'application/epub+zip'\n\t\t\t};\n\t\t}\n\n\t\t// Assumes signed `.xpi` from addons.mozilla.org\n\t\tif (check(xpiZipFilename, {offset: 30})) {\n\t\t\treturn {\n\t\t\t\text: 'xpi',\n\t\t\t\tmime: 'application/x-xpinstall'\n\t\t\t};\n\t\t}\n\n\t\tif (checkString('mimetypeapplication/vnd.oasis.opendocument.text', {offset: 30})) {\n\t\t\treturn {\n\t\t\t\text: 'odt',\n\t\t\t\tmime: 'application/vnd.oasis.opendocument.text'\n\t\t\t};\n\t\t}\n\n\t\tif (checkString('mimetypeapplication/vnd.oasis.opendocument.spreadsheet', {offset: 30})) {\n\t\t\treturn {\n\t\t\t\text: 'ods',\n\t\t\t\tmime: 'application/vnd.oasis.opendocument.spreadsheet'\n\t\t\t};\n\t\t}\n\n\t\tif (checkString('mimetypeapplication/vnd.oasis.opendocument.presentation', {offset: 30})) {\n\t\t\treturn {\n\t\t\t\text: 'odp',\n\t\t\t\tmime: 'application/vnd.oasis.opendocument.presentation'\n\t\t\t};\n\t\t}\n\n\t\t// The docx, xlsx and pptx file types extend the Office Open XML file format:\n\t\t// https://en.wikipedia.org/wiki/Office_Open_XML_file_formats\n\t\t// We look for:\n\t\t// - one entry named '[Content_Types].xml' or '_rels/.rels',\n\t\t// - one entry indicating specific type of file.\n\t\t// MS Office, OpenOffice and LibreOffice may put the parts in different order, so the check should not rely on it.\n\t\tconst findNextZipHeaderIndex = (arr, startAt = 0) => arr.findIndex((el, i, arr) => i >= startAt && arr[i] === 0x50 && arr[i + 1] === 0x4B && arr[i + 2] === 0x3 && arr[i + 3] === 0x4);\n\n\t\tlet zipHeaderIndex = 0; // The first zip header was already found at index 0\n\t\tlet oxmlFound = false;\n\t\tlet type;\n\n\t\tdo {\n\t\t\tconst offset = zipHeaderIndex + 30;\n\n\t\t\tif (!oxmlFound) {\n\t\t\t\toxmlFound = (check(oxmlContentTypes, {offset}) || check(oxmlRels, {offset}));\n\t\t\t}\n\n\t\t\tif (!type) {\n\t\t\t\tif (checkString('word/', {offset})) {\n\t\t\t\t\ttype = {\n\t\t\t\t\t\text: 'docx',\n\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'\n\t\t\t\t\t};\n\t\t\t\t} else if (checkString('ppt/', {offset})) {\n\t\t\t\t\ttype = {\n\t\t\t\t\t\text: 'pptx',\n\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.presentationml.presentation'\n\t\t\t\t\t};\n\t\t\t\t} else if (checkString('xl/', {offset})) {\n\t\t\t\t\ttype = {\n\t\t\t\t\t\text: 'xlsx',\n\t\t\t\t\t\tmime: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (oxmlFound && type) {\n\t\t\t\treturn type;\n\t\t\t}\n\n\t\t\tzipHeaderIndex = findNextZipHeaderIndex(buffer, offset);\n\t\t} while (zipHeaderIndex >= 0);\n\n\t\t// No more zip parts available in the buffer, but maybe we are almost certain about the type?\n\t\tif (type) {\n\t\t\treturn type;\n\t\t}\n\t}\n\n\tif (\n\t\tcheck([0x50, 0x4B]) &&\n\t\t(buffer[2] === 0x3 || buffer[2] === 0x5 || buffer[2] === 0x7) &&\n\t\t(buffer[3] === 0x4 || buffer[3] === 0x6 || buffer[3] === 0x8)\n\t) {\n\t\treturn {\n\t\t\text: 'zip',\n\t\t\tmime: 'application/zip'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x30, 0x30, 0x30, 0x30, 0x30, 0x30], {offset: 148, mask: [0xF8, 0xF8, 0xF8, 0xF8, 0xF8, 0xF8]}) && // Valid tar checksum\n\t\ttarHeaderChecksumMatches(buffer)\n\t) {\n\t\treturn {\n\t\t\text: 'tar',\n\t\t\tmime: 'application/x-tar'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x52, 0x61, 0x72, 0x21, 0x1A, 0x7]) &&\n\t\t(buffer[6] === 0x0 || buffer[6] === 0x1)\n\t) {\n\t\treturn {\n\t\t\text: 'rar',\n\t\t\tmime: 'application/x-rar-compressed'\n\t\t};\n\t}\n\n\tif (check([0x1F, 0x8B, 0x8])) {\n\t\treturn {\n\t\t\text: 'gz',\n\t\t\tmime: 'application/gzip'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x5A, 0x68])) {\n\t\treturn {\n\t\t\text: 'bz2',\n\t\t\tmime: 'application/x-bzip2'\n\t\t};\n\t}\n\n\tif (check([0x37, 0x7A, 0xBC, 0xAF, 0x27, 0x1C])) {\n\t\treturn {\n\t\t\text: '7z',\n\t\t\tmime: 'application/x-7z-compressed'\n\t\t};\n\t}\n\n\tif (check([0x78, 0x01])) {\n\t\treturn {\n\t\t\text: 'dmg',\n\t\t\tmime: 'application/x-apple-diskimage'\n\t\t};\n\t}\n\n\t// `mov` format variants\n\tif (\n\t\tcheck([0x66, 0x72, 0x65, 0x65], {offset: 4}) || // `free`\n\t\tcheck([0x6D, 0x64, 0x61, 0x74], {offset: 4}) || // `mdat` MJPEG\n\t\tcheck([0x6D, 0x6F, 0x6F, 0x76], {offset: 4}) || // `moov`\n\t\tcheck([0x77, 0x69, 0x64, 0x65], {offset: 4}) // `wide`\n\t) {\n\t\treturn {\n\t\t\text: 'mov',\n\t\t\tmime: 'video/quicktime'\n\t\t};\n\t}\n\n\t// File Type Box (https://en.wikipedia.org/wiki/ISO_base_media_file_format)\n\t// It's not required to be first, but it's recommended to be. Almost all ISO base media files start with `ftyp` box.\n\t// `ftyp` box must contain a brand major identifier, which must consist of ISO 8859-1 printable characters.\n\t// Here we check for 8859-1 printable characters (for simplicity, it's a mask which also catches one non-printable character).\n\tif (\n\t\tcheck([0x66, 0x74, 0x79, 0x70], {offset: 4}) && // `ftyp`\n\t\t(buffer[8] & 0x60) !== 0x00 && (buffer[9] & 0x60) !== 0x00 && (buffer[10] & 0x60) !== 0x00 && (buffer[11] & 0x60) !== 0x00 // Brand major\n\t) {\n\t\t// They all can have MIME `video/mp4` except `application/mp4` special-case which is hard to detect.\n\t\t// For some cases, we're specific, everything else falls to `video/mp4` with `mp4` extension.\n\t\tconst brandMajor = uint8ArrayUtf8ByteString(buffer, 8, 12);\n\t\tswitch (brandMajor) {\n\t\t\tcase 'mif1':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heif'};\n\t\t\tcase 'msf1':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heif-sequence'};\n\t\t\tcase 'heic': case 'heix':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heic'};\n\t\t\tcase 'hevc': case 'hevx':\n\t\t\t\treturn {ext: 'heic', mime: 'image/heic-sequence'};\n\t\t\tcase 'qt  ':\n\t\t\t\treturn {ext: 'mov', mime: 'video/quicktime'};\n\t\t\tcase 'M4V ': case 'M4VH': case 'M4VP':\n\t\t\t\treturn {ext: 'm4v', mime: 'video/x-m4v'};\n\t\t\tcase 'M4P ':\n\t\t\t\treturn {ext: 'm4p', mime: 'video/mp4'};\n\t\t\tcase 'M4B ':\n\t\t\t\treturn {ext: 'm4b', mime: 'audio/mp4'};\n\t\t\tcase 'M4A ':\n\t\t\t\treturn {ext: 'm4a', mime: 'audio/x-m4a'};\n\t\t\tcase 'F4V ':\n\t\t\t\treturn {ext: 'f4v', mime: 'video/mp4'};\n\t\t\tcase 'F4P ':\n\t\t\t\treturn {ext: 'f4p', mime: 'video/mp4'};\n\t\t\tcase 'F4A ':\n\t\t\t\treturn {ext: 'f4a', mime: 'audio/mp4'};\n\t\t\tcase 'F4B ':\n\t\t\t\treturn {ext: 'f4b', mime: 'audio/mp4'};\n\t\t\tdefault:\n\t\t\t\tif (brandMajor.startsWith('3g')) {\n\t\t\t\t\tif (brandMajor.startsWith('3g2')) {\n\t\t\t\t\t\treturn {ext: '3g2', mime: 'video/3gpp2'};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {ext: '3gp', mime: 'video/3gpp'};\n\t\t\t\t}\n\n\t\t\t\treturn {ext: 'mp4', mime: 'video/mp4'};\n\t\t}\n\t}\n\n\tif (check([0x4D, 0x54, 0x68, 0x64])) {\n\t\treturn {\n\t\t\text: 'mid',\n\t\t\tmime: 'audio/midi'\n\t\t};\n\t}\n\n\t// https://github.com/threatstack/libmagic/blob/master/magic/Magdir/matroska\n\tif (check([0x1A, 0x45, 0xDF, 0xA3])) {\n\t\tconst sliced = buffer.subarray(4, 4 + 4096);\n\t\tconst idPos = sliced.findIndex((el, i, arr) => arr[i] === 0x42 && arr[i + 1] === 0x82);\n\n\t\tif (idPos !== -1) {\n\t\t\tconst docTypePos = idPos + 3;\n\t\t\tconst findDocType = type => [...type].every((c, i) => sliced[docTypePos + i] === c.charCodeAt(0));\n\n\t\t\tif (findDocType('matroska')) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'mkv',\n\t\t\t\t\tmime: 'video/x-matroska'\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (findDocType('webm')) {\n\t\t\t\treturn {\n\t\t\t\t\text: 'webm',\n\t\t\t\t\tmime: 'video/webm'\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t}\n\n\t// RIFF file format which might be AVI, WAV, QCP, etc\n\tif (check([0x52, 0x49, 0x46, 0x46])) {\n\t\tif (check([0x41, 0x56, 0x49], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'avi',\n\t\t\t\tmime: 'video/vnd.avi'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x57, 0x41, 0x56, 0x45], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'wav',\n\t\t\t\tmime: 'audio/vnd.wave'\n\t\t\t};\n\t\t}\n\n\t\t// QLCM, QCP file\n\t\tif (check([0x51, 0x4C, 0x43, 0x4D], {offset: 8})) {\n\t\t\treturn {\n\t\t\t\text: 'qcp',\n\t\t\t\tmime: 'audio/qcelp'\n\t\t\t};\n\t\t}\n\t}\n\n\t// ASF_Header_Object first 80 bytes\n\tif (check([0x30, 0x26, 0xB2, 0x75, 0x8E, 0x66, 0xCF, 0x11, 0xA6, 0xD9])) {\n\t\t// Search for header should be in first 1KB of file.\n\n\t\tlet offset = 30;\n\t\tdo {\n\t\t\tconst objectSize = readUInt64LE(buffer, offset + 16);\n\t\t\tif (check([0x91, 0x07, 0xDC, 0xB7, 0xB7, 0xA9, 0xCF, 0x11, 0x8E, 0xE6, 0x00, 0xC0, 0x0C, 0x20, 0x53, 0x65], {offset})) {\n\t\t\t\t// Sync on Stream-Properties-Object (B7DC0791-A9B7-11CF-8EE6-00C00C205365)\n\t\t\t\tif (check([0x40, 0x9E, 0x69, 0xF8, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B], {offset: offset + 24})) {\n\t\t\t\t\t// Found audio:\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'wma',\n\t\t\t\t\t\tmime: 'audio/x-ms-wma'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tif (check([0xC0, 0xEF, 0x19, 0xBC, 0x4D, 0x5B, 0xCF, 0x11, 0xA8, 0xFD, 0x00, 0x80, 0x5F, 0x5C, 0x44, 0x2B], {offset: offset + 24})) {\n\t\t\t\t\t// Found video:\n\t\t\t\t\treturn {\n\t\t\t\t\t\text: 'wmv',\n\t\t\t\t\t\tmime: 'video/x-ms-asf'\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\toffset += objectSize;\n\t\t} while (offset + 24 <= buffer.length);\n\n\t\t// Default to ASF generic extension\n\t\treturn {\n\t\t\text: 'asf',\n\t\t\tmime: 'application/vnd.ms-asf'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x0, 0x0, 0x1, 0xBA]) ||\n\t\tcheck([0x0, 0x0, 0x1, 0xB3])\n\t) {\n\t\treturn {\n\t\t\text: 'mpg',\n\t\t\tmime: 'video/mpeg'\n\t\t};\n\t}\n\n\t// Check for MPEG header at different starting offsets\n\tfor (let start = 0; start < 2 && start < (buffer.length - 16); start++) {\n\t\tif (\n\t\t\tcheck([0x49, 0x44, 0x33], {offset: start}) || // ID3 header\n\t\t\tcheck([0xFF, 0xE2], {offset: start, mask: [0xFF, 0xE6]}) // MPEG 1 or 2 Layer 3 header\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mp3',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tcheck([0xFF, 0xE4], {offset: start, mask: [0xFF, 0xE6]}) // MPEG 1 or 2 Layer 2 header\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mp2',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tcheck([0xFF, 0xF8], {offset: start, mask: [0xFF, 0xFC]}) // MPEG 2 layer 0 using ADTS\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mp2',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\n\t\tif (\n\t\t\tcheck([0xFF, 0xF0], {offset: start, mask: [0xFF, 0xFC]}) // MPEG 4 layer 0 using ADTS\n\t\t) {\n\t\t\treturn {\n\t\t\t\text: 'mp4',\n\t\t\t\tmime: 'audio/mpeg'\n\t\t\t};\n\t\t}\n\t}\n\n\t// Needs to be before `ogg` check\n\tif (check([0x4F, 0x70, 0x75, 0x73, 0x48, 0x65, 0x61, 0x64], {offset: 28})) {\n\t\treturn {\n\t\t\text: 'opus',\n\t\t\tmime: 'audio/opus'\n\t\t};\n\t}\n\n\t// If 'OggS' in first  bytes, then OGG container\n\tif (check([0x4F, 0x67, 0x67, 0x53])) {\n\t\t// This is a OGG container\n\n\t\t// If ' theora' in header.\n\t\tif (check([0x80, 0x74, 0x68, 0x65, 0x6F, 0x72, 0x61], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'ogv',\n\t\t\t\tmime: 'video/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// If '\\x01video' in header.\n\t\tif (check([0x01, 0x76, 0x69, 0x64, 0x65, 0x6F, 0x00], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'ogm',\n\t\t\t\tmime: 'video/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// If ' FLAC' in header  https://xiph.org/flac/faq.html\n\t\tif (check([0x7F, 0x46, 0x4C, 0x41, 0x43], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'oga',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// 'Speex  ' in header https://en.wikipedia.org/wiki/Speex\n\t\tif (check([0x53, 0x70, 0x65, 0x65, 0x78, 0x20, 0x20], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'spx',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// If '\\x01vorbis' in header\n\t\tif (check([0x01, 0x76, 0x6F, 0x72, 0x62, 0x69, 0x73], {offset: 28})) {\n\t\t\treturn {\n\t\t\t\text: 'ogg',\n\t\t\t\tmime: 'audio/ogg'\n\t\t\t};\n\t\t}\n\n\t\t// Default OGG container https://www.iana.org/assignments/media-types/application/ogg\n\t\treturn {\n\t\t\text: 'ogx',\n\t\t\tmime: 'application/ogg'\n\t\t};\n\t}\n\n\tif (check([0x66, 0x4C, 0x61, 0x43])) {\n\t\treturn {\n\t\t\text: 'flac',\n\t\t\tmime: 'audio/x-flac'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x41, 0x43, 0x20])) { // 'MAC '\n\t\treturn {\n\t\t\text: 'ape',\n\t\t\tmime: 'audio/ape'\n\t\t};\n\t}\n\n\tif (check([0x77, 0x76, 0x70, 0x6B])) { // 'wvpk'\n\t\treturn {\n\t\t\text: 'wv',\n\t\t\tmime: 'audio/wavpack'\n\t\t};\n\t}\n\n\tif (check([0x23, 0x21, 0x41, 0x4D, 0x52, 0x0A])) {\n\t\treturn {\n\t\t\text: 'amr',\n\t\t\tmime: 'audio/amr'\n\t\t};\n\t}\n\n\tif (check([0x25, 0x50, 0x44, 0x46])) {\n\t\treturn {\n\t\t\text: 'pdf',\n\t\t\tmime: 'application/pdf'\n\t\t};\n\t}\n\n\tif (check([0x4D, 0x5A])) {\n\t\treturn {\n\t\t\text: 'exe',\n\t\t\tmime: 'application/x-msdownload'\n\t\t};\n\t}\n\n\tif (\n\t\t(buffer[0] === 0x43 || buffer[0] === 0x46) &&\n\t\tcheck([0x57, 0x53], {offset: 1})\n\t) {\n\t\treturn {\n\t\t\text: 'swf',\n\t\t\tmime: 'application/x-shockwave-flash'\n\t\t};\n\t}\n\n\tif (check([0x7B, 0x5C, 0x72, 0x74, 0x66])) {\n\t\treturn {\n\t\t\text: 'rtf',\n\t\t\tmime: 'application/rtf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x61, 0x73, 0x6D])) {\n\t\treturn {\n\t\t\text: 'wasm',\n\t\t\tmime: 'application/wasm'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x77, 0x4F, 0x46, 0x46]) &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheck([0x4F, 0x54, 0x54, 0x4F], {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff',\n\t\t\tmime: 'font/woff'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x77, 0x4F, 0x46, 0x32]) &&\n\t\t(\n\t\t\tcheck([0x00, 0x01, 0x00, 0x00], {offset: 4}) ||\n\t\t\tcheck([0x4F, 0x54, 0x54, 0x4F], {offset: 4})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'woff2',\n\t\t\tmime: 'font/woff2'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x4C, 0x50], {offset: 34}) &&\n\t\t(\n\t\t\tcheck([0x00, 0x00, 0x01], {offset: 8}) ||\n\t\t\tcheck([0x01, 0x00, 0x02], {offset: 8}) ||\n\t\t\tcheck([0x02, 0x00, 0x02], {offset: 8})\n\t\t)\n\t) {\n\t\treturn {\n\t\t\text: 'eot',\n\t\t\tmime: 'application/vnd.ms-fontobject'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x01, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'ttf',\n\t\t\tmime: 'font/ttf'\n\t\t};\n\t}\n\n\tif (check([0x4F, 0x54, 0x54, 0x4F, 0x00])) {\n\t\treturn {\n\t\t\text: 'otf',\n\t\t\tmime: 'font/otf'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x01, 0x00])) {\n\t\treturn {\n\t\t\text: 'ico',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x02, 0x00])) {\n\t\treturn {\n\t\t\text: 'cur',\n\t\t\tmime: 'image/x-icon'\n\t\t};\n\t}\n\n\tif (check([0x46, 0x4C, 0x56, 0x01])) {\n\t\treturn {\n\t\t\text: 'flv',\n\t\t\tmime: 'video/x-flv'\n\t\t};\n\t}\n\n\tif (check([0x25, 0x21])) {\n\t\treturn {\n\t\t\text: 'ps',\n\t\t\tmime: 'application/postscript'\n\t\t};\n\t}\n\n\tif (check([0xFD, 0x37, 0x7A, 0x58, 0x5A, 0x00])) {\n\t\treturn {\n\t\t\text: 'xz',\n\t\t\tmime: 'application/x-xz'\n\t\t};\n\t}\n\n\tif (check([0x53, 0x51, 0x4C, 0x69])) {\n\t\treturn {\n\t\t\text: 'sqlite',\n\t\t\tmime: 'application/x-sqlite3'\n\t\t};\n\t}\n\n\tif (check([0x4E, 0x45, 0x53, 0x1A])) {\n\t\treturn {\n\t\t\text: 'nes',\n\t\t\tmime: 'application/x-nintendo-nes-rom'\n\t\t};\n\t}\n\n\tif (check([0x43, 0x72, 0x32, 0x34])) {\n\t\treturn {\n\t\t\text: 'crx',\n\t\t\tmime: 'application/x-google-chrome-extension'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x4D, 0x53, 0x43, 0x46]) ||\n\t\tcheck([0x49, 0x53, 0x63, 0x28])\n\t) {\n\t\treturn {\n\t\t\text: 'cab',\n\t\t\tmime: 'application/vnd.ms-cab-compressed'\n\t\t};\n\t}\n\n\t// Needs to be before `ar` check\n\tif (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E, 0x0A, 0x64, 0x65, 0x62, 0x69, 0x61, 0x6E, 0x2D, 0x62, 0x69, 0x6E, 0x61, 0x72, 0x79])) {\n\t\treturn {\n\t\t\text: 'deb',\n\t\t\tmime: 'application/x-deb'\n\t\t};\n\t}\n\n\tif (check([0x21, 0x3C, 0x61, 0x72, 0x63, 0x68, 0x3E])) {\n\t\treturn {\n\t\t\text: 'ar',\n\t\t\tmime: 'application/x-unix-archive'\n\t\t};\n\t}\n\n\tif (check([0xED, 0xAB, 0xEE, 0xDB])) {\n\t\treturn {\n\t\t\text: 'rpm',\n\t\t\tmime: 'application/x-rpm'\n\t\t};\n\t}\n\n\tif (\n\t\tcheck([0x1F, 0xA0]) ||\n\t\tcheck([0x1F, 0x9D])\n\t) {\n\t\treturn {\n\t\t\text: 'Z',\n\t\t\tmime: 'application/x-compress'\n\t\t};\n\t}\n\n\tif (check([0x4C, 0x5A, 0x49, 0x50])) {\n\t\treturn {\n\t\t\text: 'lz',\n\t\t\tmime: 'application/x-lzip'\n\t\t};\n\t}\n\n\tif (check([0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1])) {\n\t\treturn {\n\t\t\text: 'msi',\n\t\t\tmime: 'application/x-msi'\n\t\t};\n\t}\n\n\tif (check([0x06, 0x0E, 0x2B, 0x34, 0x02, 0x05, 0x01, 0x01, 0x0D, 0x01, 0x02, 0x01, 0x01, 0x02])) {\n\t\treturn {\n\t\t\text: 'mxf',\n\t\t\tmime: 'application/mxf'\n\t\t};\n\t}\n\n\tif (check([0x47], {offset: 4}) && (check([0x47], {offset: 192}) || check([0x47], {offset: 196}))) {\n\t\treturn {\n\t\t\text: 'mts',\n\t\t\tmime: 'video/mp2t'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4C, 0x45, 0x4E, 0x44, 0x45, 0x52])) {\n\t\treturn {\n\t\t\text: 'blend',\n\t\t\tmime: 'application/x-blender'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x50, 0x47, 0xFB])) {\n\t\treturn {\n\t\t\text: 'bpg',\n\t\t\tmime: 'image/bpg'\n\t\t};\n\t}\n\n\tif (check([0x00, 0x00, 0x00, 0x0C, 0x6A, 0x50, 0x20, 0x20, 0x0D, 0x0A, 0x87, 0x0A])) {\n\t\t// JPEG-2000 family\n\n\t\tif (check([0x6A, 0x70, 0x32, 0x20], {offset: 20})) {\n\t\t\treturn {\n\t\t\t\text: 'jp2',\n\t\t\t\tmime: 'image/jp2'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x6A, 0x70, 0x78, 0x20], {offset: 20})) {\n\t\t\treturn {\n\t\t\t\text: 'jpx',\n\t\t\t\tmime: 'image/jpx'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x6A, 0x70, 0x6D, 0x20], {offset: 20})) {\n\t\t\treturn {\n\t\t\t\text: 'jpm',\n\t\t\t\tmime: 'image/jpm'\n\t\t\t};\n\t\t}\n\n\t\tif (check([0x6D, 0x6A, 0x70, 0x32], {offset: 20})) {\n\t\t\treturn {\n\t\t\t\text: 'mj2',\n\t\t\t\tmime: 'image/mj2'\n\t\t\t};\n\t\t}\n\t}\n\n\tif (check([0x46, 0x4F, 0x52, 0x4D])) {\n\t\treturn {\n\t\t\text: 'aif',\n\t\t\tmime: 'audio/aiff'\n\t\t};\n\t}\n\n\tif (checkString('<?xml ')) {\n\t\treturn {\n\t\t\text: 'xml',\n\t\t\tmime: 'application/xml'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x4F, 0x4F, 0x4B, 0x4D, 0x4F, 0x42, 0x49], {offset: 60})) {\n\t\treturn {\n\t\t\text: 'mobi',\n\t\t\tmime: 'application/x-mobipocket-ebook'\n\t\t};\n\t}\n\n\tif (check([0xAB, 0x4B, 0x54, 0x58, 0x20, 0x31, 0x31, 0xBB, 0x0D, 0x0A, 0x1A, 0x0A])) {\n\t\treturn {\n\t\t\text: 'ktx',\n\t\t\tmime: 'image/ktx'\n\t\t};\n\t}\n\n\tif (check([0x44, 0x49, 0x43, 0x4D], {offset: 128})) {\n\t\treturn {\n\t\t\text: 'dcm',\n\t\t\tmime: 'application/dicom'\n\t\t};\n\t}\n\n\t// Musepack, SV7\n\tif (check([0x4D, 0x50, 0x2B])) {\n\t\treturn {\n\t\t\text: 'mpc',\n\t\t\tmime: 'audio/x-musepack'\n\t\t};\n\t}\n\n\t// Musepack, SV8\n\tif (check([0x4D, 0x50, 0x43, 0x4B])) {\n\t\treturn {\n\t\t\text: 'mpc',\n\t\t\tmime: 'audio/x-musepack'\n\t\t};\n\t}\n\n\tif (check([0x42, 0x45, 0x47, 0x49, 0x4E, 0x3A])) {\n\t\treturn {\n\t\t\text: 'ics',\n\t\t\tmime: 'text/calendar'\n\t\t};\n\t}\n\n\tif (check([0x67, 0x6C, 0x54, 0x46, 0x02, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'glb',\n\t\t\tmime: 'model/gltf-binary'\n\t\t};\n\t}\n\n\tif (check([0xD4, 0xC3, 0xB2, 0xA1]) || check([0xA1, 0xB2, 0xC3, 0xD4])) {\n\t\treturn {\n\t\t\text: 'pcap',\n\t\t\tmime: 'application/vnd.tcpdump.pcap'\n\t\t};\n\t}\n\n\t// Sony DSD Stream File (DSF)\n\tif (check([0x44, 0x53, 0x44, 0x20])) {\n\t\treturn {\n\t\t\text: 'dsf',\n\t\t\tmime: 'audio/x-dsf' // Non-standard\n\t\t};\n\t}\n\n\tif (check([0x4C, 0x00, 0x00, 0x00, 0x01, 0x14, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46])) {\n\t\treturn {\n\t\t\text: 'lnk',\n\t\t\tmime: 'application/x.ms.shortcut' // Invented by us\n\t\t};\n\t}\n\n\tif (check([0x62, 0x6F, 0x6F, 0x6B, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x61, 0x72, 0x6B, 0x00, 0x00, 0x00, 0x00])) {\n\t\treturn {\n\t\t\text: 'alias',\n\t\t\tmime: 'application/x.apple.alias' // Invented by us\n\t\t};\n\t}\n\n\tif (checkString('Creative Voice File')) {\n\t\treturn {\n\t\t\text: 'voc',\n\t\t\tmime: 'audio/x-voc'\n\t\t};\n\t}\n\n\tif (check([0x0B, 0x77])) {\n\t\treturn {\n\t\t\text: 'ac3',\n\t\t\tmime: 'audio/vnd.dolby.dd-raw'\n\t\t};\n\t}\n};\n\nmodule.exports = fileType;\n\nObject.defineProperty(fileType, 'minimumBytes', {value: 4100});\n\nfileType.stream = readableStream => new Promise((resolve, reject) => {\n\t// Using `eval` to work around issues when bundling with Webpack\n\tconst stream = eval('require')('stream'); // eslint-disable-line no-eval\n\n\treadableStream.once('readable', () => {\n\t\tconst pass = new stream.PassThrough();\n\t\tconst chunk = readableStream.read(module.exports.minimumBytes) || readableStream.read();\n\t\ttry {\n\t\t\tpass.fileType = fileType(chunk);\n\t\t} catch (error) {\n\t\t\treject(error);\n\t\t}\n\n\t\treadableStream.unshift(chunk);\n\n\t\tif (stream.pipeline) {\n\t\t\tresolve(stream.pipeline(readableStream, pass, () => {}));\n\t\t} else {\n\t\t\tresolve(readableStream.pipe(pass));\n\t\t}\n\t});\n});\n","/*!\n * media-typer\n * Copyright(c) 2014 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n/**\n * RegExp to match *( \";\" parameter ) in RFC 2616 sec 3.7\n *\n * parameter     = token \"=\" ( token | quoted-string )\n * token         = 1*<any CHAR except CTLs or separators>\n * separators    = \"(\" | \")\" | \"<\" | \">\" | \"@\"\n *               | \",\" | \";\" | \":\" | \"\\\" | <\">\n *               | \"/\" | \"[\" | \"]\" | \"?\" | \"=\"\n *               | \"{\" | \"}\" | SP | HT\n * quoted-string = ( <\"> *(qdtext | quoted-pair ) <\"> )\n * qdtext        = <any TEXT except <\">>\n * quoted-pair   = \"\\\" CHAR\n * CHAR          = <any US-ASCII character (octets 0 - 127)>\n * TEXT          = <any OCTET except CTLs, but including LWS>\n * LWS           = [CRLF] 1*( SP | HT )\n * CRLF          = CR LF\n * CR            = <US-ASCII CR, carriage return (13)>\n * LF            = <US-ASCII LF, linefeed (10)>\n * SP            = <US-ASCII SP, space (32)>\n * SHT           = <US-ASCII HT, horizontal-tab (9)>\n * CTL           = <any US-ASCII control character (octets 0 - 31) and DEL (127)>\n * OCTET         = <any 8-bit sequence of data>\n */\nvar paramRegExp = /; *([!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) *= *(\"(?:[ !\\u0023-\\u005b\\u005d-\\u007e\\u0080-\\u00ff]|\\\\[\\u0020-\\u007e])*\"|[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+) */g;\nvar textRegExp = /^[\\u0020-\\u007e\\u0080-\\u00ff]+$/\nvar tokenRegExp = /^[!#$%&'\\*\\+\\-\\.0-9A-Z\\^_`a-z\\|~]+$/\n\n/**\n * RegExp to match quoted-pair in RFC 2616\n *\n * quoted-pair = \"\\\" CHAR\n * CHAR        = <any US-ASCII character (octets 0 - 127)>\n */\nvar qescRegExp = /\\\\([\\u0000-\\u007f])/g;\n\n/**\n * RegExp to match chars that must be quoted-pair in RFC 2616\n */\nvar quoteRegExp = /([\\\\\"])/g;\n\n/**\n * RegExp to match type in RFC 6838\n *\n * type-name = restricted-name\n * subtype-name = restricted-name\n * restricted-name = restricted-name-first *126restricted-name-chars\n * restricted-name-first  = ALPHA / DIGIT\n * restricted-name-chars  = ALPHA / DIGIT / \"!\" / \"#\" /\n *                          \"$\" / \"&\" / \"-\" / \"^\" / \"_\"\n * restricted-name-chars =/ \".\" ; Characters before first dot always\n *                              ; specify a facet name\n * restricted-name-chars =/ \"+\" ; Characters after last plus always\n *                              ; specify a structured syntax suffix\n * ALPHA =  %x41-5A / %x61-7A   ; A-Z / a-z\n * DIGIT =  %x30-39             ; 0-9\n */\nvar subtypeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/\nvar typeNameRegExp = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/\nvar typeRegExp = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;\n\n/**\n * Module exports.\n */\n\nexports.format = format\nexports.parse = parse\n\n/**\n * Format object to media type.\n *\n * @param {object} obj\n * @return {string}\n * @api public\n */\n\nfunction format(obj) {\n  if (!obj || typeof obj !== 'object') {\n    throw new TypeError('argument obj is required')\n  }\n\n  var parameters = obj.parameters\n  var subtype = obj.subtype\n  var suffix = obj.suffix\n  var type = obj.type\n\n  if (!type || !typeNameRegExp.test(type)) {\n    throw new TypeError('invalid type')\n  }\n\n  if (!subtype || !subtypeNameRegExp.test(subtype)) {\n    throw new TypeError('invalid subtype')\n  }\n\n  // format as type/subtype\n  var string = type + '/' + subtype\n\n  // append +suffix\n  if (suffix) {\n    if (!typeNameRegExp.test(suffix)) {\n      throw new TypeError('invalid suffix')\n    }\n\n    string += '+' + suffix\n  }\n\n  // append parameters\n  if (parameters && typeof parameters === 'object') {\n    var param\n    var params = Object.keys(parameters).sort()\n\n    for (var i = 0; i < params.length; i++) {\n      param = params[i]\n\n      if (!tokenRegExp.test(param)) {\n        throw new TypeError('invalid parameter name')\n      }\n\n      string += '; ' + param + '=' + qstring(parameters[param])\n    }\n  }\n\n  return string\n}\n\n/**\n * Parse media type to object.\n *\n * @param {string|object} string\n * @return {Object}\n * @api public\n */\n\nfunction parse(string) {\n  if (!string) {\n    throw new TypeError('argument string is required')\n  }\n\n  // support req/res-like objects as argument\n  if (typeof string === 'object') {\n    string = getcontenttype(string)\n  }\n\n  if (typeof string !== 'string') {\n    throw new TypeError('argument string is required to be a string')\n  }\n\n  var index = string.indexOf(';')\n  var type = index !== -1\n    ? string.substr(0, index)\n    : string\n\n  var key\n  var match\n  var obj = splitType(type)\n  var params = {}\n  var value\n\n  paramRegExp.lastIndex = index\n\n  while (match = paramRegExp.exec(string)) {\n    if (match.index !== index) {\n      throw new TypeError('invalid parameter format')\n    }\n\n    index += match[0].length\n    key = match[1].toLowerCase()\n    value = match[2]\n\n    if (value[0] === '\"') {\n      // remove quotes and escapes\n      value = value\n        .substr(1, value.length - 2)\n        .replace(qescRegExp, '$1')\n    }\n\n    params[key] = value\n  }\n\n  if (index !== -1 && index !== string.length) {\n    throw new TypeError('invalid parameter format')\n  }\n\n  obj.parameters = params\n\n  return obj\n}\n\n/**\n * Get content-type from req/res objects.\n *\n * @param {object}\n * @return {Object}\n * @api private\n */\n\nfunction getcontenttype(obj) {\n  if (typeof obj.getHeader === 'function') {\n    // res-like\n    return obj.getHeader('content-type')\n  }\n\n  if (typeof obj.headers === 'object') {\n    // req-like\n    return obj.headers && obj.headers['content-type']\n  }\n}\n\n/**\n * Quote a string if necessary.\n *\n * @param {string} val\n * @return {string}\n * @api private\n */\n\nfunction qstring(val) {\n  var str = String(val)\n\n  // no need to quote tokens\n  if (tokenRegExp.test(str)) {\n    return str\n  }\n\n  if (str.length > 0 && !textRegExp.test(str)) {\n    throw new TypeError('invalid parameter value')\n  }\n\n  return '\"' + str.replace(quoteRegExp, '\\\\$1') + '\"'\n}\n\n/**\n * Simply \"type/subtype+siffx\" into parts.\n *\n * @param {string} string\n * @return {Object}\n * @api private\n */\n\nfunction splitType(string) {\n  var match = typeRegExp.exec(string.toLowerCase())\n\n  if (!match) {\n    throw new TypeError('invalid media type')\n  }\n\n  var type = match[1]\n  var subtype = match[2]\n  var suffix\n\n  // suffix after last +\n  var index = subtype.lastIndexOf('+')\n  if (index !== -1) {\n    suffix = subtype.substr(index + 1)\n    subtype = subtype.substr(0, index)\n  }\n\n  var obj = {\n    type: type,\n    subtype: subtype,\n    suffix: suffix\n  }\n\n  return obj\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * windows-1252 / iso_8859-1 decoder (ANSI)\n */\nclass Windows1292Decoder {\n    static decode(buffer) {\n        let str = '';\n        for (const i in buffer) {\n            if (buffer.hasOwnProperty(i)) {\n                str += Windows1292Decoder.codePointToString(Windows1292Decoder.singleByteDecoder(buffer[i]));\n            }\n        }\n        return str;\n    }\n    static inRange(a, min, max) {\n        return min <= a && a <= max;\n    }\n    static codePointToString(cp) {\n        if (cp <= 0xFFFF) {\n            return String.fromCharCode(cp);\n        }\n        else {\n            cp -= 0x10000;\n            return String.fromCharCode((cp >> 10) + 0xD800, (cp & 0x3FF) + 0xDC00);\n        }\n    }\n    static singleByteDecoder(bite) {\n        if (Windows1292Decoder.inRange(bite, 0x00, 0x7F)) {\n            return bite;\n        }\n        const codePoint = Windows1292Decoder.windows1252[bite - 0x80];\n        if (codePoint === null) {\n            throw Error('invaliding encoding');\n        }\n        return codePoint;\n    }\n}\nWindows1292Decoder.windows1252 = [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352,\n    8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732,\n    8482, 353, 8250, 339, 157, 382, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168,\n    169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,\n    185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,\n    201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,\n    217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,\n    233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,\n    248, 249, 250, 251, 252, 253, 254, 255];\nexports.Windows1292Decoder = Windows1292Decoder;\n//# sourceMappingURL=Windows1292Decoder.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst assert = require(\"assert\");\nconst Windows1292Decoder_1 = require(\"./Windows1292Decoder\");\nclass Util {\n    /**\n     *\n     * @param buffer\n     * @param start\n     * @param end\n     * @param encoding // ToDo: ts.enum\n     * @return {number}\n     */\n    static findZero(buffer, start, end, encoding) {\n        let i = start;\n        if (encoding === 'utf16') {\n            while (buffer[i] !== 0 || buffer[i + 1] !== 0) {\n                if (i >= end)\n                    return end;\n                i += 2;\n            }\n            return i;\n        }\n        else {\n            while (buffer[i] !== 0) {\n                if (i >= end)\n                    return end;\n                i++;\n            }\n            return i;\n        }\n    }\n    static trimRightNull(x) {\n        const pos0 = x.indexOf('\\0');\n        return pos0 === -1 ? x : x.substr(0, pos0);\n    }\n    static swapBytes(buffer) {\n        const l = buffer.length;\n        assert.ok((l & 1) === 0, 'Buffer length must be even');\n        for (let i = 0; i < l; i += 2) {\n            const a = buffer[i];\n            buffer[i] = buffer[i + 1];\n            buffer[i + 1] = a;\n        }\n        return buffer;\n    }\n    static readUTF16String(buffer) {\n        let offset = 0;\n        if (buffer[0] === 0xFE && buffer[1] === 0xFF) { // big endian\n            buffer = Util.swapBytes(buffer);\n            offset = 2;\n        }\n        else if (buffer[0] === 0xFF && buffer[1] === 0xFE) { // little endian\n            offset = 2;\n        }\n        return buffer.toString('ucs2', offset);\n    }\n    /**\n     *\n     * @param buffer Decoder input data\n     * @param encoding 'utf16le' | 'utf16' | 'utf8' | 'iso-8859-1'\n     * @return {string}\n     */\n    static decodeString(buffer, encoding) {\n        // annoying workaround for a double BOM issue\n        // https://github.com/leetreveil/musicmetadata/issues/84\n        if (buffer[0] === 0xFF && buffer[1] === 0xFE && buffer[2] === 0xFE && buffer[3] === 0xFF) {\n            buffer = buffer.slice(2);\n        }\n        if (encoding === 'utf16le' || encoding === 'utf16') {\n            return Util.readUTF16String(buffer);\n        }\n        else if (encoding === 'utf8') {\n            return buffer.toString('utf8');\n        }\n        else if (encoding === 'iso-8859-1') {\n            return Windows1292Decoder_1.Windows1292Decoder.decode(buffer);\n        }\n        throw Error(encoding + ' encoding is not supported!');\n    }\n    static stripNulls(str) {\n        str = str.replace(/^\\x00+/g, '');\n        str = str.replace(/\\x00+$/g, '');\n        return str;\n    }\n    /**\n     * Read bit-aligned number start from buffer\n     * Total offset in bits = byteOffset * 8 + bitOffset\n     * @param buf Byte buffer\n     * @param byteOffset Starting offset in bytes\n     * @param bitOffset Starting offset in bits: 0 = lsb\n     * @param len Length of number in bits\n     * @return {number} decoded bit aligned number\n     */\n    static getBitAllignedNumber(buf, byteOffset, bitOffset, len) {\n        const byteOff = byteOffset + ~~(bitOffset / 8);\n        const bitOff = bitOffset % 8;\n        let value = buf[byteOff];\n        value &= 0xff >> bitOff;\n        const bitsRead = 8 - bitOff;\n        const bitsLeft = len - bitsRead;\n        if (bitsLeft < 0) {\n            value >>= (8 - bitOff - len);\n        }\n        else if (bitsLeft > 0) {\n            value <<= bitsLeft;\n            value |= Util.getBitAllignedNumber(buf, byteOffset, bitOffset + bitsRead, bitsLeft);\n        }\n        return value;\n    }\n    /**\n     * Read bit-aligned number start from buffer\n     * Total offset in bits = byteOffset * 8 + bitOffset\n     * @param buf Byte buffer\n     * @param byteOffset Starting offset in bytes\n     * @param bitOffset Starting offset in bits: 0 = most significant bit, 7 is least significant bit\n     * @return {number} decoded bit aligned number\n     */\n    static isBitSet(buf, byteOffset, bitOffset) {\n        return Util.getBitAllignedNumber(buf, byteOffset, bitOffset, 1) === 1;\n    }\n    static a2hex(str) {\n        const arr = [];\n        for (let i = 0, l = str.length; i < l; i++) {\n            const hex = Number(str.charCodeAt(i)).toString(16);\n            arr.push(hex.length === 1 ? '0' + hex : hex);\n        }\n        return arr.join(' ');\n    }\n}\nUtil.strtokBITSET = {\n    get: (buf, off, bit) => {\n        return (buf[off] & (1 << bit)) !== 0;\n    },\n    len: 1\n};\nexports.default = Util;\n//# sourceMappingURL=Util.js.map","/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */\nexports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var nBits = -7\n  var i = isLE ? (nBytes - 1) : 0\n  var d = isLE ? -1 : 1\n  var s = buffer[offset + i]\n\n  i += d\n\n  e = s & ((1 << (-nBits)) - 1)\n  s >>= (-nBits)\n  nBits += eLen\n  for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & ((1 << (-nBits)) - 1)\n  e >>= (-nBits)\n  nBits += mLen\n  for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias\n  } else if (e === eMax) {\n    return m ? NaN : ((s ? -1 : 1) * Infinity)\n  } else {\n    m = m + Math.pow(2, mLen)\n    e = e - eBias\n  }\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c\n  var eLen = (nBytes * 8) - mLen - 1\n  var eMax = (1 << eLen) - 1\n  var eBias = eMax >> 1\n  var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n  var i = isLE ? 0 : (nBytes - 1)\n  var d = isLE ? 1 : -1\n  var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n  value = Math.abs(value)\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0\n    e = eMax\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2)\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--\n      c *= 2\n    }\n    if (e + eBias >= 1) {\n      value += rt / c\n    } else {\n      value += rt * Math.pow(2, 1 - eBias)\n    }\n    if (value * c >= 2) {\n      e++\n      c /= 2\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0\n      e = eMax\n    } else if (e + eBias >= 1) {\n      m = ((value * c) - 1) * Math.pow(2, mLen)\n      e = e + eBias\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n      e = 0\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = (e << mLen) | m\n  eLen += mLen\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst assert = require(\"assert\");\nconst ieee754 = require(\"ieee754\");\n// Possibly call flush()\nconst maybeFlush = (b, o, len, flush) => {\n    if (o + len > b.length) {\n        if (typeof (flush) !== 'function') {\n            throw new Error('Buffer out of space and no valid flush() function found');\n        }\n        flush(b, o);\n        return 0;\n    }\n    return o;\n};\n// Primitive types\n/**\n * 8-bit unsigned integer\n */\nexports.UINT8 = {\n    len: 1,\n    get(buf, off) {\n        return buf.readUInt8(off);\n    },\n    put(b, o, v, flush) {\n        assert.equal(typeof o, 'number');\n        assert.equal(typeof v, 'number');\n        assert.ok(v >= 0 && v <= 0xff);\n        assert.ok(o >= 0);\n        assert.ok(this.len <= b.length);\n        const no = maybeFlush(b, o, this.len, flush);\n        b.writeUInt8(v, no);\n        return (no - o) + this.len;\n    }\n};\n/**\n * 16-bit unsigned integer, Little Endian byte order\n */\nexports.UINT16_LE = {\n    len: 2,\n    get(buf, off) {\n        return buf.readUInt16LE(off);\n    },\n    put(b, o, v, flush) {\n        assert.equal(typeof o, 'number');\n        assert.equal(typeof v, 'number');\n        assert.ok(v >= 0 && v <= 0xffff);\n        assert.ok(o >= 0);\n        assert.ok(this.len <= b.length);\n        const no = maybeFlush(b, o, this.len, flush);\n        b.writeUInt16LE(v, no);\n        return (no - o) + this.len;\n    }\n};\n/**\n * 16-bit unsigned integer, Big Endian byte order\n */\nexports.UINT16_BE = {\n    len: 2,\n    get(buf, off) {\n        return buf.readUInt16BE(off);\n    },\n    put(b, o, v, flush) {\n        assert.equal(typeof o, 'number');\n        assert.equal(typeof v, 'number');\n        assert.ok(v >= 0 && v <= 0xffff);\n        assert.ok(o >= 0);\n        assert.ok(this.len <= b.length);\n        const no = maybeFlush(b, o, this.len, flush);\n        b.writeUInt16BE(v, no);\n        return (no - o) + this.len;\n    }\n};\n/**\n * 24-bit unsigned integer, Little Endian byte order\n */\nexports.UINT24_LE = {\n    len: 3,\n    get(buf, off) {\n        return buf.readUIntLE(off, 3);\n    },\n    put(b, o, v, flush) {\n        assert.equal(typeof o, 'number');\n        assert.equal(typeof v, 'number');\n        assert.ok(v >= 0 && v <= 0xffffff);\n        assert.ok(o >= 0);\n        assert.ok(this.len <= b.length);\n        const no = maybeFlush(b, o, this.len, flush);\n        b.writeUIntLE(v, no, 3);\n        return (no - o) + this.len;\n    }\n};\n/**\n * 24-bit unsigned integer, Big Endian byte order\n */\nexports.UINT24_BE = {\n    len: 3,\n    get(buf, off) {\n        return buf.readUIntBE(off, 3);\n    },\n    put(b, o, v, flush) {\n        assert.equal(typeof o, 'number');\n        assert.equal(typeof v, 'number');\n        assert.ok(v >= 0 && v <= 0xffffff);\n        assert.ok(o >= 0);\n        assert.ok(this.len <= b.length);\n        const no = maybeFlush(b, o, this.len, flush);\n        b.writeUIntBE(v, no, 3);\n        return (no - o) + this.len;\n    }\n};\n/**\n * 32-bit unsigned integer, Little Endian byte order\n */\nexports.UINT32_LE = {\n    len: 4,\n    get(buf, off) {\n        return buf.readUInt32LE(off);\n    },\n    put(b, o, v, flush) {\n        assert.equal(typeof o, 'number');\n        assert.equal(typeof v, 'number');\n        assert.ok(v >= 0 && v <= 0xffffffff);\n        assert.ok(o >= 0);\n        assert.ok(this.len <= b.length);\n        const no = maybeFlush(b, o, this.len, flush);\n        b.writeUInt32LE(v, no);\n        return (no - o) + this.len;\n    }\n};\n/**\n * 32-bit unsigned integer, Big Endian byte order\n */\nexports.UINT32_BE = {\n    len: 4,\n    get(buf, off) {\n        return buf.readUInt32BE(off);\n    },\n    put(b, o, v, flush) {\n        assert.equal(typeof o, 'number');\n        assert.equal(typeof v, 'number');\n        assert.ok(v >= 0 && v <= 0xffffffff);\n        assert.ok(o >= 0);\n        assert.ok(this.len <= b.length);\n        const no = maybeFlush(b, o, this.len, flush);\n        b.writeUInt32BE(v, no);\n        return (no - o) + this.len;\n    }\n};\n/**\n * 8-bit signed integer\n */\nexports.INT8 = {\n    len: 1,\n    get(buf, off) {\n        return buf.readInt8(off);\n    },\n    put(b, o, v, flush) {\n        assert.equal(typeof o, 'number');\n        assert.equal(typeof v, 'number');\n        assert.ok(v >= -128 && v <= 127);\n        assert.ok(o >= 0);\n        assert.ok(this.len <= b.length);\n        const no = maybeFlush(b, o, this.len, flush);\n        b.writeInt8(v, no);\n        return (no - o) + this.len;\n    }\n};\n/**\n * 16-bit signed integer, Big Endian byte order\n */\nexports.INT16_BE = {\n    len: 2,\n    get(buf, off) {\n        return buf.readInt16BE(off);\n    },\n    put(b, o, v, flush) {\n        assert.equal(typeof o, 'number');\n        assert.equal(typeof v, 'number');\n        assert.ok(v >= -32768 && v <= 32767);\n        assert.ok(o >= 0);\n        assert.ok(this.len <= b.length);\n        const no = maybeFlush(b, o, this.len, flush);\n        b.writeInt16BE(v, no);\n        return (no - o) + this.len;\n    }\n};\n/**\n * 16-bit signed integer, Little Endian byte order\n */\nexports.INT16_LE = {\n    len: 2,\n    get(buf, off) {\n        return buf.readInt16LE(off);\n    },\n    put(b, o, v, flush) {\n        assert.equal(typeof o, 'number');\n        assert.equal(typeof v, 'number');\n        assert.ok(v >= -32768 && v <= 32767);\n        assert.ok(o >= 0);\n        assert.ok(this.len <= b.length);\n        const no = maybeFlush(b, o, this.len, flush);\n        b.writeInt16LE(v, no);\n        return (no - o) + this.len;\n    }\n};\n/**\n * 24-bit signed integer, Little Endian byte order\n */\nexports.INT24_LE = {\n    len: 3,\n    get(buf, off) {\n        return buf.readIntLE(off, 3);\n    },\n    put(b, o, v, flush) {\n        assert.equal(typeof o, 'number');\n        assert.equal(typeof v, 'number');\n        assert.ok(v >= -0x800000 && v <= 0x7fffff);\n        assert.ok(o >= 0);\n        assert.ok(this.len <= b.length);\n        const no = maybeFlush(b, o, this.len, flush);\n        b.writeIntLE(v, no, 3);\n        return (no - o) + this.len;\n    }\n};\n/**\n * 24-bit signed integer, Big Endian byte order\n */\nexports.INT24_BE = {\n    len: 3,\n    get(buf, off) {\n        return buf.readIntBE(off, 3);\n    },\n    put(b, o, v, flush) {\n        assert.equal(typeof o, 'number');\n        assert.equal(typeof v, 'number');\n        assert.ok(v >= -0x800000 && v <= 0x7fffff);\n        assert.ok(o >= 0);\n        assert.ok(this.len <= b.length);\n        const no = maybeFlush(b, o, this.len, flush);\n        b.writeIntBE(v, no, 3);\n        return (no - o) + this.len;\n    }\n};\n/**\n * 32-bit signed integer, Big Endian byte order\n */\nexports.INT32_BE = {\n    len: 4,\n    get(buf, off) {\n        return buf.readInt32BE(off);\n    },\n    put(b, o, v, flush) {\n        assert.equal(typeof o, 'number');\n        assert.equal(typeof v, 'number');\n        assert.ok(v >= -2147483648 && v <= 2147483647);\n        assert.ok(o >= 0);\n        assert.ok(this.len <= b.length);\n        const no = maybeFlush(b, o, this.len, flush);\n        b.writeInt32BE(v, no);\n        return (no - o) + this.len;\n    }\n};\n/**\n * 32-bit signed integer, Big Endian byte order\n */\nexports.INT32_LE = {\n    len: 4,\n    get(buf, off) {\n        return buf.readInt32LE(off);\n    },\n    put(b, o, v, flush) {\n        assert.equal(typeof o, 'number');\n        assert.equal(typeof v, 'number');\n        assert.ok(v >= -2147483648 && v <= 2147483647);\n        assert.ok(o >= 0);\n        assert.ok(this.len <= b.length);\n        const no = maybeFlush(b, o, this.len, flush);\n        b.writeInt32LE(v, no);\n        return (no - o) + this.len;\n    }\n};\n/**\n * 64-bit unsigned integer, Little Endian byte order\n */\nexports.UINT64_LE = {\n    len: 8,\n    get(buf, off) {\n        return readUIntLE(buf, off, this.len);\n    },\n    put(b, o, v) {\n        return writeUIntLE(b, v, o, this.len);\n    }\n};\n/**\n * 64-bit signed integer, Little Endian byte order\n */\nexports.INT64_LE = {\n    len: 8,\n    get(buf, off) {\n        return readIntLE(buf, off, this.len);\n    },\n    put(b, off, v) {\n        return writeIntLE(b, v, off, this.len);\n    }\n};\n/**\n * 64-bit unsigned integer, Big Endian byte order\n */\nexports.UINT64_BE = {\n    len: 8,\n    get(b, off) {\n        return readUIntBE(b, off, this.len);\n    },\n    put(b, o, v) {\n        return writeUIntBE(b, v, o, this.len);\n    }\n};\n/**\n * 64-bit signed integer, Big Endian byte order\n */\nexports.INT64_BE = {\n    len: 8,\n    get(b, off) {\n        return readIntBE(b, off, this.len);\n    },\n    put(b, off, v) {\n        return writeIntBE(b, v, off, this.len);\n    }\n};\n/**\n * IEEE 754 16-bit (half precision) float, big endian\n */\nexports.Float16_BE = {\n    len: 2,\n    get(b, off) {\n        return ieee754.read(b, off, false, 10, this.len);\n    },\n    put(b, off, v) {\n        return ieee754.write(b, v, off, false, 10, this.len);\n    }\n};\n/**\n * IEEE 754 16-bit (half precision) float, little endian\n */\nexports.Float16_LE = {\n    len: 2,\n    get(b, off) {\n        return ieee754.read(b, off, true, 10, this.len);\n    },\n    put(b, off, v) {\n        return ieee754.write(b, v, off, true, 10, this.len);\n    }\n};\n/**\n * IEEE 754 32-bit (single precision) float, big endian\n */\nexports.Float32_BE = {\n    len: 4,\n    get(b, off) {\n        return b.readFloatBE(off);\n    },\n    put(b, off, v) {\n        return b.writeFloatBE(v, off);\n    }\n};\n/**\n * IEEE 754 32-bit (single precision) float, little endian\n */\nexports.Float32_LE = {\n    len: 4,\n    get(b, off) {\n        return b.readFloatLE(off);\n    },\n    put(b, off, v) {\n        return b.writeFloatLE(v, off);\n    }\n};\n/**\n * IEEE 754 64-bit (double precision) float, big endian\n */\nexports.Float64_BE = {\n    len: 8,\n    get(b, off) {\n        return b.readDoubleBE(off);\n    },\n    put(b, off, v) {\n        return b.writeDoubleBE(v, off);\n    }\n};\n/**\n * IEEE 754 64-bit (double precision) float, little endian\n */\nexports.Float64_LE = {\n    len: 8,\n    get(b, off) {\n        return b.readDoubleLE(off);\n    },\n    put(b, off, v) {\n        return b.writeDoubleLE(v, off);\n    }\n};\n/**\n * IEEE 754 80-bit (extended precision) float, big endian\n */\nexports.Float80_BE = {\n    len: 10,\n    get(b, off) {\n        return ieee754.read(b, off, false, 63, this.len);\n    },\n    put(b, off, v) {\n        return ieee754.write(b, v, off, false, 63, this.len);\n    }\n};\n/**\n * IEEE 754 80-bit (extended precision) float, little endian\n */\nexports.Float80_LE = {\n    len: 10,\n    get(b, off) {\n        return ieee754.read(b, off, true, 63, this.len);\n    },\n    put(b, off, v) {\n        return ieee754.write(b, v, off, true, 63, this.len);\n    }\n};\n/**\n * Ignore a given number of bytes\n */\nclass IgnoreType {\n    /**\n     * @param len number of bytes to ignore\n     */\n    constructor(len) {\n        this.len = len;\n    }\n    // ToDo: don't read, but skip data\n    get(buf, off) {\n    }\n}\nexports.IgnoreType = IgnoreType;\nclass BufferType {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        return buf.slice(off, off + this.len);\n    }\n}\nexports.BufferType = BufferType;\n/**\n * Consume a fixed number of bytes from the stream and return a string with a specified encoding.\n */\nclass StringType {\n    constructor(len, encoding) {\n        this.len = len;\n        this.encoding = encoding;\n    }\n    get(buf, off) {\n        return buf.toString(this.encoding, off, off + this.len);\n    }\n}\nexports.StringType = StringType;\n/**\n * ANSI Latin 1 String\n * Using windows-1252 / ISO 8859-1 decoding\n */\nclass AnsiStringType {\n    constructor(len) {\n        this.len = len;\n    }\n    static decode(buffer, off, until) {\n        let str = '';\n        for (let i = off; i < until; ++i) {\n            str += AnsiStringType.codePointToString(AnsiStringType.singleByteDecoder(buffer[i]));\n        }\n        return str;\n    }\n    static inRange(a, min, max) {\n        return min <= a && a <= max;\n    }\n    static codePointToString(cp) {\n        if (cp <= 0xFFFF) {\n            return String.fromCharCode(cp);\n        }\n        else {\n            cp -= 0x10000;\n            return String.fromCharCode((cp >> 10) + 0xD800, (cp & 0x3FF) + 0xDC00);\n        }\n    }\n    static singleByteDecoder(bite) {\n        if (AnsiStringType.inRange(bite, 0x00, 0x7F)) {\n            return bite;\n        }\n        const codePoint = AnsiStringType.windows1252[bite - 0x80];\n        if (codePoint === null) {\n            throw Error('invaliding encoding');\n        }\n        return codePoint;\n    }\n    get(buf, off = 0) {\n        return AnsiStringType.decode(buf, off, off + this.len);\n    }\n}\nexports.AnsiStringType = AnsiStringType;\nAnsiStringType.windows1252 = [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352,\n    8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732,\n    8482, 353, 8250, 339, 157, 382, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168,\n    169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,\n    185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,\n    201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,\n    217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,\n    233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,\n    248, 249, 250, 251, 252, 253, 254, 255];\n/**\n * Best effort approach to read up to 64 bit unsigned integer, little endian.\n * Note that JavasScript is limited to 2^53 - 1 bit.\n */\nfunction readUIntLE(buf, offset, byteLength) {\n    offset = offset >>> 0;\n    byteLength = byteLength >>> 0;\n    let val = buf[offset];\n    let mul = 1;\n    let i = 0;\n    while (++i < byteLength && (mul *= 0x100)) {\n        val += buf[offset + i] * mul;\n    }\n    return val;\n}\n/**\n * Best effort approach to write up to 64 bit unsigned integer, little endian.\n * Note that JavasScript is limited to 2^53 - 1 bit.\n */\nfunction writeUIntLE(buf, value, offset, byteLength) {\n    value = +value;\n    offset = offset >>> 0;\n    byteLength = byteLength >>> 0;\n    let mul = 1;\n    let i = 0;\n    buf[offset] = value & 0xFF;\n    while (++i < byteLength && (mul *= 0x100)) {\n        buf[offset + i] = (value / mul) & 0xFF;\n    }\n    return offset + byteLength;\n}\n/**\n * Best effort approach to read 64 but signed integer, little endian.\n * Note that JavasScript is limited to 2^53 - 1 bit.\n */\nfunction readIntLE(buf, offset, byteLength) {\n    offset = offset >>> 0;\n    byteLength = byteLength >>> 0;\n    let val = buf[offset];\n    let mul = 1;\n    let i = 0;\n    while (++i < byteLength && (mul *= 0x100)) {\n        val += buf[offset + i] * mul;\n    }\n    mul *= 0x80;\n    if (val >= mul)\n        val -= Math.pow(2, 8 * byteLength);\n    return val;\n}\n/**\n * Best effort approach to write 64 but signed integer, little endian.\n * Note that JavasScript is limited to 2^53 - 1 bit.\n */\nfunction writeIntLE(buf, value, offset, byteLength) {\n    value = +value;\n    offset = offset >>> 0;\n    let i = 0;\n    let mul = 1;\n    let sub = 0;\n    buf[offset] = value & 0xFF;\n    while (++i < byteLength && (mul *= 0x100)) {\n        if (value < 0 && sub === 0 && buf[offset + i - 1] !== 0) {\n            sub = 1;\n        }\n        buf[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n    }\n    return offset + byteLength;\n}\nexports.writeIntLE = writeIntLE;\n/**\n * Best effort approach to read up to 64 bit unsigned integer, big endian.\n * Note that JavasScript is limited to 2^53 - 1 bit.\n */\nfunction readUIntBE(buf, offset, byteLength) {\n    offset = offset >>> 0;\n    byteLength = byteLength >>> 0;\n    let val = buf[offset + --byteLength];\n    let mul = 1;\n    while (byteLength > 0 && (mul *= 0x100)) {\n        val += buf[offset + --byteLength] * mul;\n    }\n    return val;\n}\nexports.readUIntBE = readUIntBE;\n/**\n * Best effort approach to write up to 64 bit unsigned integer, big endian.\n * Note that JavasScript is limited to 2^53 - 1 bit.\n */\nfunction writeUIntBE(buf, value, offset, byteLength) {\n    value = +value;\n    offset = offset >>> 0;\n    byteLength = byteLength >>> 0;\n    let i = byteLength - 1;\n    let mul = 1;\n    buf[offset + i] = value & 0xFF;\n    while (--i >= 0 && (mul *= 0x100)) {\n        buf[offset + i] = (value / mul) & 0xFF;\n    }\n    return offset + byteLength;\n}\nexports.writeUIntBE = writeUIntBE;\n/**\n * Best effort approach to read 64 but signed integer, big endian.\n * Note that JavasScript is limited to 2^53 - 1 bit.\n */\nfunction readIntBE(buf, offset, byteLength) {\n    offset = offset >>> 0;\n    byteLength = byteLength >>> 0;\n    let i = byteLength;\n    let mul = 1;\n    let val = buf[offset + --i];\n    while (i > 0 && (mul *= 0x100)) {\n        val += buf[offset + --i] * mul;\n    }\n    mul *= 0x80;\n    if (val >= mul)\n        val -= Math.pow(2, 8 * byteLength);\n    return val;\n}\nexports.readIntBE = readIntBE;\n/**\n * Best effort approach to write 64 but signed integer, big endian.\n * Note that JavasScript is limited to 2^53 - 1 bit.\n */\nfunction writeIntBE(buf, value, offset, byteLength) {\n    value = +value;\n    offset = offset >>> 0;\n    let i = byteLength - 1;\n    let mul = 1;\n    let sub = 0;\n    buf[offset + i] = value & 0xFF;\n    while (--i >= 0 && (mul *= 0x100)) {\n        if (value < 0 && sub === 0 && buf[offset + i + 1] !== 0) {\n            sub = 1;\n        }\n        buf[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n    }\n    return offset + byteLength;\n}\nexports.writeIntBE = writeIntBE;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nclass BasicParser {\n    constructor() {\n        this.warnings = []; // ToDo: make these part of the parsing result\n    }\n    /**\n     * Initialize parser with output (metadata), input (tokenizer) & parsing options (options).\n     * @param {INativeMetadataCollector} metadata Output\n     * @param {ITokenizer} tokenizer Input\n     * @param {IOptions} options Parsing options\n     */\n    init(metadata, tokenizer, options) {\n        this.metadata = metadata;\n        this.tokenizer = tokenizer;\n        this.options = options;\n        return this;\n    }\n}\nexports.BasicParser = BasicParser;\n//# sourceMappingURL=BasicParser.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst initDebug = require(\"debug\");\nconst Util_1 = require(\"../common/Util\");\nconst Token = require(\"token-types\");\nconst BasicParser_1 = require(\"../common/BasicParser\");\nconst debug = initDebug('music-metadata:parser:ID3v1');\n/**\n * ID3v1 Genre mappings\n * Ref: https://de.wikipedia.org/wiki/Liste_der_ID3v1-Genres\n */\nexports.Genres = [\n    \"Blues\", \"Classic Rock\", \"Country\", \"Dance\", \"Disco\", \"Funk\", \"Grunge\", \"Hip-Hop\",\n    \"Jazz\", \"Metal\", \"New Age\", \"Oldies\", \"Other\", \"Pop\", \"R&B\", \"Rap\", \"Reggae\", \"Rock\",\n    \"Techno\", \"Industrial\", \"Alternative\", \"Ska\", \"Death Metal\", \"Pranks\", \"Soundtrack\",\n    \"Euro-Techno\", \"Ambient\", \"Trip-Hop\", \"Vocal\", \"Jazz+Funk\", \"Fusion\", \"Trance\",\n    \"Classical\", \"Instrumental\", \"Acid\", \"House\", \"Game\", \"Sound Clip\", \"Gospel\", \"Noise\",\n    \"Alt. Rock\", \"Bass\", \"Soul\", \"Punk\", \"Space\", \"Meditative\", \"Instrumental Pop\",\n    \"Instrumental Rock\", \"Ethnic\", \"Gothic\", \"Darkwave\", \"Techno-Industrial\",\n    \"Electronic\", \"Pop-Folk\", \"Eurodance\", \"Dream\", \"Southern Rock\", \"Comedy\", \"Cult\",\n    \"Gangsta Rap\", \"Top 40\", \"Christian Rap\", \"Pop/Funk\", \"Jungle\", \"Native American\",\n    \"Cabaret\", \"New Wave\", \"Psychedelic\", \"Rave\", \"Showtunes\", \"Trailer\", \"Lo-Fi\", \"Tribal\",\n    \"Acid Punk\", \"Acid Jazz\", \"Polka\", \"Retro\", \"Musical\", \"Rock & Roll\", \"Hard Rock\",\n    \"Folk\", \"Folk/Rock\", \"National Folk\", \"Swing\", \"Fast-Fusion\", \"Bebob\", \"Latin\", \"Revival\",\n    \"Celtic\", \"Bluegrass\", \"Avantgarde\", \"Gothic Rock\", \"Progressive Rock\", \"Psychedelic Rock\",\n    \"Symphonic Rock\", \"Slow Rock\", \"Big Band\", \"Chorus\", \"Easy Listening\", \"Acoustic\", \"Humour\",\n    \"Speech\", \"Chanson\", \"Opera\", \"Chamber Music\", \"Sonata\", \"Symphony\", \"Booty Bass\", \"Primus\",\n    \"Porn Groove\", \"Satire\", \"Slow Jam\", \"Club\", \"Tango\", \"Samba\", \"Folklore\",\n    \"Ballad\", \"Power Ballad\", \"Rhythmic Soul\", \"Freestyle\", \"Duet\", \"Punk Rock\", \"Drum Solo\",\n    \"A Cappella\", \"Euro-House\", \"Dance Hall\", \"Goa\", \"Drum & Bass\", \"Club-House\",\n    \"Hardcore\", \"Terror\", \"Indie\", \"BritPop\", \"Negerpunk\", \"Polsk Punk\", \"Beat\",\n    \"Christian Gangsta Rap\", \"Heavy Metal\", \"Black Metal\", \"Crossover\", \"Contemporary Christian\",\n    \"Christian Rock\", \"Merengue\", \"Salsa\", \"Thrash Metal\", \"Anime\", \"JPop\", \"Synthpop\",\n    \"Abstract\", \"Art Rock\", \"Baroque\", \"Bhangra\", \"Big Beat\", \"Breakbeat\", \"Chillout\",\n    \"Downtempo\", \"Dub\", \"EBM\", \"Eclectic\", \"Electro\", \"Electroclash\", \"Emo\", \"Experimental\",\n    \"Garage\", \"Global\", \"IDM\", \"Illbient\", \"Industro-Goth\", \"Jam Band\", \"Krautrock\",\n    \"Leftfield\", \"Lounge\", \"Math Rock\", \"New Romantic\", \"Nu-Breakz\", \"Post-Punk\", \"Post-Rock\",\n    \"Psytrance\", \"Shoegaze\", \"Space Rock\", \"Trop Rock\", \"World Music\", \"Neoclassical\", \"Audiobook\",\n    \"Audio Theatre\", \"Neue Deutsche Welle\", \"Podcast\", \"Indie Rock\", \"G-Funk\", \"Dubstep\",\n    \"Garage Rock\", \"Psybient\"\n];\n/**\n * Spec: http://id3.org/ID3v1\n * Wiki: https://en.wikipedia.org/wiki/ID3\n */\nconst Iid3v1Token = {\n    len: 128,\n    /**\n     * @param buf Buffer possibly holding the 128 bytes ID3v1.1 metadata header\n     * @param off Offset in buffer in bytes\n     * @returns ID3v1.1 header if first 3 bytes equals 'TAG', otherwise null is returned\n     */\n    get: (buf, off) => {\n        const header = new Id3v1StringType(3).get(buf, off);\n        return header === \"TAG\" ? {\n            header,\n            title: new Id3v1StringType(30).get(buf, off + 3),\n            artist: new Id3v1StringType(30).get(buf, off + 33),\n            album: new Id3v1StringType(30).get(buf, off + 63),\n            year: new Id3v1StringType(4).get(buf, off + 93),\n            comment: new Id3v1StringType(28).get(buf, off + 97),\n            // ID3v1.1 separator for track\n            zeroByte: Token.UINT8.get(buf, off + 127),\n            // track: ID3v1.1 field added by Michael Mutschler\n            track: Token.UINT8.get(buf, off + 126),\n            genre: Token.UINT8.get(buf, off + 127)\n        } : null;\n    }\n};\nclass Id3v1StringType extends Token.StringType {\n    constructor(len) {\n        super(len, \"binary\");\n    }\n    get(buf, off) {\n        let value = super.get(buf, off);\n        value = Util_1.default.trimRightNull(value);\n        value = value.trim();\n        return value.length > 0 ? value : undefined;\n    }\n}\nclass ID3v1Parser extends BasicParser_1.BasicParser {\n    static getGenre(genreIndex) {\n        if (genreIndex < exports.Genres.length) {\n            return exports.Genres[genreIndex];\n        }\n        return undefined; // ToDO: generate warning\n    }\n    parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (!this.tokenizer.fileSize) {\n                debug('Skip checking for ID3v1 because the file-size is unknown');\n                return;\n            }\n            const offset = this.tokenizer.fileSize - Iid3v1Token.len;\n            if (this.tokenizer.position > offset) {\n                debug('Already consumed the last 128 bytes');\n                return;\n            }\n            const header = yield this.tokenizer.readToken(Iid3v1Token, offset);\n            if (header) {\n                debug(\"ID3v1 header found at: pos=%s\", this.tokenizer.fileSize - Iid3v1Token.len);\n                for (const id of [\"title\", \"artist\", \"album\", \"comment\", \"track\", \"year\"]) {\n                    if (header[id] && header[id] !== \"\")\n                        this.addTag(id, header[id]);\n                }\n                const genre = ID3v1Parser.getGenre(header.genre);\n                if (genre)\n                    this.addTag('genre', genre);\n            }\n            else {\n                debug(\"ID3v1 header not found at: pos=%s\", this.tokenizer.fileSize - Iid3v1Token.len);\n            }\n        });\n    }\n    addTag(id, value) {\n        this.metadata.addTag('ID3v1', id, value);\n    }\n}\nexports.ID3v1Parser = ID3v1Parser;\n//# sourceMappingURL=ID3v1Parser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ID3v1Parser_1 = require(\"../id3v1/ID3v1Parser\");\nclass CommonTagMapper {\n    constructor(tagTypes, tagMap) {\n        this.tagTypes = tagTypes;\n        this.tagMap = tagMap;\n    }\n    static parseGenre(origVal) {\n        // match everything inside parentheses\n        const split = origVal.trim().split(/\\((.*?)\\)/g).filter(val => {\n            return val !== '';\n        });\n        const array = [];\n        for (let cur of split) {\n            if (/^\\d+$/.test(cur) && !isNaN(parseInt(cur, 10))) {\n                cur = ID3v1Parser_1.Genres[cur];\n            }\n            array.push(cur);\n        }\n        return array\n            .filter(val => {\n            return val !== undefined;\n        }).join('/');\n    }\n    static fixPictureMimeType(pictureType) {\n        pictureType = pictureType.toLocaleLowerCase();\n        switch (pictureType) {\n            case 'image/jpg':\n                return 'image/jpeg'; // ToDo: register warning\n        }\n        return pictureType;\n    }\n    static toIntOrNull(str) {\n        const cleaned = parseInt(str, 10);\n        return isNaN(cleaned) ? null : cleaned;\n    }\n    // TODO: a string of 1of1 would fail to be converted\n    // converts 1/10 to no : 1, of : 10\n    // or 1 to no : 1, of : 0\n    static normalizeTrack(origVal) {\n        const split = origVal.toString().split('/');\n        return {\n            no: parseInt(split[0], 10) || null,\n            of: parseInt(split[1], 10) || null\n        };\n    }\n    /**\n     * Process and set common tags\n     * @param comTags Target metadata to\n     * write common tags to\n     * @param tag     Native tag\n     * @param value   Native tag value\n     * @return common name\n     */\n    mapGenericTag(tag) {\n        tag = { id: tag.id, value: tag.value }; // clone object\n        this.postMap(tag);\n        // Convert native tag event to generic 'alias' tag\n        const id = this.getCommonName(tag.id);\n        return id ? { id, value: tag.value } : null;\n    }\n    /**\n     * Convert native tag key to common tag key\n     * @tag  Native header tag\n     * @return common tag name (alias)\n     */\n    getCommonName(tag) {\n        return this.tagMap[tag];\n    }\n    /**\n     * Handle post mapping exceptions / correction\n     * @param {string} tag Tag e.g. {\"©alb\", \"Buena Vista Social Club\")\n     */\n    postMap(tag) {\n        return;\n    }\n}\nCommonTagMapper.maxRatingScore = 1;\nexports.CommonTagMapper = CommonTagMapper;\n//# sourceMappingURL=GenericTagMapper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst GenericTagMapper_1 = require(\"../common/GenericTagMapper\");\n/**\n * ID3v1 tag mappings\n */\nconst id3v1TagMap = {\n    title: 'title',\n    artist: 'artist',\n    album: 'album',\n    year: 'year',\n    comment: 'comment',\n    track: 'track',\n    genre: 'genre'\n};\nclass ID3v1TagMapper extends GenericTagMapper_1.CommonTagMapper {\n    constructor() {\n        super(['ID3v1'], id3v1TagMap);\n    }\n}\nexports.ID3v1TagMapper = ID3v1TagMapper;\n//# sourceMappingURL=ID3v1TagMap.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst GenericTagMapper_1 = require(\"../common/GenericTagMapper\");\nconst Util_1 = require(\"../common/Util\");\n/**\n * ID3v2.3/ID3v2.4 tag mappings\n */\nconst id3v24TagMap = {\n    // id3v2.3\n    TIT2: \"title\",\n    TPE1: \"artist\",\n    \"TXXX:Artists\": \"artists\",\n    TPE2: \"albumartist\",\n    TALB: \"album\",\n    TDRV: \"date\",\n    /**\n     * Original release year\n     */\n    TORY: \"originalyear\",\n    TPOS: \"disk\",\n    TCON: \"genre\",\n    APIC: \"picture\",\n    TCOM: \"composer\",\n    \"USLT:description\": \"lyrics\",\n    TSOA: \"albumsort\",\n    TSOT: \"titlesort\",\n    TOAL: \"originalalbum\",\n    TSOP: \"artistsort\",\n    TSO2: \"albumartistsort\",\n    TSOC: \"composersort\",\n    TEXT: \"lyricist\",\n    \"TXXX:Writer\": \"writer\",\n    TPE3: \"conductor\",\n    // 'IPLS:instrument': 'performer:instrument', // ToDo\n    TPE4: \"remixer\",\n    \"IPLS:arranger\": \"arranger\",\n    \"IPLS:engineer\": \"engineer\",\n    \"IPLS:producer\": \"producer\",\n    \"IPLS:DJ-mix\": \"djmixer\",\n    \"IPLS:mix\": \"mixer\",\n    TPUB: \"label\",\n    TIT1: \"grouping\",\n    TIT3: \"subtitle\",\n    TRCK: \"track\",\n    TCMP: \"compilation\",\n    POPM: \"rating\",\n    TBPM: \"bpm\",\n    TMED: \"media\",\n    \"TXXX:CATALOGNUMBER\": \"catalognumber\",\n    \"TXXX:MusicBrainz Album Status\": \"releasestatus\",\n    \"TXXX:MusicBrainz Album Type\": \"releasetype\",\n    /**\n     * Release country as documented: https://picard.musicbrainz.org/docs/mappings/#cite_note-0\n     */\n    \"TXXX:MusicBrainz Album Release Country\": \"releasecountry\",\n    /**\n     * Release country as implemented // ToDo: report\n     */\n    \"TXXX:RELEASECOUNTRY\": \"releasecountry\",\n    \"TXXX:SCRIPT\": \"script\",\n    TLAN: \"language\",\n    TCOP: \"copyright\",\n    WCOP: \"license\",\n    TENC: \"encodedby\",\n    TSSE: \"encodersettings\",\n    \"TXXX:BARCODE\": \"barcode\",\n    TSRC: \"isrc\",\n    \"TXXX:ASIN\": \"asin\",\n    \"TXXX:originalyear\": \"originalyear\",\n    \"UFID:http://musicbrainz.org\": \"musicbrainz_recordingid\",\n    \"TXXX:MusicBrainz Release Track Id\": \"musicbrainz_trackid\",\n    \"TXXX:MusicBrainz Album Id\": \"musicbrainz_albumid\",\n    \"TXXX:MusicBrainz Artist Id\": \"musicbrainz_artistid\",\n    \"TXXX:MusicBrainz Album Artist Id\": \"musicbrainz_albumartistid\",\n    \"TXXX:MusicBrainz Release Group Id\": \"musicbrainz_releasegroupid\",\n    \"TXXX:MusicBrainz Work Id\": \"musicbrainz_workid\",\n    \"TXXX:MusicBrainz TRM Id\": \"musicbrainz_trmid\",\n    \"TXXX:MusicBrainz Disc Id\": \"musicbrainz_discid\",\n    \"TXXX:ACOUSTID_ID\": \"acoustid_id\",\n    \"TXXX:Acoustid Id\": \"acoustid_id\",\n    \"TXXX:Acoustid Fingerprint\": \"acoustid_fingerprint\",\n    \"TXXX:MusicIP PUID\": \"musicip_puid\",\n    \"TXXX:MusicMagic Fingerprint\": \"musicip_fingerprint\",\n    WOAR: \"website\",\n    // id3v2.4\n    // ToDo: In same sequence as defined at http://id3.org/id3v2.4.0-frames\n    TDRC: \"date\",\n    TYER: \"year\",\n    TDOR: \"originaldate\",\n    // 'TMCL:instrument': 'performer:instrument',\n    \"TIPL:arranger\": \"arranger\",\n    \"TIPL:engineer\": \"engineer\",\n    \"TIPL:producer\": \"producer\",\n    \"TIPL:DJ-mix\": \"djmixer\",\n    \"TIPL:mix\": \"mixer\",\n    TMOO: \"mood\",\n    // additional mappings:\n    SYLT: \"lyrics\",\n    TSST: \"discsubtitle\",\n    TKEY: \"key\",\n    COMM: \"comment\",\n    TOPE: \"originalartist\",\n    // Windows Media Player\n    \"PRIV:AverageLevel\": \"averageLevel\",\n    \"PRIV:PeakLevel\": \"peakLevel\",\n    // Discogs\n    \"TXXX:DISCOGS_ARTIST_ID\": \"discogs_artist_id\",\n    \"TXXX:DISCOGS_ARTISTS\": \"artists\",\n    \"TXXX:DISCOGS_ARTIST_NAME\": \"artists\",\n    \"TXXX:DISCOGS_ALBUM_ARTISTS\": \"albumartist\",\n    \"TXXX:DISCOGS_CATALOG\": \"catalognumber\",\n    \"TXXX:DISCOGS_COUNTRY\": \"releasecountry\",\n    \"TXXX:DISCOGS_DATE\": \"originaldate\",\n    \"TXXX:DISCOGS_LABEL\": \"label\",\n    \"TXXX:DISCOGS_LABEL_ID\": \"discogs_label_id\",\n    \"TXXX:DISCOGS_MASTER_RELEASE_ID\": \"discogs_master_release_id\",\n    \"TXXX:DISCOGS_RATING\": \"discogs_rating\",\n    \"TXXX:DISCOGS_RELEASED\": \"date\",\n    \"TXXX:DISCOGS_RELEASE_ID\": \"discogs_release_id\",\n    \"TXXX:DISCOGS_VOTES\": \"discogs_votes\",\n    \"TXXX:CATALOGID\": \"catalognumber\",\n    \"TXXX:STYLE\": \"genre\",\n    \"TXXX:replaygain_track_peak\": \"replaygain_track_peak\",\n    \"TXXX:replaygain_track_gain\": \"replaygain_track_gain\"\n};\nclass ID3v24TagMapper extends GenericTagMapper_1.CommonTagMapper {\n    static toRating(popm) {\n        return {\n            source: popm.email,\n            rating: popm.rating > 0 ? (popm.rating - 1) / 254 * GenericTagMapper_1.CommonTagMapper.maxRatingScore : undefined\n        };\n    }\n    constructor() {\n        super(['ID3v2.3', 'ID3v2.4'], id3v24TagMap);\n    }\n    /**\n     * Handle post mapping exceptions / correction\n     * @param {string} id Tag key e.g. \"©alb\"\n     * @param id e.g. \"Buena Vista Social Club\"\n     * @return Common value e.g. \"Buena Vista Social Club\"\n     */\n    postMap(tag) {\n        switch (tag.id) {\n            case 'UFID': // decode MusicBrainz Recording Id\n                if (tag.value.owner_identifier === 'http://musicbrainz.org') {\n                    tag.id += ':' + tag.value.owner_identifier;\n                    tag.value = Util_1.default.decodeString(tag.value.identifier, 'iso-8859-1');\n                }\n                break;\n            case 'PRIV':\n                switch (tag.value.owner_identifier) {\n                    // decode Windows Media Player\n                    case 'AverageLevel':\n                    case 'PeakValue':\n                        tag.id += ':' + tag.value.owner_identifier;\n                        tag.value = tag.value.data.length === 4 ? tag.value.data.readUInt32LE() : null;\n                        // ToDo: flag warning if: tag.value === null\n                        break;\n                    default:\n                    // Unknown PRIV owner-identifier\n                }\n                break;\n            case 'COMM':\n                tag.value = tag.value ? tag.value.text : null;\n                break;\n            case 'POPM':\n                tag.value = ID3v24TagMapper.toRating(tag.value);\n                break;\n            default:\n                break;\n        }\n    }\n}\nexports.ID3v24TagMapper = ID3v24TagMapper;\n//# sourceMappingURL=ID3v24TagMapper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst GenericTagMapper_1 = require(\"../common/GenericTagMapper\");\n/**\n * ASF Metadata tag mappings.\n * See http://msdn.microsoft.com/en-us/library/ms867702.aspx\n */\nconst asfTagMap = {\n    Title: 'title',\n    Author: 'artist',\n    'WM/AlbumArtist': 'albumartist',\n    'WM/AlbumTitle': 'album',\n    'WM/Year': 'date',\n    'WM/OriginalReleaseTime': 'originaldate',\n    'WM/OriginalReleaseYear': 'originalyear',\n    Description: 'comment',\n    'WM/TrackNumber': 'track',\n    'WM/PartOfSet': 'disk',\n    'WM/Genre': 'genre',\n    'WM/Composer': 'composer',\n    'WM/Lyrics': 'lyrics',\n    'WM/AlbumSortOrder': 'albumsort',\n    'WM/TitleSortOrder': 'titlesort',\n    'WM/ArtistSortOrder': 'artistsort',\n    'WM/AlbumArtistSortOrder': 'albumartistsort',\n    'WM/ComposerSortOrder': 'composersort',\n    'WM/Writer': 'lyricist',\n    'WM/Conductor': 'conductor',\n    'WM/ModifiedBy': 'remixer',\n    'WM/Engineer': 'engineer',\n    'WM/Producer': 'producer',\n    'WM/DJMixer': 'djmixer',\n    'WM/Mixer': 'mixer',\n    'WM/Publisher': 'label',\n    'WM/ContentGroupDescription': 'grouping',\n    'WM/SubTitle': 'subtitle',\n    'WM/SetSubTitle': 'discsubtitle',\n    // 'WM/PartOfSet': 'totaldiscs',\n    'WM/IsCompilation': 'compilation',\n    'WM/SharedUserRating': 'rating',\n    'WM/BeatsPerMinute': 'bpm',\n    'WM/Mood': 'mood',\n    'WM/Media': 'media',\n    'WM/CatalogNo': 'catalognumber',\n    'MusicBrainz/Album Status': 'releasestatus',\n    'MusicBrainz/Album Type': 'releasetype',\n    'MusicBrainz/Album Release Country': 'releasecountry',\n    'WM/Script': 'script',\n    'WM/Language': 'language',\n    Copyright: 'copyright',\n    LICENSE: 'license',\n    'WM/EncodedBy': 'encodedby',\n    'WM/EncodingSettings': 'encodersettings',\n    'WM/Barcode': 'barcode',\n    'WM/ISRC': 'isrc',\n    'MusicBrainz/Track Id': 'musicbrainz_recordingid',\n    'MusicBrainz/Release Track Id': 'musicbrainz_trackid',\n    'MusicBrainz/Album Id': 'musicbrainz_albumid',\n    'MusicBrainz/Artist Id': 'musicbrainz_artistid',\n    'MusicBrainz/Album Artist Id': 'musicbrainz_albumartistid',\n    'MusicBrainz/Release Group Id': 'musicbrainz_releasegroupid',\n    'MusicBrainz/Work Id': 'musicbrainz_workid',\n    'MusicBrainz/TRM Id': 'musicbrainz_trmid',\n    'MusicBrainz/Disc Id': 'musicbrainz_discid',\n    'Acoustid/Id': 'acoustid_id',\n    'Acoustid/Fingerprint': 'acoustid_fingerprint',\n    'MusicIP/PUID': 'musicip_puid',\n    'WM/ARTISTS': 'artists',\n    'WM/InitialKey': 'key',\n    ASIN: 'asin',\n    'WM/Work': 'work',\n    'WM/AuthorURL': 'website',\n    'WM/Picture': 'picture'\n};\nclass AsfTagMapper extends GenericTagMapper_1.CommonTagMapper {\n    static toRating(rating) {\n        return {\n            rating: parseFloat(rating + 1) / 5\n        };\n    }\n    constructor() {\n        super(['asf'], asfTagMap);\n    }\n    postMap(tag) {\n        switch (tag.id) {\n            case 'WM/SharedUserRating':\n                const keys = tag.id.split(':');\n                tag.value = AsfTagMapper.toRating(tag.value);\n                tag.id = keys[0];\n                break;\n        }\n    }\n}\nexports.AsfTagMapper = AsfTagMapper;\n//# sourceMappingURL=AsfTagMapper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst GenericTagMapper_1 = require(\"../common/GenericTagMapper\");\n/**\n * ID3v2.2 tag mappings\n */\nexports.id3v22TagMap = {\n    TT2: 'title',\n    TP1: 'artist',\n    TP2: 'albumartist',\n    TAL: 'album',\n    TYE: 'year',\n    COM: 'comment',\n    TRK: 'track',\n    TPA: 'disk',\n    TCO: 'genre',\n    PIC: 'picture',\n    TCM: 'composer',\n    TOR: 'originaldate',\n    TOT: 'work',\n    TXT: 'lyricist',\n    TP3: 'conductor',\n    TPB: 'label',\n    TT1: 'grouping',\n    TT3: 'subtitle',\n    TLA: 'language',\n    TCR: 'copyright',\n    WCP: 'license',\n    TEN: 'encodedby',\n    TSS: 'encodersettings',\n    WAR: 'website',\n    'COM:iTunPGAP': 'gapless'\n    /* ToDo: iTunes tags:\n    'COM:iTunNORM': ,\n    'COM:iTunSMPB': 'encoder delay',\n    'COM:iTunes_CDDB_IDs'\n    */\n};\nclass ID3v22TagMapper extends GenericTagMapper_1.CommonTagMapper {\n    constructor() {\n        super(['ID3v2.2'], exports.id3v22TagMap);\n    }\n}\nexports.ID3v22TagMapper = ID3v22TagMapper;\n//# sourceMappingURL=ID3v22TagMapper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst GenericTagMapper_1 = require(\"../common/GenericTagMapper\");\n/**\n * ID3v2.2 tag mappings\n */\nconst apev2TagMap = {\n    Title: 'title',\n    Artist: 'artist',\n    Artists: 'artists',\n    'Album Artist': 'albumartist',\n    Album: 'album',\n    Year: 'date',\n    Originalyear: 'originalyear',\n    Originaldate: 'originaldate',\n    Comment: 'comment',\n    Track: 'track',\n    Disc: 'disk',\n    DISCNUMBER: 'disk',\n    Genre: 'genre',\n    'Cover Art (Front)': 'picture',\n    'Cover Art (Back)': 'picture',\n    Composer: 'composer',\n    Lyrics: 'lyrics',\n    ALBUMSORT: 'albumsort',\n    TITLESORT: 'titlesort',\n    WORK: 'work',\n    ARTISTSORT: 'artistsort',\n    ALBUMARTISTSORT: 'albumartistsort',\n    COMPOSERSORT: 'composersort',\n    Lyricist: 'lyricist',\n    Writer: 'writer',\n    Conductor: 'conductor',\n    // 'Performer=artist (instrument)': 'performer:instrument',\n    MixArtist: 'remixer',\n    Arranger: 'arranger',\n    Engineer: 'engineer',\n    Producer: 'producer',\n    DJMixer: 'djmixer',\n    Mixer: 'mixer',\n    Label: 'label',\n    Grouping: 'grouping',\n    Subtitle: 'subtitle',\n    DiscSubtitle: 'discsubtitle',\n    Compilation: 'compilation',\n    BPM: 'bpm',\n    Mood: 'mood',\n    Media: 'media',\n    CatalogNumber: 'catalognumber',\n    MUSICBRAINZ_ALBUMSTATUS: 'releasestatus',\n    MUSICBRAINZ_ALBUMTYPE: 'releasetype',\n    RELEASECOUNTRY: 'releasecountry',\n    Script: 'script',\n    Language: 'language',\n    Copyright: 'copyright',\n    LICENSE: 'license',\n    EncodedBy: 'encodedby',\n    EncoderSettings: 'encodersettings',\n    Barcode: 'barcode',\n    ISRC: 'isrc',\n    ASIN: 'asin',\n    musicbrainz_trackid: 'musicbrainz_recordingid',\n    musicbrainz_releasetrackid: 'musicbrainz_trackid',\n    MUSICBRAINZ_ALBUMID: 'musicbrainz_albumid',\n    MUSICBRAINZ_ARTISTID: 'musicbrainz_artistid',\n    MUSICBRAINZ_ALBUMARTISTID: 'musicbrainz_albumartistid',\n    MUSICBRAINZ_RELEASEGROUPID: 'musicbrainz_releasegroupid',\n    MUSICBRAINZ_WORKID: 'musicbrainz_workid',\n    MUSICBRAINZ_TRMID: 'musicbrainz_trmid',\n    MUSICBRAINZ_DISCID: 'musicbrainz_discid',\n    Acoustid_Id: 'acoustid_id',\n    ACOUSTID_FINGERPRINT: 'acoustid_fingerprint',\n    MUSICIP_PUID: 'musicip_puid',\n    Weblink: 'website'\n};\nclass APEv2TagMapper extends GenericTagMapper_1.CommonTagMapper {\n    constructor() {\n        const upperCaseMap = {};\n        for (const tag in apev2TagMap) {\n            upperCaseMap[tag.toUpperCase()] = apev2TagMap[tag];\n        }\n        super(['APEv2'], upperCaseMap);\n    }\n    /**\n     * @tag  Native header tag\n     * @return common tag name (alias)\n     */\n    getCommonName(tag) {\n        return this.tagMap[tag.toUpperCase()];\n    }\n}\nexports.APEv2TagMapper = APEv2TagMapper;\n//# sourceMappingURL=APEv2TagMapper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst GenericTagMapper_1 = require(\"../common/GenericTagMapper\");\n/**\n * Ref: https://github.com/sergiomb2/libmp4v2/wiki/iTunesMetadata\n */\nconst mp4TagMap = {\n    '©nam': 'title',\n    '©ART': 'artist',\n    aART: 'albumartist',\n    /**\n     * ToDo: Album artist seems to be stored here while Picard documentation says: aART\n     */\n    '----:com.apple.iTunes:Band': 'albumartist',\n    '©alb': 'album',\n    '©day': 'date',\n    '©cmt': 'comment',\n    trkn: 'track',\n    disk: 'disk',\n    '©gen': 'genre',\n    covr: 'picture',\n    '©wrt': 'composer',\n    '©lyr': 'lyrics',\n    soal: 'albumsort',\n    sonm: 'titlesort',\n    soar: 'artistsort',\n    soaa: 'albumartistsort',\n    soco: 'composersort',\n    '----:com.apple.iTunes:LYRICIST': 'lyricist',\n    '----:com.apple.iTunes:CONDUCTOR': 'conductor',\n    '----:com.apple.iTunes:REMIXER': 'remixer',\n    '----:com.apple.iTunes:ENGINEER': 'engineer',\n    '----:com.apple.iTunes:PRODUCER': 'producer',\n    '----:com.apple.iTunes:DJMIXER': 'djmixer',\n    '----:com.apple.iTunes:MIXER': 'mixer',\n    '----:com.apple.iTunes:LABEL': 'label',\n    '©grp': 'grouping',\n    '----:com.apple.iTunes:SUBTITLE': 'subtitle',\n    '----:com.apple.iTunes:DISCSUBTITLE': 'discsubtitle',\n    cpil: 'compilation',\n    tmpo: 'bpm',\n    '----:com.apple.iTunes:MOOD': 'mood',\n    '----:com.apple.iTunes:MEDIA': 'media',\n    '----:com.apple.iTunes:CATALOGNUMBER': 'catalognumber',\n    tvsh: 'tvShow',\n    tvsn: 'tvSeason',\n    tves: 'tvEpisode',\n    sosn: 'tvShowSort',\n    tven: 'tvEpisodeId',\n    tvnn: 'tvNetwork',\n    pcst: 'podcast',\n    purl: 'podcasturl',\n    '----:com.apple.iTunes:MusicBrainz Album Status': 'releasestatus',\n    '----:com.apple.iTunes:MusicBrainz Album Type': 'releasetype',\n    '----:com.apple.iTunes:MusicBrainz Album Release Country': 'releasecountry',\n    '----:com.apple.iTunes:SCRIPT': 'script',\n    '----:com.apple.iTunes:LANGUAGE': 'language',\n    cprt: 'copyright',\n    '----:com.apple.iTunes:LICENSE': 'license',\n    '©too': 'encodedby',\n    pgap: 'gapless',\n    '----:com.apple.iTunes:BARCODE': 'barcode',\n    '----:com.apple.iTunes:ISRC': 'isrc',\n    '----:com.apple.iTunes:ASIN': 'asin',\n    '----:com.apple.iTunes:NOTES': 'comment',\n    '----:com.apple.iTunes:MusicBrainz Track Id': 'musicbrainz_recordingid',\n    '----:com.apple.iTunes:MusicBrainz Release Track Id': 'musicbrainz_trackid',\n    '----:com.apple.iTunes:MusicBrainz Album Id': 'musicbrainz_albumid',\n    '----:com.apple.iTunes:MusicBrainz Artist Id': 'musicbrainz_artistid',\n    '----:com.apple.iTunes:MusicBrainz Album Artist Id': 'musicbrainz_albumartistid',\n    '----:com.apple.iTunes:MusicBrainz Release Group Id': 'musicbrainz_releasegroupid',\n    '----:com.apple.iTunes:MusicBrainz Work Id': 'musicbrainz_workid',\n    '----:com.apple.iTunes:MusicBrainz TRM Id': 'musicbrainz_trmid',\n    '----:com.apple.iTunes:MusicBrainz Disc Id': 'musicbrainz_discid',\n    '----:com.apple.iTunes:Acoustid Id': 'acoustid_id',\n    '----:com.apple.iTunes:Acoustid Fingerprint': 'acoustid_fingerprint',\n    '----:com.apple.iTunes:MusicIP PUID': 'musicip_puid',\n    '----:com.apple.iTunes:fingerprint': 'musicip_fingerprint',\n    // Additional mappings:\n    gnre: 'genre',\n    '----:com.apple.iTunes:ALBUMARTISTSORT': 'albumartistsort',\n    '----:com.apple.iTunes:ARTISTS': 'artists',\n    '----:com.apple.iTunes:ORIGINALDATE': 'originaldate',\n    '----:com.apple.iTunes:ORIGINALYEAR': 'originalyear',\n    // '----:com.apple.iTunes:PERFORMER': 'performer'\n    desc: 'description',\n    ldes: 'description'\n};\nexports.tagType = 'iTunes';\nclass MP4TagMapper extends GenericTagMapper_1.CommonTagMapper {\n    constructor() {\n        super([exports.tagType], mp4TagMap);\n    }\n}\nexports.MP4TagMapper = MP4TagMapper;\n//# sourceMappingURL=MP4TagMapper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst GenericTagMapper_1 = require(\"../../common/GenericTagMapper\");\n/**\n * Vorbis tag mappings\n *\n * Mapping from native header format to one or possibly more 'common' entries\n * The common entries aim to read the same information from different media files\n * independent of the underlying format\n */\nconst vorbisTagMap = {\n    TITLE: \"title\",\n    ARTIST: \"artist\",\n    ARTISTS: \"artists\",\n    ALBUMARTIST: \"albumartist\",\n    ALBUM: \"album\",\n    DATE: \"date\",\n    ORIGINALDATE: \"originaldate\",\n    ORIGINALYEAR: \"originalyear\",\n    COMMENT: \"comment\",\n    TRACKNUMBER: \"track\",\n    DISCNUMBER: \"disk\",\n    GENRE: \"genre\",\n    METADATA_BLOCK_PICTURE: \"picture\",\n    COMPOSER: \"composer\",\n    LYRICS: \"lyrics\",\n    ALBUMSORT: \"albumsort\",\n    TITLESORT: \"titlesort\",\n    WORK: \"work\",\n    ARTISTSORT: \"artistsort\",\n    ALBUMARTISTSORT: \"albumartistsort\",\n    COMPOSERSORT: \"composersort\",\n    LYRICIST: \"lyricist\",\n    WRITER: \"writer\",\n    CONDUCTOR: \"conductor\",\n    // 'PERFORMER=artist (instrument)': 'performer:instrument', // ToDo\n    REMIXER: \"remixer\",\n    ARRANGER: \"arranger\",\n    ENGINEER: \"engineer\",\n    PRODUCER: \"producer\",\n    DJMIXER: \"djmixer\",\n    MIXER: \"mixer\",\n    LABEL: \"label\",\n    GROUPING: \"grouping\",\n    SUBTITLE: \"subtitle\",\n    DISCSUBTITLE: \"discsubtitle\",\n    TRACKTOTAL: \"totaltracks\",\n    DISCTOTAL: \"totaldiscs\",\n    COMPILATION: \"compilation\",\n    RATING: \"rating\",\n    BPM: \"bpm\",\n    MOOD: \"mood\",\n    MEDIA: \"media\",\n    CATALOGNUMBER: \"catalognumber\",\n    RELEASESTATUS: \"releasestatus\",\n    RELEASETYPE: \"releasetype\",\n    RELEASECOUNTRY: \"releasecountry\",\n    SCRIPT: \"script\",\n    LANGUAGE: \"language\",\n    COPYRIGHT: \"copyright\",\n    LICENSE: \"license\",\n    ENCODEDBY: \"encodedby\",\n    ENCODERSETTINGS: \"encodersettings\",\n    BARCODE: \"barcode\",\n    ISRC: \"isrc\",\n    ASIN: \"asin\",\n    MUSICBRAINZ_TRACKID: \"musicbrainz_recordingid\",\n    MUSICBRAINZ_RELEASETRACKID: \"musicbrainz_trackid\",\n    MUSICBRAINZ_ALBUMID: \"musicbrainz_albumid\",\n    MUSICBRAINZ_ARTISTID: \"musicbrainz_artistid\",\n    MUSICBRAINZ_ALBUMARTISTID: \"musicbrainz_albumartistid\",\n    MUSICBRAINZ_RELEASEGROUPID: \"musicbrainz_releasegroupid\",\n    MUSICBRAINZ_WORKID: \"musicbrainz_workid\",\n    MUSICBRAINZ_TRMID: \"musicbrainz_trmid\",\n    MUSICBRAINZ_DISCID: \"musicbrainz_discid\",\n    ACOUSTID_ID: \"acoustid_id\",\n    ACOUSTID_ID_FINGERPRINT: \"acoustid_fingerprint\",\n    MUSICIP_PUID: \"musicip_puid\",\n    // 'FINGERPRINT=MusicMagic Fingerprint {fingerprint}': 'musicip_fingerprint', // ToDo\n    WEBSITE: \"website\",\n    NOTES: \"notes\",\n    TOTALTRACKS: \"totaltracks\",\n    TOTALDISCS: \"totaldiscs\",\n    // Discogs\n    DISCOGS_ARTIST_ID: \"discogs_artist_id\",\n    DISCOGS_ARTISTS: \"artists\",\n    DISCOGS_ARTIST_NAME: \"artists\",\n    DISCOGS_ALBUM_ARTISTS: \"albumartist\",\n    DISCOGS_CATALOG: \"catalognumber\",\n    DISCOGS_COUNTRY: \"releasecountry\",\n    DISCOGS_DATE: \"originaldate\",\n    DISCOGS_LABEL: \"label\",\n    DISCOGS_LABEL_ID: \"discogs_label_id\",\n    DISCOGS_MASTER_RELEASE_ID: \"discogs_master_release_id\",\n    DISCOGS_RATING: \"discogs_rating\",\n    DISCOGS_RELEASED: \"date\",\n    DISCOGS_RELEASE_ID: \"discogs_release_id\",\n    DISCOGS_VOTES: \"discogs_votes\",\n    CATALOGID: \"catalognumber\",\n    STYLE: \"genre\",\n    REPLAYGAIN_TRACK_GAIN: \"replaygain_track_gain\",\n    REPLAYGAIN_TRACK_PEAK: \"replaygain_track_peak\"\n};\nclass VorbisTagMapper extends GenericTagMapper_1.CommonTagMapper {\n    static toRating(email, rating) {\n        return {\n            source: email ? email.toLowerCase() : email,\n            rating: parseFloat(rating) * GenericTagMapper_1.CommonTagMapper.maxRatingScore\n        };\n    }\n    constructor() {\n        super(['vorbis'], vorbisTagMap);\n    }\n    postMap(tag) {\n        if (tag.id.indexOf('RATING:') === 0) {\n            const keys = tag.id.split(':');\n            tag.value = VorbisTagMapper.toRating(keys[1], tag.value);\n            tag.id = keys[0];\n        }\n    }\n}\nexports.VorbisTagMapper = VorbisTagMapper;\n//# sourceMappingURL=VorbisTagMapper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst GenericTagMapper_1 = require(\"../common/GenericTagMapper\");\n/**\n * RIFF Info Tags; part of the EXIF 2.3\n * Ref: http://owl.phy.queensu.ca/~phil/exiftool/TagNames/RIFF.html#Info\n */\nexports.riffInfoTagMap = {\n    IART: 'artist',\n    ICRD: 'date',\n    INAM: 'title',\n    TITL: 'title',\n    IPRD: 'album',\n    ITRK: 'track',\n    COMM: 'comment',\n    ICMT: 'comment',\n    ICNT: 'releasecountry',\n    GNRE: 'genre',\n    IWRI: 'writer',\n    RATE: 'rating',\n    YEAR: 'year',\n    ISFT: 'encodedby',\n    CODE: 'encodedby',\n    TURL: 'website',\n    IGNR: 'genre',\n    IENG: 'engineer',\n    ITCH: 'technician',\n    IMED: 'media',\n    IRPD: 'album' // Product, where the file was intended for\n};\nclass RiffInfoTagMapper extends GenericTagMapper_1.CommonTagMapper {\n    constructor() {\n        super(['exif'], exports.riffInfoTagMap);\n    }\n}\nexports.RiffInfoTagMapper = RiffInfoTagMapper;\n//# sourceMappingURL=RiffInfoTagMap.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst ID3v1TagMap_1 = require(\"../id3v1/ID3v1TagMap\");\nconst ID3v24TagMapper_1 = require(\"../id3v2/ID3v24TagMapper\");\nconst AsfTagMapper_1 = require(\"../asf/AsfTagMapper\");\nconst ID3v22TagMapper_1 = require(\"../id3v2/ID3v22TagMapper\");\nconst APEv2TagMapper_1 = require(\"../apev2/APEv2TagMapper\");\nconst MP4TagMapper_1 = require(\"../mp4/MP4TagMapper\");\nconst VorbisTagMapper_1 = require(\"../ogg/vorbis/VorbisTagMapper\");\nconst RiffInfoTagMap_1 = require(\"../riff/RiffInfoTagMap\");\nclass CombinedTagMapper {\n    constructor() {\n        this.tagMappers = {};\n        [\n            new ID3v1TagMap_1.ID3v1TagMapper(),\n            new ID3v22TagMapper_1.ID3v22TagMapper(),\n            new ID3v24TagMapper_1.ID3v24TagMapper(),\n            new MP4TagMapper_1.MP4TagMapper(),\n            new MP4TagMapper_1.MP4TagMapper(),\n            new VorbisTagMapper_1.VorbisTagMapper(),\n            new APEv2TagMapper_1.APEv2TagMapper(),\n            new AsfTagMapper_1.AsfTagMapper(),\n            new RiffInfoTagMap_1.RiffInfoTagMapper()\n        ].forEach(mapper => {\n            this.registerTagMapper(mapper);\n        });\n    }\n    /**\n     * Convert native to generic (common) tags\n     * @param tagType Originating tag format\n     * @param tag     Native tag to map to a generic tag id\n     * @return Generic tag result (output of this function)\n     */\n    mapTag(tagType, tag) {\n        const tagMapper = this.tagMappers[tagType];\n        if (tagMapper) {\n            return this.tagMappers[tagType].mapGenericTag(tag);\n        }\n        throw new Error(\"No generic tag mapper defined for tag-format: \" + tagType);\n    }\n    registerTagMapper(genericTagMapper) {\n        for (const tagType of genericTagMapper.tagTypes) {\n            this.tagMappers[tagType] = genericTagMapper;\n        }\n    }\n}\nexports.CombinedTagMapper = CombinedTagMapper;\n//# sourceMappingURL=CombinedTagMapper.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst _debug = require(\"debug\");\nconst GenericTagTypes_1 = require(\"./GenericTagTypes\");\nconst CombinedTagMapper_1 = require(\"./CombinedTagMapper\");\nconst GenericTagMapper_1 = require(\"./GenericTagMapper\");\nconst debug = _debug(\"music-metadata:collector\");\nconst TagPriority = ['APEv2', 'vorbis', 'ID3v2.4', 'ID3v2.3', 'ID3v2.2', 'exif', 'asf', 'iTunes', 'ID3v1'];\n/**\n * Provided to the parser to uodate the metadata result.\n * Responsible for triggering async updates\n */\nclass MetadataCollector {\n    constructor(opts) {\n        this.opts = opts;\n        this.format = {\n            tagTypes: []\n        };\n        this.native = {};\n        this.common = {\n            track: { no: null, of: null },\n            disk: { no: null, of: null }\n        };\n        /**\n         * Keeps track of origin priority for each mapped id\n         */\n        this.commonOrigin = {};\n        /**\n         * Maps a tag type to a priority\n         */\n        this.originPriority = {};\n        this.tagMapper = new CombinedTagMapper_1.CombinedTagMapper();\n        let priority = 1;\n        for (const tagType of TagPriority) {\n            this.originPriority[tagType] = priority++;\n        }\n        this.originPriority.artificial = 500; // Filled using alternative tags\n        this.originPriority.id3v1 = 600; // Consider worst due to field length limit\n    }\n    /**\n     * @returns {boolean} true if one or more tags have been found\n     */\n    hasAny() {\n        for (const tagType in this.native) {\n            return true;\n        }\n        return false;\n    }\n    setFormat(key, value) {\n        debug(`format: ${key} = ${value}`);\n        this.format[key] = value; // as any to override readonly\n        if (this.opts.observer) {\n            this.opts.observer({ metadata: this, tag: { type: 'format', id: key, value } });\n        }\n    }\n    addTag(tagType, tagId, value) {\n        debug(`tag ${tagType}.${tagId} = ${value}`);\n        if (!this.native[tagType]) {\n            this.format.tagTypes.push(tagType);\n            this.native[tagType] = [];\n        }\n        this.native[tagType].push({ id: tagId, value });\n        this.toCommon(tagType, tagId, value);\n    }\n    getNativeMetadata() {\n        return {\n            format: this.format,\n            native: this.native\n        };\n    }\n    postMap(tagType, tag) {\n        // Common tag (alias) found\n        // check if we need to do something special with common tag\n        // if the event has been aliased then we need to clean it before\n        // it is emitted to the user. e.g. genre (20) -> Electronic\n        switch (tag.id) {\n            case 'artist':\n                if (this.commonOrigin.artist === this.originPriority[tagType]) {\n                    // Assume the artist field is used as artists\n                    return this.postMap('artificial', { id: 'artists', value: tag.value });\n                }\n                if (!this.common.artists) {\n                    // Fill artists using artist source\n                    this.setGenericTag('artificial', { id: 'artists', value: tag.value });\n                }\n                break;\n            case 'artists':\n                if (!this.common.artist || this.commonOrigin.artist === this.originPriority.artificial) {\n                    if (!this.common.artists || this.common.artists.indexOf(tag.value) === -1) {\n                        // Fill artist using artists source\n                        const artists = (this.common.artists || []).concat([tag.value]);\n                        const value = joinArtists(artists);\n                        const artistTag = { id: 'artist', value };\n                        this.setGenericTag('artificial', artistTag);\n                    }\n                }\n                break;\n            case 'genre':\n                tag.value = GenericTagMapper_1.CommonTagMapper.parseGenre(tag.value);\n                break;\n            case 'picture':\n                tag.value.format = GenericTagMapper_1.CommonTagMapper.fixPictureMimeType(tag.value.format);\n                break;\n            case 'totaltracks':\n                this.common.track.of = GenericTagMapper_1.CommonTagMapper.toIntOrNull(tag.value);\n                return;\n            case 'totaldiscs':\n                this.common.disk.of = GenericTagMapper_1.CommonTagMapper.toIntOrNull(tag.value);\n                return;\n            case 'track':\n            case 'disk':\n                const of = this.common[tag.id].of; // store of value, maybe maybe overwritten\n                this.common[tag.id] = GenericTagMapper_1.CommonTagMapper.normalizeTrack(tag.value);\n                this.common[tag.id].of = of != null ? of : this.common[tag.id].of;\n                return;\n            case 'year':\n            case 'originalyear':\n                tag.value = parseInt(tag.value, 10);\n                break;\n            case 'date':\n                // ToDo: be more strict on 'YYYY...'\n                const year = parseInt(tag.value.substr(0, 4), 10);\n                if (year && !isNaN(year)) {\n                    this.common.year = year;\n                }\n                break;\n            case 'discogs_label_id':\n            case 'discogs_release_id':\n            case 'discogs_master_release_id':\n            case 'discogs_artist_id':\n            case 'discogs_votes':\n                tag.value = typeof tag.value === 'string' ? parseInt(tag.value, 10) : tag.value;\n                break;\n            case 'replaygain_track_peak':\n                tag.value = typeof tag.value === 'string' ? parseFloat(tag.value) : tag.value;\n                break;\n            case 'gapless': // iTunes gap-less flag\n                tag.value = tag.value === \"1\"; // boolean\n                break;\n            default:\n            // nothing to do\n        }\n        this.setGenericTag(tagType, tag);\n    }\n    /**\n     * Convert native tags to common tags\n     * @returns {IAudioMetadata} Native + common tags\n     */\n    toCommonMetadata() {\n        return {\n            format: this.format,\n            native: this.opts.native ? this.native : undefined,\n            common: this.common\n        };\n    }\n    /**\n     * Convert native tag to common tags\n     */\n    toCommon(tagType, tagId, value) {\n        const tag = { id: tagId, value };\n        const genericTag = this.tagMapper.mapTag(tagType, tag);\n        if (genericTag) {\n            this.postMap(tagType, genericTag);\n        }\n    }\n    /**\n     * Set generic tag\n     * @param {GenericTagId} tagId\n     * @param {TagType} tagType originating header type, used to prioritize concurrent mappings\n     * @param value\n     */\n    setGenericTag(tagType, tag) {\n        debug(`common.${tag.id} = ${tag.value}`);\n        const prio0 = this.commonOrigin[tag.id] || 1000;\n        const prio1 = this.originPriority[tagType];\n        if (GenericTagTypes_1.isSingleton(tag.id)) {\n            if (prio1 <= prio0) {\n                this.common[tag.id] = tag.value;\n                this.commonOrigin[tag.id] = prio1;\n            }\n            else {\n                return debug(`Ignore native tag (singleton): ${tagType}.${tag.id} = ${tag.value}`);\n            }\n        }\n        else {\n            if (prio1 === prio0) {\n                if (!GenericTagTypes_1.isUnique(tag.id) || this.common[tag.id].indexOf(tag.value) === -1) {\n                    this.common[tag.id].push(tag.value);\n                }\n                else {\n                    debug(`Ignore duplicate value: ${tagType}.${tag.id} = ${tag.value}`);\n                }\n                // no effect? this.commonOrigin[tag.id] = prio1;\n            }\n            else if (prio1 < prio0) {\n                this.common[tag.id] = [tag.value];\n                this.commonOrigin[tag.id] = prio1;\n            }\n            else {\n                return debug(`Ignore native tag (list): ${tagType}.${tag.id} = ${tag.value}`);\n            }\n        }\n        if (this.opts.observer) {\n            this.opts.observer({ metadata: this, tag: { type: 'common', id: tag.id, value: tag.value } });\n        }\n        // ToDo: trigger metadata event\n    }\n}\nexports.MetadataCollector = MetadataCollector;\nfunction joinArtists(artists) {\n    if (artists.length > 2) {\n        return artists.slice(0, artists.length - 1).join(', ') + ' & ' + artists[artists.length - 1];\n    }\n    return artists.join(' & ');\n}\nexports.joinArtists = joinArtists;\n//# sourceMappingURL=MetadataCollector.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst Util_1 = require(\"../common/Util\");\n/**\n * The picture type according to the ID3v2 APIC frame\n * Ref: http://id3.org/id3v2.3.0#Attached_picture\n */\nvar AttachedPictureType;\n(function (AttachedPictureType) {\n    AttachedPictureType[AttachedPictureType[\"Other\"] = 0] = \"Other\";\n    AttachedPictureType[AttachedPictureType[\"32x32 pixels 'file icon' (PNG only)\"] = 1] = \"32x32 pixels 'file icon' (PNG only)\";\n    AttachedPictureType[AttachedPictureType[\"Other file icon\"] = 2] = \"Other file icon\";\n    AttachedPictureType[AttachedPictureType[\"Cover (front)\"] = 3] = \"Cover (front)\";\n    AttachedPictureType[AttachedPictureType[\"Cover (back)\"] = 4] = \"Cover (back)\";\n    AttachedPictureType[AttachedPictureType[\"Leaflet page\"] = 5] = \"Leaflet page\";\n    AttachedPictureType[AttachedPictureType[\"Media (e.g. label side of CD)\"] = 6] = \"Media (e.g. label side of CD)\";\n    AttachedPictureType[AttachedPictureType[\"Lead artist/lead performer/soloist\"] = 7] = \"Lead artist/lead performer/soloist\";\n    AttachedPictureType[AttachedPictureType[\"Artist/performer\"] = 8] = \"Artist/performer\";\n    AttachedPictureType[AttachedPictureType[\"Conductor\"] = 9] = \"Conductor\";\n    AttachedPictureType[AttachedPictureType[\"Band/Orchestra\"] = 10] = \"Band/Orchestra\";\n    AttachedPictureType[AttachedPictureType[\"Composer\"] = 11] = \"Composer\";\n    AttachedPictureType[AttachedPictureType[\"Lyricist/text writer\"] = 12] = \"Lyricist/text writer\";\n    AttachedPictureType[AttachedPictureType[\"Recording Location\"] = 13] = \"Recording Location\";\n    AttachedPictureType[AttachedPictureType[\"During recording\"] = 14] = \"During recording\";\n    AttachedPictureType[AttachedPictureType[\"During performance\"] = 15] = \"During performance\";\n    AttachedPictureType[AttachedPictureType[\"Movie/video screen capture\"] = 16] = \"Movie/video screen capture\";\n    AttachedPictureType[AttachedPictureType[\"A bright coloured fish\"] = 17] = \"A bright coloured fish\";\n    AttachedPictureType[AttachedPictureType[\"Illustration\"] = 18] = \"Illustration\";\n    AttachedPictureType[AttachedPictureType[\"Band/artist logotype\"] = 19] = \"Band/artist logotype\";\n    AttachedPictureType[AttachedPictureType[\"Publisher/Studio logotype\"] = 20] = \"Publisher/Studio logotype\";\n})(AttachedPictureType = exports.AttachedPictureType || (exports.AttachedPictureType = {}));\nclass ID3v2Token {\n}\n/**\n * 28 bits (representing up to 256MB) integer, the msb is 0 to avoid 'false syncsignals'.\n * 4 * %0xxxxxxx\n */\nID3v2Token.UINT32SYNCSAFE = {\n    get: (buf, off) => {\n        return buf[off + 3] & 0x7f | ((buf[off + 2]) << 7) |\n            ((buf[off + 1]) << 14) | ((buf[off]) << 21);\n    },\n    len: 4\n};\n/**\n * ID3v2 header\n * Ref: http://id3.org/id3v2.3.0#ID3v2_header\n * ToDo\n */\nID3v2Token.Header = {\n    len: 10,\n    get: (buf, off) => {\n        return {\n            // ID3v2/file identifier   \"ID3\"\n            fileIdentifier: new Token.StringType(3, 'ascii').get(buf, off),\n            // ID3v2 versionIndex\n            version: {\n                major: Token.INT8.get(buf, off + 3),\n                revision: Token.INT8.get(buf, off + 4)\n            },\n            // ID3v2 flags\n            flags: {\n                // Raw flags value\n                raw: Token.INT8.get(buf, off + 4),\n                // Unsynchronisation\n                unsynchronisation: Util_1.default.strtokBITSET.get(buf, off + 5, 7),\n                // Extended header\n                isExtendedHeader: Util_1.default.strtokBITSET.get(buf, off + 5, 6),\n                // Experimental indicator\n                expIndicator: Util_1.default.strtokBITSET.get(buf, off + 5, 5),\n                footer: Util_1.default.strtokBITSET.get(buf, off + 5, 4)\n            },\n            size: ID3v2Token.UINT32SYNCSAFE.get(buf, off + 6)\n        };\n    }\n};\nID3v2Token.ExtendedHeader = {\n    len: 10,\n    get: (buf, off) => {\n        return {\n            // Extended header size\n            size: Token.UINT32_BE.get(buf, off),\n            // Extended Flags\n            extendedFlags: Token.UINT16_BE.get(buf, off + 4),\n            // Size of padding\n            sizeOfPadding: Token.UINT32_BE.get(buf, off + 6),\n            // CRC data present\n            crcDataPresent: Util_1.default.strtokBITSET.get(buf, off + 4, 31)\n        };\n    }\n};\nexports.ID3v2Token = ID3v2Token;\n//# sourceMappingURL=ID3v2.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst initDebug = require(\"debug\");\nconst Token = require(\"token-types\");\nconst Util_1 = require(\"../common/Util\");\nconst ID3v2_1 = require(\"./ID3v2\");\nconst debug = initDebug('music-metadata:id3v2:frame-parser');\nclass FrameParser {\n    static readData(b, type, major, includeCovers) {\n        const encoding = FrameParser.getTextEncoding(b[0]);\n        const length = b.length;\n        let offset = 0;\n        let output = []; // ToDo\n        const nullTerminatorLength = FrameParser.getNullTerminatorLength(encoding);\n        let fzero;\n        const out = {};\n        switch (type !== 'TXXX' && type[0] === 'T' ? 'T*' : type) {\n            case 'T*': // 4.2.1. Text information frames - details\n            case 'IPLS': // v2.3: Involved people list\n                const text = Util_1.default.decodeString(b.slice(1), encoding).replace(/\\x00+$/, '');\n                switch (type) {\n                    case 'TMCL': // Musician credits list\n                    case 'TIPL': // Involved people list\n                    case 'IPLS': // Involved people list\n                        output = FrameParser.splitValue(4, text);\n                        output = FrameParser.functionList(output);\n                        break;\n                    case 'TRK':\n                    case 'TRCK':\n                    case 'TPOS':\n                        output = text;\n                        break;\n                    case 'TCOM':\n                    case 'TEXT':\n                    case 'TOLY':\n                    case 'TOPE':\n                    case 'TPE1':\n                    case 'TSRC':\n                        // id3v2.3 defines that TCOM, TEXT, TOLY, TOPE & TPE1 values are separated by /\n                        output = FrameParser.splitValue(major, text);\n                        break;\n                    default:\n                        output = major >= 4 ? FrameParser.splitValue(major, text) : [text];\n                }\n                break;\n            case 'TXXX':\n                output = FrameParser.readIdentifierAndData(b, offset + 1, length, encoding);\n                output = {\n                    description: output.id,\n                    text: FrameParser.splitValue(major, Util_1.default.decodeString(output.data, encoding).replace(/\\x00+$/, ''))\n                };\n                break;\n            case 'PIC':\n            case 'APIC':\n                if (includeCovers) {\n                    const pic = {};\n                    offset += 1;\n                    switch (major) {\n                        case 2:\n                            pic.format = Util_1.default.decodeString(b.slice(offset, offset + 3), encoding);\n                            offset += 3;\n                            break;\n                        case 3:\n                        case 4:\n                            const enc = 'iso-8859-1';\n                            fzero = Util_1.default.findZero(b, offset, length, enc);\n                            pic.format = Util_1.default.decodeString(b.slice(offset, fzero), enc);\n                            offset = fzero + 1;\n                            break;\n                        default:\n                            throw new Error('Warning: unexpected major versionIndex: ' + major);\n                    }\n                    pic.format = FrameParser.fixPictureMimeType(pic.format);\n                    pic.type = ID3v2_1.AttachedPictureType[b[offset]];\n                    offset += 1;\n                    fzero = Util_1.default.findZero(b, offset, length, encoding);\n                    pic.description = Util_1.default.decodeString(b.slice(offset, fzero), encoding);\n                    offset = fzero + nullTerminatorLength;\n                    pic.data = Buffer.from(b.slice(offset, length));\n                    output = pic;\n                }\n                break;\n            case 'CNT':\n            case 'PCNT':\n                output = Token.UINT32_BE.get(b, 0);\n                break;\n            case 'SYLT':\n                // skip text encoding (1 byte),\n                //      language (3 bytes),\n                //      time stamp format (1 byte),\n                //      content tagTypes (1 byte),\n                //      content descriptor (1 byte)\n                offset += 7;\n                output = [];\n                while (offset < length) {\n                    const txt = b.slice(offset, offset = Util_1.default.findZero(b, offset, length, encoding));\n                    offset += 5; // push offset forward one +  4 byte timestamp\n                    output.push(Util_1.default.decodeString(txt, encoding));\n                }\n                break;\n            case 'ULT':\n            case 'USLT':\n            case 'COM':\n            case 'COMM':\n                offset += 1;\n                out.language = Util_1.default.decodeString(b.slice(offset, offset + 3), 'iso-8859-1');\n                offset += 3;\n                fzero = Util_1.default.findZero(b, offset, length, encoding);\n                out.description = Util_1.default.decodeString(b.slice(offset, fzero), encoding);\n                offset = fzero + nullTerminatorLength;\n                out.text = Util_1.default.decodeString(b.slice(offset, length), encoding).replace(/\\x00+$/, '');\n                output = [out];\n                break;\n            case 'UFID':\n                output = FrameParser.readIdentifierAndData(b, offset, length, 'iso-8859-1');\n                output = { owner_identifier: output.id, identifier: output.data };\n                break;\n            case 'PRIV': // private frame\n                output = FrameParser.readIdentifierAndData(b, offset, length, 'iso-8859-1');\n                output = { owner_identifier: output.id, data: output.data };\n                break;\n            case 'POPM': // Popularimeter\n                fzero = Util_1.default.findZero(b, offset, length, encoding);\n                const email = Util_1.default.decodeString(b.slice(offset, fzero), encoding);\n                offset = fzero + FrameParser.getNullTerminatorLength(encoding);\n                const dataLen = length - offset;\n                output = {\n                    email,\n                    rating: b.readUInt8(offset),\n                    counter: dataLen >= 5 ? b.readUInt32BE(offset + 1) : undefined\n                };\n                break;\n            case 'GEOB': { // General encapsulated object\n                fzero = Util_1.default.findZero(b, offset + 1, length, encoding);\n                const mimeType = Util_1.default.decodeString(b.slice(offset + 1, fzero), 'iso-8859-1');\n                offset = fzero + 1;\n                fzero = Util_1.default.findZero(b, offset, length - offset, encoding);\n                const filename = Util_1.default.decodeString(b.slice(offset + 1, fzero), 'iso-8859-1');\n                offset = fzero + 1;\n                fzero = Util_1.default.findZero(b, offset, length - offset, encoding);\n                const description = Util_1.default.decodeString(b.slice(offset + 1, fzero), 'iso-8859-1');\n                output = {\n                    type: mimeType,\n                    filename,\n                    description,\n                    data: b.slice(offset + 1, length)\n                };\n                break;\n            }\n            // W-Frames:\n            case 'WCOM':\n            case 'WCOP':\n            case 'WOAF':\n            case 'WOAR':\n            case 'WOAS':\n            case 'WORS':\n            case 'WPAY':\n            case 'WPUB':\n                // Decode URL\n                output = Util_1.default.decodeString(b.slice(offset, fzero), encoding);\n                break;\n            case 'WXXX': {\n                // Decode URL\n                fzero = Util_1.default.findZero(b, offset + 1, length, encoding);\n                const description = Util_1.default.decodeString(b.slice(offset + 1, fzero), 'iso-8859-1');\n                offset = fzero + 1;\n                fzero = Util_1.default.findZero(b, offset, length - offset, encoding);\n                output = { description, url: Util_1.default.decodeString(b.slice(offset, length - offset), encoding) };\n                break;\n            }\n            case 'MCDI': {\n                // Music CD identifier\n                output = b.slice(0, length);\n                break;\n            }\n            default:\n                debug('Warning: unsupported id3v2-tag-type: ' + type);\n                break;\n        }\n        return output;\n    }\n    static fixPictureMimeType(pictureType) {\n        pictureType = pictureType.toLocaleLowerCase();\n        switch (pictureType) {\n            case 'jpg':\n                return 'image/jpeg';\n            case 'png':\n                return 'image/png';\n        }\n        return pictureType;\n    }\n    /**\n     * Converts TMCL (Musician credits list) or TIPL (Involved people list)\n     * @param entries\n     */\n    static functionList(entries) {\n        const res = {};\n        for (let i = 0; i + 1 < entries.length; i += 2) {\n            const names = entries[i + 1].split(',');\n            res[entries[i]] = res.hasOwnProperty(entries[i]) ? res[entries[i]].concat(names) : names;\n        }\n        return res;\n    }\n    /**\n     * id3v2.4 defines that multiple T* values are separated by 0x00\n     * id3v2.3 defines that TCOM, TEXT, TOLY, TOPE & TPE1 values are separated by /\n     * @param {number} major Major version, e.g. (4) for  id3v2.4\n     * @param {string} text Concatenated tag value\n     * @returns {string[]} Slitted value\n     */\n    static splitValue(major, text) {\n        const values = text.split(major >= 4 ? /\\x00/g : /\\//g);\n        return FrameParser.trimArray(values);\n    }\n    static trimArray(values) {\n        for (let i = 0; i < values.length; ++i) {\n            values[i] = values[i].replace(/\\x00+$/, '').trim();\n        }\n        return values;\n    }\n    static readIdentifierAndData(b, offset, length, encoding) {\n        const fzero = Util_1.default.findZero(b, offset, length, encoding);\n        const id = Util_1.default.decodeString(b.slice(offset, fzero), encoding);\n        offset = fzero + FrameParser.getNullTerminatorLength(encoding);\n        return { id, data: b.slice(offset, length) };\n    }\n    static getTextEncoding(byte) {\n        switch (byte) {\n            case 0x00:\n                return 'iso-8859-1'; // binary\n            case 0x01:\n            case 0x02:\n                return 'utf16'; // 01 = with bom, 02 = without bom\n            case 0x03:\n                return 'utf8';\n            default:\n                return 'utf8';\n        }\n    }\n    static getNullTerminatorLength(enc) {\n        switch (enc) {\n            case 'utf16':\n                return 2;\n            default:\n                return 1;\n        }\n    }\n}\nexports.default = FrameParser;\n//# sourceMappingURL=FrameParser.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst Util_1 = require(\"../common/Util\");\nconst FrameParser_1 = require(\"./FrameParser\");\nconst ID3v2_1 = require(\"./ID3v2\");\nclass ID3v2Parser {\n    static removeUnsyncBytes(buffer) {\n        let readI = 0;\n        let writeI = 0;\n        while (readI < buffer.length - 1) {\n            if (readI !== writeI) {\n                buffer[writeI] = buffer[readI];\n            }\n            readI += (buffer[readI] === 0xFF && buffer[readI + 1] === 0) ? 2 : 1;\n            writeI++;\n        }\n        if (readI < buffer.length) {\n            buffer[writeI++] = buffer[readI++];\n        }\n        return buffer.slice(0, writeI);\n    }\n    static readFrameHeader(v, majorVer) {\n        let header;\n        switch (majorVer) {\n            case 2:\n                header = {\n                    id: v.toString('ascii', 0, 3),\n                    length: Token.UINT24_BE.get(v, 3)\n                };\n                break;\n            case 3:\n                header = {\n                    id: v.toString('ascii', 0, 4),\n                    length: Token.UINT32_BE.get(v, 4),\n                    flags: ID3v2Parser.readFrameFlags(v.slice(8, 10))\n                };\n                break;\n            case 4:\n                header = {\n                    id: v.toString('ascii', 0, 4),\n                    length: ID3v2_1.ID3v2Token.UINT32SYNCSAFE.get(v, 4),\n                    flags: ID3v2Parser.readFrameFlags(v.slice(8, 10))\n                };\n                break;\n            default:\n                throw new Error('Unexpected majorVer: ' + majorVer);\n        }\n        return header;\n    }\n    static getFrameHeaderLength(majorVer) {\n        switch (majorVer) {\n            case 2:\n                return 6;\n            case 3:\n            case 4:\n                return 10;\n            default:\n                throw new Error('header versionIndex is incorrect');\n        }\n    }\n    static readFrameFlags(b) {\n        return {\n            status: {\n                tag_alter_preservation: Util_1.default.strtokBITSET.get(b, 0, 6),\n                file_alter_preservation: Util_1.default.strtokBITSET.get(b, 0, 5),\n                read_only: Util_1.default.strtokBITSET.get(b, 0, 4)\n            },\n            format: {\n                grouping_identity: Util_1.default.strtokBITSET.get(b, 1, 7),\n                compression: Util_1.default.strtokBITSET.get(b, 1, 3),\n                encryption: Util_1.default.strtokBITSET.get(b, 1, 2),\n                unsynchronisation: Util_1.default.strtokBITSET.get(b, 1, 1),\n                data_length_indicator: Util_1.default.strtokBITSET.get(b, 1, 0)\n            }\n        };\n    }\n    static readFrameData(buf, frameHeader, majorVer, includeCovers) {\n        switch (majorVer) {\n            case 2:\n                return FrameParser_1.default.readData(buf, frameHeader.id, majorVer, includeCovers);\n            case 3:\n            case 4:\n                if (frameHeader.flags.format.unsynchronisation) {\n                    buf = ID3v2Parser.removeUnsyncBytes(buf);\n                }\n                if (frameHeader.flags.format.data_length_indicator) {\n                    buf = buf.slice(4, buf.length);\n                }\n                return FrameParser_1.default.readData(buf, frameHeader.id, majorVer, includeCovers);\n            default:\n                throw new Error('Unexpected majorVer: ' + majorVer);\n        }\n    }\n    /**\n     * Create a combined tag key, of tag & description\n     * @param {string} tag e.g.: COM\n     * @param {string} description e.g. iTunPGAP\n     * @returns {string} e.g. COM:iTunPGAP\n     */\n    static makeDescriptionTagName(tag, description) {\n        return tag + (description ? ':' + description : '');\n    }\n    parse(metadata, tokenizer, options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            this.tokenizer = tokenizer;\n            this.metadata = metadata;\n            this.options = options;\n            const id3Header = yield this.tokenizer.readToken(ID3v2_1.ID3v2Token.Header);\n            if (id3Header.fileIdentifier !== 'ID3') {\n                throw new Error(\"expected ID3-header file-identifier 'ID3' was not found\");\n            }\n            this.id3Header = id3Header;\n            this.headerType = ('ID3v2.' + id3Header.version.major);\n            if (id3Header.flags.isExtendedHeader) {\n                return this.parseExtendedHeader();\n            }\n            else {\n                return this.parseId3Data(id3Header.size);\n            }\n        });\n    }\n    parseExtendedHeader() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const extendedHeader = yield this.tokenizer.readToken(ID3v2_1.ID3v2Token.ExtendedHeader);\n            const dataRemaining = extendedHeader.size - ID3v2_1.ID3v2Token.ExtendedHeader.len;\n            if (dataRemaining > 0) {\n                return this.parseExtendedHeaderData(dataRemaining, extendedHeader.size);\n            }\n            else {\n                return this.parseId3Data(this.id3Header.size - extendedHeader.size);\n            }\n        });\n    }\n    parseExtendedHeaderData(dataRemaining, extendedHeaderSize) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const buffer = Buffer.alloc(dataRemaining);\n            yield this.tokenizer.readBuffer(buffer, 0, dataRemaining);\n            return this.parseId3Data(this.id3Header.size - extendedHeaderSize);\n        });\n    }\n    parseId3Data(dataLen) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const buffer = Buffer.alloc(dataLen);\n            yield this.tokenizer.readBuffer(buffer, 0, dataLen);\n            for (const tag of this.parseMetadata(buffer)) {\n                if (tag.id === 'TXXX') {\n                    for (const text of tag.value.text) {\n                        this.addTag(ID3v2Parser.makeDescriptionTagName(tag.id, tag.value.description), text);\n                    }\n                }\n                else if (tag.id === 'COM') {\n                    for (const value of tag.value) {\n                        this.addTag(ID3v2Parser.makeDescriptionTagName(tag.id, value.description), value.text);\n                    }\n                }\n                else if (Array.isArray(tag.value)) {\n                    for (const value of tag.value) {\n                        this.addTag(tag.id, value);\n                    }\n                }\n                else {\n                    this.addTag(tag.id, tag.value);\n                }\n            }\n        });\n    }\n    addTag(id, value) {\n        this.metadata.addTag(this.headerType, id, value);\n    }\n    parseMetadata(data) {\n        let offset = 0;\n        const tags = [];\n        while (true) {\n            if (offset === data.length)\n                break;\n            const frameHeaderLength = ID3v2Parser.getFrameHeaderLength(this.id3Header.version.major);\n            if (offset + frameHeaderLength > data.length) {\n                // ToDo: generate WARNING: Illegal ID3v2-tag-length\n                break;\n            }\n            const frameHeaderBytes = data.slice(offset, offset += frameHeaderLength);\n            const frameHeader = ID3v2Parser.readFrameHeader(frameHeaderBytes, this.id3Header.version.major);\n            // Last frame. Check first char is a letter, bit of defensive programming\n            if (frameHeader.id === '' || frameHeader.id === '\\u0000\\u0000\\u0000\\u0000' ||\n                'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.indexOf(frameHeader.id[0]) === -1) {\n                // ToDo: generate WARNING\n                break;\n            }\n            const frameDataBytes = data.slice(offset, offset += frameHeader.length);\n            const values = ID3v2Parser.readFrameData(frameDataBytes, frameHeader, this.id3Header.version.major, !this.options.skipCovers);\n            tags.push({ id: frameHeader.id, value: values });\n        }\n        return tags;\n    }\n}\nexports.ID3v2Parser = ID3v2Parser;\n//# sourceMappingURL=ID3v2Parser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Util_1 = require(\"./Util\");\nconst validFourCC = /^[\\w-©][\\w-\\x000-3]/;\n/**\n * Token for read FourCC\n * Ref: https://en.wikipedia.org/wiki/FourCC\n */\nexports.FourCcToken = {\n    len: 4,\n    get: (buf, off) => {\n        const id = buf.toString(\"binary\", off, off + exports.FourCcToken.len);\n        if (!id.match(validFourCC)) {\n            throw new Error(`FourCC contains invalid characters: ${Util_1.default.a2hex(id)}`);\n        }\n        return id;\n    },\n    put: (buffer, offset, id) => {\n        const str = Buffer.from(id, 'binary');\n        if (str.length !== 4)\n            throw new Error(\"Invalid length\");\n        return str.copy(buffer, offset);\n    }\n};\n//# sourceMappingURL=FourCC.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst assert = require(\"assert\");\nconst FourCC_1 = require(\"../common/FourCC\");\nclass Common {\n    constructor(header, isAifc) {\n        this.isAifc = isAifc;\n        const minimumChunkSize = isAifc ? 22 : 18;\n        assert.ok(header.chunkSize >= minimumChunkSize, `COMMON CHUNK size should always be at least ${minimumChunkSize}`);\n        this.len = header.chunkSize;\n    }\n    get(buf, off) {\n        // see: https://cycling74.com/forums/aiffs-80-bit-sample-rate-value\n        const shift = buf.readUInt16BE(off + 8) - 16398;\n        const baseSampleRate = buf.readUInt16BE(off + 8 + 2);\n        const res = {\n            numChannels: buf.readUInt16BE(off),\n            numSampleFrames: buf.readUInt32BE(off + 2),\n            sampleSize: buf.readUInt16BE(off + 6),\n            sampleRate: shift < 0 ? baseSampleRate >> Math.abs(shift) : baseSampleRate << shift\n        };\n        if (this.isAifc) {\n            res.compressionType = FourCC_1.FourCcToken.get(buf, off + 18);\n            if (this.len > 22) {\n                const strLen = buf.readInt8(off + 22);\n                const padding = (strLen + 1) % 2;\n                if (23 + strLen + padding === this.len) {\n                    res.compressionName = new Token.StringType(strLen, 'binary').get(buf, off + 23);\n                }\n                else {\n                    throw new Error('Illegal pstring length');\n                }\n            }\n        }\n        else {\n            res.compressionName = 'PCM';\n        }\n        return res;\n    }\n}\nexports.Common = Common;\n//# sourceMappingURL=AiffToken.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\n/**\n * Utility to convert stream to buffer\n */\nclass ID3Stream extends stream_1.Readable {\n    constructor(buf) {\n        super();\n        this.buf = buf;\n    }\n    _read() {\n        this.push(this.buf);\n        this.push(null); // push the EOF-signaling `null` chunk\n    }\n}\nexports.ID3Stream = ID3Stream;\n//# sourceMappingURL=ID3Stream.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst initDebug = require(\"debug\");\nconst type_1 = require(\"strtok3/lib/type\");\nconst strtok3 = require(\"strtok3/lib/core\");\nconst ID3v2Parser_1 = require(\"../id3v2/ID3v2Parser\");\nconst FourCC_1 = require(\"../common/FourCC\");\nconst BasicParser_1 = require(\"../common/BasicParser\");\nconst AiffToken = require(\"./AiffToken\");\nconst iff = require(\"../iff\");\nconst ID3Stream_1 = require(\"../id3v2/ID3Stream\");\nconst debug = initDebug('music-metadata:parser:aiff');\n/**\n * AIFF - Audio Interchange File Format\n *\n * Ref:\n *  http://www.onicos.com/staff/iz/formats/aiff.html\n *  http://muratnkonar.com/aiff/index.html\n *  http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/AIFF/AIFF.html\n */\nclass AIFFParser extends BasicParser_1.BasicParser {\n    parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const header = yield this.tokenizer.readToken(iff.Header);\n            if (header.chunkID !== 'FORM')\n                throw new Error('Invalid Chunk-ID, expected \\'FORM\\''); // Not AIFF format\n            const type = yield this.tokenizer.readToken(FourCC_1.FourCcToken);\n            switch (type) {\n                case 'AIFF':\n                    this.metadata.setFormat('dataformat', type);\n                    this.isCompressed = false;\n                    break;\n                case 'AIFC':\n                    this.metadata.setFormat('dataformat', 'AIFF-C');\n                    this.isCompressed = true;\n                    break;\n                default:\n                    throw Error('Unsupported AIFF type: ' + type);\n            }\n            this.metadata.setFormat('lossless', !this.isCompressed);\n            try {\n                do {\n                    const chunkHeader = yield this.tokenizer.readToken(iff.Header);\n                    debug(`Chunk id=${chunkHeader.chunkID}`);\n                    const nextChunk = 2 * Math.round(chunkHeader.chunkSize / 2);\n                    const bytesRead = yield this.readData(chunkHeader);\n                    yield this.tokenizer.ignore(nextChunk - bytesRead);\n                } while (true);\n            }\n            catch (err) {\n                if (err.message !== type_1.endOfFile) {\n                    throw err;\n                }\n            }\n        });\n    }\n    readData(header) {\n        return __awaiter(this, void 0, void 0, function* () {\n            switch (header.chunkID) {\n                case 'COMM': // The Common Chunk\n                    const common = yield this.tokenizer.readToken(new AiffToken.Common(header, this.isCompressed));\n                    this.metadata.setFormat('bitsPerSample', common.sampleSize);\n                    this.metadata.setFormat('sampleRate', common.sampleRate);\n                    this.metadata.setFormat('numberOfChannels', common.numChannels);\n                    this.metadata.setFormat('numberOfSamples', common.numSampleFrames);\n                    this.metadata.setFormat('duration', common.numSampleFrames / common.sampleRate);\n                    this.metadata.setFormat('encoder', common.compressionName);\n                    return header.chunkSize;\n                case 'ID3 ': // ID3-meta-data\n                    const id3_data = yield this.tokenizer.readToken(new Token.BufferType(header.chunkSize));\n                    const id3stream = new ID3Stream_1.ID3Stream(id3_data);\n                    const rst = strtok3.fromStream(id3stream);\n                    yield new ID3v2Parser_1.ID3v2Parser().parse(this.metadata, rst, this.options);\n                    return header.chunkSize;\n                case 'SSND': // Sound Data Chunk\n                    if (this.metadata.format.duration) {\n                        this.metadata.setFormat('bitrate', 8 * header.chunkSize / this.metadata.format.duration);\n                    }\n                    return 0;\n                default:\n                    return 0;\n            }\n        });\n    }\n}\nexports.AIFFParser = AIFFParser;\n//# sourceMappingURL=AiffParser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst FourCC_1 = require(\"../common/FourCC\");\nvar DataType;\n(function (DataType) {\n    DataType[DataType[\"text_utf8\"] = 0] = \"text_utf8\";\n    DataType[DataType[\"binary\"] = 1] = \"binary\";\n    DataType[DataType[\"external_info\"] = 2] = \"external_info\";\n    DataType[DataType[\"reserved\"] = 3] = \"reserved\";\n})(DataType = exports.DataType || (exports.DataType = {}));\n/**\n * APE_DESCRIPTOR: defines the sizes (and offsets) of all the pieces, as well as the MD5 checksum\n */\nexports.DescriptorParser = {\n    len: 52,\n    get: (buf, off) => {\n        return {\n            // should equal 'MAC '\n            ID: FourCC_1.FourCcToken.get(buf, off),\n            // versionIndex number * 1000 (3.81 = 3810) (remember that 4-byte alignment causes this to take 4-bytes)\n            version: Token.UINT32_LE.get(buf, off + 4) / 1000,\n            // the number of descriptor bytes (allows later expansion of this header)\n            descriptorBytes: Token.UINT32_LE.get(buf, off + 8),\n            // the number of header APE_HEADER bytes\n            headerBytes: Token.UINT32_LE.get(buf, off + 12),\n            // the number of header APE_HEADER bytes\n            seekTableBytes: Token.UINT32_LE.get(buf, off + 16),\n            // the number of header data bytes (from original file)\n            headerDataBytes: Token.UINT32_LE.get(buf, off + 20),\n            // the number of bytes of APE frame data\n            apeFrameDataBytes: Token.UINT32_LE.get(buf, off + 24),\n            // the high order number of APE frame data bytes\n            apeFrameDataBytesHigh: Token.UINT32_LE.get(buf, off + 28),\n            // the terminating data of the file (not including tag data)\n            terminatingDataBytes: Token.UINT32_LE.get(buf, off + 32),\n            // the MD5 hash of the file (see notes for usage... it's a littly tricky)\n            fileMD5: new Token.BufferType(16).get(buf, off + 36)\n        };\n    }\n};\n/**\n * APE_HEADER: describes all of the necessary information about the APE file\n */\nexports.Header = {\n    len: 24,\n    get: (buf, off) => {\n        return {\n            // the compression level (see defines I.E. COMPRESSION_LEVEL_FAST)\n            compressionLevel: Token.UINT16_LE.get(buf, off),\n            // any format flags (for future use)\n            formatFlags: Token.UINT16_LE.get(buf, off + 2),\n            // the number of audio blocks in one frame\n            blocksPerFrame: Token.UINT32_LE.get(buf, off + 4),\n            // the number of audio blocks in the final frame\n            finalFrameBlocks: Token.UINT32_LE.get(buf, off + 8),\n            // the total number of frames\n            totalFrames: Token.UINT32_LE.get(buf, off + 12),\n            // the bits per sample (typically 16)\n            bitsPerSample: Token.UINT16_LE.get(buf, off + 16),\n            // the number of channels (1 or 2)\n            channel: Token.UINT16_LE.get(buf, off + 18),\n            // the sample rate (typically 44100)\n            sampleRate: Token.UINT32_LE.get(buf, off + 20)\n        };\n    }\n};\n/**\n * APE Tag Header/Footer Version 2.0\n * TAG: describes all the properties of the file [optional]\n */\nexports.TagFooter = {\n    len: 32,\n    get: (buf, off) => {\n        return {\n            // should equal 'APETAGEX'\n            ID: new Token.StringType(8, 'ascii').get(buf, off),\n            // equals CURRENT_APE_TAG_VERSION\n            version: Token.UINT32_LE.get(buf, off + 8),\n            // the complete size of the tag, including this footer (excludes header)\n            size: Token.UINT32_LE.get(buf, off + 12),\n            // the number of fields in the tag\n            fields: Token.UINT32_LE.get(buf, off + 16),\n            // reserved for later use (must be zero),\n            flags: parseTagFlags(Token.UINT32_LE.get(buf, off + 20))\n        };\n    }\n};\n/**\n * APE Tag v2.0 Item Header\n */\nexports.TagItemHeader = {\n    len: 8,\n    get: (buf, off) => {\n        return {\n            // Length of assigned value in bytes\n            size: Token.UINT32_LE.get(buf, off),\n            // reserved for later use (must be zero),\n            flags: parseTagFlags(Token.UINT32_LE.get(buf, off + 4))\n        };\n    }\n};\nexports.TagField = footer => {\n    return new Token.BufferType(footer.size - exports.TagFooter.len);\n};\nfunction parseTagFlags(flags) {\n    return {\n        containsHeader: isBitSet(flags, 31),\n        containsFooter: isBitSet(flags, 30),\n        isHeader: isBitSet(flags, 31),\n        readOnly: isBitSet(flags, 0),\n        dataType: (flags & 6) >> 1\n    };\n}\nexports.parseTagFlags = parseTagFlags;\n/**\n * @param num {number}\n * @param bit 0 is least significant bit (LSB)\n * @return {boolean} true if bit is 1; otherwise false\n */\nfunction isBitSet(num, bit) {\n    return (num & 1 << bit) !== 0;\n}\nexports.isBitSet = isBitSet;\n//# sourceMappingURL=APEv2Token.js.map","'use strict';\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst initDebug = require(\"debug\");\nconst FileType = require(\"file-type\");\nconst Token = require(\"token-types\");\nconst assert = require(\"assert\");\nconst Util_1 = require(\"../common/Util\");\nconst BasicParser_1 = require(\"../common/BasicParser\");\nconst APEv2Token_1 = require(\"./APEv2Token\");\nconst debug = initDebug('music-metadata:parser:APEv2');\nconst tagFormat = 'APEv2';\nconst preamble = 'APETAGEX';\nclass APEv2Parser extends BasicParser_1.BasicParser {\n    constructor() {\n        super(...arguments);\n        this.ape = {};\n    }\n    /**\n     * Calculate the media file duration\n     * @param ah ApeHeader\n     * @return {number} duration in seconds\n     */\n    static calculateDuration(ah) {\n        let duration = ah.totalFrames > 1 ? ah.blocksPerFrame * (ah.totalFrames - 1) : 0;\n        duration += ah.finalFrameBlocks;\n        return duration / ah.sampleRate;\n    }\n    /**\n     * @param {INativeMetadataCollector} metadata\n     * @param {ITokenizer} tokenizer\n     * @param {IOptions} options\n     * @returns {Promise<boolean>} True if tags have been found\n     */\n    static parseTagHeader(metadata, tokenizer, options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (tokenizer.fileSize && tokenizer.fileSize - tokenizer.position < APEv2Token_1.TagFooter.len) {\n                debug(`No APEv2 header found, end-of-file reached`);\n                return;\n            }\n            const footer = yield tokenizer.peekToken(APEv2Token_1.TagFooter);\n            if (footer.ID === preamble) {\n                yield tokenizer.ignore(APEv2Token_1.TagFooter.len);\n                const tags = yield tokenizer.readToken(APEv2Token_1.TagField(footer));\n                APEv2Parser.parseTags(metadata, footer, tags, 0, !options.skipCovers);\n            }\n            else {\n                debug(`APEv2 header not found at offset=${tokenizer.position}`);\n                if (tokenizer.fileSize) {\n                    // Try to read the APEv2 header using just the footer-header\n                    const remaining = tokenizer.fileSize - tokenizer.position; // ToDo: take ID3v1 into account\n                    const buffer = Buffer.alloc(remaining);\n                    yield tokenizer.readBuffer(buffer);\n                    return APEv2Parser.parseTagFooter(metadata, buffer, !options.skipCovers);\n                }\n            }\n        });\n    }\n    static parseTagFooter(metadata, buffer, includeCovers) {\n        const footer = APEv2Token_1.TagFooter.get(buffer, buffer.length - APEv2Token_1.TagFooter.len);\n        assert.equal(footer.ID, preamble, 'APEv2 Footer preamble');\n        this.parseTags(metadata, footer, buffer, buffer.length - footer.size, includeCovers);\n    }\n    static parseTags(metadata, footer, buffer, offset, includeCovers) {\n        for (let i = 0; i < footer.fields; i++) {\n            // Only APEv2 tag has tag item headers\n            const tagItemHeader = APEv2Token_1.TagItemHeader.get(buffer, offset);\n            offset += APEv2Token_1.TagItemHeader.len;\n            let zero = Util_1.default.findZero(buffer, offset, buffer.length);\n            const key = buffer.toString('ascii', offset, zero);\n            offset = zero + 1;\n            switch (tagItemHeader.flags.dataType) {\n                case APEv2Token_1.DataType.text_utf8: { // utf-8 textstring\n                    const value = buffer.toString('utf8', offset, offset += tagItemHeader.size);\n                    const values = value.split(/\\x00/g);\n                    /*jshint loopfunc:true */\n                    for (const val of values) {\n                        metadata.addTag(tagFormat, key, val);\n                    }\n                    break;\n                }\n                case APEv2Token_1.DataType.binary: // binary (probably artwork)\n                    if (includeCovers) {\n                        const picData = buffer.slice(offset, offset + tagItemHeader.size);\n                        let off = 0;\n                        zero = Util_1.default.findZero(picData, off, picData.length);\n                        const description = picData.toString('utf8', off, zero);\n                        off = zero + 1;\n                        const data = Buffer.from(picData.slice(off));\n                        const fileType = FileType(data);\n                        if (fileType) {\n                            if (fileType.mime.indexOf('image/') === 0) {\n                                const picture = {\n                                    description,\n                                    data,\n                                    format: fileType.mime\n                                };\n                                offset += tagItemHeader.size;\n                                metadata.addTag(tagFormat, key, picture);\n                            }\n                            else {\n                                debug(`Unexpected binary tag of type': ${fileType.mime}`);\n                            }\n                        }\n                        else {\n                            debug(`Failed to determine file type for binary tag: ${key}`);\n                        }\n                    }\n                    break;\n                case APEv2Token_1.DataType.external_info:\n                    debug(`Ignore external info ${key}`);\n                    break;\n                default:\n                    throw new Error(`Unexpected data-type: ${tagItemHeader.flags.dataType}`);\n            }\n        }\n    }\n    parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const descriptor = yield this.tokenizer.readToken(APEv2Token_1.DescriptorParser);\n            assert.equal(descriptor.ID, 'MAC ', 'descriptor.ID');\n            this.ape.descriptor = descriptor;\n            const lenExp = descriptor.descriptorBytes - APEv2Token_1.DescriptorParser.len;\n            const header = yield (lenExp > 0 ? this.parseDescriptorExpansion(lenExp) : this.parseHeader());\n            yield this.tokenizer.readToken(new Token.IgnoreType(header.forwardBytes));\n            return APEv2Parser.parseTagHeader(this.metadata, this.tokenizer, this.options);\n        });\n    }\n    parseDescriptorExpansion(lenExp) {\n        return __awaiter(this, void 0, void 0, function* () {\n            yield this.tokenizer.readToken(new Token.IgnoreType(lenExp));\n            return this.parseHeader();\n        });\n    }\n    parseHeader() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const header = yield this.tokenizer.readToken(APEv2Token_1.Header);\n            // ToDo before\n            this.metadata.setFormat('lossless', true);\n            this.metadata.setFormat('dataformat', 'Monkey\\'s Audio');\n            this.metadata.setFormat('bitsPerSample', header.bitsPerSample);\n            this.metadata.setFormat('sampleRate', header.sampleRate);\n            this.metadata.setFormat('numberOfChannels', header.channel);\n            this.metadata.setFormat('duration', APEv2Parser.calculateDuration(header));\n            return {\n                forwardBytes: this.ape.descriptor.seekTableBytes + this.ape.descriptor.headerDataBytes +\n                    this.ape.descriptor.apeFrameDataBytes + this.ape.descriptor.terminatingDataBytes\n            };\n        });\n    }\n}\nexports.APEv2Parser = APEv2Parser;\n//# sourceMappingURL=APEv2Parser.js.map","\"use strict\";\n// Implementation of the Advanced Systems Format (ASF)\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Ref:\n *    https://tools.ietf.org/html/draft-fleischman-asf-01, Appendix A: ASF GUIDs\n *    http://drang.s4.xrea.com/program/tips/id3tag/wmp/10_asf_guids.html\n *    http://drang.s4.xrea.com/program/tips/id3tag/wmp/index.html\n *\n *    http://drang.s4.xrea.com/program/tips/id3tag/wmp/10_asf_guids.html\n *\n *  ASF File Structure:\n *    https://msdn.microsoft.com/en-us/library/windows/desktop/ee663575(v=vs.85).aspx\n *\n *  ASF GUIDs:\n *    http://drang.s4.xrea.com/program/tips/id3tag/wmp/10_asf_guids.html\n *\n *    https://github.com/dji-sdk/FFmpeg/blob/master/libavformat/asf.c\n */\nclass GUID {\n    constructor(str) {\n        this.str = str;\n    }\n    static fromBin(bin, offset = 0) {\n        return new GUID(this.decode(bin, offset));\n    }\n    /**\n     * Decode GUID in format like \"B503BF5F-2EA9-CF11-8EE3-00C00C205365\"\n     * @param objectId Binary GUID\n     * @param offset Read offset in bytes, default 0\n     * @returns {string} GUID as dashed hexadecimal representation\n     */\n    static decode(objectId, offset = 0) {\n        const guid = objectId.readUInt32LE(offset).toString(16) + \"-\" +\n            objectId.readUInt16LE(offset + 4).toString(16) + \"-\" +\n            objectId.readUInt16LE(offset + 6).toString(16) + \"-\" +\n            objectId.readUInt16BE(offset + 8).toString(16) + \"-\" +\n            objectId.slice(offset + 10, offset + 16).toString('hex');\n        return guid.toUpperCase();\n    }\n    /**\n     * Decode stream type\n     * @param {string} mediaType\n     * @returns {string}\n     */\n    static decodeMediaType(mediaType) {\n        switch (mediaType.str) {\n            case GUID.AudioMedia.str: return 'audio';\n            case GUID.VideoMedia.str: return 'video';\n            case GUID.CommandMedia.str: return 'command';\n            case GUID.Degradable_JPEG_Media.str: return 'degradable-jpeg';\n            case GUID.FileTransferMedia.str: return 'file-transfer';\n            case GUID.BinaryMedia.str: return 'binary';\n        }\n    }\n    /**\n     * Encode GUID\n     * @param guid GUID like: \"B503BF5F-2EA9-CF11-8EE3-00C00C205365\"\n     * @returns {Buffer} Encoded Bnary GUID\n     */\n    static encode(str) {\n        const bin = Buffer.alloc(16);\n        bin.writeUInt32LE(parseInt(str.slice(0, 8), 16), 0);\n        bin.writeUInt16LE(parseInt(str.slice(9, 13), 16), 4);\n        bin.writeUInt16LE(parseInt(str.slice(14, 18), 16), 6);\n        Buffer.from(str.slice(19, 23), \"hex\").copy(bin, 8);\n        Buffer.from(str.slice(24), \"hex\").copy(bin, 10);\n        return bin;\n    }\n    equals(guid) {\n        return this.str === guid.str;\n    }\n    toBin() {\n        return GUID.encode(this.str);\n    }\n}\n// 10.1 Top-level ASF object GUIDs\nGUID.HeaderObject = new GUID(\"75B22630-668E-11CF-A6D9-00AA0062CE6C\");\nGUID.DataObject = new GUID(\"75B22636-668E-11CF-A6D9-00AA0062CE6C\");\nGUID.SimpleIndexObject = new GUID(\"33000890-E5B1-11CF-89F4-00A0C90349CB\");\nGUID.IndexObject = new GUID(\"D6E229D3-35DA-11D1-9034-00A0C90349BE\");\nGUID.MediaObjectIndexObject = new GUID(\"FEB103F8-12AD-4C64-840F-2A1D2F7AD48C\");\nGUID.TimecodeIndexObject = new GUID(\"3CB73FD0-0C4A-4803-953D-EDF7B6228F0C\");\n// 10.2 Header Object GUIDs\nGUID.FilePropertiesObject = new GUID(\"8CABDCA1-A947-11CF-8EE4-00C00C205365\");\nGUID.StreamPropertiesObject = new GUID(\"B7DC0791-A9B7-11CF-8EE6-00C00C205365\");\nGUID.HeaderExtensionObject = new GUID(\"5FBF03B5-A92E-11CF-8EE3-00C00C205365\");\nGUID.CodecListObject = new GUID(\"86D15240-311D-11D0-A3A4-00A0C90348F6\");\nGUID.ScriptCommandObject = new GUID(\"1EFB1A30-0B62-11D0-A39B-00A0C90348F6\");\nGUID.MarkerObject = new GUID(\"F487CD01-A951-11CF-8EE6-00C00C205365\");\nGUID.BitrateMutualExclusionObject = new GUID(\"D6E229DC-35DA-11D1-9034-00A0C90349BE\");\nGUID.ErrorCorrectionObject = new GUID(\"75B22635-668E-11CF-A6D9-00AA0062CE6C\");\nGUID.ContentDescriptionObject = new GUID(\"75B22633-668E-11CF-A6D9-00AA0062CE6C\");\nGUID.ExtendedContentDescriptionObject = new GUID(\"D2D0A440-E307-11D2-97F0-00A0C95EA850\");\nGUID.ContentBrandingObject = new GUID(\"2211B3FA-BD23-11D2-B4B7-00A0C955FC6E\");\nGUID.StreamBitratePropertiesObject = new GUID(\"7BF875CE-468D-11D1-8D82-006097C9A2B2\");\nGUID.ContentEncryptionObject = new GUID(\"2211B3FB-BD23-11D2-B4B7-00A0C955FC6E\");\nGUID.ExtendedContentEncryptionObject = new GUID(\"298AE614-2622-4C17-B935-DAE07EE9289C\");\nGUID.DigitalSignatureObject = new GUID(\"2211B3FC-BD23-11D2-B4B7-00A0C955FC6E\");\nGUID.PaddingObject = new GUID(\"1806D474-CADF-4509-A4BA-9AABCB96AAE8\");\n// 10.3 Header Extension Object GUIDs\nGUID.ExtendedStreamPropertiesObject = new GUID(\"14E6A5CB-C672-4332-8399-A96952065B5A\");\nGUID.AdvancedMutualExclusionObject = new GUID(\"A08649CF-4775-4670-8A16-6E35357566CD\");\nGUID.GroupMutualExclusionObject = new GUID(\"D1465A40-5A79-4338-B71B-E36B8FD6C249\");\nGUID.StreamPrioritizationObject = new GUID(\"D4FED15B-88D3-454F-81F0-ED5C45999E24\");\nGUID.BandwidthSharingObject = new GUID(\"A69609E6-517B-11D2-B6AF-00C04FD908E9\");\nGUID.LanguageListObject = new GUID(\"7C4346A9-EFE0-4BFC-B229-393EDE415C85\");\nGUID.MetadataObject = new GUID(\"C5F8CBEA-5BAF-4877-8467-AA8C44FA4CCA\");\nGUID.MetadataLibraryObject = new GUID(\"44231C94-9498-49D1-A141-1D134E457054\");\nGUID.IndexParametersObject = new GUID(\"D6E229DF-35DA-11D1-9034-00A0C90349BE\");\nGUID.MediaObjectIndexParametersObject = new GUID(\"6B203BAD-3F11-48E4-ACA8-D7613DE2CFA7\");\nGUID.TimecodeIndexParametersObject = new GUID(\"F55E496D-9797-4B5D-8C8B-604DFE9BFB24\");\nGUID.CompatibilityObject = new GUID(\"26F18B5D-4584-47EC-9F5F-0E651F0452C9\");\nGUID.AdvancedContentEncryptionObject = new GUID(\"43058533-6981-49E6-9B74-AD12CB86D58C\");\n// 10.4 Stream Properties Object Stream Type GUIDs\nGUID.AudioMedia = new GUID(\"F8699E40-5B4D-11CF-A8FD-00805F5C442B\");\nGUID.VideoMedia = new GUID(\"BC19EFC0-5B4D-11CF-A8FD-00805F5C442B\");\nGUID.CommandMedia = new GUID(\"59DACFC0-59E6-11D0-A3AC-00A0C90348F6\");\nGUID.JFIF_Media = new GUID(\"B61BE100-5B4E-11CF-A8FD-00805F5C442B\");\nGUID.Degradable_JPEG_Media = new GUID(\"35907DE0-E415-11CF-A917-00805F5C442B\");\nGUID.FileTransferMedia = new GUID(\"91BD222C-F21C-497A-8B6D-5AA86BFC0185\");\nGUID.BinaryMedia = new GUID(\"3AFB65E2-47EF-40F2-AC2C-70A90D71D343\");\nGUID.ASF_Index_Placeholder_Object = new GUID(\"D9AADE20-7C17-4F9C-BC28-8555DD98E2A2\");\nexports.default = GUID;\n//# sourceMappingURL=GUID.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Util_1 = require(\"../common/Util\");\nconst Token = require(\"token-types\");\nclass AsfUtil {\n    static getParserForAttr(i) {\n        return AsfUtil.attributeParsers[i];\n    }\n    static parseUnicodeAttr(buf) {\n        return Util_1.default.stripNulls(Util_1.default.decodeString(buf, \"utf16le\"));\n    }\n    static parseByteArrayAttr(buf) {\n        const newBuf = Buffer.alloc(buf.length);\n        buf.copy(newBuf);\n        return newBuf;\n    }\n    static parseBoolAttr(buf, offset = 0) {\n        return AsfUtil.parseWordAttr(buf, offset) === 1;\n    }\n    static parseDWordAttr(buf, offset = 0) {\n        return buf.readUInt32LE(offset);\n    }\n    static parseQWordAttr(buf, offset = 0) {\n        return Token.UINT64_LE.get(buf, offset);\n    }\n    static parseWordAttr(buf, offset = 0) {\n        return buf.readUInt16LE(offset);\n    }\n}\nAsfUtil.attributeParsers = [\n    AsfUtil.parseUnicodeAttr,\n    AsfUtil.parseByteArrayAttr,\n    AsfUtil.parseBoolAttr,\n    AsfUtil.parseDWordAttr,\n    AsfUtil.parseQWordAttr,\n    AsfUtil.parseWordAttr,\n    AsfUtil.parseByteArrayAttr\n];\nexports.AsfUtil = AsfUtil;\n//# sourceMappingURL=AsfUtil.js.map","// ASF Objects\n\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Util_1 = require(\"../common/Util\");\nconst Token = require(\"token-types\");\nconst GUID_1 = require(\"./GUID\");\nconst AsfUtil_1 = require(\"./AsfUtil\");\nconst ID3v2_1 = require(\"../id3v2/ID3v2\");\n/**\n * Data Type: Specifies the type of information being stored. The following values are recognized.\n */\nvar DataType;\n(function (DataType) {\n    /**\n     * Unicode string. The data consists of a sequence of Unicode characters.\n     */\n    DataType[DataType[\"UnicodeString\"] = 0] = \"UnicodeString\";\n    /**\n     * BYTE array. The type of data is implementation-specific.\n     */\n    DataType[DataType[\"ByteArray\"] = 1] = \"ByteArray\";\n    /**\n     * BOOL. The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer. Only 0x0000 or 0x0001 are permitted values.\n     */\n    DataType[DataType[\"Bool\"] = 2] = \"Bool\";\n    /**\n     * DWORD. The data is 4 bytes long and should be interpreted as a 32-bit unsigned integer.\n     */\n    DataType[DataType[\"DWord\"] = 3] = \"DWord\";\n    /**\n     * QWORD. The data is 8 bytes long and should be interpreted as a 64-bit unsigned integer.\n     */\n    DataType[DataType[\"QWord\"] = 4] = \"QWord\";\n    /**\n     * WORD. The data is 2 bytes long and should be interpreted as a 16-bit unsigned integer.\n     */\n    DataType[DataType[\"Word\"] = 5] = \"Word\";\n})(DataType = exports.DataType || (exports.DataType = {}));\n/**\n * Token for: 3. ASF top-level Header Object\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3\n */\nexports.TopLevelHeaderObjectToken = {\n    len: 30,\n    get: (buf, off) => {\n        return {\n            objectId: GUID_1.default.fromBin(new Token.BufferType(16).get(buf, off)),\n            objectSize: Token.UINT64_LE.get(buf, off + 16),\n            numberOfHeaderObjects: Token.UINT32_LE.get(buf, off + 24)\n            // Reserved: 2 bytes\n        };\n    }\n};\n/**\n * Token for: 3.1 Header Object (mandatory, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_1\n */\nexports.HeaderObjectToken = {\n    len: 24,\n    get: (buf, off) => {\n        return {\n            objectId: GUID_1.default.fromBin(new Token.BufferType(16).get(buf, off)),\n            objectSize: Token.UINT64_LE.get(buf, off + 16)\n        };\n    }\n};\nclass State {\n    constructor(header) {\n        this.len = header.objectSize - exports.HeaderObjectToken.len;\n    }\n    postProcessTag(tags, name, valueType, data) {\n        if (name === \"WM/Picture\") {\n            tags.push({ id: name, value: WmPictureToken.fromBuffer(data) });\n        }\n        else {\n            const parseAttr = AsfUtil_1.AsfUtil.getParserForAttr(valueType);\n            if (!parseAttr) {\n                throw new Error(\"unexpected value headerType: \" + valueType);\n            }\n            tags.push({ id: name, value: parseAttr(data) });\n        }\n    }\n}\nexports.State = State;\n// ToDo: use ignore type\nclass IgnoreObjectState extends State {\n    constructor(header) {\n        super(header);\n    }\n    get(buf, off) {\n        return null;\n    }\n}\nexports.IgnoreObjectState = IgnoreObjectState;\n/**\n * Token for: 3.2: File Properties Object (mandatory, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_2\n */\nclass FilePropertiesObject extends State {\n    constructor(header) {\n        super(header);\n    }\n    get(buf, off) {\n        return {\n            fileId: GUID_1.default.fromBin(buf, off),\n            fileSize: Token.UINT64_LE.get(buf, off + 16),\n            creationDate: Token.UINT64_LE.get(buf, off + 24),\n            dataPacketsCount: Token.UINT64_LE.get(buf, off + 32),\n            playDuration: Token.UINT64_LE.get(buf, off + 40),\n            sendDuration: Token.UINT64_LE.get(buf, off + 48),\n            preroll: Token.UINT64_LE.get(buf, off + 56),\n            flags: {\n                broadcast: Util_1.default.strtokBITSET.get(buf, off + 64, 24),\n                seekable: Util_1.default.strtokBITSET.get(buf, off + 64, 25)\n            },\n            // flagsNumeric: Token.UINT32_LE.get(buf, off + 64),\n            minimumDataPacketSize: Token.UINT32_LE.get(buf, off + 68),\n            maximumDataPacketSize: Token.UINT32_LE.get(buf, off + 72),\n            maximumBitrate: Token.UINT32_LE.get(buf, off + 76)\n        };\n    }\n}\nFilePropertiesObject.guid = GUID_1.default.FilePropertiesObject;\nexports.FilePropertiesObject = FilePropertiesObject;\n/**\n * Token for: 3.3 Stream Properties Object (mandatory, one per stream)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_3\n */\nclass StreamPropertiesObject extends State {\n    constructor(header) {\n        super(header);\n    }\n    get(buf, off) {\n        return {\n            streamType: GUID_1.default.decodeMediaType(GUID_1.default.fromBin(buf, off)),\n            errorCorrectionType: GUID_1.default.fromBin(buf, off + 8)\n            // ToDo\n        };\n    }\n}\nStreamPropertiesObject.guid = GUID_1.default.StreamPropertiesObject;\nexports.StreamPropertiesObject = StreamPropertiesObject;\n/**\n * 3.4: Header Extension Object (mandatory, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_4\n */\nclass HeaderExtensionObject {\n    constructor() {\n        this.len = 22;\n    }\n    get(buf, off) {\n        const dataSize = buf.readUInt32LE(off + 18);\n        return {\n            reserved1: GUID_1.default.fromBin(buf, off),\n            reserved2: buf.readUInt16LE(off + 16),\n            extensionDataSize: buf.readUInt32LE(off + 18)\n        };\n    }\n}\nHeaderExtensionObject.guid = GUID_1.default.HeaderExtensionObject;\nexports.HeaderExtensionObject = HeaderExtensionObject;\n/**\n * 3.10 Content Description Object (optional, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_10\n */\nclass ContentDescriptionObjectState extends State {\n    constructor(header) {\n        super(header);\n    }\n    get(buf, off) {\n        const tags = [];\n        let pos = off + 10;\n        for (let i = 0; i < ContentDescriptionObjectState.contentDescTags.length; ++i) {\n            const length = buf.readUInt16LE(off + i * 2);\n            if (length > 0) {\n                const tagName = ContentDescriptionObjectState.contentDescTags[i];\n                const end = pos + length;\n                tags.push({ id: tagName, value: AsfUtil_1.AsfUtil.parseUnicodeAttr(buf.slice(pos, end)) });\n                pos = end;\n            }\n        }\n        return tags;\n    }\n}\nContentDescriptionObjectState.guid = GUID_1.default.ContentDescriptionObject;\nContentDescriptionObjectState.contentDescTags = [\"Title\", \"Author\", \"Copyright\", \"Description\", \"Rating\"];\nexports.ContentDescriptionObjectState = ContentDescriptionObjectState;\n/**\n * 3.11 Extended Content Description Object (optional, one only)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/03_asf_top_level_header_object.html#3_11\n */\nclass ExtendedContentDescriptionObjectState extends State {\n    constructor(header) {\n        super(header);\n    }\n    get(buf, off) {\n        const tags = [];\n        const attrCount = buf.readUInt16LE(off);\n        let pos = off + 2;\n        for (let i = 0; i < attrCount; i += 1) {\n            const nameLen = buf.readUInt16LE(pos);\n            pos += 2;\n            const name = AsfUtil_1.AsfUtil.parseUnicodeAttr(buf.slice(pos, pos + nameLen));\n            pos += nameLen;\n            const valueType = buf.readUInt16LE(pos);\n            pos += 2;\n            const valueLen = buf.readUInt16LE(pos);\n            pos += 2;\n            const value = buf.slice(pos, pos + valueLen);\n            pos += valueLen;\n            this.postProcessTag(tags, name, valueType, value);\n        }\n        return tags;\n    }\n}\nExtendedContentDescriptionObjectState.guid = GUID_1.default.ExtendedContentDescriptionObject;\nexports.ExtendedContentDescriptionObjectState = ExtendedContentDescriptionObjectState;\n/**\n * 4.1 Extended Stream Properties Object (optional, 1 per media stream)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/04_objects_in_the_asf_header_extension_object.html#4_1\n */\nclass ExtendedStreamPropertiesObjectState extends State {\n    constructor(header) {\n        super(header);\n    }\n    get(buf, off) {\n        return {\n            startTime: Token.UINT64_LE.get(buf, off),\n            endTime: Token.UINT64_LE.get(buf, off + 8),\n            dataBitrate: buf.readInt32LE(off + 12),\n            bufferSize: buf.readInt32LE(off + 16),\n            initialBufferFullness: buf.readInt32LE(off + 20),\n            alternateDataBitrate: buf.readInt32LE(off + 24),\n            alternateBufferSize: buf.readInt32LE(off + 28),\n            alternateInitialBufferFullness: buf.readInt32LE(off + 32),\n            maximumObjectSize: buf.readInt32LE(off + 36),\n            flags: {\n                reliableFlag: Util_1.default.strtokBITSET.get(buf, off + 40, 0),\n                seekableFlag: Util_1.default.strtokBITSET.get(buf, off + 40, 1),\n                resendLiveCleanpointsFlag: Util_1.default.strtokBITSET.get(buf, off + 40, 2)\n            },\n            // flagsNumeric: Token.UINT32_LE.get(buf, off + 64),\n            streamNumber: buf.readInt16LE(off + 42),\n            streamLanguageId: buf.readInt16LE(off + 44),\n            averageTimePerFrame: buf.readInt32LE(off + 52),\n            streamNameCount: buf.readInt32LE(off + 54),\n            payloadExtensionSystems: buf.readInt32LE(off + 56),\n            streamNames: [],\n            streamPropertiesObject: null\n        };\n    }\n}\nExtendedStreamPropertiesObjectState.guid = GUID_1.default.ExtendedStreamPropertiesObject;\nexports.ExtendedStreamPropertiesObjectState = ExtendedStreamPropertiesObjectState;\n/**\n * 4.7  Metadata Object (optional, 0 or 1)\n * Ref: http://drang.s4.xrea.com/program/tips/id3tag/wmp/04_objects_in_the_asf_header_extension_object.html#4_7\n */\nclass MetadataObjectState extends State {\n    constructor(header) {\n        super(header);\n    }\n    get(buf, off) {\n        const tags = [];\n        const descriptionRecordsCount = buf.readUInt16LE(off);\n        let pos = off + 2;\n        for (let i = 0; i < descriptionRecordsCount; i += 1) {\n            pos += 4;\n            const nameLen = buf.readUInt16LE(pos);\n            pos += 2;\n            const dataType = buf.readUInt16LE(pos);\n            pos += 2;\n            const dataLen = buf.readUInt32LE(pos);\n            pos += 4;\n            const name = AsfUtil_1.AsfUtil.parseUnicodeAttr(buf.slice(pos, pos + nameLen));\n            pos += nameLen;\n            const data = buf.slice(pos, pos + dataLen);\n            pos += dataLen;\n            const parseAttr = AsfUtil_1.AsfUtil.getParserForAttr(dataType);\n            if (!parseAttr) {\n                throw new Error(\"unexpected value headerType: \" + dataType);\n            }\n            this.postProcessTag(tags, name, dataType, data);\n        }\n        return tags;\n    }\n}\nMetadataObjectState.guid = GUID_1.default.MetadataObject;\nexports.MetadataObjectState = MetadataObjectState;\n// 4.8\tMetadata Library Object (optional, 0 or 1)\nclass MetadataLibraryObjectState extends MetadataObjectState {\n    constructor(header) {\n        super(header);\n    }\n}\nMetadataLibraryObjectState.guid = GUID_1.default.MetadataLibraryObject;\nexports.MetadataLibraryObjectState = MetadataLibraryObjectState;\n/**\n * Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/dd757977(v=vs.85).aspx\n */\nclass WmPictureToken {\n    constructor(len) {\n        this.len = len;\n    }\n    static fromBase64(base64str) {\n        return this.fromBuffer(Buffer.from(base64str, \"base64\"));\n    }\n    static fromBuffer(buffer) {\n        const pic = new WmPictureToken(buffer.length);\n        return pic.get(buffer, 0);\n    }\n    get(buffer, offset) {\n        const typeId = buffer.readUInt8(offset++);\n        const size = buffer.readInt32LE(offset);\n        let index = 5;\n        while (buffer.readUInt16BE(index) !== 0) {\n            index += 2;\n        }\n        const format = buffer.slice(5, index).toString(\"utf16le\");\n        while (buffer.readUInt16BE(index) !== 0) {\n            index += 2;\n        }\n        const description = buffer.slice(5, index).toString(\"utf16le\");\n        return {\n            type: ID3v2_1.AttachedPictureType[typeId],\n            format,\n            description,\n            size,\n            data: buffer.slice(index + 4)\n        };\n    }\n}\nexports.WmPictureToken = WmPictureToken;\n//# sourceMappingURL=AsfObject.js.map","'use strict';\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst GUID_1 = require(\"./GUID\");\nconst AsfObject = require(\"./AsfObject\");\nconst _debug = require(\"debug\");\nconst BasicParser_1 = require(\"../common/BasicParser\");\nconst debug = _debug('music-metadata:parser:ASF');\nconst headerType = 'asf';\n/**\n * Windows Media Metadata Usage Guidelines\n *   Ref: https://msdn.microsoft.com/en-us/library/ms867702.aspx\n *\n * Ref:\n *   https://tools.ietf.org/html/draft-fleischman-asf-01\n *   https://hwiegman.home.xs4all.nl/fileformats/asf/ASF_Specification.pdf\n *   http://drang.s4.xrea.com/program/tips/id3tag/wmp/index.html\n *   https://msdn.microsoft.com/en-us/library/windows/desktop/ee663575(v=vs.85).aspx\n */\nclass AsfParser extends BasicParser_1.BasicParser {\n    parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const header = yield this.tokenizer.readToken(AsfObject.TopLevelHeaderObjectToken);\n            if (!header.objectId.equals(GUID_1.default.HeaderObject)) {\n                throw new Error('expected asf header; but was not found; got: ' + header.objectId.str);\n            }\n            try {\n                yield this.parseObjectHeader(header.numberOfHeaderObjects);\n            }\n            catch (err) {\n                debug('Error while parsing ASF: %s', err);\n            }\n        });\n    }\n    parseObjectHeader(numberOfObjectHeaders) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let tags;\n            do {\n                // Parse common header of the ASF Object (3.1)\n                const header = yield this.tokenizer.readToken(AsfObject.HeaderObjectToken);\n                // Parse data part of the ASF Object\n                debug('header GUID=%s', header.objectId.str);\n                switch (header.objectId.str) {\n                    case AsfObject.FilePropertiesObject.guid.str: // 3.2\n                        const fpo = yield this.tokenizer.readToken(new AsfObject.FilePropertiesObject(header));\n                        this.metadata.setFormat('duration', fpo.playDuration / 10000000);\n                        this.metadata.setFormat('bitrate', fpo.maximumBitrate);\n                        break;\n                    case AsfObject.StreamPropertiesObject.guid.str: // 3.3\n                        const spo = yield this.tokenizer.readToken(new AsfObject.StreamPropertiesObject(header));\n                        this.metadata.setFormat('dataformat', 'ASF/' + spo.streamType);\n                        break;\n                    case AsfObject.HeaderExtensionObject.guid.str: // 3.4\n                        const extHeader = yield this.tokenizer.readToken(new AsfObject.HeaderExtensionObject());\n                        yield this.parseExtensionObject(extHeader.extensionDataSize);\n                        break;\n                    case AsfObject.ContentDescriptionObjectState.guid.str: // 3.10\n                        tags = yield this.tokenizer.readToken(new AsfObject.ContentDescriptionObjectState(header));\n                        this.addTags(tags);\n                        break;\n                    case AsfObject.ExtendedContentDescriptionObjectState.guid.str: // 3.11\n                        tags = yield this.tokenizer.readToken(new AsfObject.ExtendedContentDescriptionObjectState(header));\n                        this.addTags(tags);\n                        break;\n                    case GUID_1.default.CodecListObject.str:\n                        // ToDo?\n                        yield this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);\n                        break;\n                    case GUID_1.default.StreamBitratePropertiesObject.str:\n                        // ToDo?\n                        yield this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);\n                        break;\n                    case GUID_1.default.PaddingObject.str:\n                        // ToDo: register bytes pad\n                        debug('Padding: %s bytes', header.objectSize - AsfObject.HeaderObjectToken.len);\n                        yield this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);\n                        break;\n                    default:\n                        this.warnings.push('Ignore ASF-Object-GUID: ' + header.objectId.str);\n                        debug('Ignore ASF-Object-GUID: %s', header.objectId.str);\n                        yield this.tokenizer.readToken(new AsfObject.IgnoreObjectState(header));\n                }\n            } while (--numberOfObjectHeaders);\n            // done\n        });\n    }\n    addTags(tags) {\n        tags.forEach(tag => {\n            this.metadata.addTag(headerType, tag.id, tag.value);\n        });\n    }\n    parseExtensionObject(extensionSize) {\n        return __awaiter(this, void 0, void 0, function* () {\n            do {\n                // Parse common header of the ASF Object (3.1)\n                const header = yield this.tokenizer.readToken(AsfObject.HeaderObjectToken);\n                // Parse data part of the ASF Object\n                switch (header.objectId.str) {\n                    case AsfObject.ExtendedStreamPropertiesObjectState.guid.str: // 4.1\n                        const cd = yield this.tokenizer.readToken(new AsfObject.ExtendedStreamPropertiesObjectState(header));\n                        break;\n                    case AsfObject.MetadataObjectState.guid.str: // 4.7\n                        const moTags = yield this.tokenizer.readToken(new AsfObject.MetadataObjectState(header));\n                        this.addTags(moTags);\n                        break;\n                    case AsfObject.MetadataLibraryObjectState.guid.str: // 4.8\n                        const mlTags = yield this.tokenizer.readToken(new AsfObject.MetadataLibraryObjectState(header));\n                        this.addTags(mlTags);\n                        break;\n                    case GUID_1.default.PaddingObject.str:\n                        // ToDo: register bytes pad\n                        yield this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);\n                        break;\n                    case GUID_1.default.CompatibilityObject.str:\n                        this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);\n                        break;\n                    case GUID_1.default.ASF_Index_Placeholder_Object.str:\n                        yield this.tokenizer.ignore(header.objectSize - AsfObject.HeaderObjectToken.len);\n                        break;\n                    default:\n                        this.warnings.push('Ignore ASF-Object-GUID: ' + header.objectId.str);\n                        // console.log(\"Ignore ASF-Object-GUID: %s\", header.objectId.str);\n                        yield this.tokenizer.readToken(new AsfObject.IgnoreObjectState(header));\n                        break;\n                }\n                extensionSize -= header.objectSize;\n            } while (extensionSize > 0);\n        });\n    }\n}\nexports.AsfParser = AsfParser;\n//# sourceMappingURL=AsfParser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst ID3v2_1 = require(\"../../id3v2/ID3v2\");\n/**\n * Parse the METADATA_BLOCK_PICTURE\n * Ref: https://wiki.xiph.org/VorbisComment#METADATA_BLOCK_PICTURE\n * Ref: https://xiph.org/flac/format.html#metadata_block_picture\n * // ToDo: move to ID3 / APIC?\n */\nclass VorbisPictureToken {\n    constructor(len) {\n        this.len = len;\n    }\n    static fromBase64(base64str) {\n        return this.fromBuffer(Buffer.from(base64str, 'base64'));\n    }\n    static fromBuffer(buffer) {\n        const pic = new VorbisPictureToken(buffer.length);\n        return pic.get(buffer, 0);\n    }\n    get(buffer, offset) {\n        const type = ID3v2_1.AttachedPictureType[Token.UINT32_BE.get(buffer, offset)];\n        const mimeLen = Token.UINT32_BE.get(buffer, offset += 4);\n        const format = buffer.toString('utf-8', offset += 4, offset + mimeLen);\n        const descLen = Token.UINT32_BE.get(buffer, offset += mimeLen);\n        const description = buffer.toString('utf-8', offset += 4, offset + descLen);\n        const width = Token.UINT32_BE.get(buffer, offset += descLen);\n        const height = Token.UINT32_BE.get(buffer, offset += 4);\n        const colour_depth = Token.UINT32_BE.get(buffer, offset += 4);\n        const indexed_color = Token.UINT32_BE.get(buffer, offset += 4);\n        const picDataLen = Token.UINT32_BE.get(buffer, offset += 4);\n        const data = Buffer.from(buffer.slice(offset += 4, offset + picDataLen));\n        return {\n            type,\n            format,\n            description,\n            width,\n            height,\n            colour_depth,\n            indexed_color,\n            data\n        };\n    }\n}\nexports.VorbisPictureToken = VorbisPictureToken;\n/**\n * Comment header decoder\n * Ref: https://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-620004.2.1\n */\nexports.CommonHeader = {\n    len: 7,\n    get: (buf, off) => {\n        return {\n            packetType: buf.readUInt8(off),\n            vorbis: new Token.StringType(6, 'ascii').get(buf, off + 1)\n        };\n    }\n};\n/**\n * Identification header decoder\n * Ref: https://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-630004.2.2\n */\nexports.IdentificationHeader = {\n    len: 23,\n    get: (buf, off) => {\n        return {\n            version: buf.readUInt32LE(off + 0),\n            channelMode: buf.readUInt8(off + 4),\n            sampleRate: buf.readUInt32LE(off + 5),\n            bitrateMax: buf.readUInt32LE(off + 9),\n            bitrateNominal: buf.readUInt32LE(off + 13),\n            bitrateMin: buf.readUInt32LE(off + 17)\n        };\n    }\n};\n//# sourceMappingURL=Vorbis.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst type_1 = require(\"strtok3/lib/type\");\nconst ID3v2_1 = require(\"./ID3v2\");\nconst ID3v2Parser_1 = require(\"./ID3v2Parser\");\nconst ID3v1Parser_1 = require(\"../id3v1/ID3v1Parser\");\nconst _debug = require(\"debug\");\nconst BasicParser_1 = require(\"../common/BasicParser\");\nconst debug = _debug('music-metadata:parser:ID3');\n/**\n * Abstract parser which tries take ID3v2 and ID3v1 headers.\n */\nclass AbstractID3Parser extends BasicParser_1.BasicParser {\n    constructor() {\n        super(...arguments);\n        this.id3parser = new ID3v2Parser_1.ID3v2Parser();\n    }\n    static startsWithID3v2Header(tokenizer) {\n        return __awaiter(this, void 0, void 0, function* () {\n            return (yield tokenizer.peekToken(ID3v2_1.ID3v2Token.Header)).fileIdentifier === 'ID3';\n        });\n    }\n    parse() {\n        return this.parseID3v2().catch(err => {\n            if (err.message === type_1.endOfFile)\n                // ToDo: maybe a warning?\n                return;\n            else\n                throw err;\n        });\n    }\n    finalize() {\n        return;\n    }\n    parseID3v2() {\n        return __awaiter(this, void 0, void 0, function* () {\n            yield this.tryReadId3v2Headers();\n            debug(\"End of ID3v2 header, go to MPEG-parser: pos=%s\", this.tokenizer.position);\n            yield this._parse();\n            if (this.options.skipPostHeaders && this.metadata.hasAny()) {\n                this.finalize();\n            }\n            else {\n                const id3v1parser = new ID3v1Parser_1.ID3v1Parser();\n                yield id3v1parser.init(this.metadata, this.tokenizer, this.options).parse();\n                this.finalize();\n            }\n        });\n    }\n    tryReadId3v2Headers() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const id3Header = yield this.tokenizer.peekToken(ID3v2_1.ID3v2Token.Header);\n            if (id3Header.fileIdentifier === \"ID3\") {\n                debug(\"Found ID3v2 header, pos=%s\", this.tokenizer.position);\n                yield this.id3parser.parse(this.metadata, this.tokenizer, this.options);\n                return this.tryReadId3v2Headers();\n            }\n        });\n    }\n}\nexports.AbstractID3Parser = AbstractID3Parser;\n//# sourceMappingURL=AbstractID3Parser.js.map","'use strict';\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Util_1 = require(\"../common/Util\");\nconst Token = require(\"token-types\");\nconst Vorbis_1 = require(\"../ogg/vorbis/Vorbis\");\nconst AbstractID3Parser_1 = require(\"../id3v2/AbstractID3Parser\");\nconst FourCC_1 = require(\"../common/FourCC\");\nconst _debug = require(\"debug\");\nconst debug = _debug('music-metadata:parser:FLAC');\n/**\n * FLAC supports up to 128 kinds of metadata blocks; currently the following are defined:\n * ref: https://xiph.org/flac/format.html#metadata_block\n */\nvar BlockType;\n(function (BlockType) {\n    BlockType[BlockType[\"STREAMINFO\"] = 0] = \"STREAMINFO\";\n    BlockType[BlockType[\"PADDING\"] = 1] = \"PADDING\";\n    BlockType[BlockType[\"APPLICATION\"] = 2] = \"APPLICATION\";\n    BlockType[BlockType[\"SEEKTABLE\"] = 3] = \"SEEKTABLE\";\n    BlockType[BlockType[\"VORBIS_COMMENT\"] = 4] = \"VORBIS_COMMENT\";\n    BlockType[BlockType[\"CUESHEET\"] = 5] = \"CUESHEET\";\n    BlockType[BlockType[\"PICTURE\"] = 6] = \"PICTURE\";\n})(BlockType || (BlockType = {}));\nclass FlacParser extends AbstractID3Parser_1.AbstractID3Parser {\n    constructor() {\n        super(...arguments);\n        this.padding = 0;\n    }\n    static getInstance() {\n        return new FlacParser();\n    }\n    _parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const fourCC = yield this.tokenizer.readToken(FourCC_1.FourCcToken);\n            if (fourCC.toString() !== 'fLaC') {\n                throw new Error('Invalid FLAC preamble');\n            }\n            let blockHeader;\n            do {\n                // Read block header\n                blockHeader = yield this.tokenizer.readToken(Metadata.BlockHeader);\n                // Parse block data\n                yield this.parseDataBlock(blockHeader);\n            } while (!blockHeader.lastBlock);\n            if (this.tokenizer.fileSize && this.metadata.format.duration) {\n                const dataSize = this.tokenizer.fileSize - this.tokenizer.position;\n                this.metadata.setFormat('bitrate', 8 * dataSize / this.metadata.format.duration);\n            }\n        });\n    }\n    addTag(id, value) {\n        this.metadata.addTag('vorbis', id, value);\n    }\n    parseDataBlock(blockHeader) {\n        debug(`blockHeader type=${blockHeader.type}, length=${blockHeader.length}`);\n        switch (blockHeader.type) {\n            case BlockType.STREAMINFO:\n                return this.parseBlockStreamInfo(blockHeader.length);\n            case BlockType.PADDING:\n                this.padding += blockHeader.length;\n                break;\n            case BlockType.APPLICATION:\n                break;\n            case BlockType.SEEKTABLE:\n                break;\n            case BlockType.VORBIS_COMMENT:\n                return this.parseComment(blockHeader.length);\n            case BlockType.CUESHEET:\n                break;\n            case BlockType.PICTURE:\n                return this.parsePicture(blockHeader.length);\n            default:\n                this.warnings.push('Unknown block type: ' + blockHeader.type);\n        }\n        // Ignore data block\n        return this.tokenizer.readToken(new Token.IgnoreType(blockHeader.length));\n    }\n    /**\n     * Parse STREAMINFO\n     */\n    parseBlockStreamInfo(dataLen) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (dataLen !== Metadata.BlockStreamInfo.len)\n                throw new Error('Unexpected block-stream-info length');\n            const streamInfo = yield this.tokenizer.readToken(Metadata.BlockStreamInfo);\n            this.metadata.setFormat('dataformat', 'flac');\n            this.metadata.setFormat('lossless', true);\n            this.metadata.setFormat('numberOfChannels', streamInfo.channels);\n            this.metadata.setFormat('bitsPerSample', streamInfo.bitsPerSample);\n            this.metadata.setFormat('sampleRate', streamInfo.sampleRate);\n            this.metadata.setFormat('duration', streamInfo.totalSamples / streamInfo.sampleRate);\n        });\n    }\n    /**\n     * Parse VORBIS_COMMENT\n     * Ref: https://www.xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-640004.2.3\n     */\n    parseComment(dataLen) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const data = yield this.tokenizer.readToken(new Token.BufferType(dataLen));\n            const decoder = new DataDecoder(data);\n            decoder.readStringUtf8(); // vendor (skip)\n            const commentListLength = decoder.readInt32();\n            for (let i = 0; i < commentListLength; i++) {\n                const comment = decoder.readStringUtf8();\n                const split = comment.split('=');\n                this.addTag(split[0].toUpperCase(), split.splice(1).join('='));\n            }\n        });\n    }\n    parsePicture(dataLen) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (this.options.skipCovers) {\n                return this.tokenizer.ignore(dataLen);\n            }\n            else {\n                const picture = yield this.tokenizer.readToken(new Vorbis_1.VorbisPictureToken(dataLen));\n                this.addTag('METADATA_BLOCK_PICTURE', picture);\n            }\n        });\n    }\n}\nexports.FlacParser = FlacParser;\nclass Metadata {\n}\nMetadata.BlockHeader = {\n    len: 4,\n    get: (buf, off) => {\n        return {\n            lastBlock: Util_1.default.strtokBITSET.get(buf, off, 7),\n            type: Util_1.default.getBitAllignedNumber(buf, off, 1, 7),\n            length: Token.UINT24_BE.get(buf, off + 1)\n        };\n    }\n};\n/**\n * METADATA_BLOCK_DATA\n * Ref: https://xiph.org/flac/format.html#metadata_block_streaminfo\n */\nMetadata.BlockStreamInfo = {\n    len: 34,\n    get: (buf, off) => {\n        return {\n            // The minimum block size (in samples) used in the stream.\n            minimumBlockSize: Token.UINT16_BE.get(buf, off),\n            // The maximum block size (in samples) used in the stream.\n            // (Minimum blocksize == maximum blocksize) implies a fixed-blocksize stream.\n            maximumBlockSize: Token.UINT16_BE.get(buf, off + 2) / 1000,\n            // The minimum frame size (in bytes) used in the stream.\n            // May be 0 to imply the value is not known.\n            minimumFrameSize: Token.UINT24_BE.get(buf, off + 4),\n            // The maximum frame size (in bytes) used in the stream.\n            // May be 0 to imply the value is not known.\n            maximumFrameSize: Token.UINT24_BE.get(buf, off + 7),\n            // Sample rate in Hz. Though 20 bits are available,\n            // the maximum sample rate is limited by the structure of frame headers to 655350Hz.\n            // Also, a value of 0 is invalid.\n            sampleRate: Token.UINT24_BE.get(buf, off + 10) >> 4,\n            // probably slower: sampleRate: common.getBitAllignedNumber(buf, off + 10, 0, 20),\n            // (number of channels)-1. FLAC supports from 1 to 8 channels\n            channels: Util_1.default.getBitAllignedNumber(buf, off + 12, 4, 3) + 1,\n            // bits per sample)-1.\n            // FLAC supports from 4 to 32 bits per sample. Currently the reference encoder and decoders only support up to 24 bits per sample.\n            bitsPerSample: Util_1.default.getBitAllignedNumber(buf, off + 12, 7, 5) + 1,\n            // Total samples in stream.\n            // 'Samples' means inter-channel sample, i.e. one second of 44.1Khz audio will have 44100 samples regardless of the number of channels.\n            // A value of zero here means the number of total samples is unknown.\n            totalSamples: Util_1.default.getBitAllignedNumber(buf, off + 13, 4, 36),\n            // the MD5 hash of the file (see notes for usage... it's a littly tricky)\n            fileMD5: new Token.BufferType(16).get(buf, off + 18)\n        };\n    }\n};\nclass DataDecoder {\n    constructor(data) {\n        this.data = data;\n        this.offset = 0;\n    }\n    readInt32() {\n        const value = Token.UINT32_LE.get(this.data, this.offset);\n        this.offset += 4;\n        return value;\n    }\n    readStringUtf8() {\n        const len = this.readInt32();\n        const value = this.data.toString('utf8', this.offset, this.offset + len);\n        this.offset += len;\n        return value;\n    }\n}\n//# sourceMappingURL=FlacParser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst FourCC_1 = require(\"../common/FourCC\");\nconst initDebug = require(\"debug\");\nconst debug = initDebug('music-metadata:parser:MP4:atom');\nexports.Header = {\n    len: 8,\n    get: (buf, off) => {\n        const length = Token.UINT32_BE.get(buf, off);\n        if (length < 0)\n            throw new Error(\"Invalid atom header length\");\n        return {\n            length,\n            name: FourCC_1.FourCcToken.get(buf, off + 4)\n        };\n    },\n    put: (buf, off, hdr) => {\n        Token.UINT32_BE.put(buf, off, hdr.length);\n        return FourCC_1.FourCcToken.put(buf, off + 4, hdr.name);\n    }\n};\n/**\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap1/qtff1.html#//apple_ref/doc/uid/TP40000939-CH203-38190\n */\nexports.ExtendedSize = Token.UINT64_BE;\nexports.ftyp = {\n    len: 4,\n    get: (buf, off) => {\n        return {\n            type: new Token.StringType(4, \"ascii\").get(buf, off)\n        };\n    }\n};\n/**\n * Token: Movie Header Atom\n */\nexports.mhdr = {\n    len: 8,\n    get: (buf, off) => {\n        return {\n            version: Token.UINT8.get(buf, off + 0),\n            flags: Token.UINT24_BE.get(buf, off + 1),\n            nextItemID: Token.UINT32_BE.get(buf, off + 4)\n        };\n    }\n};\n/**\n * Base class for 'fixed' length atoms.\n * In some cases these atoms are longer then the sum of the described fields.\n * Issue: https://github.com/Borewit/music-metadata/issues/120\n */\nclass FixedLengthAtom {\n    /**\n     *\n     * @param {number} len Length as specified in the size field\n     * @param {number} expLen Total length of sum of specified fields in the standard\n     */\n    constructor(len, expLen, atomId) {\n        this.len = len;\n        if (len < expLen) {\n            throw new Error(`Atom ${atomId} expected to be ${expLen}, but specifies ${len} bytes long.`);\n        }\n        else if (len > expLen) {\n            debug(`Warning: atom ${atomId} expected to be ${expLen}, but was actually ${len} bytes long.`);\n        }\n    }\n}\nexports.FixedLengthAtom = FixedLengthAtom;\n/**\n * Token: Media Header Atom\n * Ref:\n *   https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-SW34\n *   https://wiki.multimedia.cx/index.php/QuickTime_container#mdhd\n */\nclass MdhdAtom extends FixedLengthAtom {\n    constructor(len) {\n        super(len, 24, 'mdhd');\n        this.len = len;\n    }\n    get(buf, off) {\n        return {\n            version: Token.UINT8.get(buf, off + 0),\n            flags: Token.UINT24_BE.get(buf, off + 1),\n            creationTime: Token.UINT32_BE.get(buf, off + 4),\n            modificationTime: Token.UINT32_BE.get(buf, off + 8),\n            timeScale: Token.UINT32_BE.get(buf, off + 12),\n            duration: Token.UINT32_BE.get(buf, off + 16),\n            language: Token.UINT16_BE.get(buf, off + 20),\n            quality: Token.UINT16_BE.get(buf, off + 22)\n        };\n    }\n}\nexports.MdhdAtom = MdhdAtom;\n/**\n * Token: Movie Header Atom\n */\nclass MvhdAtom extends FixedLengthAtom {\n    constructor(len) {\n        super(len, 100, 'mvhd');\n        this.len = len;\n    }\n    get(buf, off) {\n        return {\n            version: Token.UINT8.get(buf, off + 0),\n            flags: Token.UINT24_BE.get(buf, off + 1),\n            creationTime: Token.UINT32_BE.get(buf, off + 4),\n            modificationTime: Token.UINT32_BE.get(buf, off + 8),\n            timeScale: Token.UINT32_BE.get(buf, off + 12),\n            duration: Token.UINT32_BE.get(buf, off + 16),\n            preferredRate: Token.UINT32_BE.get(buf, off + 20),\n            preferredVolume: Token.UINT16_BE.get(buf, off + 24),\n            // ignore reserver: 10 bytes\n            // ignore matrix structure: 36 bytes\n            previewTime: Token.UINT32_BE.get(buf, off + 72),\n            previewDuration: Token.UINT32_BE.get(buf, off + 76),\n            posterTime: Token.UINT32_BE.get(buf, off + 80),\n            selectionTime: Token.UINT32_BE.get(buf, off + 84),\n            selectionDuration: Token.UINT32_BE.get(buf, off + 88),\n            currentTime: Token.UINT32_BE.get(buf, off + 92),\n            nextTrackID: Token.UINT32_BE.get(buf, off + 96)\n        };\n    }\n}\nexports.MvhdAtom = MvhdAtom;\n/**\n * Data Atom Structure\n */\nclass DataAtom {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        return {\n            type: {\n                set: Token.UINT8.get(buf, off + 0),\n                type: Token.UINT24_BE.get(buf, off + 1)\n            },\n            locale: Token.UINT24_BE.get(buf, off + 4),\n            value: new Token.BufferType(this.len - 8).get(buf, off + 8)\n        };\n    }\n}\nexports.DataAtom = DataAtom;\n/**\n * Data Atom Structure\n * Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW31\n */\nclass NameAtom {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        return {\n            version: Token.UINT8.get(buf, off),\n            flags: Token.UINT24_BE.get(buf, off + 1),\n            name: new Token.StringType(this.len - 4, \"utf-8\").get(buf, off + 4)\n        };\n    }\n}\nexports.NameAtom = NameAtom;\n/**\n * Track Header Atoms structure\n * Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25550\n */\nclass TrackHeaderAtom {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        return {\n            version: Token.UINT8.get(buf, off),\n            flags: Token.UINT24_BE.get(buf, off + 1),\n            creationTime: Token.UINT32_BE.get(buf, off + 4),\n            modificationTime: Token.UINT32_BE.get(buf, off + 8),\n            trackId: Token.UINT32_BE.get(buf, off + 12),\n            // reserved 4 bytes\n            duration: Token.UINT32_BE.get(buf, off + 20),\n            layer: Token.UINT16_BE.get(buf, off + 24),\n            alternateGroup: Token.UINT16_BE.get(buf, off + 26),\n            volume: Token.UINT16_BE.get(buf, off + 28) // ToDo: fixed point\n            // ToDo: add remaining fields\n        };\n    }\n}\nexports.TrackHeaderAtom = TrackHeaderAtom;\n/**\n * Atom: Sample Description Atom ('stsd')\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25691\n */\nconst stsdHeader = {\n    len: 8,\n    get: (buf, off) => {\n        return {\n            version: Token.UINT8.get(buf, off + 0),\n            flags: Token.UINT24_BE.get(buf, off + 1),\n            numberOfEntries: Token.UINT32_BE.get(buf, off + 4)\n        };\n    }\n};\n/**\n * Atom: Sample Description Atom ('stsd')\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25691\n */\nclass SampleDiscriptionTable {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        return {\n            dataFormat: FourCC_1.FourCcToken.get(buf, off),\n            dataReferenceIndex: Token.UINT16_BE.get(buf, off + 10)\n        };\n    }\n}\n/**\n * Atom: Sample Description Atom ('stsd')\n * Ref: https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap2/qtff2.html#//apple_ref/doc/uid/TP40000939-CH204-25691\n */\nclass StsdAtom {\n    constructor(len) {\n        this.len = len;\n    }\n    get(buf, off) {\n        const header = stsdHeader.get(buf, off);\n        off += stsdHeader.len;\n        const table = [];\n        for (let n = 0; n < header.numberOfEntries; ++n) {\n            const size = Token.UINT32_BE.get(buf, off); // Sample description size\n            off += Token.UINT32_BE.len;\n            table.push(new SampleDiscriptionTable(size).get(buf, off));\n            off += size;\n        }\n        return {\n            header,\n            table\n        };\n    }\n}\nexports.StsdAtom = StsdAtom;\n//# sourceMappingURL=AtomToken.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst type_1 = require(\"strtok3/lib/type\");\nconst initDebug = require(\"debug\");\nconst Token = require(\"token-types\");\nconst AtomToken = require(\"./AtomToken\");\nconst debug = initDebug(\"music-metadata:parser:MP4:Atom\");\nclass Atom {\n    constructor(header, extended, parent) {\n        this.header = header;\n        this.extended = extended;\n        this.parent = parent;\n        this.children = [];\n        this.atomPath = (this.parent ? this.parent.atomPath + '/' : '') + this.header.name;\n        this.dataLen = this.header.length - (extended ? 16 : 8);\n    }\n    readAtoms(tokenizer, dataHandler, size) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const atomBean = yield this.readAtom(tokenizer, dataHandler);\n            this.children.push(atomBean);\n            if (size === undefined) {\n                return this.readAtoms(tokenizer, dataHandler, size).catch(err => {\n                    if (err.message === type_1.endOfFile) {\n                        debug(`Reached end-of-file`);\n                    }\n                    else {\n                        throw err;\n                    }\n                });\n            }\n            size -= atomBean.header.length;\n            if (size > 0) {\n                return this.readAtoms(tokenizer, dataHandler, size);\n            }\n        });\n    }\n    readAtom(tokenizer, dataHandler) {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Parse atom header\n            const offset = tokenizer.position;\n            // debug(`Reading next token on offset=${offset}...`); //  buf.toString('ascii')\n            const header = yield tokenizer.readToken(AtomToken.Header);\n            const extended = header.length === 1;\n            if (extended) {\n                header.length = yield tokenizer.readToken(AtomToken.ExtendedSize);\n            }\n            const atomBean = new Atom(header, extended, this);\n            debug(`parse atom name=${atomBean.atomPath}, extended=${atomBean.extended}, offset=${offset}, len=${atomBean.header.length}`); //  buf.toString('ascii')\n            yield atomBean.readData(tokenizer, dataHandler);\n            return atomBean;\n        });\n    }\n    readData(tokenizer, dataHandler) {\n        return __awaiter(this, void 0, void 0, function* () {\n            switch (this.header.name) {\n                // \"Container\" atoms, contains nested atoms\n                case \"moov\": // The Movie Atom: contains other atoms\n                case \"udta\": // User defined atom\n                case \"trak\":\n                case \"mdia\": // Media atom\n                case \"minf\": // Media Information Atom\n                case \"stbl\": // The Sample Table Atom\n                case \"<id>\":\n                case \"ilst\":\n                    return this.readAtoms(tokenizer, dataHandler, this.dataLen);\n                case \"meta\": // Metadata Atom, ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW8\n                    // meta has 4 bytes of padding, ignore\n                    yield tokenizer.readToken(new Token.IgnoreType(4));\n                    return this.readAtoms(tokenizer, dataHandler, this.dataLen - 4);\n                case \"mdhd\": // Media header atom\n                case \"mvhd\": // 'movie' => 'mvhd': movie header atom; child of Movie Atom\n                case \"tkhd\":\n                case \"stsz\":\n                case \"mdat\":\n                default:\n                    return dataHandler(this);\n            }\n        });\n    }\n}\nexports.Atom = Atom;\n//# sourceMappingURL=Atom.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst initDebug = require(\"debug\");\nconst Token = require(\"token-types\");\nconst BasicParser_1 = require(\"../common/BasicParser\");\nconst Atom_1 = require(\"./Atom\");\nconst AtomToken = require(\"./AtomToken\");\nconst ID3v1Parser_1 = require(\"../id3v1/ID3v1Parser\");\nconst debug = initDebug('music-metadata:parser:MP4');\nconst tagFormat = 'iTunes';\nconst encoderDict = {\n    alac: {\n        lossy: false,\n        format: 'ALAC'\n    },\n    mp4a: {\n        lossy: true,\n        format: 'MP4A'\n    },\n    mp4s: {\n        lossy: true,\n        format: 'MP4S'\n    },\n    // Closed Captioning Media, https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/QTFFChap3/qtff3.html#//apple_ref/doc/uid/TP40000939-CH205-SW87\n    c608: {\n        lossy: true,\n        format: 'CEA-608'\n    },\n    c708: {\n        lossy: true,\n        format: 'CEA-708'\n    }\n};\nfunction distinct(value, index, self) {\n    return self.indexOf(value) === index;\n}\n/*\n * Parser for ISO base media file format (ISO/IEC 14496-12 – MPEG-4 Part 12), supporting:\n * - QuickTime container\n * - MP4 File Format\n * - 3GPP file format\n * - 3GPP2 file format\n *\n * MPEG-4 Audio / Part 3 (.m4a)& MPEG 4 Video (m4v, mp4) extension.\n * Support for Apple iTunes tags as found in a M4A/M4V files.\n * Ref:\n *   https://en.wikipedia.org/wiki/ISO_base_media_file_format\n *   https://developer.apple.com/library/archive/documentation/QuickTime/QTFF/Metadata/Metadata.html\n *   http://atomicparsley.sourceforge.net/mpeg-4files.html\n *   https://github.com/sergiomb2/libmp4v2/wiki/iTunesMetadata\n *   https://wiki.multimedia.cx/index.php/QuickTime_container\n */\nclass MP4Parser extends BasicParser_1.BasicParser {\n    static read_BE_Signed_Integer(value) {\n        return Token.readIntBE(value, 0, value.length);\n    }\n    static read_BE_Unsigned_Integer(value) {\n        return Token.readUIntBE(value, 0, value.length);\n    }\n    parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            this.formatList = [];\n            const rootAtom = new Atom_1.Atom({ name: 'mp4', length: this.tokenizer.fileSize }, false, null);\n            yield rootAtom.readAtoms(this.tokenizer, (atom) => __awaiter(this, void 0, void 0, function* () {\n                if (atom.parent) {\n                    switch (atom.parent.header.name) {\n                        case 'ilst':\n                        case '<id>':\n                            return this.parseMetadataItemData(atom);\n                        case 'stbl': // The Sample Table Atom\n                            switch (atom.header.name) {\n                                case 'stsd': // sample descriptions\n                                    return this.parseAtom_stsd(atom.dataLen);\n                            }\n                    }\n                }\n                switch (atom.header.name) {\n                    case \"ftyp\":\n                        const types = yield this.parseAtom_ftyp(atom.dataLen);\n                        debug(`ftyp: ${types.join('/')}`);\n                        this.metadata.setFormat('dataformat', types.filter(distinct).join('/'));\n                        return;\n                    case 'mdhd': // Media header atom\n                        return this.parseAtom_mdhd(atom);\n                    case 'mvhd': // 'movie' => 'mvhd': movie header atom; child of Movie Atom\n                        return this.parseAtom_mvhd(atom);\n                    case 'mdat': // media data atom:\n                        if (this.tokenizer.fileSize && this.metadata.format.duration) {\n                            this.metadata.setFormat('bitrate', 8 * atom.dataLen / this.metadata.format.duration);\n                        }\n                        break;\n                }\n                yield this.tokenizer.readToken(new Token.IgnoreType(atom.dataLen));\n                debug(`Ignore atom data: path=${atom.atomPath}, payload-len=${atom.dataLen}`);\n            }), this.tokenizer.fileSize);\n            this.metadata.setFormat('encoder', this.formatList.filter(distinct).join('+'));\n        });\n    }\n    addTag(id, value) {\n        this.metadata.addTag(tagFormat, id, value);\n    }\n    addWarning(message) {\n        debug('Warning:' + message);\n        this.warnings.push(message);\n    }\n    /**\n     * Parse data of Meta-item-list-atom (item of 'ilst' atom)\n     * @param metaAtom\n     * Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW8\n     */\n    parseMetadataItemData(metaAtom) {\n        let tagKey = metaAtom.header.name;\n        return metaAtom.readAtoms(this.tokenizer, (child) => __awaiter(this, void 0, void 0, function* () {\n            switch (child.header.name) {\n                case \"data\": // value atom\n                    return this.parseValueAtom(tagKey, child);\n                case \"name\": // name atom (optional)\n                    const name = yield this.tokenizer.readToken(new AtomToken.NameAtom(child.dataLen));\n                    tagKey += \":\" + name.name;\n                    break;\n                case \"mean\": // name atom (optional)\n                    const mean = yield this.tokenizer.readToken(new AtomToken.NameAtom(child.dataLen));\n                    // console.log(\"  %s[%s] = %s\", tagKey, header.name, mean.name);\n                    tagKey += \":\" + mean.name;\n                    break;\n                default:\n                    const dataAtom = yield this.tokenizer.readToken(new Token.BufferType(child.dataLen));\n                    this.addWarning(\"Unsupported meta-item: \" + tagKey + \"[\" + child.header.name + \"] => value=\" + dataAtom.toString(\"hex\") + \" ascii=\" + dataAtom.toString(\"ascii\"));\n            }\n        }), metaAtom.dataLen);\n    }\n    parseValueAtom(tagKey, metaAtom) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const dataAtom = yield this.tokenizer.readToken(new AtomToken.DataAtom(metaAtom.header.length - AtomToken.Header.len));\n            if (dataAtom.type.set !== 0) {\n                throw new Error(\"Unsupported type-set != 0: \" + dataAtom.type.set);\n            }\n            // Use well-known-type table\n            // Ref: https://developer.apple.com/library/content/documentation/QuickTime/QTFF/Metadata/Metadata.html#//apple_ref/doc/uid/TP40000939-CH1-SW35\n            switch (dataAtom.type.type) {\n                case 0: // reserved: Reserved for use where no type needs to be indicated\n                    switch (tagKey) {\n                        case \"trkn\":\n                        case \"disk\":\n                            const num = Token.UINT8.get(dataAtom.value, 3);\n                            const of = Token.UINT8.get(dataAtom.value, 5);\n                            // console.log(\"  %s[data] = %s/%s\", tagKey, num, of);\n                            this.addTag(tagKey, num + \"/\" + of);\n                            break;\n                        case \"gnre\":\n                            const genreInt = Token.UINT8.get(dataAtom.value, 1);\n                            const genreStr = ID3v1Parser_1.Genres[genreInt - 1];\n                            // console.log(\"  %s[data] = %s\", tagKey, genreStr);\n                            this.addTag(tagKey, genreStr);\n                            break;\n                        default:\n                        // console.log(\"  reserved-data: name=%s, len=%s, set=%s, type=%s, locale=%s, value{ hex=%s, ascii=%s }\",\n                        // header.name, header.length, dataAtom.type.set, dataAtom.type.type, dataAtom.locale, dataAtom.value.toString('hex'), dataAtom.value.toString('ascii'));\n                    }\n                    break;\n                case 1: // UTF-8: Without any count or NULL terminator\n                case 18: // Unknown: Found in m4b in combination with a '©gen' tag\n                    this.addTag(tagKey, dataAtom.value.toString(\"utf-8\"));\n                    break;\n                case 13: // JPEG\n                    if (this.options.skipCovers)\n                        break;\n                    this.addTag(tagKey, {\n                        format: \"image/jpeg\",\n                        data: Buffer.from(dataAtom.value)\n                    });\n                    break;\n                case 14: // PNG\n                    if (this.options.skipCovers)\n                        break;\n                    this.addTag(tagKey, {\n                        format: \"image/png\",\n                        data: Buffer.from(dataAtom.value)\n                    });\n                    break;\n                case 21: // BE Signed Integer\n                    this.addTag(tagKey, MP4Parser.read_BE_Signed_Integer(dataAtom.value));\n                    break;\n                case 22: // BE Unsigned Integer\n                    this.addTag(tagKey, MP4Parser.read_BE_Unsigned_Integer(dataAtom.value));\n                    break;\n                case 65: // An 8-bit signed integer\n                    this.addTag(tagKey, dataAtom.value.readInt8(0));\n                    break;\n                case 66: // A big-endian 16-bit signed integer\n                    this.addTag(tagKey, dataAtom.value.readInt16BE(0));\n                    break;\n                case 67: // A big-endian 32-bit signed integer\n                    this.addTag(tagKey, dataAtom.value.readInt32BE(0));\n                    break;\n                default:\n                    this.addWarning(`atom key=${tagKey}, has unknown well-known-type (data-type): ${dataAtom.type.type}`);\n            }\n        });\n    }\n    /**\n     * Parse movie header (mvhd) atom\n     * @param mvhd mvhd atom\n     */\n    parseAtom_mvhd(mvhd) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const mvhd_data = yield this.tokenizer.readToken(new AtomToken.MvhdAtom(mvhd.dataLen));\n            this.parse_mxhd(mvhd_data);\n        });\n    }\n    /**\n     * Parse media header (mdhd) atom\n     * @param mdhd mdhd atom\n     */\n    parseAtom_mdhd(mdhd) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const mdhd_data = yield this.tokenizer.readToken(new AtomToken.MdhdAtom(mdhd.dataLen));\n            this.parse_mxhd(mdhd_data);\n        });\n    }\n    parse_mxhd(mxhd) {\n        if (mxhd.timeScale) {\n            this.metadata.setFormat('sampleRate', mxhd.timeScale);\n            if (!this.metadata.format.duration) {\n                const duration = (mxhd.duration / mxhd.timeScale);\n                this.metadata.setFormat('duration', duration); // calculate duration in seconds\n            }\n        }\n    }\n    parseAtom_ftyp(len) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const ftype = yield this.tokenizer.readToken(AtomToken.ftyp);\n            len -= AtomToken.ftyp.len;\n            if (len > 0) {\n                const types = yield this.parseAtom_ftyp(len);\n                const value = ftype.type.replace(/\\W/g, '');\n                if (value.length > 0) {\n                    types.push(value);\n                }\n                return types;\n            }\n            return [];\n        });\n    }\n    parseAtom_stsd(len) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const stsd = yield this.tokenizer.readToken(new AtomToken.StsdAtom(len));\n            const formatList = [];\n            for (const dfEntry of stsd.table) {\n                const encoderInfo = encoderDict[dfEntry.dataFormat];\n                if (encoderInfo) {\n                    this.metadata.setFormat('lossless', !encoderInfo.lossy);\n                    formatList.push(encoderInfo.format);\n                }\n                else {\n                    debug(`Warning: data-format '${dfEntry.dataFormat}' missing in MP4Parser.encoderDict`);\n                    formatList.push(dfEntry.dataFormat);\n                }\n            }\n            this.formatList.push(formatList.join('/'));\n        });\n    }\n}\nexports.MP4Parser = MP4Parser;\n//# sourceMappingURL=MP4Parser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\n/**\n * Info Tag: Xing, LAME\n */\nexports.InfoTagHeaderTag = new Token.StringType(4, 'ascii');\n/**\n * LAME TAG value\n * Did not find any official documentation for this\n * Value e.g.: \"3.98.4\"\n */\nexports.LameEncoderVersion = new Token.StringType(6, 'ascii');\n/**\n * Info Tag\n * Ref: http://gabriel.mp3-tech.org/mp3infotag.html\n */\nexports.XingInfoTag = {\n    len: 136,\n    get: (buf, off) => {\n        return {\n            // === ZONE A - Traditional Xing VBR Tag data ===\n            // 4 bytes for HeaderFlags\n            headerFlags: new Token.BufferType(4).get(buf, off),\n            numFrames: Token.UINT32_BE.get(buf, off + 4),\n            streamSize: Token.UINT32_BE.get(buf, off + 8),\n            // the number of header data bytes (from original file)\n            vbrScale: Token.UINT32_BE.get(buf, off + 112),\n            /**\n             * LAME Tag, extends the Xing header format\n             * First added in LAME 3.12 for VBR\n             * The modified header is also included in CBR files (effective LAME 3.94), with \"Info\" instead of \"XING\" near the beginning.\n             */\n            // === ZONE B - Initial LAME info  ===\n            //  Initial LAME info, e.g.: LAME3.99r\n            encoder: new Token.StringType(9, 'ascii').get(buf, off + 116),\n            // \t Info tag revision\n            infoTagRevision: Token.UINT8.get(buf, off + 125) >> 4,\n            // VBR method\n            vbrMethod: Token.UINT8.get(buf, off + 125) & 0xf // $A5\n        };\n    }\n};\n//# sourceMappingURL=XingTag.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst assert = require(\"assert\");\nconst Token = require(\"token-types\");\nconst type_1 = require(\"strtok3/lib/type\");\nconst initDebug = require(\"debug\");\nconst Util_1 = require(\"../common/Util\");\nconst AbstractID3Parser_1 = require(\"../id3v2/AbstractID3Parser\");\nconst XingTag_1 = require(\"./XingTag\");\nconst debug = initDebug('music-metadata:parser:mpeg');\n/**\n * Cache buffer size used for searching synchronization preabmle\n */\nconst maxPeekLen = 1024;\n/**\n * MPEG-4 Audio definitions\n * Ref:  https://wiki.multimedia.cx/index.php/MPEG-4_Audio\n */\nconst MPEG4 = {\n    /**\n     * Audio Object Types\n     */\n    AudioObjectTypes: [\n        'AAC Main',\n        'AAC LC',\n        'AAC SSR',\n        'AAC LTP' // Long Term Prediction\n    ],\n    /**\n     * Sampling Frequencies\n     * https://wiki.multimedia.cx/index.php/MPEG-4_Audio#Sampling_Frequencies\n     */\n    SamplingFrequencies: [\n        96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350, undefined, undefined, -1\n    ]\n    /**\n     * Channel Configurations\n     */\n};\nconst MPEG4_ChannelConfigurations = [\n    undefined,\n    ['front-center'],\n    ['front-left', 'front-right'],\n    ['front-center', 'front-left', 'front-right'],\n    ['front-center', 'front-left', 'front-right', 'back-center'],\n    ['front-center', 'front-left', 'front-right', 'back-left', 'back-right'],\n    ['front-center', 'front-left', 'front-right', 'back-left', 'back-right', 'LFE-channel'],\n    ['front-center', 'front-left', 'front-right', 'side-left', 'side-right', 'back-left', 'back-right', 'LFE-channel']\n];\n/**\n * MPEG Audio Layer I/II/III frame header\n * Ref: https://www.mp3-tech.org/programmer/frame_header.html\n * Bit layout: AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM\n * Ref: https://wiki.multimedia.cx/index.php/ADTS\n */\nclass MpegFrameHeader {\n    constructor(buf, off) {\n        // B(20,19): MPEG Audio versionIndex ID\n        this.versionIndex = Util_1.default.getBitAllignedNumber(buf, off + 1, 3, 2);\n        // C(18,17): Layer description\n        this.layer = MpegFrameHeader.LayerDescription[Util_1.default.getBitAllignedNumber(buf, off + 1, 5, 2)];\n        if (this.versionIndex > 1 && this.layer === 0) {\n            this.parseAdtsHeader(buf, off); // Audio Data Transport Stream (ADTS)\n        }\n        else {\n            this.parseMpegHeader(buf, off); // Conventional MPEG header\n        }\n        // D(16): Protection bit (if true 16-bit CRC follows header)\n        this.isProtectedByCRC = !Util_1.default.isBitSet(buf, off + 1, 7);\n    }\n    calcDuration(numFrames) {\n        return numFrames * this.calcSamplesPerFrame() / this.samplingRate;\n    }\n    calcSamplesPerFrame() {\n        return MpegFrameHeader.samplesInFrameTable[this.version === 1 ? 0 : 1][this.layer];\n    }\n    calculateSideInfoLength() {\n        if (this.layer !== 3)\n            return 2;\n        if (this.channelModeIndex === 3) {\n            // mono\n            if (this.version === 1) {\n                return 17;\n            }\n            else if (this.version === 2 || this.version === 2.5) {\n                return 9;\n            }\n        }\n        else {\n            if (this.version === 1) {\n                return 32;\n            }\n            else if (this.version === 2 || this.version === 2.5) {\n                return 17;\n            }\n        }\n    }\n    calcSlotSize() {\n        return [null, 4, 1, 1][this.layer];\n    }\n    parseMpegHeader(buf, off) {\n        this.container = 'MPEG';\n        // E(15,12): Bitrate index\n        this.bitrateIndex = Util_1.default.getBitAllignedNumber(buf, off + 2, 0, 4);\n        // F(11,10): Sampling rate frequency index\n        this.sampRateFreqIndex = Util_1.default.getBitAllignedNumber(buf, off + 2, 4, 2);\n        // G(9): Padding bit\n        this.padding = Util_1.default.isBitSet(buf, off + 2, 6);\n        // H(8): Private bit\n        this.privateBit = Util_1.default.isBitSet(buf, off + 2, 7);\n        // I(7,6): Channel Mode\n        this.channelModeIndex = Util_1.default.getBitAllignedNumber(buf, off + 3, 0, 2);\n        // J(5,4): Mode extension (Only used in Joint stereo)\n        this.modeExtension = Util_1.default.getBitAllignedNumber(buf, off + 3, 2, 2);\n        // K(3): Copyright\n        this.isCopyrighted = Util_1.default.isBitSet(buf, off + 3, 4);\n        // L(2): Original\n        this.isOriginalMedia = Util_1.default.isBitSet(buf, off + 3, 5);\n        // M(3): The original bit indicates, if it is set, that the frame is located on its original media.\n        this.emphasis = Util_1.default.getBitAllignedNumber(buf, off + 3, 7, 2);\n        this.version = MpegFrameHeader.VersionID[this.versionIndex];\n        this.channelMode = MpegFrameHeader.ChannelMode[this.channelModeIndex];\n        this.codec = 'mp' + this.layer;\n        // Calculate bitrate\n        const bitrateInKbps = this.calcBitrate();\n        if (!bitrateInKbps) {\n            throw new Error('Cannot determine bit-rate');\n        }\n        this.bitrate = bitrateInKbps === null ? null : bitrateInKbps * 1000;\n        // Calculate sampling rate\n        this.samplingRate = this.calcSamplingRate();\n        if (this.samplingRate == null) {\n            throw new Error('Cannot determine sampling-rate');\n        }\n    }\n    parseAdtsHeader(buf, off) {\n        debug(`layer=0 => ADTS`);\n        this.version = this.versionIndex === 2 ? 4 : 2;\n        this.container = 'ADTS/MPEG-' + this.version;\n        const profileIndex = Util_1.default.getBitAllignedNumber(buf, off + 2, 0, 2);\n        this.codec = 'AAC';\n        this.codecProfile = MPEG4.AudioObjectTypes[profileIndex];\n        debug(`MPEG-4 audio-codec=${this.codec}`);\n        const samplingFrequencyIndex = Util_1.default.getBitAllignedNumber(buf, off + 2, 2, 4);\n        this.samplingRate = MPEG4.SamplingFrequencies[samplingFrequencyIndex];\n        debug(`sampling-rate=${this.samplingRate}`);\n        const channelIndex = Util_1.default.getBitAllignedNumber(buf, off + 2, 7, 3);\n        this.mp4ChannelConfig = MPEG4_ChannelConfigurations[channelIndex];\n        debug(`channel-config=${this.mp4ChannelConfig.join('+')}`);\n        this.frameLength = Util_1.default.getBitAllignedNumber(buf, off + 3, 6, 2) << 11;\n    }\n    calcBitrate() {\n        if (this.bitrateIndex === 0x00)\n            return null; // free\n        if (this.bitrateIndex === 0x0F)\n            return null; // 'reserved'\n        const mpegVersion = this.version.toString() + this.layer;\n        return MpegFrameHeader.bitrate_index[this.bitrateIndex][mpegVersion];\n    }\n    calcSamplingRate() {\n        if (this.sampRateFreqIndex === 0x03)\n            return null; // 'reserved'\n        return MpegFrameHeader.sampling_rate_freq_index[this.version][this.sampRateFreqIndex];\n    }\n}\nMpegFrameHeader.SyncByte1 = 0xFF;\nMpegFrameHeader.SyncByte2 = 0xE0;\nMpegFrameHeader.VersionID = [2.5, null, 2, 1];\nMpegFrameHeader.LayerDescription = [0, 3, 2, 1];\nMpegFrameHeader.ChannelMode = ['stereo', 'joint_stereo', 'dual_channel', 'mono'];\nMpegFrameHeader.bitrate_index = {\n    0x01: { 11: 32, 12: 32, 13: 32, 21: 32, 22: 8, 23: 8 },\n    0x02: { 11: 64, 12: 48, 13: 40, 21: 48, 22: 16, 23: 16 },\n    0x03: { 11: 96, 12: 56, 13: 48, 21: 56, 22: 24, 23: 24 },\n    0x04: { 11: 128, 12: 64, 13: 56, 21: 64, 22: 32, 23: 32 },\n    0x05: { 11: 160, 12: 80, 13: 64, 21: 80, 22: 40, 23: 40 },\n    0x06: { 11: 192, 12: 96, 13: 80, 21: 96, 22: 48, 23: 48 },\n    0x07: { 11: 224, 12: 112, 13: 96, 21: 112, 22: 56, 23: 56 },\n    0x08: { 11: 256, 12: 128, 13: 112, 21: 128, 22: 64, 23: 64 },\n    0x09: { 11: 288, 12: 160, 13: 128, 21: 144, 22: 80, 23: 80 },\n    0x0A: { 11: 320, 12: 192, 13: 160, 21: 160, 22: 96, 23: 96 },\n    0x0B: { 11: 352, 12: 224, 13: 192, 21: 176, 22: 112, 23: 112 },\n    0x0C: { 11: 384, 12: 256, 13: 224, 21: 192, 22: 128, 23: 128 },\n    0x0D: { 11: 416, 12: 320, 13: 256, 21: 224, 22: 144, 23: 144 },\n    0x0E: { 11: 448, 12: 384, 13: 320, 21: 256, 22: 160, 23: 160 }\n};\nMpegFrameHeader.sampling_rate_freq_index = {\n    1: { 0x00: 44100, 0x01: 48000, 0x02: 32000 },\n    2: { 0x00: 22050, 0x01: 24000, 0x02: 16000 },\n    2.5: { 0x00: 11025, 0x01: 12000, 0x02: 8000 }\n};\nMpegFrameHeader.samplesInFrameTable = [\n    /* Layer   I    II   III */\n    [0, 384, 1152, 1152],\n    [0, 384, 1152, 576] // MPEG-2(.5\n];\n/**\n * MPEG Audio Layer I/II/III\n */\nconst FrameHeader = {\n    len: 4,\n    get: (buf, off) => {\n        return new MpegFrameHeader(buf, off);\n    }\n};\nfunction getVbrCodecProfile(vbrScale) {\n    return 'V' + (100 - vbrScale) / 10;\n}\nclass MpegParser extends AbstractID3Parser_1.AbstractID3Parser {\n    constructor() {\n        super(...arguments);\n        this.frameCount = 0;\n        this.syncFrameCount = -1;\n        this.countSkipFrameData = 0;\n        this.totalAudioLength = 0;\n        this.bitrates = [];\n        this.calculateEofDuration = false;\n        this.buf_frame_header = Buffer.alloc(4);\n        this.syncPeek = {\n            buf: Buffer.alloc(maxPeekLen),\n            len: 0\n        };\n    }\n    /**\n     * Called after ID3 headers have been parsed\n     */\n    _parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            this.metadata.setFormat('lossless', false);\n            try {\n                let quit = false;\n                while (!quit) {\n                    yield this.sync();\n                    quit = yield this.parseAudioFrameHeader();\n                }\n            }\n            catch (err) {\n                if (err.message === type_1.endOfFile) {\n                    if (this.calculateEofDuration) {\n                        const numberOfSamples = this.frameCount * this.samplesPerFrame;\n                        this.metadata.setFormat('numberOfSamples', numberOfSamples);\n                        const duration = numberOfSamples / this.metadata.format.sampleRate;\n                        debug(`Calculate duration at EOF: ${duration} sec.`, duration);\n                        this.metadata.setFormat('duration', duration);\n                    }\n                }\n                else {\n                    throw err;\n                }\n            }\n        });\n    }\n    /**\n     * Called after file has been fully parsed, this allows, if present, to exclude the ID3v1.1 header length\n     * @param metadata\n     * @returns {INativeAudioMetadata}\n     */\n    finalize() {\n        const format = this.metadata.format;\n        const hasID3v1 = this.metadata.native.hasOwnProperty('ID3v1');\n        if (format.duration && this.tokenizer.fileSize) {\n            const mpegSize = this.tokenizer.fileSize - this.mpegOffset - (hasID3v1 ? 128 : 0);\n            if (format.codecProfile && format.codecProfile[0] === 'V') {\n                this.metadata.setFormat('bitrate', mpegSize * 8 / format.duration);\n            }\n        }\n        else if (this.tokenizer.fileSize && format.codecProfile === 'CBR') {\n            const mpegSize = this.tokenizer.fileSize - this.mpegOffset - (hasID3v1 ? 128 : 0);\n            const numberOfSamples = Math.round(mpegSize / this.frame_size) * this.samplesPerFrame;\n            this.metadata.setFormat('numberOfSamples', numberOfSamples);\n            const duration = numberOfSamples / format.sampleRate;\n            debug(\"Calculate CBR duration based on file size: %s\", duration);\n            this.metadata.setFormat('duration', duration);\n        }\n    }\n    sync() {\n        return __awaiter(this, void 0, void 0, function* () {\n            let gotFirstSync = false;\n            while (true) {\n                let bo = 0;\n                this.syncPeek.len = yield this.tokenizer.peekBuffer(this.syncPeek.buf, 0, maxPeekLen, this.tokenizer.position, true);\n                if (this.syncPeek.len <= 256) {\n                    throw new Error(type_1.endOfFile);\n                }\n                if (this.syncPeek.len === 0)\n                    throw new Error(type_1.endOfFile);\n                while (true) {\n                    if (gotFirstSync && (this.syncPeek.buf[bo] & 0xE0) === 0xE0) {\n                        this.buf_frame_header[0] = MpegFrameHeader.SyncByte1;\n                        this.buf_frame_header[1] = this.syncPeek.buf[bo];\n                        yield this.tokenizer.ignore(bo);\n                        debug(`Sync at offset=${this.tokenizer.position - 1}, frameCount=${this.frameCount}`);\n                        if (this.syncFrameCount === this.frameCount) {\n                            debug(`Re-synced MPEG stream, frameCount=${this.frameCount}`);\n                            this.frameCount = 0;\n                            this.frame_size = 0;\n                        }\n                        this.syncFrameCount = this.frameCount;\n                        return; // sync\n                    }\n                    else {\n                        gotFirstSync = false;\n                        bo = this.syncPeek.buf.indexOf(MpegFrameHeader.SyncByte1, bo);\n                        if (bo === -1) {\n                            if (this.syncPeek.len < this.syncPeek.buf.length) {\n                                throw new Error(type_1.endOfFile);\n                            }\n                            yield this.tokenizer.ignore(this.syncPeek.len);\n                            break; // continue with next buffer\n                        }\n                        else {\n                            ++bo;\n                            gotFirstSync = true;\n                        }\n                    }\n                }\n            }\n        });\n    }\n    /**\n     * @return {Promise<boolean>} true if parser should quit\n     */\n    parseAudioFrameHeader() {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (this.frameCount === 0) {\n                this.mpegOffset = this.tokenizer.position - 1;\n            }\n            yield this.tokenizer.peekBuffer(this.buf_frame_header, 1, 3);\n            let header;\n            try {\n                header = FrameHeader.get(this.buf_frame_header, 0);\n            }\n            catch (err) {\n                yield this.tokenizer.ignore(1);\n                this.warnings.push('Parse error: ' + err.message);\n                return false; // sync\n            }\n            yield this.tokenizer.ignore(3);\n            this.metadata.setFormat('dataformat', header.container);\n            this.metadata.setFormat('encoder', header.codec);\n            this.metadata.setFormat('lossless', false);\n            this.metadata.setFormat('sampleRate', header.samplingRate);\n            if (header.version >= 2 && header.layer === 0) {\n                return this.parseAdts(header);\n            }\n            this.metadata.setFormat('numberOfChannels', header.channelMode === 'mono' ? 1 : 2);\n            this.metadata.setFormat('bitrate', header.bitrate);\n            if (this.frameCount < 20 * 10000) {\n                debug('offset=%s MP%s bitrate=%s sample-rate=%s', this.tokenizer.position - 4, header.layer, header.bitrate, header.samplingRate);\n            }\n            const slot_size = header.calcSlotSize();\n            if (slot_size === null) {\n                throw new Error('invalid slot_size');\n            }\n            const samples_per_frame = header.calcSamplesPerFrame();\n            debug(`samples_per_frame=${samples_per_frame}`);\n            const bps = samples_per_frame / 8.0;\n            const fsize = (bps * header.bitrate / header.samplingRate) +\n                ((header.padding) ? slot_size : 0);\n            this.frame_size = Math.floor(fsize);\n            this.audioFrameHeader = header;\n            this.frameCount++;\n            this.bitrates.push(header.bitrate);\n            // xtra header only exists in first frame\n            if (this.frameCount === 1) {\n                this.offset = FrameHeader.len;\n                yield this.skipSideInformation();\n                return false;\n            }\n            if (this.frameCount === 3) {\n                // the stream is CBR if the first 3 frame bitrates are the same\n                if (this.areAllSame(this.bitrates)) {\n                    // Actual calculation will be done in finalize\n                    this.samplesPerFrame = samples_per_frame;\n                    this.metadata.setFormat('codecProfile', 'CBR');\n                    if (this.tokenizer.fileSize)\n                        return true; // Will calculate duration based on the file size\n                }\n                else if (this.metadata.format.duration) {\n                    return true; // We already got the duration, stop processing MPEG stream any further\n                }\n                if (!this.options.duration) {\n                    return true; // Enforce duration not enabled, stop processing entire stream\n                }\n            }\n            // once we know the file is VBR attach listener to end of\n            // stream so we can do the duration calculation when we\n            // have counted all the frames\n            if (this.options.duration && this.frameCount === 4) {\n                this.samplesPerFrame = samples_per_frame;\n                this.calculateEofDuration = true;\n            }\n            this.offset = 4;\n            if (header.isProtectedByCRC) {\n                yield this.parseCrc();\n                return false;\n            }\n            else {\n                yield this.skipSideInformation();\n                return false;\n            }\n        });\n    }\n    parseAdts(header) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const buf = Buffer.alloc(3);\n            yield this.tokenizer.readBuffer(buf);\n            header.frameLength += Util_1.default.getBitAllignedNumber(buf, 0, 0, 11);\n            this.tokenizer.ignore(header.frameLength - 7 + 1);\n            this.frameCount++;\n            this.totalAudioLength += header.frameLength;\n            const framesPerSec = header.samplingRate / 1024;\n            const bytesPerFrame = this.frameCount === 0 ? 0 : this.totalAudioLength / this.frameCount;\n            const bitrate = 8 * bytesPerFrame * framesPerSec + 0.5;\n            this.metadata.setFormat('codecProfile', header.codecProfile);\n            this.metadata.setFormat('bitrate', bitrate);\n            if (header.mp4ChannelConfig) {\n                this.metadata.setFormat('numberOfChannels', header.mp4ChannelConfig.length);\n            }\n            debug(`size=${header.frameLength} bytes, bit-rate=${bitrate}`);\n            return this.frameCount === 3; // Stop parsing after the third frame\n        });\n    }\n    parseCrc() {\n        return __awaiter(this, void 0, void 0, function* () {\n            this.crc = yield this.tokenizer.readNumber(Token.INT16_BE);\n            this.offset += 2;\n            return this.skipSideInformation();\n        });\n    }\n    skipSideInformation() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const sideinfo_length = this.audioFrameHeader.calculateSideInfoLength();\n            // side information\n            yield this.tokenizer.readToken(new Token.BufferType(sideinfo_length));\n            this.offset += sideinfo_length;\n            yield this.readXtraInfoHeader();\n            return;\n        });\n    }\n    readXtraInfoHeader() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const headerTag = yield this.tokenizer.readToken(XingTag_1.InfoTagHeaderTag);\n            this.offset += XingTag_1.InfoTagHeaderTag.len; // 12\n            switch (headerTag) {\n                case 'Info':\n                    this.metadata.setFormat('codecProfile', 'CBR');\n                    return this.readXingInfoHeader();\n                case 'Xing':\n                    const infoTag = yield this.readXingInfoHeader();\n                    const codecProfile = getVbrCodecProfile(infoTag.vbrScale);\n                    this.metadata.setFormat('codecProfile', codecProfile);\n                    return null;\n                case 'Xtra':\n                    // ToDo: ???\n                    break;\n                case 'LAME':\n                    const version = yield this.tokenizer.readToken(XingTag_1.LameEncoderVersion);\n                    this.offset += XingTag_1.LameEncoderVersion.len;\n                    this.metadata.setFormat('tool', 'LAME ' + version);\n                    yield this.skipFrameData(this.frame_size - this.offset);\n                    return null;\n                // ToDo: ???\n            }\n            // ToDo: promise duration???\n            const frameDataLeft = this.frame_size - this.offset;\n            if (frameDataLeft < 0) {\n                this.warnings.push('Frame ' + this.frameCount + 'corrupt: negative frameDataLeft');\n            }\n            else {\n                yield this.skipFrameData(frameDataLeft);\n            }\n            return null;\n        });\n    }\n    /**\n     * Ref: http://gabriel.mp3-tech.org/mp3infotag.html\n     * @returns {Promise<string>}\n     */\n    readXingInfoHeader() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const infoTag = yield this.tokenizer.readToken(XingTag_1.XingInfoTag);\n            this.offset += XingTag_1.XingInfoTag.len; // 12\n            this.metadata.setFormat('tool', Util_1.default.stripNulls(infoTag.encoder));\n            if ((infoTag.headerFlags[3] & 0x01) === 1) {\n                const duration = this.audioFrameHeader.calcDuration(infoTag.numFrames);\n                this.metadata.setFormat('duration', duration);\n                debug('Get duration from Xing header: %s', this.metadata.format.duration);\n                return infoTag;\n            }\n            // frames field is not present\n            const frameDataLeft = this.frame_size - this.offset;\n            yield this.skipFrameData(frameDataLeft);\n            return infoTag;\n        });\n    }\n    skipFrameData(frameDataLeft) {\n        return __awaiter(this, void 0, void 0, function* () {\n            assert.ok(frameDataLeft >= 0, 'frame-data-left cannot be negative');\n            yield this.tokenizer.readToken(new Token.IgnoreType(frameDataLeft));\n            this.countSkipFrameData += frameDataLeft;\n        });\n    }\n    areAllSame(array) {\n        const first = array[0];\n        return array.every(element => {\n            return element === first;\n        });\n    }\n}\nexports.MpegParser = MpegParser;\n//# sourceMappingURL=MpegParser.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst Util_1 = require(\"../../common/Util\");\nconst initDebug = require(\"debug\");\nconst debug = initDebug('music-metadata:parser:musepack:sv8');\nconst PacketKey = new Token.StringType(2, 'binary');\n/**\n * Stream Header Packet part 1\n * Ref: http://trac.musepack.net/musepack/wiki/SV8Specification#StreamHeaderPacket\n */\nconst SH_part1 = {\n    len: 5,\n    get: (buf, off) => {\n        return {\n            crc: Token.UINT32_LE.get(buf, off),\n            streamVersion: Token.UINT8.get(buf, off + 4)\n        };\n    }\n};\n/**\n * Stream Header Packet part 3\n * Ref: http://trac.musepack.net/musepack/wiki/SV8Specification#StreamHeaderPacket\n */\nconst SH_part3 = {\n    len: 2,\n    get: (buf, off) => {\n        return {\n            sampleFrequency: [44100, 48000, 37800, 32000][Util_1.default.getBitAllignedNumber(buf, off, 0, 3)],\n            maxUsedBands: Util_1.default.getBitAllignedNumber(buf, off, 3, 5),\n            channelCount: Util_1.default.getBitAllignedNumber(buf, off + 1, 0, 4) + 1,\n            msUsed: Util_1.default.isBitSet(buf, off + 1, 4),\n            audioBlockFrames: Util_1.default.getBitAllignedNumber(buf, off + 1, 5, 3)\n        };\n    }\n};\nclass StreamReader {\n    constructor(tokenizer) {\n        this.tokenizer = tokenizer;\n    }\n    readPacketHeader() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const key = yield this.tokenizer.readToken(PacketKey);\n            const size = yield this.readVariableSizeField();\n            return {\n                key,\n                payloadLength: size.value - 2 - size.len\n            };\n        });\n    }\n    readStreamHeader(size) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const streamHeader = {};\n            debug(`Reading SH at offset=${this.tokenizer.position}`);\n            const part1 = yield this.tokenizer.readToken(SH_part1);\n            size -= SH_part1.len;\n            Object.assign(streamHeader, part1);\n            debug(`SH.streamVersion = ${part1.streamVersion}`);\n            const sampleCount = yield this.readVariableSizeField();\n            size -= sampleCount.len;\n            streamHeader.sampleCount = sampleCount.value;\n            const bs = yield this.readVariableSizeField();\n            size -= bs.len;\n            streamHeader.beginningOfSilence = bs.value;\n            const part3 = yield this.tokenizer.readToken(SH_part3);\n            size -= SH_part3.len;\n            Object.assign(streamHeader, part3);\n            // assert.equal(size, 0);\n            yield this.tokenizer.ignore(size);\n            return streamHeader;\n        });\n    }\n    readVariableSizeField(len = 1, hb = 0) {\n        return __awaiter(this, void 0, void 0, function* () {\n            let n = yield this.tokenizer.readToken(Token.UINT8);\n            if ((n & 0x80) === 0) {\n                return { len, value: hb + n };\n            }\n            n &= 0x7F;\n            n += hb;\n            return this.readVariableSizeField(len + 1, n << 7);\n        });\n    }\n}\nexports.StreamReader = StreamReader;\n//# sourceMappingURL=StreamVersion8.js.map","'use strict';\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst initDebug = require(\"debug\");\nconst assert = require(\"assert\");\nconst BasicParser_1 = require(\"../../common/BasicParser\");\nconst SV8 = require(\"./StreamVersion8\");\nconst APEv2Parser_1 = require(\"../../apev2/APEv2Parser\");\nconst FourCC_1 = require(\"../../common/FourCC\");\nconst debug = initDebug('music-metadata:parser:musepack');\nclass MpcSv8Parser extends BasicParser_1.BasicParser {\n    constructor() {\n        super(...arguments);\n        this.audioLength = 0;\n    }\n    parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const signature = yield this.tokenizer.readToken(FourCC_1.FourCcToken);\n            assert.equal(signature, 'MPCK', 'Magic number');\n            this.metadata.setFormat('dataformat', 'Musepack, SV8');\n            return this.parsePacket();\n        });\n    }\n    parsePacket() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const sv8reader = new SV8.StreamReader(this.tokenizer);\n            do {\n                const header = yield sv8reader.readPacketHeader();\n                debug(`packet-header key=${header.key}, payloadLength=${header.payloadLength}`);\n                switch (header.key) {\n                    case 'SH': // Stream Header\n                        const sh = yield sv8reader.readStreamHeader(header.payloadLength);\n                        this.metadata.setFormat('numberOfSamples', sh.sampleCount);\n                        this.metadata.setFormat('sampleRate', sh.sampleFrequency);\n                        this.metadata.setFormat('duration', sh.sampleCount / sh.sampleFrequency);\n                        this.metadata.setFormat('numberOfChannels', sh.channelCount);\n                        break;\n                    case 'AP': // Audio Packet\n                        this.audioLength += header.payloadLength;\n                        yield this.tokenizer.ignore(header.payloadLength);\n                        break;\n                    case 'RG': // Replaygain\n                    case 'EI': // Encoder Info\n                    case 'SO': // Seek Table Offset\n                    case 'ST': // Seek Table\n                    case 'CT': // Chapter-Tag\n                        yield this.tokenizer.ignore(header.payloadLength);\n                        break;\n                    case 'SE': // Stream End\n                        this.metadata.setFormat('bitrate', this.audioLength * 8 / this.metadata.format.duration);\n                        return APEv2Parser_1.APEv2Parser.parseTagHeader(this.metadata, this.tokenizer, this.options);\n                    default:\n                        throw new Error(`Unexpected header: ${header.key}`);\n                }\n            } while (true);\n        });\n    }\n}\nexports.MpcSv8Parser = MpcSv8Parser;\n//# sourceMappingURL=MpcSv8Parser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst Util_1 = require(\"../../common/Util\");\n/**\n * BASIC STRUCTURE\n */\nexports.Header = {\n    len: 6 * 4,\n    get: (buf, off) => {\n        const header = {\n            // word 0\n            signature: buf.toString(\"binary\", off, off + 3),\n            // versionIndex number * 1000 (3.81 = 3810) (remember that 4-byte alignment causes this to take 4-bytes)\n            streamMinorVersion: Util_1.default.getBitAllignedNumber(buf, off + 3, 0, 4),\n            streamMajorVersion: Util_1.default.getBitAllignedNumber(buf, off + 3, 4, 4),\n            // word 1\n            frameCount: Token.UINT32_LE.get(buf, off + 4),\n            // word 2\n            maxLevel: Token.UINT16_LE.get(buf, off + 8),\n            sampleFrequency: [44100, 48000, 37800, 32000][Util_1.default.getBitAllignedNumber(buf, off + 10, 0, 2)],\n            link: Util_1.default.getBitAllignedNumber(buf, off + 10, 2, 2),\n            profile: Util_1.default.getBitAllignedNumber(buf, off + 10, 4, 4),\n            maxBand: Util_1.default.getBitAllignedNumber(buf, off + 11, 0, 6),\n            intensityStereo: Util_1.default.isBitSet(buf, off + 11, 6),\n            midSideStereo: Util_1.default.isBitSet(buf, off + 11, 7),\n            // word 3\n            titlePeak: Token.UINT16_LE.get(buf, off + 12),\n            titleGain: Token.UINT16_LE.get(buf, off + 14),\n            // word 4\n            albumPeak: Token.UINT16_LE.get(buf, off + 16),\n            albumGain: Token.UINT16_LE.get(buf, off + 18),\n            // word\n            lastFrameLength: (Token.UINT32_LE.get(buf, off + 20) >>> 20) & 0x7FF,\n            trueGapless: Util_1.default.isBitSet(buf, off + 23, 0)\n        };\n        header.lastFrameLength = header.trueGapless ? (Token.UINT32_LE.get(buf, 20) >>> 20) & 0x7FF : 0;\n        return header;\n    }\n};\n//# sourceMappingURL=StreamVersion7.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nclass BitReader {\n    constructor(tokenizer) {\n        this.tokenizer = tokenizer;\n        this.pos = 0;\n        this.dword = undefined;\n    }\n    /**\n     *\n     * @param bits 1..30 bits\n     */\n    read(bits) {\n        return __awaiter(this, void 0, void 0, function* () {\n            while (this.dword === undefined) {\n                this.dword = yield this.tokenizer.readToken(Token.UINT32_LE);\n            }\n            let out = this.dword;\n            this.pos += bits;\n            if (this.pos < 32) {\n                out >>>= (32 - this.pos);\n                return out & ((1 << bits) - 1);\n            }\n            else {\n                this.pos -= 32;\n                if (this.pos === 0) {\n                    this.dword = undefined;\n                    return out & ((1 << bits) - 1);\n                }\n                else {\n                    this.dword = yield this.tokenizer.readToken(Token.UINT32_LE);\n                    if (this.pos) {\n                        out <<= this.pos;\n                        out |= this.dword >>> (32 - this.pos);\n                    }\n                    return out & ((1 << bits) - 1);\n                }\n            }\n        });\n    }\n    ignore(bits) {\n        return __awaiter(this, void 0, void 0, function* () {\n            if (this.pos > 0) {\n                const remaining = 32 - this.pos;\n                this.dword = undefined;\n                bits -= remaining;\n                this.pos = 0;\n            }\n            const remainder = bits % 32;\n            const numOfWords = (bits - remainder) / 32;\n            yield this.tokenizer.ignore(numOfWords * 4);\n            return this.read(remainder);\n        });\n    }\n}\nexports.BitReader = BitReader;\n//# sourceMappingURL=BitReader.js.map","'use strict';\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst initDebug = require(\"debug\");\nconst assert = require(\"assert\");\nconst BasicParser_1 = require(\"../../common/BasicParser\");\nconst SV7 = require(\"./StreamVersion7\");\nconst APEv2Parser_1 = require(\"../../apev2/APEv2Parser\");\nconst BitReader_1 = require(\"./BitReader\");\nconst debug = initDebug('music-metadata:parser:musepack');\nclass MpcSv7Parser extends BasicParser_1.BasicParser {\n    constructor() {\n        super(...arguments);\n        this.audioLength = 0;\n    }\n    parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const header = yield this.tokenizer.readToken(SV7.Header);\n            assert.equal(header.signature, 'MP+', 'Magic number');\n            debug(`stream-version=${header.streamMajorVersion}.${header.streamMinorVersion}`);\n            this.metadata.setFormat('dataformat', 'Musepack, SV7');\n            this.metadata.setFormat('sampleRate', header.sampleFrequency);\n            const numberOfSamples = 1152 * (header.frameCount - 1) + header.lastFrameLength;\n            this.metadata.setFormat('numberOfSamples', numberOfSamples);\n            this.duration = numberOfSamples / header.sampleFrequency;\n            this.metadata.setFormat('duration', this.duration);\n            this.bitreader = new BitReader_1.BitReader(this.tokenizer);\n            this.metadata.setFormat('numberOfChannels', header.midSideStereo || header.intensityStereo ? 2 : 1);\n            const version = yield this.bitreader.read(8);\n            this.metadata.setFormat('encoder', (version / 100).toFixed(2));\n            yield this.skipAudioData(header.frameCount);\n            debug(`End of audio stream, switching to APEv2, offset=${this.tokenizer.position}`);\n            return APEv2Parser_1.APEv2Parser.parseTagHeader(this.metadata, this.tokenizer, this.options);\n        });\n    }\n    skipAudioData(frameCount) {\n        return __awaiter(this, void 0, void 0, function* () {\n            while (frameCount-- > 0) {\n                const frameLength = yield this.bitreader.read(20);\n                this.audioLength += 20 + frameLength;\n                yield this.bitreader.ignore(frameLength);\n            }\n            // last frame\n            const lastFrameLength = yield this.bitreader.read(11);\n            this.audioLength += lastFrameLength;\n            this.metadata.setFormat('bitrate', this.audioLength / this.duration);\n        });\n    }\n}\nexports.MpcSv7Parser = MpcSv7Parser;\n//# sourceMappingURL=MpcSv7Parser.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst initDebug = require(\"debug\");\nconst Token = require(\"token-types\");\nconst MpcSv8Parser_1 = require(\"./sv8/MpcSv8Parser\");\nconst MpcSv7Parser_1 = require(\"./sv7/MpcSv7Parser\");\nconst AbstractID3Parser_1 = require(\"../id3v2/AbstractID3Parser\");\nconst debug = initDebug('music-metadata:parser:musepack');\nclass MusepackParser extends AbstractID3Parser_1.AbstractID3Parser {\n    _parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const signature = yield this.tokenizer.peekToken(new Token.StringType(3, 'binary'));\n            let mpcParser;\n            switch (signature) {\n                case 'MP+': {\n                    debug('Musepack stream-version 7');\n                    mpcParser = new MpcSv7Parser_1.MpcSv7Parser();\n                    break;\n                }\n                case 'MPC': {\n                    debug('Musepack stream-version 8');\n                    mpcParser = new MpcSv8Parser_1.MpcSv8Parser();\n                    break;\n                }\n                default: {\n                    throw new Error('Invalid Musepack signature prefix');\n                }\n            }\n            mpcParser.init(this.metadata, this.tokenizer, this.options);\n            return mpcParser.parse();\n        });\n    }\n}\nexports.default = MusepackParser;\n//# sourceMappingURL=index.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst _debug = require(\"debug\");\nconst Vorbis = require(\"./Vorbis\");\nconst debug = _debug('music-metadata:parser:ogg:vorbis1');\n/**\n * Vorbis 1 Parser.\n * Used by OggParser\n */\nclass VorbisParser {\n    constructor(metadata, options) {\n        this.metadata = metadata;\n        this.options = options;\n        this.codecName = 'Vorbis I';\n        this.pageSegments = [];\n    }\n    /**\n     * Vorbis 1 parser\n     * @param header Ogg Page Header\n     * @param pageData Page data\n     */\n    parsePage(header, pageData) {\n        if (header.headerType.firstPage) {\n            this.parseFirstPage(header, pageData);\n        }\n        else {\n            if (header.headerType.continued) {\n                if (this.pageSegments.length === 0) {\n                    throw new Error(\"Cannot continue on previous page\");\n                }\n                this.pageSegments.push(pageData);\n            }\n            if (header.headerType.lastPage || !header.headerType.continued) {\n                // Flush page segments\n                if (this.pageSegments.length > 0) {\n                    const fullPage = Buffer.concat(this.pageSegments);\n                    this.parseFullPage(fullPage);\n                }\n                // Reset page segments\n                this.pageSegments = header.headerType.lastPage ? [] : [pageData];\n            }\n        }\n        if (header.headerType.lastPage) {\n            this.calculateDuration(header);\n        }\n    }\n    flush() {\n        this.parseFullPage(Buffer.concat(this.pageSegments));\n    }\n    /**\n     * Parse first Ogg/Vorbis page\n     * @param {IPageHeader} header\n     * @param {Buffer} pageData\n     */\n    parseFirstPage(header, pageData) {\n        debug(\"Parse first page\");\n        // Parse  Vorbis common header\n        const commonHeader = Vorbis.CommonHeader.get(pageData, 0);\n        if (commonHeader.vorbis !== 'vorbis')\n            throw new Error('Metadata does not look like Vorbis');\n        if (commonHeader.packetType === 1) {\n            const idHeader = Vorbis.IdentificationHeader.get(pageData, Vorbis.CommonHeader.len);\n            this.metadata.setFormat('sampleRate', idHeader.sampleRate);\n            this.metadata.setFormat('bitrate', idHeader.bitrateNominal);\n            this.metadata.setFormat('numberOfChannels', idHeader.channelMode);\n            debug(\"sample-rate=%s[hz], bitrate=%s[b/s], channel-mode=%s\", idHeader.sampleRate, idHeader.bitrateNominal, idHeader.channelMode);\n        }\n        else\n            throw new Error('First Ogg page should be type 1: the identification header');\n    }\n    parseFullPage(pageData) {\n        // New page\n        const commonHeader = Vorbis.CommonHeader.get(pageData, 0);\n        debug(\"Parse full page: type=%s, byteLength=%s\", commonHeader.packetType, pageData.byteLength);\n        switch (commonHeader.packetType) {\n            case 3: //  type 3: comment header\n                return this.parseUserCommentList(pageData, Vorbis.CommonHeader.len);\n            case 1: // type 1: the identification header\n            case 5: // type 5: setup header type\n                break; // ignore\n        }\n    }\n    calculateDuration(header) {\n        if (this.metadata.format.sampleRate && header.absoluteGranulePosition >= 0) {\n            // Calculate duration\n            this.metadata.setFormat('numberOfSamples', header.absoluteGranulePosition);\n            this.metadata.setFormat('duration', this.metadata.format.numberOfSamples / this.metadata.format.sampleRate);\n        }\n    }\n    /**\n     * Ref: https://xiph.org/vorbis/doc/Vorbis_I_spec.html#x1-840005.2\n     * @returns {Promise<number>}\n     */\n    parseUserCommentList(pageData, offset) {\n        const strLen = Token.UINT32_LE.get(pageData, offset);\n        offset += 4;\n        const vendorString = new Token.StringType(strLen, 'utf-8').get(pageData, offset);\n        offset += strLen;\n        let userCommentListLength = Token.UINT32_LE.get(pageData, offset);\n        offset += 4;\n        while (userCommentListLength-- > 0) {\n            offset += this.parseUserComment(pageData, offset);\n        }\n    }\n    parseUserComment(pageData, offset) {\n        const strLen = Token.UINT32_LE.get(pageData, offset);\n        const v = new Token.StringType(strLen, 'utf-8').get(pageData, offset + 4);\n        const idx = v.indexOf('=');\n        const key = v.slice(0, idx).toUpperCase();\n        let value = v.slice(idx + 1);\n        if (key === 'METADATA_BLOCK_PICTURE') {\n            value = this.options.skipCovers ? null : Vorbis.VorbisPictureToken.fromBase64(value);\n        }\n        if (value !== null) {\n            debug(\"Push tag: id=%s, value=%s\", key, value);\n            this.metadata.addTag('vorbis', key, value);\n        }\n        return Token.UINT32_LE.len + strLen;\n    }\n}\nexports.VorbisParser = VorbisParser;\n//# sourceMappingURL=VorbisParser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst Opus = require(\"./Opus\");\nconst VorbisParser_1 = require(\"../vorbis/VorbisParser\");\n/**\n * Opus parser\n * Internet Engineering Task Force (IETF) - RFC 6716\n * Used by OggParser\n */\nclass OpusParser extends VorbisParser_1.VorbisParser {\n    constructor(metadata, options, tokenizer) {\n        super(metadata, options);\n        this.tokenizer = tokenizer;\n        this.codecName = 'Opus';\n        this.lastPos = -1;\n    }\n    /**\n     * Parse first Opus Ogg page\n     * @param {IPageHeader} header\n     * @param {Buffer} pageData\n     */\n    parseFirstPage(header, pageData) {\n        // Parse Opus ID Header\n        this.idHeader = new Opus.IdHeader(pageData.length).get(pageData, 0);\n        if (this.idHeader.magicSignature !== \"OpusHead\")\n            throw new Error(\"Illegal ogg/Opus magic-signature\");\n        this.metadata.setFormat('sampleRate', this.idHeader.inputSampleRate);\n        this.metadata.setFormat('numberOfChannels', this.idHeader.channelCount);\n    }\n    parseFullPage(pageData) {\n        const magicSignature = new Token.StringType(8, 'ascii').get(pageData, 0);\n        switch (magicSignature) {\n            case 'OpusTags':\n                this.parseUserCommentList(pageData, 8);\n                this.lastPos = this.tokenizer.position;\n                break;\n            default:\n                break;\n        }\n    }\n    calculateDuration(header) {\n        if (this.metadata.format.sampleRate && header.absoluteGranulePosition >= 0) {\n            // Calculate duration\n            this.metadata.setFormat('numberOfSamples', header.absoluteGranulePosition - this.idHeader.preSkip);\n            this.metadata.setFormat('duration', this.metadata.format.numberOfSamples / this.idHeader.inputSampleRate);\n            if (this.lastPos !== -1 && this.tokenizer.fileSize && this.metadata.format.duration) {\n                const dataSize = this.tokenizer.fileSize - this.lastPos;\n                this.metadata.setFormat('bitrate', 8 * dataSize / this.metadata.format.duration);\n            }\n        }\n    }\n}\nexports.OpusParser = OpusParser;\n//# sourceMappingURL=OpusParser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst initDebug = require(\"debug\");\nconst Speex = require(\"./Speex\");\nconst VorbisParser_1 = require(\"../vorbis/VorbisParser\");\nconst debug = initDebug('music-metadata:parser:ogg:speex');\n/**\n * Speex, RFC 5574\n * Ref:\n *   https://www.speex.org/docs/manual/speex-manual/\n *   https://tools.ietf.org/html/rfc5574\n */\nclass SpeexParser extends VorbisParser_1.VorbisParser {\n    constructor(metadata, options, tokenizer) {\n        super(metadata, options);\n        this.tokenizer = tokenizer;\n        this.codecName = 'Speex';\n        this.lastPos = -1;\n    }\n    /**\n     * Parse first Speex Ogg page\n     * @param {IPageHeader} header\n     * @param {Buffer} pageData\n     */\n    parseFirstPage(header, pageData) {\n        debug('First Ogg/Speex page');\n        let speexHeader = Speex.Header.get(pageData, 0);\n        speexHeader = speexHeader;\n        this.metadata.setFormat('numberOfChannels', speexHeader.nb_channels);\n        this.metadata.setFormat('sampleRate', speexHeader.rate);\n        this.metadata.setFormat('encoder', speexHeader.version);\n        if (speexHeader.bitrate !== -1) {\n            this.metadata.setFormat('bitrate', speexHeader.bitrate);\n        }\n    }\n}\nexports.SpeexParser = SpeexParser;\n//# sourceMappingURL=SpeexParser.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst initDebug = require(\"debug\");\nconst assert = require(\"assert\");\nconst Util_1 = require(\"../common/Util\");\nconst FourCC_1 = require(\"../common/FourCC\");\nconst VorbisParser_1 = require(\"./vorbis/VorbisParser\");\nconst OpusParser_1 = require(\"./opus/OpusParser\");\nconst SpeexParser_1 = require(\"./speex/SpeexParser\");\nconst BasicParser_1 = require(\"../common/BasicParser\");\nconst debug = initDebug('music-metadata:parser:ogg');\nclass SegmentTable {\n    static sum(buf, off, len) {\n        let s = 0;\n        for (let i = off; i < off + len; ++i) {\n            s += buf[i];\n        }\n        return s;\n    }\n    constructor(header) {\n        this.len = header.page_segments;\n    }\n    get(buf, off) {\n        return {\n            totalPageSize: SegmentTable.sum(buf, off, this.len)\n        };\n    }\n}\nexports.SegmentTable = SegmentTable;\n/**\n * Parser for Ogg logical bitstream framing\n */\nclass OggParser extends BasicParser_1.BasicParser {\n    /**\n     * Parse page\n     * @returns {Promise<void>}\n     */\n    parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            debug('pos=%s, parsePage()', this.tokenizer.position);\n            try {\n                let header;\n                do {\n                    header = yield this.tokenizer.readToken(OggParser.Header);\n                    assert.strictEqual(header.capturePattern, 'OggS', 'Ogg capture pattern');\n                    this.header = header;\n                    this.pageNumber = header.pageSequenceNo;\n                    debug('page#=%s, Ogg.id=%s', header.pageSequenceNo, header.capturePattern);\n                    const segmentTable = yield this.tokenizer.readToken(new SegmentTable(header));\n                    debug('totalPageSize=%s', segmentTable.totalPageSize);\n                    const pageData = yield this.tokenizer.readToken(new Token.BufferType(segmentTable.totalPageSize));\n                    debug('firstPage=%s, lastPage=%s, continued=%s', header.headerType.firstPage, header.headerType.lastPage, header.headerType.continued);\n                    if (header.headerType.firstPage) {\n                        const id = new Token.StringType(7, 'ascii').get(pageData, 0);\n                        switch (id) {\n                            case '\u0001vorbis': // Ogg/Vorbis\n                                debug('Set page consumer to Ogg/Vorbis ');\n                                this.pageConsumer = new VorbisParser_1.VorbisParser(this.metadata, this.options);\n                                break;\n                            case 'OpusHea': // Ogg/Opus\n                                debug('Set page consumer to Ogg/Opus');\n                                this.pageConsumer = new OpusParser_1.OpusParser(this.metadata, this.options, this.tokenizer);\n                                break;\n                            case 'Speex  ': // Ogg/Speex\n                                debug('Set page consumer to Ogg/Speex');\n                                this.pageConsumer = new SpeexParser_1.SpeexParser(this.metadata, this.options, this.tokenizer);\n                                break;\n                            default:\n                                throw new Error('gg audio-codec not recognized (id=' + id + ')');\n                        }\n                        this.metadata.setFormat('dataformat', 'Ogg/' + this.pageConsumer.codecName);\n                    }\n                    this.pageConsumer.parsePage(header, pageData);\n                } while (!header.headerType.lastPage);\n            }\n            catch (err) {\n                if (err.message === 'End-Of-File') {\n                    return; // Ignore this error\n                }\n                else if (err.message.startsWith('FourCC')) {\n                    if (this.pageNumber > 0) {\n                        // ignore this error: work-around if last OGG-page is not marked with last-page flag\n                        this.warnings.push('Invalid FourCC ID, maybe last OGG-page is not marked with last-page flag');\n                        return this.pageConsumer.flush();\n                    }\n                }\n                throw err;\n            }\n        });\n    }\n}\nOggParser.Header = {\n    len: 27,\n    get: (buf, off) => {\n        return {\n            capturePattern: FourCC_1.FourCcToken.get(buf, off),\n            version: buf.readUInt8(off + 4),\n            headerType: {\n                continued: Util_1.default.strtokBITSET.get(buf, off + 5, 0),\n                firstPage: Util_1.default.strtokBITSET.get(buf, off + 5, 1),\n                lastPage: Util_1.default.strtokBITSET.get(buf, off + 5, 2)\n            },\n            // packet_flag: buf.readUInt8(off + 5),\n            absoluteGranulePosition: buf.readIntLE(off + 6, 6),\n            streamSerialNumber: Token.UINT32_LE.get(buf, off + 14),\n            pageSequenceNo: Token.UINT32_LE.get(buf, off + 18),\n            pageChecksum: Token.UINT32_LE.get(buf, off + 22),\n            page_segments: buf.readUInt8(off + 26)\n        };\n    }\n};\nexports.OggParser = OggParser;\n//# sourceMappingURL=OggParser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst FourCC_1 = require(\"../common/FourCC\");\n/**\n * Common RIFF chunk header\n */\nexports.Header = {\n    len: 8,\n    get: (buf, off) => {\n        return {\n            // Group-ID\n            chunkID: FourCC_1.FourCcToken.get(buf, off),\n            // Size\n            chunkSize: buf.readUInt32LE(off + 4)\n        };\n    }\n};\n/**\n * Token to parse RIFF-INFO tag value\n */\nclass ListInfoTagValue {\n    constructor(tagHeader) {\n        this.tagHeader = tagHeader;\n        this.len = tagHeader.chunkSize;\n        this.len += this.len & 1; // if it is an odd length, round up to even\n    }\n    get(buf, off) {\n        return new Token.StringType(this.tagHeader.chunkSize, 'ascii').get(buf, off);\n    }\n}\nexports.ListInfoTagValue = ListInfoTagValue;\n//# sourceMappingURL=RiffChunk.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst assert = require(\"assert\");\n/**\n * Ref: https://msdn.microsoft.com/en-us/library/windows/desktop/dd317599(v=vs.85).aspx\n */\nvar WaveFormat;\n(function (WaveFormat) {\n    WaveFormat[WaveFormat[\"PCM\"] = 1] = \"PCM\";\n    // MPEG-4 and AAC Audio Types\n    WaveFormat[WaveFormat[\"ADPCM\"] = 2] = \"ADPCM\";\n    WaveFormat[WaveFormat[\"IEEE_FLOAT\"] = 3] = \"IEEE_FLOAT\";\n    WaveFormat[WaveFormat[\"MPEG_ADTS_AAC\"] = 5632] = \"MPEG_ADTS_AAC\";\n    WaveFormat[WaveFormat[\"MPEG_LOAS\"] = 5634] = \"MPEG_LOAS\";\n    WaveFormat[WaveFormat[\"RAW_AAC1\"] = 255] = \"RAW_AAC1\";\n    // Dolby Audio Types\n    WaveFormat[WaveFormat[\"DOLBY_AC3_SPDIF\"] = 146] = \"DOLBY_AC3_SPDIF\";\n    WaveFormat[WaveFormat[\"DVM\"] = 8192] = \"DVM\";\n    WaveFormat[WaveFormat[\"RAW_SPORT\"] = 576] = \"RAW_SPORT\";\n    WaveFormat[WaveFormat[\"ESST_AC3\"] = 577] = \"ESST_AC3\";\n    WaveFormat[WaveFormat[\"DRM\"] = 9] = \"DRM\";\n    WaveFormat[WaveFormat[\"DTS2\"] = 8193] = \"DTS2\";\n    WaveFormat[WaveFormat[\"MPEG\"] = 80] = \"MPEG\";\n})(WaveFormat = exports.WaveFormat || (exports.WaveFormat = {}));\n/**\n * format chunk; chunk-id is \"fmt \"\n * http://soundfile.sapp.org/doc/WaveFormat/\n */\nclass Format {\n    constructor(header) {\n        assert.ok(header.chunkSize >= 16, \"16 for PCM.\");\n        this.len = header.chunkSize;\n    }\n    get(buf, off) {\n        return {\n            wFormatTag: buf.readUInt16LE(off),\n            nChannels: buf.readUInt16LE(off + 2),\n            nSamplesPerSec: buf.readUInt32LE(off + 4),\n            nAvgBytesPerSec: buf.readUInt32LE(off + 8),\n            nBlockAlign: buf.readUInt16LE(off + 12),\n            wBitsPerSample: buf.readUInt16LE(off + 14)\n        };\n    }\n}\nexports.Format = Format;\n/**\n * Fact chunk; chunk-id is \"fact\"\n * http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html\n * http://www.recordingblogs.com/wiki/fact-chunk-of-a-wave-file\n */\nclass FactChunk {\n    constructor(header) {\n        assert.ok(header.chunkSize >= 4, \"minimum fact chunk size.\");\n        this.len = header.chunkSize;\n    }\n    get(buf, off) {\n        return {\n            dwSampleLength: buf.readUInt32LE(off)\n        };\n    }\n}\nexports.FactChunk = FactChunk;\n//# sourceMappingURL=WaveChunk.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst type_1 = require(\"strtok3/lib/type\");\nconst strtok3 = require(\"strtok3/lib/core\");\nconst Token = require(\"token-types\");\nconst initDebug = require(\"debug\");\nconst riff = require(\"./RiffChunk\");\nconst WaveChunk = require(\"./../wav/WaveChunk\");\nconst ID3v2Parser_1 = require(\"../id3v2/ID3v2Parser\");\nconst Util_1 = require(\"../common/Util\");\nconst FourCC_1 = require(\"../common/FourCC\");\nconst BasicParser_1 = require(\"../common/BasicParser\");\nconst ID3Stream_1 = require(\"../id3v2/ID3Stream\");\nconst debug = initDebug('music-metadata:parser:RIFF');\n/**\n * Resource Interchange File Format (RIFF) Parser\n *\n * WAVE PCM soundfile format\n *\n * Ref:\n *  http://www.johnloomis.org/cpe102/asgn/asgn1/riff.html\n *  http://soundfile.sapp.org/doc/WaveFormat\n *\n *  ToDo: Split WAVE part from RIFF parser\n */\nclass WaveParser extends BasicParser_1.BasicParser {\n    parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const riffHeader = yield this.tokenizer.readToken(riff.Header);\n            debug(`pos=${this.tokenizer.position}, parse: chunkID=${riffHeader.chunkID}`);\n            if (riffHeader.chunkID !== 'RIFF')\n                return; // Not RIFF format\n            return this.parseRiffChunk().catch(err => {\n                if (err.message !== type_1.endOfFile) {\n                    throw err;\n                }\n            });\n        });\n    }\n    parseRiffChunk() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const type = yield this.tokenizer.readToken(FourCC_1.FourCcToken);\n            this.metadata.setFormat('dataformat', type);\n            switch (type) {\n                case 'WAVE':\n                    return this.readWaveChunk();\n                default:\n                    throw new Error(`Unsupported RIFF format: RIFF/${type}`);\n            }\n        });\n    }\n    readWaveChunk() {\n        return __awaiter(this, void 0, void 0, function* () {\n            do {\n                const header = yield this.tokenizer.readToken(riff.Header);\n                this.header = header;\n                debug(`pos=${this.tokenizer.position}, readChunk: chunkID=RIFF/WAVE/${header.chunkID}`);\n                switch (header.chunkID) {\n                    case 'LIST':\n                        yield this.parseListTag(header);\n                        break;\n                    case 'fact': // extended Format chunk,\n                        this.metadata.setFormat('lossless', false);\n                        this.fact = yield this.tokenizer.readToken(new WaveChunk.FactChunk(header));\n                        break;\n                    case 'fmt ': // The Util Chunk, non-PCM Formats\n                        const fmt = yield this.tokenizer.readToken(new WaveChunk.Format(header));\n                        let subFormat = WaveChunk.WaveFormat[fmt.wFormatTag];\n                        if (!subFormat) {\n                            debug('WAVE/non-PCM format=' + fmt.wFormatTag);\n                            subFormat = 'non-PCM (' + fmt.wFormatTag + ')';\n                        }\n                        this.metadata.setFormat('dataformat', 'WAVE/' + subFormat);\n                        this.metadata.setFormat('bitsPerSample', fmt.wBitsPerSample);\n                        this.metadata.setFormat('sampleRate', fmt.nSamplesPerSec);\n                        this.metadata.setFormat('numberOfChannels', fmt.nChannels);\n                        this.metadata.setFormat('bitrate', fmt.nBlockAlign * fmt.nSamplesPerSec * 8);\n                        this.blockAlign = fmt.nBlockAlign;\n                        break;\n                    case 'id3 ': // The way Picard, FooBar currently stores, ID3 meta-data\n                    case 'ID3 ': // The way Mp3Tags stores ID3 meta-data\n                        const id3_data = yield this.tokenizer.readToken(new Token.BufferType(header.chunkSize));\n                        const id3stream = new ID3Stream_1.ID3Stream(id3_data);\n                        const rst = strtok3.fromStream(id3stream);\n                        yield new ID3v2Parser_1.ID3v2Parser().parse(this.metadata, rst, this.options);\n                        break;\n                    case 'data': // PCM-data\n                        if (this.metadata.format.lossless !== false) {\n                            this.metadata.setFormat('lossless', true);\n                        }\n                        const numberOfSamples = this.fact ? this.fact.dwSampleLength : (header.chunkSize / this.blockAlign);\n                        this.metadata.setFormat('numberOfSamples', numberOfSamples);\n                        this.metadata.setFormat('duration', numberOfSamples / this.metadata.format.sampleRate);\n                        this.metadata.setFormat('bitrate', this.metadata.format.numberOfChannels * this.blockAlign * this.metadata.format.sampleRate); // ToDo: check me\n                        yield this.tokenizer.ignore(header.chunkSize);\n                        break;\n                    default:\n                        debug(`Ignore chunk: RIFF/${header.chunkID} of ${header.chunkSize} bytes`);\n                        this.warnings.push('Ignore chunk: RIFF/' + header.chunkID);\n                        yield this.tokenizer.ignore(header.chunkSize);\n                }\n                if (this.header.chunkSize % 2 === 1) {\n                    debug('Read odd padding byte'); // https://wiki.multimedia.cx/index.php/RIFF\n                    yield this.tokenizer.ignore(1);\n                }\n            } while (true);\n        });\n    }\n    parseListTag(listHeader) {\n        return __awaiter(this, void 0, void 0, function* () {\n            const listType = yield this.tokenizer.readToken(FourCC_1.FourCcToken);\n            debug('pos=%s, parseListTag: chunkID=RIFF/WAVE/LIST/%s', this.tokenizer.position, listType);\n            switch (listType) {\n                case 'INFO':\n                    return this.parseRiffInfoTags(listHeader.chunkSize - 4);\n                case 'adtl':\n                default:\n                    this.warnings.push('Ignore chunk: RIFF/WAVE/LIST/' + listType);\n                    debug('Ignoring chunkID=RIFF/WAVE/LIST/' + listType);\n                    return this.tokenizer.ignore(listHeader.chunkSize - 4);\n            }\n        });\n    }\n    parseRiffInfoTags(chunkSize) {\n        return __awaiter(this, void 0, void 0, function* () {\n            while (chunkSize >= 8) {\n                const header = yield this.tokenizer.readToken(riff.Header);\n                const valueToken = new riff.ListInfoTagValue(header);\n                const value = yield this.tokenizer.readToken(valueToken);\n                this.addTag(header.chunkID, Util_1.default.stripNulls(value));\n                chunkSize -= (8 + valueToken.len);\n            }\n            if (chunkSize !== 0) {\n                throw Error('Illegal remaining size: ' + chunkSize);\n            }\n        });\n    }\n    addTag(id, value) {\n        this.metadata.addTag('exif', id, value);\n    }\n}\nexports.WaveParser = WaveParser;\n//# sourceMappingURL=WaveParser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst FourCC_1 = require(\"../common/FourCC\");\nconst SampleRates = [6000, 8000, 9600, 11025, 12000, 16000, 22050, 24000, 32000, 44100,\n    48000, 64000, 88200, 96000, 192000, -1];\nclass WavPack {\n    static isBitSet(flags, bitOffset) {\n        return WavPack.getBitAllignedNumber(flags, bitOffset, 1) === 1;\n    }\n    static getBitAllignedNumber(flags, bitOffset, len) {\n        return (flags >>> bitOffset) & (0xffffffff >>> (32 - len));\n    }\n}\n/**\n * WavPack Block Header\n *\n * 32-byte little-endian header at the front of every WavPack block\n *\n * Ref: http://www.wavpack.com/WavPack5FileFormat.pdf (page 2/6: 2.0 \"Block Header\")\n */\nWavPack.BlockHeaderToken = {\n    len: 32,\n    get: (buf, off) => {\n        const flags = Token.UINT32_LE.get(buf, off + 24);\n        const res = {\n            // should equal 'wvpk'\n            BlockID: FourCC_1.FourCcToken.get(buf, off),\n            //  0x402 to 0x410 are valid for decode\n            blockSize: Token.UINT32_LE.get(buf, off + 4),\n            //  0x402 (1026) to 0x410 are valid for decode\n            version: Token.UINT16_LE.get(buf, off + 8),\n            //  40-bit total samples for entire file (if block_index == 0 and a value of -1 indicates an unknown length)\n            totalSamples: (Token.UINT8.get(buf, off + 11) << 32) + Token.UINT32_LE.get(buf, off + 12),\n            // 40-bit block_index\n            blockIndex: (Token.UINT8.get(buf, off + 10) << 32) + Token.UINT32_LE.get(buf, off + 16),\n            // 40-bit total samples for entire file (if block_index == 0 and a value of -1 indicates an unknown length)\n            blockSamples: Token.UINT32_LE.get(buf, off + 20),\n            // various flags for id and decoding\n            flags: {\n                bitsPerSample: (1 + WavPack.getBitAllignedNumber(flags, 0, 2)) * 8,\n                isMono: WavPack.isBitSet(flags, 2),\n                isHybrid: WavPack.isBitSet(flags, 3),\n                isJointStereo: WavPack.isBitSet(flags, 4),\n                crossChannel: WavPack.isBitSet(flags, 5),\n                hybridNoiseShaping: WavPack.isBitSet(flags, 6),\n                floatingPoint: WavPack.isBitSet(flags, 7),\n                samplingRate: SampleRates[WavPack.getBitAllignedNumber(flags, 23, 4)],\n                isDSD: WavPack.isBitSet(flags, 31)\n            },\n            // crc for actual decoded data\n            crc: new Token.BufferType(4).get(buf, off + 28)\n        };\n        if (res.flags.isDSD) {\n            res.totalSamples *= 8;\n        }\n        return res;\n    }\n};\n/**\n * 3.0 Metadata Sub-Blocks\n *  Ref: http://www.wavpack.com/WavPack5FileFormat.pdf (page 4/6: 3.0 \"Metadata Sub-Block\")\n */\nWavPack.MetadataIdToken = {\n    len: 1,\n    get: (buf, off) => {\n        return {\n            functionId: WavPack.getBitAllignedNumber(buf[off], 0, 6),\n            isOptional: WavPack.isBitSet(buf[off], 5),\n            isOddSize: WavPack.isBitSet(buf[off], 6),\n            largeBlock: WavPack.isBitSet(buf[off], 7)\n        };\n    }\n};\nexports.WavPack = WavPack;\n//# sourceMappingURL=WavPackToken.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst assert = require(\"assert\");\nconst APEv2Parser_1 = require(\"../apev2/APEv2Parser\");\nconst FourCC_1 = require(\"../common/FourCC\");\nconst BasicParser_1 = require(\"../common/BasicParser\");\nconst WavPackToken_1 = require(\"./WavPackToken\");\nconst initDebug = require(\"debug\");\nconst debug = initDebug('music-metadata:parser:WavPack');\n/**\n * WavPack Parser\n */\nclass WavPackParser extends BasicParser_1.BasicParser {\n    parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            this.audioDataSize = 0;\n            // First parse all WavPack blocks\n            yield this.parseWavPackBlocks();\n            // try to parse APEv2 header\n            return APEv2Parser_1.APEv2Parser.parseTagHeader(this.metadata, this.tokenizer, this.options);\n        });\n    }\n    parseWavPackBlocks() {\n        return __awaiter(this, void 0, void 0, function* () {\n            do {\n                const blockId = yield this.tokenizer.peekToken(FourCC_1.FourCcToken);\n                if (blockId !== 'wvpk')\n                    break;\n                const header = yield this.tokenizer.readToken(WavPackToken_1.WavPack.BlockHeaderToken);\n                assert.strictEqual(header.BlockID, 'wvpk', 'WavPack Block-ID');\n                debug(`WavPack header blockIndex=${header.blockIndex}, len=${WavPackToken_1.WavPack.BlockHeaderToken.len}`);\n                if (header.blockIndex === 0 && !this.metadata.format.dataformat) {\n                    this.metadata.setFormat('dataformat', 'WavPack');\n                    this.metadata.setFormat('lossless', !header.flags.isHybrid);\n                    // tagTypes: this.type,\n                    this.metadata.setFormat('bitsPerSample', header.flags.bitsPerSample);\n                    if (!header.flags.isDSD) {\n                        // In case isDSD, these values will ne set in ID_DSD_BLOCK\n                        this.metadata.setFormat('sampleRate', header.flags.samplingRate);\n                        this.metadata.setFormat('duration', header.totalSamples / header.flags.samplingRate);\n                    }\n                    this.metadata.setFormat('numberOfChannels', header.flags.isMono ? 1 : 2);\n                    this.metadata.setFormat('numberOfSamples', header.totalSamples);\n                    this.metadata.setFormat('codecProfile', header.flags.isDSD ? 'DSD' : 'PCM');\n                }\n                const ignoreBytes = header.blockSize - (WavPackToken_1.WavPack.BlockHeaderToken.len - 8);\n                if (header.blockIndex === 0) {\n                    // Meta-data block\n                    yield this.parseMetadataSubBlock(header, ignoreBytes);\n                }\n                else {\n                    yield this.tokenizer.ignore(ignoreBytes);\n                }\n                if (header.blockSamples > 0) {\n                    this.audioDataSize += header.blockSize; // Count audio data for bit-rate calculation\n                }\n            } while (!this.tokenizer.fileSize || this.tokenizer.fileSize - this.tokenizer.position >= WavPackToken_1.WavPack.BlockHeaderToken.len);\n            this.metadata.setFormat('bitrate', this.audioDataSize * 8 / this.metadata.format.duration);\n        });\n    }\n    /**\n     * Ref: http://www.wavpack.com/WavPack5FileFormat.pdf, 3.0 Metadata Sub-blocks\n     * @param remainingLength\n     */\n    parseMetadataSubBlock(header, remainingLength) {\n        return __awaiter(this, void 0, void 0, function* () {\n            while (remainingLength > WavPackToken_1.WavPack.MetadataIdToken.len) {\n                const id = yield this.tokenizer.readToken(WavPackToken_1.WavPack.MetadataIdToken);\n                const dataSizeInWords = yield this.tokenizer.readNumber(id.largeBlock ? Token.UINT24_LE : Token.UINT8);\n                const data = Buffer.alloc(dataSizeInWords * 2 - (id.isOddSize ? 1 : 0));\n                yield this.tokenizer.readBuffer(data, 0, data.length);\n                debug(`Metadata Sub-Blocks functionId=0x${id.functionId.toString(16)}, id.largeBlock=${id.largeBlock},data-size=${data.length}`);\n                switch (id.functionId) {\n                    case 0x0: // ID_DUMMY: could be used to pad WavPack blocks\n                        break;\n                    case 0xe: // ID_DSD_BLOCK\n                        debug('ID_DSD_BLOCK');\n                        // https://github.com/dbry/WavPack/issues/71#issuecomment-483094813\n                        const mp = 1 << data.readUInt8(0);\n                        const samplingRate = header.flags.samplingRate * mp * 8; // ToDo: second factor should be read from DSD-metadata block https://github.com/dbry/WavPack/issues/71#issuecomment-483094813\n                        assert.ok(header.flags.isDSD, 'Only expect DSD block if DSD-flag is set');\n                        this.metadata.setFormat('sampleRate', samplingRate);\n                        this.metadata.setFormat('duration', header.totalSamples / samplingRate);\n                        break;\n                    case 0x24: // ID_ALT_TRAILER: maybe used to embed original ID3 tag header\n                        debug('ID_ALT_TRAILER: trailer for non-wav files');\n                        break;\n                    case 0x26: // ID_MD5_CHECKSUM\n                        this.metadata.setFormat('audioMD5', data);\n                        break;\n                    case 0x2f: // ID_BLOCK_CHECKSUM\n                        debug(`ID_BLOCK_CHECKSUM: checksum=${data.toString('hex')}`);\n                        break;\n                    default:\n                        debug(`Ignore unsupported meta-sub-block-id functionId=0x${id.functionId.toString(16)}`);\n                        break;\n                }\n                remainingLength -= WavPackToken_1.WavPack.MetadataIdToken.len + (id.largeBlock ? Token.UINT24_LE.len : Token.UINT8.len) + dataSizeInWords * 2;\n                debug(`remainingLength=${remainingLength}`);\n                if (id.isOddSize)\n                    this.tokenizer.ignore(1);\n            }\n            assert.strictEqual(remainingLength, 0, 'metadata-sub-block should fit it remaining length');\n        });\n    }\n}\nexports.WavPackParser = WavPackParser;\n//# sourceMappingURL=WavPackParser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst FourCC_1 = require(\"../common/FourCC\");\n/**\n * Common chunk DSD header: the 'chunk name (Four-CC)' & chunk size\n */\nexports.ChunkHeader = {\n    len: 12,\n    get: (buf, off) => {\n        return { id: FourCC_1.FourCcToken.get(buf, off), size: Token.UINT64_LE.get(buf, off + 4) };\n    }\n};\n/**\n * Common chunk DSD header: the 'chunk name (Four-CC)' & chunk size\n */\nexports.DsdChunk = {\n    len: 16,\n    get: (buf, off) => {\n        return {\n            fileSize: Token.INT64_LE.get(buf, off),\n            metadataPointer: Token.INT64_LE.get(buf, off + 8)\n        };\n    }\n};\nvar ChannelType;\n(function (ChannelType) {\n    ChannelType[ChannelType[\"mono\"] = 1] = \"mono\";\n    ChannelType[ChannelType[\"stereo\"] = 2] = \"stereo\";\n    ChannelType[ChannelType[\"channels\"] = 3] = \"channels\";\n    ChannelType[ChannelType[\"quad\"] = 4] = \"quad\";\n    ChannelType[ChannelType[\"4 channels\"] = 5] = \"4 channels\";\n    ChannelType[ChannelType[\"5 channels\"] = 6] = \"5 channels\";\n    ChannelType[ChannelType[\"5.1 channels\"] = 7] = \"5.1 channels\";\n})(ChannelType = exports.ChannelType || (exports.ChannelType = {}));\n/**\n * Common chunk DSD header: the 'chunk name (Four-CC)' & chunk size\n */\nexports.FormatChunk = {\n    len: 40,\n    get: (buf, off) => {\n        return {\n            formatVersion: Token.INT32_LE.get(buf, off),\n            formatID: Token.INT32_LE.get(buf, off + 4),\n            channelType: Token.INT32_LE.get(buf, off + 8),\n            channelNum: Token.INT32_LE.get(buf, off + 12),\n            samplingFrequency: Token.INT32_LE.get(buf, off + 16),\n            bitsPerSample: Token.INT32_LE.get(buf, off + 20),\n            sampleCount: Token.INT64_LE.get(buf, off + 24),\n            blockSizePerChannel: Token.INT32_LE.get(buf, off + 32)\n        };\n    }\n};\n//# sourceMappingURL=DsfChunk.js.map","'use strict';\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst AbstractID3Parser_1 = require(\"../id3v2/AbstractID3Parser\");\nconst assert = require(\"assert\");\nconst _debug = require(\"debug\");\nconst DsfChunk_1 = require(\"./DsfChunk\");\nconst ID3v2Parser_1 = require(\"../id3v2/ID3v2Parser\");\nconst debug = _debug('music-metadata:parser:DSF');\n/**\n * DSF (dsd stream file) File Parser\n * Ref: https://dsd-guide.com/sites/default/files/white-papers/DSFFileFormatSpec_E.pdf\n */\nclass DsfParser extends AbstractID3Parser_1.AbstractID3Parser {\n    _parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const p0 = this.tokenizer.position; // mark start position, normally 0\n            const chunkHeader = yield this.tokenizer.readToken(DsfChunk_1.ChunkHeader);\n            assert.strictEqual(chunkHeader.id, 'DSD ', 'Invalid chunk signature');\n            this.metadata.setFormat('dataformat', 'DSF');\n            this.metadata.setFormat('lossless', true);\n            const dsdChunk = yield this.tokenizer.readToken(DsfChunk_1.DsdChunk);\n            if (dsdChunk.metadataPointer === 0) {\n                debug(`No ID3v2 tag present`);\n            }\n            else {\n                debug(`expect ID3v2 at offset=${dsdChunk.metadataPointer}`);\n                yield this.parseChunks(dsdChunk.fileSize - chunkHeader.size);\n                // Jump to ID3 header\n                yield this.tokenizer.ignore(dsdChunk.metadataPointer - this.tokenizer.position - p0);\n                return new ID3v2Parser_1.ID3v2Parser().parse(this.metadata, this.tokenizer, this.options);\n            }\n        });\n    }\n    parseChunks(bytesRemaining) {\n        return __awaiter(this, void 0, void 0, function* () {\n            while (bytesRemaining >= DsfChunk_1.ChunkHeader.len) {\n                const chunkHeader = yield this.tokenizer.readToken(DsfChunk_1.ChunkHeader);\n                debug(`Parsing chunk name=${chunkHeader.id} size=${chunkHeader.size}`);\n                switch (chunkHeader.id) {\n                    case 'fmt ':\n                        const formatChunk = yield this.tokenizer.readToken(DsfChunk_1.FormatChunk);\n                        this.metadata.setFormat('numberOfChannels', formatChunk.channelNum);\n                        this.metadata.setFormat('sampleRate', formatChunk.samplingFrequency);\n                        this.metadata.setFormat('bitsPerSample', formatChunk.bitsPerSample);\n                        this.metadata.setFormat('numberOfSamples', formatChunk.sampleCount);\n                        this.metadata.setFormat('duration', formatChunk.sampleCount / formatChunk.samplingFrequency);\n                        const bitrate = formatChunk.bitsPerSample * formatChunk.samplingFrequency * formatChunk.channelNum;\n                        this.metadata.setFormat('bitrate', bitrate);\n                        return; // We got what we want, stop further processing of chunks\n                    default:\n                        this.tokenizer.ignore(chunkHeader.size - DsfChunk_1.ChunkHeader.len);\n                        break;\n                }\n                bytesRemaining -= chunkHeader.size;\n            }\n        });\n    }\n}\nexports.DsfParser = DsfParser;\n//# sourceMappingURL=DsfParser.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst Token = require(\"token-types\");\nconst FourCC_1 = require(\"../common/FourCC\");\n/**\n * DSDIFF chunk header\n * The data-size encoding is deviating from EA-IFF 85\n * Ref: http://www.sonicstudio.com/pdf/dsd/DSDIFF_1.5_Spec.pdf\n */\nexports.ChunkHeader = {\n    len: 12,\n    get: (buf, off) => {\n        return {\n            // Group-ID\n            chunkID: FourCC_1.FourCcToken.get(buf, off),\n            // Size\n            chunkSize: Token.INT64_BE.get(buf, off + 4)\n        };\n    }\n};\n//# sourceMappingURL=DsdiffToken.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst assert = require(\"assert\");\nconst Token = require(\"token-types\");\nconst initDebug = require(\"debug\");\nconst FourCC_1 = require(\"../common/FourCC\");\nconst BasicParser_1 = require(\"../common/BasicParser\");\nconst ID3Stream_1 = require(\"../id3v2/ID3Stream\");\nconst DsdiffToken_1 = require(\"./DsdiffToken\");\nconst strtok3 = require(\"strtok3/lib/core\");\nconst ID3v2Parser_1 = require(\"../id3v2/ID3v2Parser\");\nconst debug = initDebug('music-metadata:parser:aiff');\n/**\n * DSDIFF - Direct Stream Digital Interchange File Format (Phillips)\n *\n * Ref:\n *  http://www.sonicstudio.com/pdf/dsd/DSDIFF_1.5_Spec.pdf\n */\nclass DsdiffParser extends BasicParser_1.BasicParser {\n    parse() {\n        return __awaiter(this, void 0, void 0, function* () {\n            const header = yield this.tokenizer.readToken(DsdiffToken_1.ChunkHeader);\n            assert.strictEqual(header.chunkID, 'FRM8');\n            const type = (yield this.tokenizer.readToken(FourCC_1.FourCcToken)).trim();\n            switch (type) {\n                case 'DSD':\n                    this.metadata.setFormat('dataformat', `DSDIFF/${type}`);\n                    this.metadata.setFormat('lossless', true);\n                    return this.readFmt8Chunks(header.chunkSize - FourCC_1.FourCcToken.len);\n                default:\n                    throw Error(`Unsupported DSDIFF type: ${type}`);\n            }\n        });\n    }\n    readFmt8Chunks(remainingSize) {\n        return __awaiter(this, void 0, void 0, function* () {\n            while (remainingSize >= DsdiffToken_1.ChunkHeader.len) {\n                const chunkHeader = yield this.tokenizer.readToken(DsdiffToken_1.ChunkHeader);\n                //  If the data is an odd number of bytes in length, a pad byte must be added at the end\n                debug(`Chunk id=${chunkHeader.chunkID}`);\n                yield this.readData(chunkHeader);\n                remainingSize -= (DsdiffToken_1.ChunkHeader.len + chunkHeader.chunkSize);\n            }\n        });\n    }\n    readData(header) {\n        return __awaiter(this, void 0, void 0, function* () {\n            debug(`Reading data of chunk[ID=${header.chunkID}, size=${header.chunkSize}]`);\n            const p0 = this.tokenizer.position;\n            switch (header.chunkID.trim()) {\n                case 'FVER': // 3.1 FORMAT VERSION CHUNK\n                    const version = yield this.tokenizer.readToken(Token.UINT32_LE);\n                    debug(`DSDIFF version=${version}`);\n                    break;\n                case 'PROP': // 3.2 PROPERTY CHUNK\n                    const propType = yield this.tokenizer.readToken(FourCC_1.FourCcToken);\n                    assert.strictEqual(propType, 'SND ');\n                    yield this.handleSoundPropertyChunks(header.chunkSize - FourCC_1.FourCcToken.len);\n                    break;\n                case 'ID3': // Unofficial ID3 tag support\n                    const id3_data = yield this.tokenizer.readToken(new Token.BufferType(header.chunkSize));\n                    const id3stream = new ID3Stream_1.ID3Stream(id3_data);\n                    const rst = strtok3.fromStream(id3stream);\n                    yield new ID3v2Parser_1.ID3v2Parser().parse(this.metadata, rst, this.options);\n                    break;\n                default:\n                    debug(`Ignore chunk[ID=${header.chunkID}, size=${header.chunkSize}]`);\n                    break;\n                case 'DSD':\n                    this.metadata.setFormat('numberOfSamples', header.chunkSize * 8 / this.metadata.format.numberOfChannels);\n                    this.metadata.setFormat('duration', this.metadata.format.numberOfSamples / this.metadata.format.sampleRate);\n                    break;\n            }\n            const remaining = header.chunkSize - (this.tokenizer.position - p0);\n            if (remaining > 0) {\n                debug(`After Parsing chunk, remaining ${remaining} bytes`);\n                yield this.tokenizer.ignore(remaining);\n            }\n        });\n    }\n    handleSoundPropertyChunks(remainingSize) {\n        return __awaiter(this, void 0, void 0, function* () {\n            debug(`Parsing sound-property-chunks, remainingSize=${remainingSize}`);\n            while (remainingSize > 0) {\n                const sndPropHeader = yield this.tokenizer.readToken(DsdiffToken_1.ChunkHeader);\n                debug(`Sound-property-chunk[ID=${sndPropHeader.chunkID}, size=${sndPropHeader.chunkSize}]`);\n                const p0 = this.tokenizer.position;\n                switch (sndPropHeader.chunkID.trim()) {\n                    case 'FS': // 3.2.1 Sample Rate Chunk\n                        const sampleRate = yield this.tokenizer.readToken(Token.UINT32_BE);\n                        this.metadata.setFormat('sampleRate', sampleRate);\n                        break;\n                    case 'CHNL': // 3.2.2 Channels Chunk\n                        const numChannels = yield this.tokenizer.readToken(Token.UINT16_BE);\n                        this.metadata.setFormat('numberOfChannels', numChannels);\n                        yield this.handleChannelChunks(sndPropHeader.chunkSize - Token.UINT16_BE.len);\n                        break;\n                    case 'CMPR': // 3.2.3 Compression Type Chunk\n                        const compressionIdCode = (yield this.tokenizer.readToken(FourCC_1.FourCcToken)).trim();\n                        const count = yield this.tokenizer.readToken(Token.UINT8);\n                        const compressionName = yield this.tokenizer.readToken(new Token.StringType(count, 'ascii'));\n                        if (compressionIdCode === 'DSD') {\n                            this.metadata.setFormat('lossless', true);\n                            this.metadata.setFormat('bitsPerSample', 1);\n                        }\n                        this.metadata.setFormat('encoder', `${compressionIdCode} (${compressionName})`);\n                        break;\n                    case 'ABSS': // 3.2.4 Absolute Start Time Chunk\n                        const hours = yield this.tokenizer.readToken(Token.UINT16_BE);\n                        const minutes = yield this.tokenizer.readToken(Token.UINT8);\n                        const seconds = yield this.tokenizer.readToken(Token.UINT8);\n                        const samples = yield this.tokenizer.readToken(Token.UINT32_BE);\n                        debug(`ABSS ${hours}:${minutes}:${seconds}.${samples}`);\n                        break;\n                    case 'LSCO': // 3.2.5 Loudspeaker Configuration Chunk\n                        const lsConfig = yield this.tokenizer.readToken(Token.UINT16_BE);\n                        debug(`LSCO lsConfig=${lsConfig}`);\n                        break;\n                    case 'COMT':\n                    default:\n                        debug(`Unknown sound-property-chunk[ID=${sndPropHeader.chunkID}, size=${sndPropHeader.chunkSize}]`);\n                        yield this.tokenizer.ignore(sndPropHeader.chunkSize);\n                }\n                const remaining = sndPropHeader.chunkSize - (this.tokenizer.position - p0);\n                if (remaining > 0) {\n                    debug(`After Parsing sound-property-chunk ${sndPropHeader.chunkSize}, remaining ${remaining} bytes`);\n                    yield this.tokenizer.ignore(remaining);\n                }\n                remainingSize -= DsdiffToken_1.ChunkHeader.len + sndPropHeader.chunkSize;\n                debug(`Parsing sound-property-chunks, remainingSize=${remainingSize}`);\n            }\n            if (this.metadata.format.lossless && this.metadata.format.sampleRate && this.metadata.format.numberOfChannels && this.metadata.format.bitsPerSample) {\n                const bitrate = this.metadata.format.sampleRate * this.metadata.format.numberOfChannels * this.metadata.format.bitsPerSample;\n                this.metadata.setFormat('bitrate', bitrate);\n            }\n        });\n    }\n    handleChannelChunks(remainingSize) {\n        return __awaiter(this, void 0, void 0, function* () {\n            debug(`Parsing channel-chunks, remainingSize=${remainingSize}`);\n            const channels = [];\n            while (remainingSize >= FourCC_1.FourCcToken.len) {\n                const channelId = yield this.tokenizer.readToken(FourCC_1.FourCcToken);\n                debug(`Channel[ID=${channelId}]`);\n                channels.push(channelId);\n                remainingSize -= FourCC_1.FourCcToken.len;\n            }\n            debug(`Channels: ${channels.join(', ')}`);\n            return channels;\n        });\n    }\n}\nexports.DsdiffParser = DsdiffParser;\n//# sourceMappingURL=DsdiffParser.js.map","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n    return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n        function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n    });\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fileType = require(\"file-type\");\nconst MimeType = require(\"media-typer\");\nconst _debug = require(\"debug\");\nconst MetadataCollector_1 = require(\"./common/MetadataCollector\");\nconst AiffParser_1 = require(\"./aiff/AiffParser\");\nconst APEv2Parser_1 = require(\"./apev2/APEv2Parser\");\nconst AsfParser_1 = require(\"./asf/AsfParser\");\nconst FlacParser_1 = require(\"./flac/FlacParser\");\nconst MP4Parser_1 = require(\"./mp4/MP4Parser\");\nconst MpegParser_1 = require(\"./mpeg/MpegParser\");\nconst musepack_1 = require(\"./musepack\");\nconst OggParser_1 = require(\"./ogg/OggParser\");\nconst WaveParser_1 = require(\"./riff/WaveParser\");\nconst WavPackParser_1 = require(\"./wavpack/WavPackParser\");\nconst DsfParser_1 = require(\"./dsf/DsfParser\");\nconst DsdiffParser_1 = require(\"./dsdiff/DsdiffParser\");\nconst debug = _debug(\"music-metadata:parser:factory\");\nclass ParserFactory {\n    constructor() {\n        // ToDo: expose warnings to API\n        this.warning = [];\n    }\n    /**\n     *  Parse metadata from tokenizer\n     * @param {ITokenizer} tokenizer\n     * @param {string} contentType\n     * @param {IOptions} opts\n     * @returns {Promise<INativeAudioMetadata>}\n     */\n    static parse(tokenizer, contentType, opts) {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Resolve parser based on MIME-type or file extension\n            let parserId = ParserFactory.getParserIdForMimeType(contentType) || ParserFactory.getParserIdForExtension(contentType);\n            if (!parserId) {\n                // No MIME-type mapping found\n                debug(\"No parser found for MIME-type / extension: \" + contentType);\n                const buf = Buffer.alloc(4100);\n                yield tokenizer.peekBuffer(buf, 0, buf.byteLength, tokenizer.position, true);\n                const guessedType = fileType(buf);\n                if (!guessedType)\n                    throw new Error(\"Failed to guess MIME-type\");\n                debug(`Guessed file type is mime=${guessedType.mime}, extension=${guessedType.ext}`);\n                parserId = ParserFactory.getParserIdForMimeType(guessedType.mime);\n                if (!parserId)\n                    throw new Error(\"Guessed MIME-type not supported: \" + guessedType.mime);\n                return this._parse(tokenizer, parserId, opts);\n            }\n            // Parser found, execute parser\n            return this._parse(tokenizer, parserId, opts);\n        });\n    }\n    /**\n     * @param filePath Path, filename or extension to audio file\n     * @return Parser sub-module name\n     */\n    static getParserIdForExtension(filePath) {\n        if (!filePath)\n            return;\n        const extension = this.getExtension(filePath).toLocaleLowerCase() || filePath;\n        switch (extension) {\n            case \".mp2\":\n            case \".mp3\":\n            case \".m2a\":\n            case '.aac': // Assume it is ADTS-container\n                return 'mpeg';\n            case \".ape\":\n                return 'apev2';\n            case \".mp4\":\n            case \".m4a\":\n            case \".m4b\":\n            case \".m4pa\":\n            case \".m4v\":\n            case \".m4r\":\n            case \".3gp\":\n                return 'mp4';\n            case \".wma\":\n            case \".wmv\":\n            case \".asf\":\n                return 'asf';\n            case \".flac\":\n                return 'flac';\n            case \".ogg\":\n            case \".ogv\":\n            case \".oga\":\n            case \".ogm\":\n            case \".ogx\":\n            case \".opus\": // recommended filename extension for Ogg Opus\n            case \".spx\": // recommended filename extension for Ogg Speex\n                return 'ogg';\n            case \".aif\":\n            case \".aiff\":\n            case \".aifc\":\n                return 'aiff';\n            case \".wav\":\n                return 'riff';\n            case \".wv\":\n            case \".wvp\":\n                return 'wavpack';\n            case \".mpc\":\n                return 'musepack';\n            case '.dsf':\n                return 'dsf';\n            case '.dff':\n                return 'dsdiff';\n        }\n    }\n    static loadParser(moduleName, options) {\n        return __awaiter(this, void 0, void 0, function* () {\n            switch (moduleName) {\n                case 'aiff': return new AiffParser_1.AIFFParser();\n                case 'apev2': return new APEv2Parser_1.APEv2Parser();\n                case 'asf': return new AsfParser_1.AsfParser();\n                case 'dsf': return new DsfParser_1.DsfParser();\n                case 'dsdiff': return new DsdiffParser_1.DsdiffParser();\n                case 'flac': return new FlacParser_1.FlacParser();\n                case 'mp4': return new MP4Parser_1.MP4Parser();\n                case 'mpeg': return new MpegParser_1.MpegParser();\n                case 'musepack': return new musepack_1.default();\n                case 'ogg': return new OggParser_1.OggParser();\n                case 'riff': return new WaveParser_1.WaveParser();\n                case 'wavpack': return new WavPackParser_1.WavPackParser();\n                default:\n                    throw new Error(`Unknown parser type: ${moduleName}`);\n            }\n        });\n    }\n    static _parse(tokenizer, parserId, opts = {}) {\n        return __awaiter(this, void 0, void 0, function* () {\n            // Parser found, execute parser\n            const parser = yield ParserFactory.loadParser(parserId, opts);\n            const metadata = new MetadataCollector_1.MetadataCollector(opts);\n            yield parser.init(metadata, tokenizer, opts).parse();\n            return metadata.toCommonMetadata();\n        });\n    }\n    static getExtension(fname) {\n        const i = fname.lastIndexOf('.');\n        return i === -1 ? '' : fname.slice(i);\n    }\n    /**\n     * @param {string} mimeType MIME-Type, extension, path or filename\n     * @returns {string} Parser sub-module name\n     */\n    static getParserIdForMimeType(mimeType) {\n        let mime;\n        try {\n            mime = MimeType.parse(mimeType);\n        }\n        catch (err) {\n            debug(`Invalid MIME-type: ${mimeType}`);\n            return;\n        }\n        const subType = mime.subtype.indexOf('x-') === 0 ? mime.subtype.substring(2) : mime.subtype;\n        switch (mime.type) {\n            case 'audio':\n                switch (subType) {\n                    case 'mp3': // Incorrect MIME-type, Chrome, in Web API File object\n                    case 'mpeg':\n                        return 'mpeg'; // ToDo: handle ID1 header as well\n                    case 'flac':\n                        return 'flac';\n                    case 'ape':\n                    case 'monkeys-audio':\n                        return 'apev2';\n                    case 'mp4':\n                    case 'aac':\n                    case 'aacp':\n                    case 'm4a':\n                        return 'mp4';\n                    case 'ogg': // RFC 7845\n                    case 'opus': // RFC 6716\n                    case 'speex': // RFC 5574\n                        return 'ogg';\n                    case 'ms-wma':\n                    case 'ms-wmv':\n                    case 'ms-asf':\n                        return 'asf';\n                    case 'aiff':\n                    case 'aif':\n                    case 'aifc':\n                        return 'aiff';\n                    case 'vnd.wave':\n                    case 'wav':\n                    case 'wave':\n                        return 'riff';\n                    case 'wavpack':\n                        return 'wavpack';\n                    case 'musepack':\n                        return 'musepack';\n                    case 'dsf':\n                        return 'dsf';\n                }\n                break;\n            case 'video':\n                switch (subType) {\n                    case 'ms-asf':\n                    case 'ms-wmv':\n                        return 'asf';\n                    case 'm4v':\n                    case 'mp4':\n                        return 'mp4';\n                    case 'ogg':\n                        return 'ogg';\n                }\n                break;\n            case 'application':\n                switch (subType) {\n                    case 'vnd.ms-asf':\n                        return 'asf';\n                    case 'ogg':\n                        return 'ogg';\n                }\n                break;\n        }\n    }\n}\nexports.ParserFactory = ParserFactory;\n//# sourceMappingURL=ParserFactory.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst strtok3 = require(\"strtok3/lib/core\");\nconst ParserFactory_1 = require(\"./ParserFactory\");\n/**\n * Parse audio from Node Stream.Readable\n * @param {Stream.Readable} Stream to read the audio track from\n * @param {string} mimeType Content specification MIME-type, e.g.: 'audio/mpeg'\n * @param {IOptions} options Parsing options\n * @returns {Promise<IAudioMetadata>}\n */\nfunction parseStream(stream, mimeType, options = {}) {\n    return parseFromTokenizer(strtok3.fromStream(stream), mimeType, options);\n}\nexports.parseStream = parseStream;\n/**\n * Parse audio from Node Buffer\n * @param {Stream.Readable} stream Audio input stream\n * @param {string} mimeType <string> Content specification MIME-type, e.g.: 'audio/mpeg'\n * @param {IOptions} options Parsing options\n * @returns {Promise<IAudioMetadata>}\n * Ref: https://github.com/Borewit/strtok3/blob/e6938c81ff685074d5eb3064a11c0b03ca934c1d/src/index.ts#L15\n */\nfunction parseBuffer(buf, mimeType, options = {}) {\n    const tokenizer = strtok3.fromBuffer(buf);\n    return parseFromTokenizer(tokenizer, mimeType, options);\n}\nexports.parseBuffer = parseBuffer;\n/**\n * Parse audio from ITokenizer source\n * @param {strtok3.ITokenizer} Audio source implementing the tokenizer interface\n * @param {string} mimeType <string> Content specification MIME-type, e.g.: 'audio/mpeg'\n * @param {IOptions} options Parsing options\n * @returns {Promise<IAudioMetadata>}\n */\nfunction parseFromTokenizer(tokenizer, mimeType, options = {}) {\n    if (!tokenizer.fileSize && options.fileSize) {\n        tokenizer.fileSize = options.fileSize;\n    }\n    return ParserFactory_1.ParserFactory.parse(tokenizer, mimeType, options);\n}\nexports.parseFromTokenizer = parseFromTokenizer;\n/**\n * Create a dictionary ordered by their tag id (key)\n * @param nativeTags list of tags\n * @returns tags indexed by id\n */\nfunction orderTags(nativeTags) {\n    const tags = {};\n    for (const tag of nativeTags) {\n        (tags[tag.id] = (tags[tag.id] || [])).push(tag.value);\n    }\n    return tags;\n}\nexports.orderTags = orderTags;\n/**\n * Convert rating to 1-5 star rating\n * @param {number} rating Normalized rating [0..1] (common.rating[n].rating)\n * @returns {number} Number of stars: 1, 2, 3, 4 or 5 stars\n */\nfunction ratingToStars(rating) {\n    return rating === undefined ? 0 : 1 + Math.round(rating * 4);\n}\nexports.ratingToStars = ratingToStars;\n//# sourceMappingURL=core.js.map","module.exports      = isTypedArray\nisTypedArray.strict = isStrictTypedArray\nisTypedArray.loose  = isLooseTypedArray\n\nvar toString = Object.prototype.toString\nvar names = {\n    '[object Int8Array]': true\n  , '[object Int16Array]': true\n  , '[object Int32Array]': true\n  , '[object Uint8Array]': true\n  , '[object Uint8ClampedArray]': true\n  , '[object Uint16Array]': true\n  , '[object Uint32Array]': true\n  , '[object Float32Array]': true\n  , '[object Float64Array]': true\n}\n\nfunction isTypedArray(arr) {\n  return (\n       isStrictTypedArray(arr)\n    || isLooseTypedArray(arr)\n  )\n}\n\nfunction isStrictTypedArray(arr) {\n  return (\n       arr instanceof Int8Array\n    || arr instanceof Int16Array\n    || arr instanceof Int32Array\n    || arr instanceof Uint8Array\n    || arr instanceof Uint8ClampedArray\n    || arr instanceof Uint16Array\n    || arr instanceof Uint32Array\n    || arr instanceof Float32Array\n    || arr instanceof Float64Array\n  )\n}\n\nfunction isLooseTypedArray(arr) {\n  return names[toString.call(arr)]\n}\n","/**\n * Convert a typed array to a Buffer without a copy\n *\n * Author:   Feross Aboukhadijeh <https://feross.org>\n * License:  MIT\n *\n * `npm install typedarray-to-buffer`\n */\n\nvar isTypedArray = require('is-typedarray').strict\n\nmodule.exports = function typedarrayToBuffer (arr) {\n  if (isTypedArray(arr)) {\n    // To avoid a copy, use the typed array's underlying ArrayBuffer to back new Buffer\n    var buf = Buffer.from(arr.buffer)\n    if (arr.byteLength !== arr.buffer.byteLength) {\n      // Respect the \"view\", i.e. byteOffset and byteLength, without doing a copy\n      buf = buf.slice(arr.byteOffset, arr.byteOffset + arr.byteLength)\n    }\n    return buf\n  } else {\n    // Pass through all other types to `Buffer.from`\n    return Buffer.from(arr)\n  }\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * A mock readable-stream, using string to read from\n */\nconst stream_1 = require(\"stream\");\n/**\n * Converts a ReadableStream\n * https://developer.mozilla.org/en-US/docs/Web/API/ReadableStreamDefaultReader/read\n */\nclass Browser2NodeStream extends stream_1.Readable {\n    constructor(stream) {\n        super();\n        this.bytesRead = 0;\n        this.reader = stream.getReader();\n    }\n    _read() {\n        this.reader.read().then(res => {\n            if (res.done) {\n                this.push(null);\n            }\n            else {\n                this.bytesRead += res.value.length;\n                this.push(res.value);\n            }\n        });\n    }\n    _destroy(error, callback) {\n        this.reader.cancel().then(() => {\n            callback(null);\n        }).catch(err => {\n            callback(err);\n        });\n    }\n}\nexports.Browser2NodeStream = Browser2NodeStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst initDebug = require(\"debug\");\nconst mm = require(\"music-metadata/lib/core\");\nconst toBuffer = require(\"typedarray-to-buffer\");\nconst Browser2NodeStream_1 = require(\"./fetch/Browser2NodeStream\");\nconst debug = initDebug('music-metadata-browser');\n/**\n * Parse audio Stream\n * @param stream\n * @param {string} contentType MIME-Type\n * @param {IOptions} options Parsing options\n * @returns {Promise<IAudioMetadata>}\n */\nexports.parseNodeStream = mm.parseStream;\n/**\n * Parse Web API ReadableStream: https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream\n * @param {ReadableStream} stream ReadableStream\n * @param {string} contentType MIME-Type\n * @param {IOptions} options Parsing options\n * @returns {Promise<IAudioMetadata>}\n */\nfunction parseReadableStream(stream, contentType, options) {\n    const ns = new Browser2NodeStream_1.Browser2NodeStream(stream);\n    return exports.parseNodeStream(ns, contentType, options).then(res => {\n        debug(`Completed parsing from stream 1bytesRead=${ns.bytesRead} / fileSize=${options && options.fileSize ? options.fileSize : '?'}`);\n        return res;\n    });\n}\nexports.parseReadableStream = parseReadableStream;\n/**\n * Parse audio from Node Buffer\n * @param {Stream.Readable} stream Audio input stream\n * @param {string} mimeType <string> Content specification MIME-type, e.g.: 'audio/mpeg'\n * @param {IOptions} options Parsing options\n * @returns {Promise<IAudioMetadata>}\n * Ref: https://github.com/Borewit/strtok3/blob/e6938c81ff685074d5eb3064a11c0b03ca934c1d/src/index.ts#L15\n */\nexports.parseBuffer = mm.parseBuffer;\n/**\n * Parse Web API File\n * @param {Blob} blob\n * @param {IOptions} options Parsing options\n * @returns {Promise<IAudioMetadata>}\n */\nfunction parseBlob(blob, options) {\n    return convertBlobToBuffer(blob).then(buf => {\n        return mm.parseBuffer(buf, blob.type, options);\n    });\n}\nexports.parseBlob = parseBlob;\n/**\n * Parse fetched file, using the Web Fetch API\n * @param {string} audioTrackUrl URL to download the audio track from\n * @param {IOptions} options Parsing options\n * @returns {Promise<IAudioMetadata>}\n */\nfunction fetchFromUrl(audioTrackUrl, options) {\n    return fetch(audioTrackUrl).then(response => {\n        const contentType = response.headers.get('Content-Type');\n        const headers = [];\n        response.headers.forEach(header => {\n            headers.push(header);\n        });\n        if (response.ok) {\n            if (response.body) {\n                return this.parseReadableStream(response.body, contentType, options).then(res => {\n                    response.body.cancel();\n                    return res;\n                });\n            }\n            else {\n                // Fall back on Blob\n                return response.blob().then(blob => {\n                    return this.parseBlob(blob, options);\n                });\n            }\n        }\n        else {\n            throw new Error(`HTTP error status=${response.status}: ${response.statusText}`);\n        }\n    });\n}\nexports.fetchFromUrl = fetchFromUrl;\n/**\n * Parse audio from ITokenizer source\n * @param {strtok3.ITokenizer} Audio source implementing the tokenizer interface\n * @param {string} mimeType <string> Content specification MIME-type, e.g.: 'audio/mpeg'\n * @param {IOptions} options Parsing options\n * @returns {Promise<IAudioMetadata>}\n */\nexports.parseFromTokenizer = mm.parseFromTokenizer;\n/**\n * Convert Web API File to Node Buffer\n * @param {Blob} blob Web API Blob\n * @returns {Promise<Buffer>}\n */\nfunction convertBlobToBuffer(blob) {\n    return new Promise((resolve, reject) => {\n        const fileReader = new FileReader();\n        fileReader.onloadend = event => {\n            let data = event.target.result;\n            if (data instanceof ArrayBuffer) {\n                data = toBuffer(new Uint8Array(event.target.result));\n            }\n            resolve(data);\n        };\n        fileReader.onerror = error => {\n            reject(new Error(error.type));\n        };\n        fileReader.onabort = error => {\n            reject(new Error(error.type));\n        };\n        fileReader.readAsArrayBuffer(blob);\n    });\n}\n/**\n * Create a dictionary ordered by their tag id (key)\n * @param {ITag[]} nativeTags list of tags\n * @returns {INativeTagDict} Tags indexed by id\n */\nexports.orderTags = mm.orderTags;\n/**\n * Convert rating to 1-5 star rating\n * @param {number} rating Normalized rating [0..1] (common.rating[n].rating)\n * @returns {number} Number of stars: 1, 2, 3, 4 or 5 stars\n */\nexports.ratingToStars = mm.ratingToStars;\n","/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n  var key = null;\n  void 0 !== maybeKey && (key = \"\" + maybeKey);\n  void 0 !== config.key && (key = \"\" + config.key);\n  if (\"key\" in config) {\n    maybeKey = {};\n    for (var propName in config)\n      \"key\" !== propName && (maybeKey[propName] = config[propName]);\n  } else maybeKey = config;\n  config = maybeKey.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== config ? config : null,\n    props: maybeKey\n  };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n  module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","/**\n * @license React\n * scheduler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nfunction push(heap, node) {\n  var index = heap.length;\n  heap.push(node);\n  a: for (; 0 < index; ) {\n    var parentIndex = (index - 1) >>> 1,\n      parent = heap[parentIndex];\n    if (0 < compare(parent, node))\n      (heap[parentIndex] = node), (heap[index] = parent), (index = parentIndex);\n    else break a;\n  }\n}\nfunction peek(heap) {\n  return 0 === heap.length ? null : heap[0];\n}\nfunction pop(heap) {\n  if (0 === heap.length) return null;\n  var first = heap[0],\n    last = heap.pop();\n  if (last !== first) {\n    heap[0] = last;\n    a: for (\n      var index = 0, length = heap.length, halfLength = length >>> 1;\n      index < halfLength;\n\n    ) {\n      var leftIndex = 2 * (index + 1) - 1,\n        left = heap[leftIndex],\n        rightIndex = leftIndex + 1,\n        right = heap[rightIndex];\n      if (0 > compare(left, last))\n        rightIndex < length && 0 > compare(right, left)\n          ? ((heap[index] = right),\n            (heap[rightIndex] = last),\n            (index = rightIndex))\n          : ((heap[index] = left),\n            (heap[leftIndex] = last),\n            (index = leftIndex));\n      else if (rightIndex < length && 0 > compare(right, last))\n        (heap[index] = right), (heap[rightIndex] = last), (index = rightIndex);\n      else break a;\n    }\n  }\n  return first;\n}\nfunction compare(a, b) {\n  var diff = a.sortIndex - b.sortIndex;\n  return 0 !== diff ? diff : a.id - b.id;\n}\nexports.unstable_now = void 0;\nif (\"object\" === typeof performance && \"function\" === typeof performance.now) {\n  var localPerformance = performance;\n  exports.unstable_now = function () {\n    return localPerformance.now();\n  };\n} else {\n  var localDate = Date,\n    initialTime = localDate.now();\n  exports.unstable_now = function () {\n    return localDate.now() - initialTime;\n  };\n}\nvar taskQueue = [],\n  timerQueue = [],\n  taskIdCounter = 1,\n  currentTask = null,\n  currentPriorityLevel = 3,\n  isPerformingWork = !1,\n  isHostCallbackScheduled = !1,\n  isHostTimeoutScheduled = !1,\n  needsPaint = !1,\n  localSetTimeout = \"function\" === typeof setTimeout ? setTimeout : null,\n  localClearTimeout = \"function\" === typeof clearTimeout ? clearTimeout : null,\n  localSetImmediate = \"undefined\" !== typeof setImmediate ? setImmediate : null;\nfunction advanceTimers(currentTime) {\n  for (var timer = peek(timerQueue); null !== timer; ) {\n    if (null === timer.callback) pop(timerQueue);\n    else if (timer.startTime <= currentTime)\n      pop(timerQueue),\n        (timer.sortIndex = timer.expirationTime),\n        push(taskQueue, timer);\n    else break;\n    timer = peek(timerQueue);\n  }\n}\nfunction handleTimeout(currentTime) {\n  isHostTimeoutScheduled = !1;\n  advanceTimers(currentTime);\n  if (!isHostCallbackScheduled)\n    if (null !== peek(taskQueue))\n      (isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline());\n    else {\n      var firstTimer = peek(timerQueue);\n      null !== firstTimer &&\n        requestHostTimeout(handleTimeout, firstTimer.startTime - currentTime);\n    }\n}\nvar isMessageLoopRunning = !1,\n  taskTimeoutID = -1,\n  frameInterval = 5,\n  startTime = -1;\nfunction shouldYieldToHost() {\n  return needsPaint\n    ? !0\n    : exports.unstable_now() - startTime < frameInterval\n      ? !1\n      : !0;\n}\nfunction performWorkUntilDeadline() {\n  needsPaint = !1;\n  if (isMessageLoopRunning) {\n    var currentTime = exports.unstable_now();\n    startTime = currentTime;\n    var hasMoreWork = !0;\n    try {\n      a: {\n        isHostCallbackScheduled = !1;\n        isHostTimeoutScheduled &&\n          ((isHostTimeoutScheduled = !1),\n          localClearTimeout(taskTimeoutID),\n          (taskTimeoutID = -1));\n        isPerformingWork = !0;\n        var previousPriorityLevel = currentPriorityLevel;\n        try {\n          b: {\n            advanceTimers(currentTime);\n            for (\n              currentTask = peek(taskQueue);\n              null !== currentTask &&\n              !(\n                currentTask.expirationTime > currentTime && shouldYieldToHost()\n              );\n\n            ) {\n              var callback = currentTask.callback;\n              if (\"function\" === typeof callback) {\n                currentTask.callback = null;\n                currentPriorityLevel = currentTask.priorityLevel;\n                var continuationCallback = callback(\n                  currentTask.expirationTime <= currentTime\n                );\n                currentTime = exports.unstable_now();\n                if (\"function\" === typeof continuationCallback) {\n                  currentTask.callback = continuationCallback;\n                  advanceTimers(currentTime);\n                  hasMoreWork = !0;\n                  break b;\n                }\n                currentTask === peek(taskQueue) && pop(taskQueue);\n                advanceTimers(currentTime);\n              } else pop(taskQueue);\n              currentTask = peek(taskQueue);\n            }\n            if (null !== currentTask) hasMoreWork = !0;\n            else {\n              var firstTimer = peek(timerQueue);\n              null !== firstTimer &&\n                requestHostTimeout(\n                  handleTimeout,\n                  firstTimer.startTime - currentTime\n                );\n              hasMoreWork = !1;\n            }\n          }\n          break a;\n        } finally {\n          (currentTask = null),\n            (currentPriorityLevel = previousPriorityLevel),\n            (isPerformingWork = !1);\n        }\n        hasMoreWork = void 0;\n      }\n    } finally {\n      hasMoreWork\n        ? schedulePerformWorkUntilDeadline()\n        : (isMessageLoopRunning = !1);\n    }\n  }\n}\nvar schedulePerformWorkUntilDeadline;\nif (\"function\" === typeof localSetImmediate)\n  schedulePerformWorkUntilDeadline = function () {\n    localSetImmediate(performWorkUntilDeadline);\n  };\nelse if (\"undefined\" !== typeof MessageChannel) {\n  var channel = new MessageChannel(),\n    port = channel.port2;\n  channel.port1.onmessage = performWorkUntilDeadline;\n  schedulePerformWorkUntilDeadline = function () {\n    port.postMessage(null);\n  };\n} else\n  schedulePerformWorkUntilDeadline = function () {\n    localSetTimeout(performWorkUntilDeadline, 0);\n  };\nfunction requestHostTimeout(callback, ms) {\n  taskTimeoutID = localSetTimeout(function () {\n    callback(exports.unstable_now());\n  }, ms);\n}\nexports.unstable_IdlePriority = 5;\nexports.unstable_ImmediatePriority = 1;\nexports.unstable_LowPriority = 4;\nexports.unstable_NormalPriority = 3;\nexports.unstable_Profiling = null;\nexports.unstable_UserBlockingPriority = 2;\nexports.unstable_cancelCallback = function (task) {\n  task.callback = null;\n};\nexports.unstable_forceFrameRate = function (fps) {\n  0 > fps || 125 < fps\n    ? console.error(\n        \"forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported\"\n      )\n    : (frameInterval = 0 < fps ? Math.floor(1e3 / fps) : 5);\n};\nexports.unstable_getCurrentPriorityLevel = function () {\n  return currentPriorityLevel;\n};\nexports.unstable_next = function (eventHandler) {\n  switch (currentPriorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n      var priorityLevel = 3;\n      break;\n    default:\n      priorityLevel = currentPriorityLevel;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_requestPaint = function () {\n  needsPaint = !0;\n};\nexports.unstable_runWithPriority = function (priorityLevel, eventHandler) {\n  switch (priorityLevel) {\n    case 1:\n    case 2:\n    case 3:\n    case 4:\n    case 5:\n      break;\n    default:\n      priorityLevel = 3;\n  }\n  var previousPriorityLevel = currentPriorityLevel;\n  currentPriorityLevel = priorityLevel;\n  try {\n    return eventHandler();\n  } finally {\n    currentPriorityLevel = previousPriorityLevel;\n  }\n};\nexports.unstable_scheduleCallback = function (\n  priorityLevel,\n  callback,\n  options\n) {\n  var currentTime = exports.unstable_now();\n  \"object\" === typeof options && null !== options\n    ? ((options = options.delay),\n      (options =\n        \"number\" === typeof options && 0 < options\n          ? currentTime + options\n          : currentTime))\n    : (options = currentTime);\n  switch (priorityLevel) {\n    case 1:\n      var timeout = -1;\n      break;\n    case 2:\n      timeout = 250;\n      break;\n    case 5:\n      timeout = 1073741823;\n      break;\n    case 4:\n      timeout = 1e4;\n      break;\n    default:\n      timeout = 5e3;\n  }\n  timeout = options + timeout;\n  priorityLevel = {\n    id: taskIdCounter++,\n    callback: callback,\n    priorityLevel: priorityLevel,\n    startTime: options,\n    expirationTime: timeout,\n    sortIndex: -1\n  };\n  options > currentTime\n    ? ((priorityLevel.sortIndex = options),\n      push(timerQueue, priorityLevel),\n      null === peek(taskQueue) &&\n        priorityLevel === peek(timerQueue) &&\n        (isHostTimeoutScheduled\n          ? (localClearTimeout(taskTimeoutID), (taskTimeoutID = -1))\n          : (isHostTimeoutScheduled = !0),\n        requestHostTimeout(handleTimeout, options - currentTime)))\n    : ((priorityLevel.sortIndex = timeout),\n      push(taskQueue, priorityLevel),\n      isHostCallbackScheduled ||\n        isPerformingWork ||\n        ((isHostCallbackScheduled = !0),\n        isMessageLoopRunning ||\n          ((isMessageLoopRunning = !0), schedulePerformWorkUntilDeadline())));\n  return priorityLevel;\n};\nexports.unstable_shouldYield = shouldYieldToHost;\nexports.unstable_wrapCallback = function (callback) {\n  var parentPriorityLevel = currentPriorityLevel;\n  return function () {\n    var previousPriorityLevel = currentPriorityLevel;\n    currentPriorityLevel = parentPriorityLevel;\n    try {\n      return callback.apply(this, arguments);\n    } finally {\n      currentPriorityLevel = previousPriorityLevel;\n    }\n  };\n};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/scheduler.production.js');\n} else {\n  module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n  MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar ReactNoopUpdateQueue = {\n    isMounted: function () {\n      return !1;\n    },\n    enqueueForceUpdate: function () {},\n    enqueueReplaceState: function () {},\n    enqueueSetState: function () {}\n  },\n  assign = Object.assign,\n  emptyObject = {};\nfunction Component(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nComponent.prototype.isReactComponent = {};\nComponent.prototype.setState = function (partialState, callback) {\n  if (\n    \"object\" !== typeof partialState &&\n    \"function\" !== typeof partialState &&\n    null != partialState\n  )\n    throw Error(\n      \"takes an object of state variables to update or a function which returns an object of state variables.\"\n    );\n  this.updater.enqueueSetState(this, partialState, callback, \"setState\");\n};\nComponent.prototype.forceUpdate = function (callback) {\n  this.updater.enqueueForceUpdate(this, callback, \"forceUpdate\");\n};\nfunction ComponentDummy() {}\nComponentDummy.prototype = Component.prototype;\nfunction PureComponent(props, context, updater) {\n  this.props = props;\n  this.context = context;\n  this.refs = emptyObject;\n  this.updater = updater || ReactNoopUpdateQueue;\n}\nvar pureComponentPrototype = (PureComponent.prototype = new ComponentDummy());\npureComponentPrototype.constructor = PureComponent;\nassign(pureComponentPrototype, Component.prototype);\npureComponentPrototype.isPureReactComponent = !0;\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals = { H: null, A: null, T: null, S: null, V: null },\n  hasOwnProperty = Object.prototype.hasOwnProperty;\nfunction ReactElement(type, key, self, source, owner, props) {\n  self = props.ref;\n  return {\n    $$typeof: REACT_ELEMENT_TYPE,\n    type: type,\n    key: key,\n    ref: void 0 !== self ? self : null,\n    props: props\n  };\n}\nfunction cloneAndReplaceKey(oldElement, newKey) {\n  return ReactElement(\n    oldElement.type,\n    newKey,\n    void 0,\n    void 0,\n    void 0,\n    oldElement.props\n  );\n}\nfunction isValidElement(object) {\n  return (\n    \"object\" === typeof object &&\n    null !== object &&\n    object.$$typeof === REACT_ELEMENT_TYPE\n  );\n}\nfunction escape(key) {\n  var escaperLookup = { \"=\": \"=0\", \":\": \"=2\" };\n  return (\n    \"$\" +\n    key.replace(/[=:]/g, function (match) {\n      return escaperLookup[match];\n    })\n  );\n}\nvar userProvidedKeyEscapeRegex = /\\/+/g;\nfunction getElementKey(element, index) {\n  return \"object\" === typeof element && null !== element && null != element.key\n    ? escape(\"\" + element.key)\n    : index.toString(36);\n}\nfunction noop$1() {}\nfunction resolveThenable(thenable) {\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw thenable.reason;\n    default:\n      switch (\n        (\"string\" === typeof thenable.status\n          ? thenable.then(noop$1, noop$1)\n          : ((thenable.status = \"pending\"),\n            thenable.then(\n              function (fulfilledValue) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"fulfilled\"),\n                  (thenable.value = fulfilledValue));\n              },\n              function (error) {\n                \"pending\" === thenable.status &&\n                  ((thenable.status = \"rejected\"), (thenable.reason = error));\n              }\n            )),\n        thenable.status)\n      ) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw thenable.reason;\n      }\n  }\n  throw thenable;\n}\nfunction mapIntoArray(children, array, escapedPrefix, nameSoFar, callback) {\n  var type = typeof children;\n  if (\"undefined\" === type || \"boolean\" === type) children = null;\n  var invokeCallback = !1;\n  if (null === children) invokeCallback = !0;\n  else\n    switch (type) {\n      case \"bigint\":\n      case \"string\":\n      case \"number\":\n        invokeCallback = !0;\n        break;\n      case \"object\":\n        switch (children.$$typeof) {\n          case REACT_ELEMENT_TYPE:\n          case REACT_PORTAL_TYPE:\n            invokeCallback = !0;\n            break;\n          case REACT_LAZY_TYPE:\n            return (\n              (invokeCallback = children._init),\n              mapIntoArray(\n                invokeCallback(children._payload),\n                array,\n                escapedPrefix,\n                nameSoFar,\n                callback\n              )\n            );\n        }\n    }\n  if (invokeCallback)\n    return (\n      (callback = callback(children)),\n      (invokeCallback =\n        \"\" === nameSoFar ? \".\" + getElementKey(children, 0) : nameSoFar),\n      isArrayImpl(callback)\n        ? ((escapedPrefix = \"\"),\n          null != invokeCallback &&\n            (escapedPrefix =\n              invokeCallback.replace(userProvidedKeyEscapeRegex, \"$&/\") + \"/\"),\n          mapIntoArray(callback, array, escapedPrefix, \"\", function (c) {\n            return c;\n          }))\n        : null != callback &&\n          (isValidElement(callback) &&\n            (callback = cloneAndReplaceKey(\n              callback,\n              escapedPrefix +\n                (null == callback.key ||\n                (children && children.key === callback.key)\n                  ? \"\"\n                  : (\"\" + callback.key).replace(\n                      userProvidedKeyEscapeRegex,\n                      \"$&/\"\n                    ) + \"/\") +\n                invokeCallback\n            )),\n          array.push(callback)),\n      1\n    );\n  invokeCallback = 0;\n  var nextNamePrefix = \"\" === nameSoFar ? \".\" : nameSoFar + \":\";\n  if (isArrayImpl(children))\n    for (var i = 0; i < children.length; i++)\n      (nameSoFar = children[i]),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (((i = getIteratorFn(children)), \"function\" === typeof i))\n    for (\n      children = i.call(children), i = 0;\n      !(nameSoFar = children.next()).done;\n\n    )\n      (nameSoFar = nameSoFar.value),\n        (type = nextNamePrefix + getElementKey(nameSoFar, i++)),\n        (invokeCallback += mapIntoArray(\n          nameSoFar,\n          array,\n          escapedPrefix,\n          type,\n          callback\n        ));\n  else if (\"object\" === type) {\n    if (\"function\" === typeof children.then)\n      return mapIntoArray(\n        resolveThenable(children),\n        array,\n        escapedPrefix,\n        nameSoFar,\n        callback\n      );\n    array = String(children);\n    throw Error(\n      \"Objects are not valid as a React child (found: \" +\n        (\"[object Object]\" === array\n          ? \"object with keys {\" + Object.keys(children).join(\", \") + \"}\"\n          : array) +\n        \"). If you meant to render a collection of children, use an array instead.\"\n    );\n  }\n  return invokeCallback;\n}\nfunction mapChildren(children, func, context) {\n  if (null == children) return children;\n  var result = [],\n    count = 0;\n  mapIntoArray(children, result, \"\", \"\", function (child) {\n    return func.call(context, child, count++);\n  });\n  return result;\n}\nfunction lazyInitializer(payload) {\n  if (-1 === payload._status) {\n    var ctor = payload._result;\n    ctor = ctor();\n    ctor.then(\n      function (moduleObject) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 1), (payload._result = moduleObject);\n      },\n      function (error) {\n        if (0 === payload._status || -1 === payload._status)\n          (payload._status = 2), (payload._result = error);\n      }\n    );\n    -1 === payload._status && ((payload._status = 0), (payload._result = ctor));\n  }\n  if (1 === payload._status) return payload._result.default;\n  throw payload._result;\n}\nvar reportGlobalError =\n  \"function\" === typeof reportError\n    ? reportError\n    : function (error) {\n        if (\n          \"object\" === typeof window &&\n          \"function\" === typeof window.ErrorEvent\n        ) {\n          var event = new window.ErrorEvent(\"error\", {\n            bubbles: !0,\n            cancelable: !0,\n            message:\n              \"object\" === typeof error &&\n              null !== error &&\n              \"string\" === typeof error.message\n                ? String(error.message)\n                : String(error),\n            error: error\n          });\n          if (!window.dispatchEvent(event)) return;\n        } else if (\n          \"object\" === typeof process &&\n          \"function\" === typeof process.emit\n        ) {\n          process.emit(\"uncaughtException\", error);\n          return;\n        }\n        console.error(error);\n      };\nfunction noop() {}\nexports.Children = {\n  map: mapChildren,\n  forEach: function (children, forEachFunc, forEachContext) {\n    mapChildren(\n      children,\n      function () {\n        forEachFunc.apply(this, arguments);\n      },\n      forEachContext\n    );\n  },\n  count: function (children) {\n    var n = 0;\n    mapChildren(children, function () {\n      n++;\n    });\n    return n;\n  },\n  toArray: function (children) {\n    return (\n      mapChildren(children, function (child) {\n        return child;\n      }) || []\n    );\n  },\n  only: function (children) {\n    if (!isValidElement(children))\n      throw Error(\n        \"React.Children.only expected to receive a single React element child.\"\n      );\n    return children;\n  }\n};\nexports.Component = Component;\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.Profiler = REACT_PROFILER_TYPE;\nexports.PureComponent = PureComponent;\nexports.StrictMode = REACT_STRICT_MODE_TYPE;\nexports.Suspense = REACT_SUSPENSE_TYPE;\nexports.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  ReactSharedInternals;\nexports.__COMPILER_RUNTIME = {\n  __proto__: null,\n  c: function (size) {\n    return ReactSharedInternals.H.useMemoCache(size);\n  }\n};\nexports.cache = function (fn) {\n  return function () {\n    return fn.apply(null, arguments);\n  };\n};\nexports.cloneElement = function (element, config, children) {\n  if (null === element || void 0 === element)\n    throw Error(\n      \"The argument must be a React element, but you passed \" + element + \".\"\n    );\n  var props = assign({}, element.props),\n    key = element.key,\n    owner = void 0;\n  if (null != config)\n    for (propName in (void 0 !== config.ref && (owner = void 0),\n    void 0 !== config.key && (key = \"\" + config.key),\n    config))\n      !hasOwnProperty.call(config, propName) ||\n        \"key\" === propName ||\n        \"__self\" === propName ||\n        \"__source\" === propName ||\n        (\"ref\" === propName && void 0 === config.ref) ||\n        (props[propName] = config[propName]);\n  var propName = arguments.length - 2;\n  if (1 === propName) props.children = children;\n  else if (1 < propName) {\n    for (var childArray = Array(propName), i = 0; i < propName; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  return ReactElement(element.type, key, void 0, void 0, owner, props);\n};\nexports.createContext = function (defaultValue) {\n  defaultValue = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    _currentValue: defaultValue,\n    _currentValue2: defaultValue,\n    _threadCount: 0,\n    Provider: null,\n    Consumer: null\n  };\n  defaultValue.Provider = defaultValue;\n  defaultValue.Consumer = {\n    $$typeof: REACT_CONSUMER_TYPE,\n    _context: defaultValue\n  };\n  return defaultValue;\n};\nexports.createElement = function (type, config, children) {\n  var propName,\n    props = {},\n    key = null;\n  if (null != config)\n    for (propName in (void 0 !== config.key && (key = \"\" + config.key), config))\n      hasOwnProperty.call(config, propName) &&\n        \"key\" !== propName &&\n        \"__self\" !== propName &&\n        \"__source\" !== propName &&\n        (props[propName] = config[propName]);\n  var childrenLength = arguments.length - 2;\n  if (1 === childrenLength) props.children = children;\n  else if (1 < childrenLength) {\n    for (var childArray = Array(childrenLength), i = 0; i < childrenLength; i++)\n      childArray[i] = arguments[i + 2];\n    props.children = childArray;\n  }\n  if (type && type.defaultProps)\n    for (propName in ((childrenLength = type.defaultProps), childrenLength))\n      void 0 === props[propName] &&\n        (props[propName] = childrenLength[propName]);\n  return ReactElement(type, key, void 0, void 0, null, props);\n};\nexports.createRef = function () {\n  return { current: null };\n};\nexports.forwardRef = function (render) {\n  return { $$typeof: REACT_FORWARD_REF_TYPE, render: render };\n};\nexports.isValidElement = isValidElement;\nexports.lazy = function (ctor) {\n  return {\n    $$typeof: REACT_LAZY_TYPE,\n    _payload: { _status: -1, _result: ctor },\n    _init: lazyInitializer\n  };\n};\nexports.memo = function (type, compare) {\n  return {\n    $$typeof: REACT_MEMO_TYPE,\n    type: type,\n    compare: void 0 === compare ? null : compare\n  };\n};\nexports.startTransition = function (scope) {\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  try {\n    var returnValue = scope(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    \"object\" === typeof returnValue &&\n      null !== returnValue &&\n      \"function\" === typeof returnValue.then &&\n      returnValue.then(noop, reportGlobalError);\n  } catch (error) {\n    reportGlobalError(error);\n  } finally {\n    ReactSharedInternals.T = prevTransition;\n  }\n};\nexports.unstable_useCacheRefresh = function () {\n  return ReactSharedInternals.H.useCacheRefresh();\n};\nexports.use = function (usable) {\n  return ReactSharedInternals.H.use(usable);\n};\nexports.useActionState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useActionState(action, initialState, permalink);\n};\nexports.useCallback = function (callback, deps) {\n  return ReactSharedInternals.H.useCallback(callback, deps);\n};\nexports.useContext = function (Context) {\n  return ReactSharedInternals.H.useContext(Context);\n};\nexports.useDebugValue = function () {};\nexports.useDeferredValue = function (value, initialValue) {\n  return ReactSharedInternals.H.useDeferredValue(value, initialValue);\n};\nexports.useEffect = function (create, createDeps, update) {\n  var dispatcher = ReactSharedInternals.H;\n  if (\"function\" === typeof update)\n    throw Error(\n      \"useEffect CRUD overload is not enabled in this build of React.\"\n    );\n  return dispatcher.useEffect(create, createDeps);\n};\nexports.useId = function () {\n  return ReactSharedInternals.H.useId();\n};\nexports.useImperativeHandle = function (ref, create, deps) {\n  return ReactSharedInternals.H.useImperativeHandle(ref, create, deps);\n};\nexports.useInsertionEffect = function (create, deps) {\n  return ReactSharedInternals.H.useInsertionEffect(create, deps);\n};\nexports.useLayoutEffect = function (create, deps) {\n  return ReactSharedInternals.H.useLayoutEffect(create, deps);\n};\nexports.useMemo = function (create, deps) {\n  return ReactSharedInternals.H.useMemo(create, deps);\n};\nexports.useOptimistic = function (passthrough, reducer) {\n  return ReactSharedInternals.H.useOptimistic(passthrough, reducer);\n};\nexports.useReducer = function (reducer, initialArg, init) {\n  return ReactSharedInternals.H.useReducer(reducer, initialArg, init);\n};\nexports.useRef = function (initialValue) {\n  return ReactSharedInternals.H.useRef(initialValue);\n};\nexports.useState = function (initialState) {\n  return ReactSharedInternals.H.useState(initialState);\n};\nexports.useSyncExternalStore = function (\n  subscribe,\n  getSnapshot,\n  getServerSnapshot\n) {\n  return ReactSharedInternals.H.useSyncExternalStore(\n    subscribe,\n    getSnapshot,\n    getServerSnapshot\n  );\n};\nexports.useTransition = function () {\n  return ReactSharedInternals.H.useTransition();\n};\nexports.version = \"19.1.0\";\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react.production.js');\n} else {\n  module.exports = require('./cjs/react.development.js');\n}\n","/**\n * @license React\n * react-dom.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar React = require(\"react\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction noop() {}\nvar Internals = {\n    d: {\n      f: noop,\n      r: function () {\n        throw Error(formatProdErrorMessage(522));\n      },\n      D: noop,\n      C: noop,\n      L: noop,\n      m: noop,\n      X: noop,\n      S: noop,\n      M: noop\n    },\n    p: 0,\n    findDOMNode: null\n  },\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\");\nfunction createPortal$1(children, containerInfo, implementation) {\n  var key =\n    3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null;\n  return {\n    $$typeof: REACT_PORTAL_TYPE,\n    key: null == key ? null : \"\" + key,\n    children: children,\n    containerInfo: containerInfo,\n    implementation: implementation\n  };\n}\nvar ReactSharedInternals =\n  React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;\nfunction getCrossOriginStringAs(as, input) {\n  if (\"font\" === as) return \"\";\n  if (\"string\" === typeof input)\n    return \"use-credentials\" === input ? input : \"\";\n}\nexports.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE =\n  Internals;\nexports.createPortal = function (children, container) {\n  var key =\n    2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : null;\n  if (\n    !container ||\n    (1 !== container.nodeType &&\n      9 !== container.nodeType &&\n      11 !== container.nodeType)\n  )\n    throw Error(formatProdErrorMessage(299));\n  return createPortal$1(children, container, null, key);\n};\nexports.flushSync = function (fn) {\n  var previousTransition = ReactSharedInternals.T,\n    previousUpdatePriority = Internals.p;\n  try {\n    if (((ReactSharedInternals.T = null), (Internals.p = 2), fn)) return fn();\n  } finally {\n    (ReactSharedInternals.T = previousTransition),\n      (Internals.p = previousUpdatePriority),\n      Internals.d.f();\n  }\n};\nexports.preconnect = function (href, options) {\n  \"string\" === typeof href &&\n    (options\n      ? ((options = options.crossOrigin),\n        (options =\n          \"string\" === typeof options\n            ? \"use-credentials\" === options\n              ? options\n              : \"\"\n            : void 0))\n      : (options = null),\n    Internals.d.C(href, options));\n};\nexports.prefetchDNS = function (href) {\n  \"string\" === typeof href && Internals.d.D(href);\n};\nexports.preinit = function (href, options) {\n  if (\"string\" === typeof href && options && \"string\" === typeof options.as) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin),\n      integrity =\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      fetchPriority =\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0;\n    \"style\" === as\n      ? Internals.d.S(\n          href,\n          \"string\" === typeof options.precedence ? options.precedence : void 0,\n          {\n            crossOrigin: crossOrigin,\n            integrity: integrity,\n            fetchPriority: fetchPriority\n          }\n        )\n      : \"script\" === as &&\n        Internals.d.X(href, {\n          crossOrigin: crossOrigin,\n          integrity: integrity,\n          fetchPriority: fetchPriority,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n  }\n};\nexports.preinitModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (\"object\" === typeof options && null !== options) {\n      if (null == options.as || \"script\" === options.as) {\n        var crossOrigin = getCrossOriginStringAs(\n          options.as,\n          options.crossOrigin\n        );\n        Internals.d.M(href, {\n          crossOrigin: crossOrigin,\n          integrity:\n            \"string\" === typeof options.integrity ? options.integrity : void 0,\n          nonce: \"string\" === typeof options.nonce ? options.nonce : void 0\n        });\n      }\n    } else null == options && Internals.d.M(href);\n};\nexports.preload = function (href, options) {\n  if (\n    \"string\" === typeof href &&\n    \"object\" === typeof options &&\n    null !== options &&\n    \"string\" === typeof options.as\n  ) {\n    var as = options.as,\n      crossOrigin = getCrossOriginStringAs(as, options.crossOrigin);\n    Internals.d.L(href, as, {\n      crossOrigin: crossOrigin,\n      integrity:\n        \"string\" === typeof options.integrity ? options.integrity : void 0,\n      nonce: \"string\" === typeof options.nonce ? options.nonce : void 0,\n      type: \"string\" === typeof options.type ? options.type : void 0,\n      fetchPriority:\n        \"string\" === typeof options.fetchPriority\n          ? options.fetchPriority\n          : void 0,\n      referrerPolicy:\n        \"string\" === typeof options.referrerPolicy\n          ? options.referrerPolicy\n          : void 0,\n      imageSrcSet:\n        \"string\" === typeof options.imageSrcSet ? options.imageSrcSet : void 0,\n      imageSizes:\n        \"string\" === typeof options.imageSizes ? options.imageSizes : void 0,\n      media: \"string\" === typeof options.media ? options.media : void 0\n    });\n  }\n};\nexports.preloadModule = function (href, options) {\n  if (\"string\" === typeof href)\n    if (options) {\n      var crossOrigin = getCrossOriginStringAs(options.as, options.crossOrigin);\n      Internals.d.m(href, {\n        as:\n          \"string\" === typeof options.as && \"script\" !== options.as\n            ? options.as\n            : void 0,\n        crossOrigin: crossOrigin,\n        integrity:\n          \"string\" === typeof options.integrity ? options.integrity : void 0\n      });\n    } else Internals.d.m(href);\n};\nexports.requestFormReset = function (form) {\n  Internals.d.r(form);\n};\nexports.unstable_batchedUpdates = function (fn, a) {\n  return fn(a);\n};\nexports.useFormState = function (action, initialState, permalink) {\n  return ReactSharedInternals.H.useFormState(action, initialState, permalink);\n};\nexports.useFormStatus = function () {\n  return ReactSharedInternals.H.useHostTransitionStatus();\n};\nexports.version = \"19.1.0\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom.production.js');\n} else {\n  module.exports = require('./cjs/react-dom.development.js');\n}\n","/**\n * @license React\n * react-dom-client.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n\"use strict\";\nvar Scheduler = require(\"scheduler\"),\n  React = require(\"react\"),\n  ReactDOM = require(\"react-dom\");\nfunction formatProdErrorMessage(code) {\n  var url = \"https://react.dev/errors/\" + code;\n  if (1 < arguments.length) {\n    url += \"?args[]=\" + encodeURIComponent(arguments[1]);\n    for (var i = 2; i < arguments.length; i++)\n      url += \"&args[]=\" + encodeURIComponent(arguments[i]);\n  }\n  return (\n    \"Minified React error #\" +\n    code +\n    \"; visit \" +\n    url +\n    \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\"\n  );\n}\nfunction isValidContainer(node) {\n  return !(\n    !node ||\n    (1 !== node.nodeType && 9 !== node.nodeType && 11 !== node.nodeType)\n  );\n}\nfunction getNearestMountedFiber(fiber) {\n  var node = fiber,\n    nearestMounted = fiber;\n  if (fiber.alternate) for (; node.return; ) node = node.return;\n  else {\n    fiber = node;\n    do\n      (node = fiber),\n        0 !== (node.flags & 4098) && (nearestMounted = node.return),\n        (fiber = node.return);\n    while (fiber);\n  }\n  return 3 === node.tag ? nearestMounted : null;\n}\nfunction getSuspenseInstanceFromFiber(fiber) {\n  if (13 === fiber.tag) {\n    var suspenseState = fiber.memoizedState;\n    null === suspenseState &&\n      ((fiber = fiber.alternate),\n      null !== fiber && (suspenseState = fiber.memoizedState));\n    if (null !== suspenseState) return suspenseState.dehydrated;\n  }\n  return null;\n}\nfunction assertIsMounted(fiber) {\n  if (getNearestMountedFiber(fiber) !== fiber)\n    throw Error(formatProdErrorMessage(188));\n}\nfunction findCurrentFiberUsingSlowPath(fiber) {\n  var alternate = fiber.alternate;\n  if (!alternate) {\n    alternate = getNearestMountedFiber(fiber);\n    if (null === alternate) throw Error(formatProdErrorMessage(188));\n    return alternate !== fiber ? null : fiber;\n  }\n  for (var a = fiber, b = alternate; ; ) {\n    var parentA = a.return;\n    if (null === parentA) break;\n    var parentB = parentA.alternate;\n    if (null === parentB) {\n      b = parentA.return;\n      if (null !== b) {\n        a = b;\n        continue;\n      }\n      break;\n    }\n    if (parentA.child === parentB.child) {\n      for (parentB = parentA.child; parentB; ) {\n        if (parentB === a) return assertIsMounted(parentA), fiber;\n        if (parentB === b) return assertIsMounted(parentA), alternate;\n        parentB = parentB.sibling;\n      }\n      throw Error(formatProdErrorMessage(188));\n    }\n    if (a.return !== b.return) (a = parentA), (b = parentB);\n    else {\n      for (var didFindChild = !1, child$0 = parentA.child; child$0; ) {\n        if (child$0 === a) {\n          didFindChild = !0;\n          a = parentA;\n          b = parentB;\n          break;\n        }\n        if (child$0 === b) {\n          didFindChild = !0;\n          b = parentA;\n          a = parentB;\n          break;\n        }\n        child$0 = child$0.sibling;\n      }\n      if (!didFindChild) {\n        for (child$0 = parentB.child; child$0; ) {\n          if (child$0 === a) {\n            didFindChild = !0;\n            a = parentB;\n            b = parentA;\n            break;\n          }\n          if (child$0 === b) {\n            didFindChild = !0;\n            b = parentB;\n            a = parentA;\n            break;\n          }\n          child$0 = child$0.sibling;\n        }\n        if (!didFindChild) throw Error(formatProdErrorMessage(189));\n      }\n    }\n    if (a.alternate !== b) throw Error(formatProdErrorMessage(190));\n  }\n  if (3 !== a.tag) throw Error(formatProdErrorMessage(188));\n  return a.stateNode.current === a ? fiber : alternate;\n}\nfunction findCurrentHostFiberImpl(node) {\n  var tag = node.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return node;\n  for (node = node.child; null !== node; ) {\n    tag = findCurrentHostFiberImpl(node);\n    if (null !== tag) return tag;\n    node = node.sibling;\n  }\n  return null;\n}\nvar assign = Object.assign,\n  REACT_LEGACY_ELEMENT_TYPE = Symbol.for(\"react.element\"),\n  REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n  REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n  REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n  REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n  REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\"),\n  REACT_PROVIDER_TYPE = Symbol.for(\"react.provider\"),\n  REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n  REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n  REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n  REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n  REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n  REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n  REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nSymbol.for(\"react.scope\");\nvar REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\");\nSymbol.for(\"react.legacy_hidden\");\nSymbol.for(\"react.tracing_marker\");\nvar REACT_MEMO_CACHE_SENTINEL = Symbol.for(\"react.memo_cache_sentinel\");\nSymbol.for(\"react.view_transition\");\nvar MAYBE_ITERATOR_SYMBOL = Symbol.iterator;\nfunction getIteratorFn(maybeIterable) {\n  if (null === maybeIterable || \"object\" !== typeof maybeIterable) return null;\n  maybeIterable =\n    (MAYBE_ITERATOR_SYMBOL && maybeIterable[MAYBE_ITERATOR_SYMBOL]) ||\n    maybeIterable[\"@@iterator\"];\n  return \"function\" === typeof maybeIterable ? maybeIterable : null;\n}\nvar REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\");\nfunction getComponentNameFromType(type) {\n  if (null == type) return null;\n  if (\"function\" === typeof type)\n    return type.$$typeof === REACT_CLIENT_REFERENCE\n      ? null\n      : type.displayName || type.name || null;\n  if (\"string\" === typeof type) return type;\n  switch (type) {\n    case REACT_FRAGMENT_TYPE:\n      return \"Fragment\";\n    case REACT_PROFILER_TYPE:\n      return \"Profiler\";\n    case REACT_STRICT_MODE_TYPE:\n      return \"StrictMode\";\n    case REACT_SUSPENSE_TYPE:\n      return \"Suspense\";\n    case REACT_SUSPENSE_LIST_TYPE:\n      return \"SuspenseList\";\n    case REACT_ACTIVITY_TYPE:\n      return \"Activity\";\n  }\n  if (\"object\" === typeof type)\n    switch (type.$$typeof) {\n      case REACT_PORTAL_TYPE:\n        return \"Portal\";\n      case REACT_CONTEXT_TYPE:\n        return (type.displayName || \"Context\") + \".Provider\";\n      case REACT_CONSUMER_TYPE:\n        return (type._context.displayName || \"Context\") + \".Consumer\";\n      case REACT_FORWARD_REF_TYPE:\n        var innerType = type.render;\n        type = type.displayName;\n        type ||\n          ((type = innerType.displayName || innerType.name || \"\"),\n          (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n        return type;\n      case REACT_MEMO_TYPE:\n        return (\n          (innerType = type.displayName || null),\n          null !== innerType\n            ? innerType\n            : getComponentNameFromType(type.type) || \"Memo\"\n        );\n      case REACT_LAZY_TYPE:\n        innerType = type._payload;\n        type = type._init;\n        try {\n          return getComponentNameFromType(type(innerType));\n        } catch (x) {}\n    }\n  return null;\n}\nvar isArrayImpl = Array.isArray,\n  ReactSharedInternals =\n    React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  ReactDOMSharedInternals =\n    ReactDOM.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n  sharedNotPendingObject = {\n    pending: !1,\n    data: null,\n    method: null,\n    action: null\n  },\n  valueStack = [],\n  index = -1;\nfunction createCursor(defaultValue) {\n  return { current: defaultValue };\n}\nfunction pop(cursor) {\n  0 > index ||\n    ((cursor.current = valueStack[index]), (valueStack[index] = null), index--);\n}\nfunction push(cursor, value) {\n  index++;\n  valueStack[index] = cursor.current;\n  cursor.current = value;\n}\nvar contextStackCursor = createCursor(null),\n  contextFiberStackCursor = createCursor(null),\n  rootInstanceStackCursor = createCursor(null),\n  hostTransitionProviderCursor = createCursor(null);\nfunction pushHostContainer(fiber, nextRootInstance) {\n  push(rootInstanceStackCursor, nextRootInstance);\n  push(contextFiberStackCursor, fiber);\n  push(contextStackCursor, null);\n  switch (nextRootInstance.nodeType) {\n    case 9:\n    case 11:\n      fiber = (fiber = nextRootInstance.documentElement)\n        ? (fiber = fiber.namespaceURI)\n          ? getOwnHostContext(fiber)\n          : 0\n        : 0;\n      break;\n    default:\n      if (\n        ((fiber = nextRootInstance.tagName),\n        (nextRootInstance = nextRootInstance.namespaceURI))\n      )\n        (nextRootInstance = getOwnHostContext(nextRootInstance)),\n          (fiber = getChildHostContextProd(nextRootInstance, fiber));\n      else\n        switch (fiber) {\n          case \"svg\":\n            fiber = 1;\n            break;\n          case \"math\":\n            fiber = 2;\n            break;\n          default:\n            fiber = 0;\n        }\n  }\n  pop(contextStackCursor);\n  push(contextStackCursor, fiber);\n}\nfunction popHostContainer() {\n  pop(contextStackCursor);\n  pop(contextFiberStackCursor);\n  pop(rootInstanceStackCursor);\n}\nfunction pushHostContext(fiber) {\n  null !== fiber.memoizedState && push(hostTransitionProviderCursor, fiber);\n  var context = contextStackCursor.current;\n  var JSCompiler_inline_result = getChildHostContextProd(context, fiber.type);\n  context !== JSCompiler_inline_result &&\n    (push(contextFiberStackCursor, fiber),\n    push(contextStackCursor, JSCompiler_inline_result));\n}\nfunction popHostContext(fiber) {\n  contextFiberStackCursor.current === fiber &&\n    (pop(contextStackCursor), pop(contextFiberStackCursor));\n  hostTransitionProviderCursor.current === fiber &&\n    (pop(hostTransitionProviderCursor),\n    (HostTransitionContext._currentValue = sharedNotPendingObject));\n}\nvar hasOwnProperty = Object.prototype.hasOwnProperty,\n  scheduleCallback$3 = Scheduler.unstable_scheduleCallback,\n  cancelCallback$1 = Scheduler.unstable_cancelCallback,\n  shouldYield = Scheduler.unstable_shouldYield,\n  requestPaint = Scheduler.unstable_requestPaint,\n  now = Scheduler.unstable_now,\n  getCurrentPriorityLevel = Scheduler.unstable_getCurrentPriorityLevel,\n  ImmediatePriority = Scheduler.unstable_ImmediatePriority,\n  UserBlockingPriority = Scheduler.unstable_UserBlockingPriority,\n  NormalPriority$1 = Scheduler.unstable_NormalPriority,\n  LowPriority = Scheduler.unstable_LowPriority,\n  IdlePriority = Scheduler.unstable_IdlePriority,\n  log$1 = Scheduler.log,\n  unstable_setDisableYieldValue = Scheduler.unstable_setDisableYieldValue,\n  rendererID = null,\n  injectedHook = null;\nfunction setIsStrictModeForDevtools(newIsStrictMode) {\n  \"function\" === typeof log$1 && unstable_setDisableYieldValue(newIsStrictMode);\n  if (injectedHook && \"function\" === typeof injectedHook.setStrictMode)\n    try {\n      injectedHook.setStrictMode(rendererID, newIsStrictMode);\n    } catch (err) {}\n}\nvar clz32 = Math.clz32 ? Math.clz32 : clz32Fallback,\n  log = Math.log,\n  LN2 = Math.LN2;\nfunction clz32Fallback(x) {\n  x >>>= 0;\n  return 0 === x ? 32 : (31 - ((log(x) / LN2) | 0)) | 0;\n}\nvar nextTransitionLane = 256,\n  nextRetryLane = 4194304;\nfunction getHighestPriorityLanes(lanes) {\n  var pendingSyncLanes = lanes & 42;\n  if (0 !== pendingSyncLanes) return pendingSyncLanes;\n  switch (lanes & -lanes) {\n    case 1:\n      return 1;\n    case 2:\n      return 2;\n    case 4:\n      return 4;\n    case 8:\n      return 8;\n    case 16:\n      return 16;\n    case 32:\n      return 32;\n    case 64:\n      return 64;\n    case 128:\n      return 128;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return lanes & 4194048;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return lanes & 62914560;\n    case 67108864:\n      return 67108864;\n    case 134217728:\n      return 134217728;\n    case 268435456:\n      return 268435456;\n    case 536870912:\n      return 536870912;\n    case 1073741824:\n      return 0;\n    default:\n      return lanes;\n  }\n}\nfunction getNextLanes(root, wipLanes, rootHasPendingCommit) {\n  var pendingLanes = root.pendingLanes;\n  if (0 === pendingLanes) return 0;\n  var nextLanes = 0,\n    suspendedLanes = root.suspendedLanes,\n    pingedLanes = root.pingedLanes;\n  root = root.warmLanes;\n  var nonIdlePendingLanes = pendingLanes & 134217727;\n  0 !== nonIdlePendingLanes\n    ? ((pendingLanes = nonIdlePendingLanes & ~suspendedLanes),\n      0 !== pendingLanes\n        ? (nextLanes = getHighestPriorityLanes(pendingLanes))\n        : ((pingedLanes &= nonIdlePendingLanes),\n          0 !== pingedLanes\n            ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n            : rootHasPendingCommit ||\n              ((rootHasPendingCommit = nonIdlePendingLanes & ~root),\n              0 !== rootHasPendingCommit &&\n                (nextLanes = getHighestPriorityLanes(rootHasPendingCommit)))))\n    : ((nonIdlePendingLanes = pendingLanes & ~suspendedLanes),\n      0 !== nonIdlePendingLanes\n        ? (nextLanes = getHighestPriorityLanes(nonIdlePendingLanes))\n        : 0 !== pingedLanes\n          ? (nextLanes = getHighestPriorityLanes(pingedLanes))\n          : rootHasPendingCommit ||\n            ((rootHasPendingCommit = pendingLanes & ~root),\n            0 !== rootHasPendingCommit &&\n              (nextLanes = getHighestPriorityLanes(rootHasPendingCommit))));\n  return 0 === nextLanes\n    ? 0\n    : 0 !== wipLanes &&\n        wipLanes !== nextLanes &&\n        0 === (wipLanes & suspendedLanes) &&\n        ((suspendedLanes = nextLanes & -nextLanes),\n        (rootHasPendingCommit = wipLanes & -wipLanes),\n        suspendedLanes >= rootHasPendingCommit ||\n          (32 === suspendedLanes && 0 !== (rootHasPendingCommit & 4194048)))\n      ? wipLanes\n      : nextLanes;\n}\nfunction checkIfRootIsPrerendering(root, renderLanes) {\n  return (\n    0 ===\n    (root.pendingLanes &\n      ~(root.suspendedLanes & ~root.pingedLanes) &\n      renderLanes)\n  );\n}\nfunction computeExpirationTime(lane, currentTime) {\n  switch (lane) {\n    case 1:\n    case 2:\n    case 4:\n    case 8:\n    case 64:\n      return currentTime + 250;\n    case 16:\n    case 32:\n    case 128:\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n      return currentTime + 5e3;\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      return -1;\n    case 67108864:\n    case 134217728:\n    case 268435456:\n    case 536870912:\n    case 1073741824:\n      return -1;\n    default:\n      return -1;\n  }\n}\nfunction claimNextTransitionLane() {\n  var lane = nextTransitionLane;\n  nextTransitionLane <<= 1;\n  0 === (nextTransitionLane & 4194048) && (nextTransitionLane = 256);\n  return lane;\n}\nfunction claimNextRetryLane() {\n  var lane = nextRetryLane;\n  nextRetryLane <<= 1;\n  0 === (nextRetryLane & 62914560) && (nextRetryLane = 4194304);\n  return lane;\n}\nfunction createLaneMap(initial) {\n  for (var laneMap = [], i = 0; 31 > i; i++) laneMap.push(initial);\n  return laneMap;\n}\nfunction markRootUpdated$1(root, updateLane) {\n  root.pendingLanes |= updateLane;\n  268435456 !== updateLane &&\n    ((root.suspendedLanes = 0), (root.pingedLanes = 0), (root.warmLanes = 0));\n}\nfunction markRootFinished(\n  root,\n  finishedLanes,\n  remainingLanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  var previouslyPendingLanes = root.pendingLanes;\n  root.pendingLanes = remainingLanes;\n  root.suspendedLanes = 0;\n  root.pingedLanes = 0;\n  root.warmLanes = 0;\n  root.expiredLanes &= remainingLanes;\n  root.entangledLanes &= remainingLanes;\n  root.errorRecoveryDisabledLanes &= remainingLanes;\n  root.shellSuspendCounter = 0;\n  var entanglements = root.entanglements,\n    expirationTimes = root.expirationTimes,\n    hiddenUpdates = root.hiddenUpdates;\n  for (\n    remainingLanes = previouslyPendingLanes & ~remainingLanes;\n    0 < remainingLanes;\n\n  ) {\n    var index$5 = 31 - clz32(remainingLanes),\n      lane = 1 << index$5;\n    entanglements[index$5] = 0;\n    expirationTimes[index$5] = -1;\n    var hiddenUpdatesForLane = hiddenUpdates[index$5];\n    if (null !== hiddenUpdatesForLane)\n      for (\n        hiddenUpdates[index$5] = null, index$5 = 0;\n        index$5 < hiddenUpdatesForLane.length;\n        index$5++\n      ) {\n        var update = hiddenUpdatesForLane[index$5];\n        null !== update && (update.lane &= -536870913);\n      }\n    remainingLanes &= ~lane;\n  }\n  0 !== spawnedLane && markSpawnedDeferredLane(root, spawnedLane, 0);\n  0 !== suspendedRetryLanes &&\n    0 === updatedLanes &&\n    0 !== root.tag &&\n    (root.suspendedLanes |=\n      suspendedRetryLanes & ~(previouslyPendingLanes & ~finishedLanes));\n}\nfunction markSpawnedDeferredLane(root, spawnedLane, entangledLanes) {\n  root.pendingLanes |= spawnedLane;\n  root.suspendedLanes &= ~spawnedLane;\n  var spawnedLaneIndex = 31 - clz32(spawnedLane);\n  root.entangledLanes |= spawnedLane;\n  root.entanglements[spawnedLaneIndex] =\n    root.entanglements[spawnedLaneIndex] |\n    1073741824 |\n    (entangledLanes & 4194090);\n}\nfunction markRootEntangled(root, entangledLanes) {\n  var rootEntangledLanes = (root.entangledLanes |= entangledLanes);\n  for (root = root.entanglements; rootEntangledLanes; ) {\n    var index$6 = 31 - clz32(rootEntangledLanes),\n      lane = 1 << index$6;\n    (lane & entangledLanes) | (root[index$6] & entangledLanes) &&\n      (root[index$6] |= entangledLanes);\n    rootEntangledLanes &= ~lane;\n  }\n}\nfunction getBumpedLaneForHydrationByLane(lane) {\n  switch (lane) {\n    case 2:\n      lane = 1;\n      break;\n    case 8:\n      lane = 4;\n      break;\n    case 32:\n      lane = 16;\n      break;\n    case 256:\n    case 512:\n    case 1024:\n    case 2048:\n    case 4096:\n    case 8192:\n    case 16384:\n    case 32768:\n    case 65536:\n    case 131072:\n    case 262144:\n    case 524288:\n    case 1048576:\n    case 2097152:\n    case 4194304:\n    case 8388608:\n    case 16777216:\n    case 33554432:\n      lane = 128;\n      break;\n    case 268435456:\n      lane = 134217728;\n      break;\n    default:\n      lane = 0;\n  }\n  return lane;\n}\nfunction lanesToEventPriority(lanes) {\n  lanes &= -lanes;\n  return 2 < lanes\n    ? 8 < lanes\n      ? 0 !== (lanes & 134217727)\n        ? 32\n        : 268435456\n      : 8\n    : 2;\n}\nfunction resolveUpdatePriority() {\n  var updatePriority = ReactDOMSharedInternals.p;\n  if (0 !== updatePriority) return updatePriority;\n  updatePriority = window.event;\n  return void 0 === updatePriority ? 32 : getEventPriority(updatePriority.type);\n}\nfunction runWithPriority(priority, fn) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    return (ReactDOMSharedInternals.p = priority), fn();\n  } finally {\n    ReactDOMSharedInternals.p = previousPriority;\n  }\n}\nvar randomKey = Math.random().toString(36).slice(2),\n  internalInstanceKey = \"__reactFiber$\" + randomKey,\n  internalPropsKey = \"__reactProps$\" + randomKey,\n  internalContainerInstanceKey = \"__reactContainer$\" + randomKey,\n  internalEventHandlersKey = \"__reactEvents$\" + randomKey,\n  internalEventHandlerListenersKey = \"__reactListeners$\" + randomKey,\n  internalEventHandlesSetKey = \"__reactHandles$\" + randomKey,\n  internalRootNodeResourcesKey = \"__reactResources$\" + randomKey,\n  internalHoistableMarker = \"__reactMarker$\" + randomKey;\nfunction detachDeletedInstance(node) {\n  delete node[internalInstanceKey];\n  delete node[internalPropsKey];\n  delete node[internalEventHandlersKey];\n  delete node[internalEventHandlerListenersKey];\n  delete node[internalEventHandlesSetKey];\n}\nfunction getClosestInstanceFromNode(targetNode) {\n  var targetInst = targetNode[internalInstanceKey];\n  if (targetInst) return targetInst;\n  for (var parentNode = targetNode.parentNode; parentNode; ) {\n    if (\n      (targetInst =\n        parentNode[internalContainerInstanceKey] ||\n        parentNode[internalInstanceKey])\n    ) {\n      parentNode = targetInst.alternate;\n      if (\n        null !== targetInst.child ||\n        (null !== parentNode && null !== parentNode.child)\n      )\n        for (\n          targetNode = getParentSuspenseInstance(targetNode);\n          null !== targetNode;\n\n        ) {\n          if ((parentNode = targetNode[internalInstanceKey])) return parentNode;\n          targetNode = getParentSuspenseInstance(targetNode);\n        }\n      return targetInst;\n    }\n    targetNode = parentNode;\n    parentNode = targetNode.parentNode;\n  }\n  return null;\n}\nfunction getInstanceFromNode(node) {\n  if (\n    (node = node[internalInstanceKey] || node[internalContainerInstanceKey])\n  ) {\n    var tag = node.tag;\n    if (\n      5 === tag ||\n      6 === tag ||\n      13 === tag ||\n      26 === tag ||\n      27 === tag ||\n      3 === tag\n    )\n      return node;\n  }\n  return null;\n}\nfunction getNodeFromInstance(inst) {\n  var tag = inst.tag;\n  if (5 === tag || 26 === tag || 27 === tag || 6 === tag) return inst.stateNode;\n  throw Error(formatProdErrorMessage(33));\n}\nfunction getResourcesFromRoot(root) {\n  var resources = root[internalRootNodeResourcesKey];\n  resources ||\n    (resources = root[internalRootNodeResourcesKey] =\n      { hoistableStyles: new Map(), hoistableScripts: new Map() });\n  return resources;\n}\nfunction markNodeAsHoistable(node) {\n  node[internalHoistableMarker] = !0;\n}\nvar allNativeEvents = new Set(),\n  registrationNameDependencies = {};\nfunction registerTwoPhaseEvent(registrationName, dependencies) {\n  registerDirectEvent(registrationName, dependencies);\n  registerDirectEvent(registrationName + \"Capture\", dependencies);\n}\nfunction registerDirectEvent(registrationName, dependencies) {\n  registrationNameDependencies[registrationName] = dependencies;\n  for (\n    registrationName = 0;\n    registrationName < dependencies.length;\n    registrationName++\n  )\n    allNativeEvents.add(dependencies[registrationName]);\n}\nvar VALID_ATTRIBUTE_NAME_REGEX = RegExp(\n    \"^[:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD][:A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040]*$\"\n  ),\n  illegalAttributeNameCache = {},\n  validatedAttributeNameCache = {};\nfunction isAttributeNameSafe(attributeName) {\n  if (hasOwnProperty.call(validatedAttributeNameCache, attributeName))\n    return !0;\n  if (hasOwnProperty.call(illegalAttributeNameCache, attributeName)) return !1;\n  if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName))\n    return (validatedAttributeNameCache[attributeName] = !0);\n  illegalAttributeNameCache[attributeName] = !0;\n  return !1;\n}\nfunction setValueForAttribute(node, name, value) {\n  if (isAttributeNameSafe(name))\n    if (null === value) node.removeAttribute(name);\n    else {\n      switch (typeof value) {\n        case \"undefined\":\n        case \"function\":\n        case \"symbol\":\n          node.removeAttribute(name);\n          return;\n        case \"boolean\":\n          var prefix$8 = name.toLowerCase().slice(0, 5);\n          if (\"data-\" !== prefix$8 && \"aria-\" !== prefix$8) {\n            node.removeAttribute(name);\n            return;\n          }\n      }\n      node.setAttribute(name, \"\" + value);\n    }\n}\nfunction setValueForKnownAttribute(node, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttribute(name, \"\" + value);\n  }\n}\nfunction setValueForNamespacedAttribute(node, namespace, name, value) {\n  if (null === value) node.removeAttribute(name);\n  else {\n    switch (typeof value) {\n      case \"undefined\":\n      case \"function\":\n      case \"symbol\":\n      case \"boolean\":\n        node.removeAttribute(name);\n        return;\n    }\n    node.setAttributeNS(namespace, name, \"\" + value);\n  }\n}\nvar prefix, suffix;\nfunction describeBuiltInComponentFrame(name) {\n  if (void 0 === prefix)\n    try {\n      throw Error();\n    } catch (x) {\n      var match = x.stack.trim().match(/\\n( *(at )?)/);\n      prefix = (match && match[1]) || \"\";\n      suffix =\n        -1 < x.stack.indexOf(\"\\n    at\")\n          ? \" (<anonymous>)\"\n          : -1 < x.stack.indexOf(\"@\")\n            ? \"@unknown:0:0\"\n            : \"\";\n    }\n  return \"\\n\" + prefix + name + suffix;\n}\nvar reentry = !1;\nfunction describeNativeComponentFrame(fn, construct) {\n  if (!fn || reentry) return \"\";\n  reentry = !0;\n  var previousPrepareStackTrace = Error.prepareStackTrace;\n  Error.prepareStackTrace = void 0;\n  try {\n    var RunInRootFrame = {\n      DetermineComponentFrameRoot: function () {\n        try {\n          if (construct) {\n            var Fake = function () {\n              throw Error();\n            };\n            Object.defineProperty(Fake.prototype, \"props\", {\n              set: function () {\n                throw Error();\n              }\n            });\n            if (\"object\" === typeof Reflect && Reflect.construct) {\n              try {\n                Reflect.construct(Fake, []);\n              } catch (x) {\n                var control = x;\n              }\n              Reflect.construct(fn, [], Fake);\n            } else {\n              try {\n                Fake.call();\n              } catch (x$9) {\n                control = x$9;\n              }\n              fn.call(Fake.prototype);\n            }\n          } else {\n            try {\n              throw Error();\n            } catch (x$10) {\n              control = x$10;\n            }\n            (Fake = fn()) &&\n              \"function\" === typeof Fake.catch &&\n              Fake.catch(function () {});\n          }\n        } catch (sample) {\n          if (sample && control && \"string\" === typeof sample.stack)\n            return [sample.stack, control.stack];\n        }\n        return [null, null];\n      }\n    };\n    RunInRootFrame.DetermineComponentFrameRoot.displayName =\n      \"DetermineComponentFrameRoot\";\n    var namePropDescriptor = Object.getOwnPropertyDescriptor(\n      RunInRootFrame.DetermineComponentFrameRoot,\n      \"name\"\n    );\n    namePropDescriptor &&\n      namePropDescriptor.configurable &&\n      Object.defineProperty(\n        RunInRootFrame.DetermineComponentFrameRoot,\n        \"name\",\n        { value: \"DetermineComponentFrameRoot\" }\n      );\n    var _RunInRootFrame$Deter = RunInRootFrame.DetermineComponentFrameRoot(),\n      sampleStack = _RunInRootFrame$Deter[0],\n      controlStack = _RunInRootFrame$Deter[1];\n    if (sampleStack && controlStack) {\n      var sampleLines = sampleStack.split(\"\\n\"),\n        controlLines = controlStack.split(\"\\n\");\n      for (\n        namePropDescriptor = RunInRootFrame = 0;\n        RunInRootFrame < sampleLines.length &&\n        !sampleLines[RunInRootFrame].includes(\"DetermineComponentFrameRoot\");\n\n      )\n        RunInRootFrame++;\n      for (\n        ;\n        namePropDescriptor < controlLines.length &&\n        !controlLines[namePropDescriptor].includes(\n          \"DetermineComponentFrameRoot\"\n        );\n\n      )\n        namePropDescriptor++;\n      if (\n        RunInRootFrame === sampleLines.length ||\n        namePropDescriptor === controlLines.length\n      )\n        for (\n          RunInRootFrame = sampleLines.length - 1,\n            namePropDescriptor = controlLines.length - 1;\n          1 <= RunInRootFrame &&\n          0 <= namePropDescriptor &&\n          sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor];\n\n        )\n          namePropDescriptor--;\n      for (\n        ;\n        1 <= RunInRootFrame && 0 <= namePropDescriptor;\n        RunInRootFrame--, namePropDescriptor--\n      )\n        if (sampleLines[RunInRootFrame] !== controlLines[namePropDescriptor]) {\n          if (1 !== RunInRootFrame || 1 !== namePropDescriptor) {\n            do\n              if (\n                (RunInRootFrame--,\n                namePropDescriptor--,\n                0 > namePropDescriptor ||\n                  sampleLines[RunInRootFrame] !==\n                    controlLines[namePropDescriptor])\n              ) {\n                var frame =\n                  \"\\n\" +\n                  sampleLines[RunInRootFrame].replace(\" at new \", \" at \");\n                fn.displayName &&\n                  frame.includes(\"<anonymous>\") &&\n                  (frame = frame.replace(\"<anonymous>\", fn.displayName));\n                return frame;\n              }\n            while (1 <= RunInRootFrame && 0 <= namePropDescriptor);\n          }\n          break;\n        }\n    }\n  } finally {\n    (reentry = !1), (Error.prepareStackTrace = previousPrepareStackTrace);\n  }\n  return (previousPrepareStackTrace = fn ? fn.displayName || fn.name : \"\")\n    ? describeBuiltInComponentFrame(previousPrepareStackTrace)\n    : \"\";\n}\nfunction describeFiber(fiber) {\n  switch (fiber.tag) {\n    case 26:\n    case 27:\n    case 5:\n      return describeBuiltInComponentFrame(fiber.type);\n    case 16:\n      return describeBuiltInComponentFrame(\"Lazy\");\n    case 13:\n      return describeBuiltInComponentFrame(\"Suspense\");\n    case 19:\n      return describeBuiltInComponentFrame(\"SuspenseList\");\n    case 0:\n    case 15:\n      return describeNativeComponentFrame(fiber.type, !1);\n    case 11:\n      return describeNativeComponentFrame(fiber.type.render, !1);\n    case 1:\n      return describeNativeComponentFrame(fiber.type, !0);\n    case 31:\n      return describeBuiltInComponentFrame(\"Activity\");\n    default:\n      return \"\";\n  }\n}\nfunction getStackByFiberInDevAndProd(workInProgress) {\n  try {\n    var info = \"\";\n    do\n      (info += describeFiber(workInProgress)),\n        (workInProgress = workInProgress.return);\n    while (workInProgress);\n    return info;\n  } catch (x) {\n    return \"\\nError generating stack: \" + x.message + \"\\n\" + x.stack;\n  }\n}\nfunction getToStringValue(value) {\n  switch (typeof value) {\n    case \"bigint\":\n    case \"boolean\":\n    case \"number\":\n    case \"string\":\n    case \"undefined\":\n      return value;\n    case \"object\":\n      return value;\n    default:\n      return \"\";\n  }\n}\nfunction isCheckable(elem) {\n  var type = elem.type;\n  return (\n    (elem = elem.nodeName) &&\n    \"input\" === elem.toLowerCase() &&\n    (\"checkbox\" === type || \"radio\" === type)\n  );\n}\nfunction trackValueOnNode(node) {\n  var valueField = isCheckable(node) ? \"checked\" : \"value\",\n    descriptor = Object.getOwnPropertyDescriptor(\n      node.constructor.prototype,\n      valueField\n    ),\n    currentValue = \"\" + node[valueField];\n  if (\n    !node.hasOwnProperty(valueField) &&\n    \"undefined\" !== typeof descriptor &&\n    \"function\" === typeof descriptor.get &&\n    \"function\" === typeof descriptor.set\n  ) {\n    var get = descriptor.get,\n      set = descriptor.set;\n    Object.defineProperty(node, valueField, {\n      configurable: !0,\n      get: function () {\n        return get.call(this);\n      },\n      set: function (value) {\n        currentValue = \"\" + value;\n        set.call(this, value);\n      }\n    });\n    Object.defineProperty(node, valueField, {\n      enumerable: descriptor.enumerable\n    });\n    return {\n      getValue: function () {\n        return currentValue;\n      },\n      setValue: function (value) {\n        currentValue = \"\" + value;\n      },\n      stopTracking: function () {\n        node._valueTracker = null;\n        delete node[valueField];\n      }\n    };\n  }\n}\nfunction track(node) {\n  node._valueTracker || (node._valueTracker = trackValueOnNode(node));\n}\nfunction updateValueIfChanged(node) {\n  if (!node) return !1;\n  var tracker = node._valueTracker;\n  if (!tracker) return !0;\n  var lastValue = tracker.getValue();\n  var value = \"\";\n  node &&\n    (value = isCheckable(node)\n      ? node.checked\n        ? \"true\"\n        : \"false\"\n      : node.value);\n  node = value;\n  return node !== lastValue ? (tracker.setValue(node), !0) : !1;\n}\nfunction getActiveElement(doc) {\n  doc = doc || (\"undefined\" !== typeof document ? document : void 0);\n  if (\"undefined\" === typeof doc) return null;\n  try {\n    return doc.activeElement || doc.body;\n  } catch (e) {\n    return doc.body;\n  }\n}\nvar escapeSelectorAttributeValueInsideDoubleQuotesRegex = /[\\n\"\\\\]/g;\nfunction escapeSelectorAttributeValueInsideDoubleQuotes(value) {\n  return value.replace(\n    escapeSelectorAttributeValueInsideDoubleQuotesRegex,\n    function (ch) {\n      return \"\\\\\" + ch.charCodeAt(0).toString(16) + \" \";\n    }\n  );\n}\nfunction updateInput(\n  element,\n  value,\n  defaultValue,\n  lastDefaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name\n) {\n  element.name = \"\";\n  null != type &&\n  \"function\" !== typeof type &&\n  \"symbol\" !== typeof type &&\n  \"boolean\" !== typeof type\n    ? (element.type = type)\n    : element.removeAttribute(\"type\");\n  if (null != value)\n    if (\"number\" === type) {\n      if ((0 === value && \"\" === element.value) || element.value != value)\n        element.value = \"\" + getToStringValue(value);\n    } else\n      element.value !== \"\" + getToStringValue(value) &&\n        (element.value = \"\" + getToStringValue(value));\n  else\n    (\"submit\" !== type && \"reset\" !== type) || element.removeAttribute(\"value\");\n  null != value\n    ? setDefaultValue(element, type, getToStringValue(value))\n    : null != defaultValue\n      ? setDefaultValue(element, type, getToStringValue(defaultValue))\n      : null != lastDefaultValue && element.removeAttribute(\"value\");\n  null == checked &&\n    null != defaultChecked &&\n    (element.defaultChecked = !!defaultChecked);\n  null != checked &&\n    (element.checked =\n      checked && \"function\" !== typeof checked && \"symbol\" !== typeof checked);\n  null != name &&\n  \"function\" !== typeof name &&\n  \"symbol\" !== typeof name &&\n  \"boolean\" !== typeof name\n    ? (element.name = \"\" + getToStringValue(name))\n    : element.removeAttribute(\"name\");\n}\nfunction initInput(\n  element,\n  value,\n  defaultValue,\n  checked,\n  defaultChecked,\n  type,\n  name,\n  isHydrating\n) {\n  null != type &&\n    \"function\" !== typeof type &&\n    \"symbol\" !== typeof type &&\n    \"boolean\" !== typeof type &&\n    (element.type = type);\n  if (null != value || null != defaultValue) {\n    if (\n      !(\n        (\"submit\" !== type && \"reset\" !== type) ||\n        (void 0 !== value && null !== value)\n      )\n    )\n      return;\n    defaultValue =\n      null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n    value = null != value ? \"\" + getToStringValue(value) : defaultValue;\n    isHydrating || value === element.value || (element.value = value);\n    element.defaultValue = value;\n  }\n  checked = null != checked ? checked : defaultChecked;\n  checked =\n    \"function\" !== typeof checked && \"symbol\" !== typeof checked && !!checked;\n  element.checked = isHydrating ? element.checked : !!checked;\n  element.defaultChecked = !!checked;\n  null != name &&\n    \"function\" !== typeof name &&\n    \"symbol\" !== typeof name &&\n    \"boolean\" !== typeof name &&\n    (element.name = name);\n}\nfunction setDefaultValue(node, type, value) {\n  (\"number\" === type && getActiveElement(node.ownerDocument) === node) ||\n    node.defaultValue === \"\" + value ||\n    (node.defaultValue = \"\" + value);\n}\nfunction updateOptions(node, multiple, propValue, setDefaultSelected) {\n  node = node.options;\n  if (multiple) {\n    multiple = {};\n    for (var i = 0; i < propValue.length; i++)\n      multiple[\"$\" + propValue[i]] = !0;\n    for (propValue = 0; propValue < node.length; propValue++)\n      (i = multiple.hasOwnProperty(\"$\" + node[propValue].value)),\n        node[propValue].selected !== i && (node[propValue].selected = i),\n        i && setDefaultSelected && (node[propValue].defaultSelected = !0);\n  } else {\n    propValue = \"\" + getToStringValue(propValue);\n    multiple = null;\n    for (i = 0; i < node.length; i++) {\n      if (node[i].value === propValue) {\n        node[i].selected = !0;\n        setDefaultSelected && (node[i].defaultSelected = !0);\n        return;\n      }\n      null !== multiple || node[i].disabled || (multiple = node[i]);\n    }\n    null !== multiple && (multiple.selected = !0);\n  }\n}\nfunction updateTextarea(element, value, defaultValue) {\n  if (\n    null != value &&\n    ((value = \"\" + getToStringValue(value)),\n    value !== element.value && (element.value = value),\n    null == defaultValue)\n  ) {\n    element.defaultValue !== value && (element.defaultValue = value);\n    return;\n  }\n  element.defaultValue =\n    null != defaultValue ? \"\" + getToStringValue(defaultValue) : \"\";\n}\nfunction initTextarea(element, value, defaultValue, children) {\n  if (null == value) {\n    if (null != children) {\n      if (null != defaultValue) throw Error(formatProdErrorMessage(92));\n      if (isArrayImpl(children)) {\n        if (1 < children.length) throw Error(formatProdErrorMessage(93));\n        children = children[0];\n      }\n      defaultValue = children;\n    }\n    null == defaultValue && (defaultValue = \"\");\n    value = defaultValue;\n  }\n  defaultValue = getToStringValue(value);\n  element.defaultValue = defaultValue;\n  children = element.textContent;\n  children === defaultValue &&\n    \"\" !== children &&\n    null !== children &&\n    (element.value = children);\n}\nfunction setTextContent(node, text) {\n  if (text) {\n    var firstChild = node.firstChild;\n    if (\n      firstChild &&\n      firstChild === node.lastChild &&\n      3 === firstChild.nodeType\n    ) {\n      firstChild.nodeValue = text;\n      return;\n    }\n  }\n  node.textContent = text;\n}\nvar unitlessNumbers = new Set(\n  \"animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp\".split(\n    \" \"\n  )\n);\nfunction setValueForStyle(style, styleName, value) {\n  var isCustomProperty = 0 === styleName.indexOf(\"--\");\n  null == value || \"boolean\" === typeof value || \"\" === value\n    ? isCustomProperty\n      ? style.setProperty(styleName, \"\")\n      : \"float\" === styleName\n        ? (style.cssFloat = \"\")\n        : (style[styleName] = \"\")\n    : isCustomProperty\n      ? style.setProperty(styleName, value)\n      : \"number\" !== typeof value ||\n          0 === value ||\n          unitlessNumbers.has(styleName)\n        ? \"float\" === styleName\n          ? (style.cssFloat = value)\n          : (style[styleName] = (\"\" + value).trim())\n        : (style[styleName] = value + \"px\");\n}\nfunction setValueForStyles(node, styles, prevStyles) {\n  if (null != styles && \"object\" !== typeof styles)\n    throw Error(formatProdErrorMessage(62));\n  node = node.style;\n  if (null != prevStyles) {\n    for (var styleName in prevStyles)\n      !prevStyles.hasOwnProperty(styleName) ||\n        (null != styles && styles.hasOwnProperty(styleName)) ||\n        (0 === styleName.indexOf(\"--\")\n          ? node.setProperty(styleName, \"\")\n          : \"float\" === styleName\n            ? (node.cssFloat = \"\")\n            : (node[styleName] = \"\"));\n    for (var styleName$16 in styles)\n      (styleName = styles[styleName$16]),\n        styles.hasOwnProperty(styleName$16) &&\n          prevStyles[styleName$16] !== styleName &&\n          setValueForStyle(node, styleName$16, styleName);\n  } else\n    for (var styleName$17 in styles)\n      styles.hasOwnProperty(styleName$17) &&\n        setValueForStyle(node, styleName$17, styles[styleName$17]);\n}\nfunction isCustomElement(tagName) {\n  if (-1 === tagName.indexOf(\"-\")) return !1;\n  switch (tagName) {\n    case \"annotation-xml\":\n    case \"color-profile\":\n    case \"font-face\":\n    case \"font-face-src\":\n    case \"font-face-uri\":\n    case \"font-face-format\":\n    case \"font-face-name\":\n    case \"missing-glyph\":\n      return !1;\n    default:\n      return !0;\n  }\n}\nvar aliases = new Map([\n    [\"acceptCharset\", \"accept-charset\"],\n    [\"htmlFor\", \"for\"],\n    [\"httpEquiv\", \"http-equiv\"],\n    [\"crossOrigin\", \"crossorigin\"],\n    [\"accentHeight\", \"accent-height\"],\n    [\"alignmentBaseline\", \"alignment-baseline\"],\n    [\"arabicForm\", \"arabic-form\"],\n    [\"baselineShift\", \"baseline-shift\"],\n    [\"capHeight\", \"cap-height\"],\n    [\"clipPath\", \"clip-path\"],\n    [\"clipRule\", \"clip-rule\"],\n    [\"colorInterpolation\", \"color-interpolation\"],\n    [\"colorInterpolationFilters\", \"color-interpolation-filters\"],\n    [\"colorProfile\", \"color-profile\"],\n    [\"colorRendering\", \"color-rendering\"],\n    [\"dominantBaseline\", \"dominant-baseline\"],\n    [\"enableBackground\", \"enable-background\"],\n    [\"fillOpacity\", \"fill-opacity\"],\n    [\"fillRule\", \"fill-rule\"],\n    [\"floodColor\", \"flood-color\"],\n    [\"floodOpacity\", \"flood-opacity\"],\n    [\"fontFamily\", \"font-family\"],\n    [\"fontSize\", \"font-size\"],\n    [\"fontSizeAdjust\", \"font-size-adjust\"],\n    [\"fontStretch\", \"font-stretch\"],\n    [\"fontStyle\", \"font-style\"],\n    [\"fontVariant\", \"font-variant\"],\n    [\"fontWeight\", \"font-weight\"],\n    [\"glyphName\", \"glyph-name\"],\n    [\"glyphOrientationHorizontal\", \"glyph-orientation-horizontal\"],\n    [\"glyphOrientationVertical\", \"glyph-orientation-vertical\"],\n    [\"horizAdvX\", \"horiz-adv-x\"],\n    [\"horizOriginX\", \"horiz-origin-x\"],\n    [\"imageRendering\", \"image-rendering\"],\n    [\"letterSpacing\", \"letter-spacing\"],\n    [\"lightingColor\", \"lighting-color\"],\n    [\"markerEnd\", \"marker-end\"],\n    [\"markerMid\", \"marker-mid\"],\n    [\"markerStart\", \"marker-start\"],\n    [\"overlinePosition\", \"overline-position\"],\n    [\"overlineThickness\", \"overline-thickness\"],\n    [\"paintOrder\", \"paint-order\"],\n    [\"panose-1\", \"panose-1\"],\n    [\"pointerEvents\", \"pointer-events\"],\n    [\"renderingIntent\", \"rendering-intent\"],\n    [\"shapeRendering\", \"shape-rendering\"],\n    [\"stopColor\", \"stop-color\"],\n    [\"stopOpacity\", \"stop-opacity\"],\n    [\"strikethroughPosition\", \"strikethrough-position\"],\n    [\"strikethroughThickness\", \"strikethrough-thickness\"],\n    [\"strokeDasharray\", \"stroke-dasharray\"],\n    [\"strokeDashoffset\", \"stroke-dashoffset\"],\n    [\"strokeLinecap\", \"stroke-linecap\"],\n    [\"strokeLinejoin\", \"stroke-linejoin\"],\n    [\"strokeMiterlimit\", \"stroke-miterlimit\"],\n    [\"strokeOpacity\", \"stroke-opacity\"],\n    [\"strokeWidth\", \"stroke-width\"],\n    [\"textAnchor\", \"text-anchor\"],\n    [\"textDecoration\", \"text-decoration\"],\n    [\"textRendering\", \"text-rendering\"],\n    [\"transformOrigin\", \"transform-origin\"],\n    [\"underlinePosition\", \"underline-position\"],\n    [\"underlineThickness\", \"underline-thickness\"],\n    [\"unicodeBidi\", \"unicode-bidi\"],\n    [\"unicodeRange\", \"unicode-range\"],\n    [\"unitsPerEm\", \"units-per-em\"],\n    [\"vAlphabetic\", \"v-alphabetic\"],\n    [\"vHanging\", \"v-hanging\"],\n    [\"vIdeographic\", \"v-ideographic\"],\n    [\"vMathematical\", \"v-mathematical\"],\n    [\"vectorEffect\", \"vector-effect\"],\n    [\"vertAdvY\", \"vert-adv-y\"],\n    [\"vertOriginX\", \"vert-origin-x\"],\n    [\"vertOriginY\", \"vert-origin-y\"],\n    [\"wordSpacing\", \"word-spacing\"],\n    [\"writingMode\", \"writing-mode\"],\n    [\"xmlnsXlink\", \"xmlns:xlink\"],\n    [\"xHeight\", \"x-height\"]\n  ]),\n  isJavaScriptProtocol =\n    /^[\\u0000-\\u001F ]*j[\\r\\n\\t]*a[\\r\\n\\t]*v[\\r\\n\\t]*a[\\r\\n\\t]*s[\\r\\n\\t]*c[\\r\\n\\t]*r[\\r\\n\\t]*i[\\r\\n\\t]*p[\\r\\n\\t]*t[\\r\\n\\t]*:/i;\nfunction sanitizeURL(url) {\n  return isJavaScriptProtocol.test(\"\" + url)\n    ? \"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')\"\n    : url;\n}\nvar currentReplayingEvent = null;\nfunction getEventTarget(nativeEvent) {\n  nativeEvent = nativeEvent.target || nativeEvent.srcElement || window;\n  nativeEvent.correspondingUseElement &&\n    (nativeEvent = nativeEvent.correspondingUseElement);\n  return 3 === nativeEvent.nodeType ? nativeEvent.parentNode : nativeEvent;\n}\nvar restoreTarget = null,\n  restoreQueue = null;\nfunction restoreStateOfTarget(target) {\n  var internalInstance = getInstanceFromNode(target);\n  if (internalInstance && (target = internalInstance.stateNode)) {\n    var props = target[internalPropsKey] || null;\n    a: switch (((target = internalInstance.stateNode), internalInstance.type)) {\n      case \"input\":\n        updateInput(\n          target,\n          props.value,\n          props.defaultValue,\n          props.defaultValue,\n          props.checked,\n          props.defaultChecked,\n          props.type,\n          props.name\n        );\n        internalInstance = props.name;\n        if (\"radio\" === props.type && null != internalInstance) {\n          for (props = target; props.parentNode; ) props = props.parentNode;\n          props = props.querySelectorAll(\n            'input[name=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                \"\" + internalInstance\n              ) +\n              '\"][type=\"radio\"]'\n          );\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          ) {\n            var otherNode = props[internalInstance];\n            if (otherNode !== target && otherNode.form === target.form) {\n              var otherProps = otherNode[internalPropsKey] || null;\n              if (!otherProps) throw Error(formatProdErrorMessage(90));\n              updateInput(\n                otherNode,\n                otherProps.value,\n                otherProps.defaultValue,\n                otherProps.defaultValue,\n                otherProps.checked,\n                otherProps.defaultChecked,\n                otherProps.type,\n                otherProps.name\n              );\n            }\n          }\n          for (\n            internalInstance = 0;\n            internalInstance < props.length;\n            internalInstance++\n          )\n            (otherNode = props[internalInstance]),\n              otherNode.form === target.form && updateValueIfChanged(otherNode);\n        }\n        break a;\n      case \"textarea\":\n        updateTextarea(target, props.value, props.defaultValue);\n        break a;\n      case \"select\":\n        (internalInstance = props.value),\n          null != internalInstance &&\n            updateOptions(target, !!props.multiple, internalInstance, !1);\n    }\n  }\n}\nvar isInsideEventHandler = !1;\nfunction batchedUpdates$1(fn, a, b) {\n  if (isInsideEventHandler) return fn(a, b);\n  isInsideEventHandler = !0;\n  try {\n    var JSCompiler_inline_result = fn(a);\n    return JSCompiler_inline_result;\n  } finally {\n    if (\n      ((isInsideEventHandler = !1),\n      null !== restoreTarget || null !== restoreQueue)\n    )\n      if (\n        (flushSyncWork$1(),\n        restoreTarget &&\n          ((a = restoreTarget),\n          (fn = restoreQueue),\n          (restoreQueue = restoreTarget = null),\n          restoreStateOfTarget(a),\n          fn))\n      )\n        for (a = 0; a < fn.length; a++) restoreStateOfTarget(fn[a]);\n  }\n}\nfunction getListener(inst, registrationName) {\n  var stateNode = inst.stateNode;\n  if (null === stateNode) return null;\n  var props = stateNode[internalPropsKey] || null;\n  if (null === props) return null;\n  stateNode = props[registrationName];\n  a: switch (registrationName) {\n    case \"onClick\":\n    case \"onClickCapture\":\n    case \"onDoubleClick\":\n    case \"onDoubleClickCapture\":\n    case \"onMouseDown\":\n    case \"onMouseDownCapture\":\n    case \"onMouseMove\":\n    case \"onMouseMoveCapture\":\n    case \"onMouseUp\":\n    case \"onMouseUpCapture\":\n    case \"onMouseEnter\":\n      (props = !props.disabled) ||\n        ((inst = inst.type),\n        (props = !(\n          \"button\" === inst ||\n          \"input\" === inst ||\n          \"select\" === inst ||\n          \"textarea\" === inst\n        )));\n      inst = !props;\n      break a;\n    default:\n      inst = !1;\n  }\n  if (inst) return null;\n  if (stateNode && \"function\" !== typeof stateNode)\n    throw Error(\n      formatProdErrorMessage(231, registrationName, typeof stateNode)\n    );\n  return stateNode;\n}\nvar canUseDOM = !(\n    \"undefined\" === typeof window ||\n    \"undefined\" === typeof window.document ||\n    \"undefined\" === typeof window.document.createElement\n  ),\n  passiveBrowserEventsSupported = !1;\nif (canUseDOM)\n  try {\n    var options = {};\n    Object.defineProperty(options, \"passive\", {\n      get: function () {\n        passiveBrowserEventsSupported = !0;\n      }\n    });\n    window.addEventListener(\"test\", options, options);\n    window.removeEventListener(\"test\", options, options);\n  } catch (e) {\n    passiveBrowserEventsSupported = !1;\n  }\nvar root = null,\n  startText = null,\n  fallbackText = null;\nfunction getData() {\n  if (fallbackText) return fallbackText;\n  var start,\n    startValue = startText,\n    startLength = startValue.length,\n    end,\n    endValue = \"value\" in root ? root.value : root.textContent,\n    endLength = endValue.length;\n  for (\n    start = 0;\n    start < startLength && startValue[start] === endValue[start];\n    start++\n  );\n  var minEnd = startLength - start;\n  for (\n    end = 1;\n    end <= minEnd &&\n    startValue[startLength - end] === endValue[endLength - end];\n    end++\n  );\n  return (fallbackText = endValue.slice(start, 1 < end ? 1 - end : void 0));\n}\nfunction getEventCharCode(nativeEvent) {\n  var keyCode = nativeEvent.keyCode;\n  \"charCode\" in nativeEvent\n    ? ((nativeEvent = nativeEvent.charCode),\n      0 === nativeEvent && 13 === keyCode && (nativeEvent = 13))\n    : (nativeEvent = keyCode);\n  10 === nativeEvent && (nativeEvent = 13);\n  return 32 <= nativeEvent || 13 === nativeEvent ? nativeEvent : 0;\n}\nfunction functionThatReturnsTrue() {\n  return !0;\n}\nfunction functionThatReturnsFalse() {\n  return !1;\n}\nfunction createSyntheticEvent(Interface) {\n  function SyntheticBaseEvent(\n    reactName,\n    reactEventType,\n    targetInst,\n    nativeEvent,\n    nativeEventTarget\n  ) {\n    this._reactName = reactName;\n    this._targetInst = targetInst;\n    this.type = reactEventType;\n    this.nativeEvent = nativeEvent;\n    this.target = nativeEventTarget;\n    this.currentTarget = null;\n    for (var propName in Interface)\n      Interface.hasOwnProperty(propName) &&\n        ((reactName = Interface[propName]),\n        (this[propName] = reactName\n          ? reactName(nativeEvent)\n          : nativeEvent[propName]));\n    this.isDefaultPrevented = (\n      null != nativeEvent.defaultPrevented\n        ? nativeEvent.defaultPrevented\n        : !1 === nativeEvent.returnValue\n    )\n      ? functionThatReturnsTrue\n      : functionThatReturnsFalse;\n    this.isPropagationStopped = functionThatReturnsFalse;\n    return this;\n  }\n  assign(SyntheticBaseEvent.prototype, {\n    preventDefault: function () {\n      this.defaultPrevented = !0;\n      var event = this.nativeEvent;\n      event &&\n        (event.preventDefault\n          ? event.preventDefault()\n          : \"unknown\" !== typeof event.returnValue && (event.returnValue = !1),\n        (this.isDefaultPrevented = functionThatReturnsTrue));\n    },\n    stopPropagation: function () {\n      var event = this.nativeEvent;\n      event &&\n        (event.stopPropagation\n          ? event.stopPropagation()\n          : \"unknown\" !== typeof event.cancelBubble &&\n            (event.cancelBubble = !0),\n        (this.isPropagationStopped = functionThatReturnsTrue));\n    },\n    persist: function () {},\n    isPersistent: functionThatReturnsTrue\n  });\n  return SyntheticBaseEvent;\n}\nvar EventInterface = {\n    eventPhase: 0,\n    bubbles: 0,\n    cancelable: 0,\n    timeStamp: function (event) {\n      return event.timeStamp || Date.now();\n    },\n    defaultPrevented: 0,\n    isTrusted: 0\n  },\n  SyntheticEvent = createSyntheticEvent(EventInterface),\n  UIEventInterface = assign({}, EventInterface, { view: 0, detail: 0 }),\n  SyntheticUIEvent = createSyntheticEvent(UIEventInterface),\n  lastMovementX,\n  lastMovementY,\n  lastMouseEvent,\n  MouseEventInterface = assign({}, UIEventInterface, {\n    screenX: 0,\n    screenY: 0,\n    clientX: 0,\n    clientY: 0,\n    pageX: 0,\n    pageY: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    getModifierState: getEventModifierState,\n    button: 0,\n    buttons: 0,\n    relatedTarget: function (event) {\n      return void 0 === event.relatedTarget\n        ? event.fromElement === event.srcElement\n          ? event.toElement\n          : event.fromElement\n        : event.relatedTarget;\n    },\n    movementX: function (event) {\n      if (\"movementX\" in event) return event.movementX;\n      event !== lastMouseEvent &&\n        (lastMouseEvent && \"mousemove\" === event.type\n          ? ((lastMovementX = event.screenX - lastMouseEvent.screenX),\n            (lastMovementY = event.screenY - lastMouseEvent.screenY))\n          : (lastMovementY = lastMovementX = 0),\n        (lastMouseEvent = event));\n      return lastMovementX;\n    },\n    movementY: function (event) {\n      return \"movementY\" in event ? event.movementY : lastMovementY;\n    }\n  }),\n  SyntheticMouseEvent = createSyntheticEvent(MouseEventInterface),\n  DragEventInterface = assign({}, MouseEventInterface, { dataTransfer: 0 }),\n  SyntheticDragEvent = createSyntheticEvent(DragEventInterface),\n  FocusEventInterface = assign({}, UIEventInterface, { relatedTarget: 0 }),\n  SyntheticFocusEvent = createSyntheticEvent(FocusEventInterface),\n  AnimationEventInterface = assign({}, EventInterface, {\n    animationName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticAnimationEvent = createSyntheticEvent(AnimationEventInterface),\n  ClipboardEventInterface = assign({}, EventInterface, {\n    clipboardData: function (event) {\n      return \"clipboardData\" in event\n        ? event.clipboardData\n        : window.clipboardData;\n    }\n  }),\n  SyntheticClipboardEvent = createSyntheticEvent(ClipboardEventInterface),\n  CompositionEventInterface = assign({}, EventInterface, { data: 0 }),\n  SyntheticCompositionEvent = createSyntheticEvent(CompositionEventInterface),\n  normalizeKey = {\n    Esc: \"Escape\",\n    Spacebar: \" \",\n    Left: \"ArrowLeft\",\n    Up: \"ArrowUp\",\n    Right: \"ArrowRight\",\n    Down: \"ArrowDown\",\n    Del: \"Delete\",\n    Win: \"OS\",\n    Menu: \"ContextMenu\",\n    Apps: \"ContextMenu\",\n    Scroll: \"ScrollLock\",\n    MozPrintableKey: \"Unidentified\"\n  },\n  translateToKey = {\n    8: \"Backspace\",\n    9: \"Tab\",\n    12: \"Clear\",\n    13: \"Enter\",\n    16: \"Shift\",\n    17: \"Control\",\n    18: \"Alt\",\n    19: \"Pause\",\n    20: \"CapsLock\",\n    27: \"Escape\",\n    32: \" \",\n    33: \"PageUp\",\n    34: \"PageDown\",\n    35: \"End\",\n    36: \"Home\",\n    37: \"ArrowLeft\",\n    38: \"ArrowUp\",\n    39: \"ArrowRight\",\n    40: \"ArrowDown\",\n    45: \"Insert\",\n    46: \"Delete\",\n    112: \"F1\",\n    113: \"F2\",\n    114: \"F3\",\n    115: \"F4\",\n    116: \"F5\",\n    117: \"F6\",\n    118: \"F7\",\n    119: \"F8\",\n    120: \"F9\",\n    121: \"F10\",\n    122: \"F11\",\n    123: \"F12\",\n    144: \"NumLock\",\n    145: \"ScrollLock\",\n    224: \"Meta\"\n  },\n  modifierKeyToProp = {\n    Alt: \"altKey\",\n    Control: \"ctrlKey\",\n    Meta: \"metaKey\",\n    Shift: \"shiftKey\"\n  };\nfunction modifierStateGetter(keyArg) {\n  var nativeEvent = this.nativeEvent;\n  return nativeEvent.getModifierState\n    ? nativeEvent.getModifierState(keyArg)\n    : (keyArg = modifierKeyToProp[keyArg])\n      ? !!nativeEvent[keyArg]\n      : !1;\n}\nfunction getEventModifierState() {\n  return modifierStateGetter;\n}\nvar KeyboardEventInterface = assign({}, UIEventInterface, {\n    key: function (nativeEvent) {\n      if (nativeEvent.key) {\n        var key = normalizeKey[nativeEvent.key] || nativeEvent.key;\n        if (\"Unidentified\" !== key) return key;\n      }\n      return \"keypress\" === nativeEvent.type\n        ? ((nativeEvent = getEventCharCode(nativeEvent)),\n          13 === nativeEvent ? \"Enter\" : String.fromCharCode(nativeEvent))\n        : \"keydown\" === nativeEvent.type || \"keyup\" === nativeEvent.type\n          ? translateToKey[nativeEvent.keyCode] || \"Unidentified\"\n          : \"\";\n    },\n    code: 0,\n    location: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    altKey: 0,\n    metaKey: 0,\n    repeat: 0,\n    locale: 0,\n    getModifierState: getEventModifierState,\n    charCode: function (event) {\n      return \"keypress\" === event.type ? getEventCharCode(event) : 0;\n    },\n    keyCode: function (event) {\n      return \"keydown\" === event.type || \"keyup\" === event.type\n        ? event.keyCode\n        : 0;\n    },\n    which: function (event) {\n      return \"keypress\" === event.type\n        ? getEventCharCode(event)\n        : \"keydown\" === event.type || \"keyup\" === event.type\n          ? event.keyCode\n          : 0;\n    }\n  }),\n  SyntheticKeyboardEvent = createSyntheticEvent(KeyboardEventInterface),\n  PointerEventInterface = assign({}, MouseEventInterface, {\n    pointerId: 0,\n    width: 0,\n    height: 0,\n    pressure: 0,\n    tangentialPressure: 0,\n    tiltX: 0,\n    tiltY: 0,\n    twist: 0,\n    pointerType: 0,\n    isPrimary: 0\n  }),\n  SyntheticPointerEvent = createSyntheticEvent(PointerEventInterface),\n  TouchEventInterface = assign({}, UIEventInterface, {\n    touches: 0,\n    targetTouches: 0,\n    changedTouches: 0,\n    altKey: 0,\n    metaKey: 0,\n    ctrlKey: 0,\n    shiftKey: 0,\n    getModifierState: getEventModifierState\n  }),\n  SyntheticTouchEvent = createSyntheticEvent(TouchEventInterface),\n  TransitionEventInterface = assign({}, EventInterface, {\n    propertyName: 0,\n    elapsedTime: 0,\n    pseudoElement: 0\n  }),\n  SyntheticTransitionEvent = createSyntheticEvent(TransitionEventInterface),\n  WheelEventInterface = assign({}, MouseEventInterface, {\n    deltaX: function (event) {\n      return \"deltaX\" in event\n        ? event.deltaX\n        : \"wheelDeltaX\" in event\n          ? -event.wheelDeltaX\n          : 0;\n    },\n    deltaY: function (event) {\n      return \"deltaY\" in event\n        ? event.deltaY\n        : \"wheelDeltaY\" in event\n          ? -event.wheelDeltaY\n          : \"wheelDelta\" in event\n            ? -event.wheelDelta\n            : 0;\n    },\n    deltaZ: 0,\n    deltaMode: 0\n  }),\n  SyntheticWheelEvent = createSyntheticEvent(WheelEventInterface),\n  ToggleEventInterface = assign({}, EventInterface, {\n    newState: 0,\n    oldState: 0\n  }),\n  SyntheticToggleEvent = createSyntheticEvent(ToggleEventInterface),\n  END_KEYCODES = [9, 13, 27, 32],\n  canUseCompositionEvent = canUseDOM && \"CompositionEvent\" in window,\n  documentMode = null;\ncanUseDOM &&\n  \"documentMode\" in document &&\n  (documentMode = document.documentMode);\nvar canUseTextInputEvent = canUseDOM && \"TextEvent\" in window && !documentMode,\n  useFallbackCompositionData =\n    canUseDOM &&\n    (!canUseCompositionEvent ||\n      (documentMode && 8 < documentMode && 11 >= documentMode)),\n  SPACEBAR_CHAR = String.fromCharCode(32),\n  hasSpaceKeypress = !1;\nfunction isFallbackCompositionEnd(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"keyup\":\n      return -1 !== END_KEYCODES.indexOf(nativeEvent.keyCode);\n    case \"keydown\":\n      return 229 !== nativeEvent.keyCode;\n    case \"keypress\":\n    case \"mousedown\":\n    case \"focusout\":\n      return !0;\n    default:\n      return !1;\n  }\n}\nfunction getDataFromCustomEvent(nativeEvent) {\n  nativeEvent = nativeEvent.detail;\n  return \"object\" === typeof nativeEvent && \"data\" in nativeEvent\n    ? nativeEvent.data\n    : null;\n}\nvar isComposing = !1;\nfunction getNativeBeforeInputChars(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"compositionend\":\n      return getDataFromCustomEvent(nativeEvent);\n    case \"keypress\":\n      if (32 !== nativeEvent.which) return null;\n      hasSpaceKeypress = !0;\n      return SPACEBAR_CHAR;\n    case \"textInput\":\n      return (\n        (domEventName = nativeEvent.data),\n        domEventName === SPACEBAR_CHAR && hasSpaceKeypress ? null : domEventName\n      );\n    default:\n      return null;\n  }\n}\nfunction getFallbackBeforeInputChars(domEventName, nativeEvent) {\n  if (isComposing)\n    return \"compositionend\" === domEventName ||\n      (!canUseCompositionEvent &&\n        isFallbackCompositionEnd(domEventName, nativeEvent))\n      ? ((domEventName = getData()),\n        (fallbackText = startText = root = null),\n        (isComposing = !1),\n        domEventName)\n      : null;\n  switch (domEventName) {\n    case \"paste\":\n      return null;\n    case \"keypress\":\n      if (\n        !(nativeEvent.ctrlKey || nativeEvent.altKey || nativeEvent.metaKey) ||\n        (nativeEvent.ctrlKey && nativeEvent.altKey)\n      ) {\n        if (nativeEvent.char && 1 < nativeEvent.char.length)\n          return nativeEvent.char;\n        if (nativeEvent.which) return String.fromCharCode(nativeEvent.which);\n      }\n      return null;\n    case \"compositionend\":\n      return useFallbackCompositionData && \"ko\" !== nativeEvent.locale\n        ? null\n        : nativeEvent.data;\n    default:\n      return null;\n  }\n}\nvar supportedInputTypes = {\n  color: !0,\n  date: !0,\n  datetime: !0,\n  \"datetime-local\": !0,\n  email: !0,\n  month: !0,\n  number: !0,\n  password: !0,\n  range: !0,\n  search: !0,\n  tel: !0,\n  text: !0,\n  time: !0,\n  url: !0,\n  week: !0\n};\nfunction isTextInputElement(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return \"input\" === nodeName\n    ? !!supportedInputTypes[elem.type]\n    : \"textarea\" === nodeName\n      ? !0\n      : !1;\n}\nfunction createAndAccumulateChangeEvent(\n  dispatchQueue,\n  inst,\n  nativeEvent,\n  target\n) {\n  restoreTarget\n    ? restoreQueue\n      ? restoreQueue.push(target)\n      : (restoreQueue = [target])\n    : (restoreTarget = target);\n  inst = accumulateTwoPhaseListeners(inst, \"onChange\");\n  0 < inst.length &&\n    ((nativeEvent = new SyntheticEvent(\n      \"onChange\",\n      \"change\",\n      null,\n      nativeEvent,\n      target\n    )),\n    dispatchQueue.push({ event: nativeEvent, listeners: inst }));\n}\nvar activeElement$1 = null,\n  activeElementInst$1 = null;\nfunction runEventInBatch(dispatchQueue) {\n  processDispatchQueue(dispatchQueue, 0);\n}\nfunction getInstIfValueChanged(targetInst) {\n  var targetNode = getNodeFromInstance(targetInst);\n  if (updateValueIfChanged(targetNode)) return targetInst;\n}\nfunction getTargetInstForChangeEvent(domEventName, targetInst) {\n  if (\"change\" === domEventName) return targetInst;\n}\nvar isInputEventSupported = !1;\nif (canUseDOM) {\n  var JSCompiler_inline_result$jscomp$282;\n  if (canUseDOM) {\n    var isSupported$jscomp$inline_417 = \"oninput\" in document;\n    if (!isSupported$jscomp$inline_417) {\n      var element$jscomp$inline_418 = document.createElement(\"div\");\n      element$jscomp$inline_418.setAttribute(\"oninput\", \"return;\");\n      isSupported$jscomp$inline_417 =\n        \"function\" === typeof element$jscomp$inline_418.oninput;\n    }\n    JSCompiler_inline_result$jscomp$282 = isSupported$jscomp$inline_417;\n  } else JSCompiler_inline_result$jscomp$282 = !1;\n  isInputEventSupported =\n    JSCompiler_inline_result$jscomp$282 &&\n    (!document.documentMode || 9 < document.documentMode);\n}\nfunction stopWatchingForValueChange() {\n  activeElement$1 &&\n    (activeElement$1.detachEvent(\"onpropertychange\", handlePropertyChange),\n    (activeElementInst$1 = activeElement$1 = null));\n}\nfunction handlePropertyChange(nativeEvent) {\n  if (\n    \"value\" === nativeEvent.propertyName &&\n    getInstIfValueChanged(activeElementInst$1)\n  ) {\n    var dispatchQueue = [];\n    createAndAccumulateChangeEvent(\n      dispatchQueue,\n      activeElementInst$1,\n      nativeEvent,\n      getEventTarget(nativeEvent)\n    );\n    batchedUpdates$1(runEventInBatch, dispatchQueue);\n  }\n}\nfunction handleEventsForInputEventPolyfill(domEventName, target, targetInst) {\n  \"focusin\" === domEventName\n    ? (stopWatchingForValueChange(),\n      (activeElement$1 = target),\n      (activeElementInst$1 = targetInst),\n      activeElement$1.attachEvent(\"onpropertychange\", handlePropertyChange))\n    : \"focusout\" === domEventName && stopWatchingForValueChange();\n}\nfunction getTargetInstForInputEventPolyfill(domEventName) {\n  if (\n    \"selectionchange\" === domEventName ||\n    \"keyup\" === domEventName ||\n    \"keydown\" === domEventName\n  )\n    return getInstIfValueChanged(activeElementInst$1);\n}\nfunction getTargetInstForClickEvent(domEventName, targetInst) {\n  if (\"click\" === domEventName) return getInstIfValueChanged(targetInst);\n}\nfunction getTargetInstForInputOrChangeEvent(domEventName, targetInst) {\n  if (\"input\" === domEventName || \"change\" === domEventName)\n    return getInstIfValueChanged(targetInst);\n}\nfunction is(x, y) {\n  return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n}\nvar objectIs = \"function\" === typeof Object.is ? Object.is : is;\nfunction shallowEqual(objA, objB) {\n  if (objectIs(objA, objB)) return !0;\n  if (\n    \"object\" !== typeof objA ||\n    null === objA ||\n    \"object\" !== typeof objB ||\n    null === objB\n  )\n    return !1;\n  var keysA = Object.keys(objA),\n    keysB = Object.keys(objB);\n  if (keysA.length !== keysB.length) return !1;\n  for (keysB = 0; keysB < keysA.length; keysB++) {\n    var currentKey = keysA[keysB];\n    if (\n      !hasOwnProperty.call(objB, currentKey) ||\n      !objectIs(objA[currentKey], objB[currentKey])\n    )\n      return !1;\n  }\n  return !0;\n}\nfunction getLeafNode(node) {\n  for (; node && node.firstChild; ) node = node.firstChild;\n  return node;\n}\nfunction getNodeForCharacterOffset(root, offset) {\n  var node = getLeafNode(root);\n  root = 0;\n  for (var nodeEnd; node; ) {\n    if (3 === node.nodeType) {\n      nodeEnd = root + node.textContent.length;\n      if (root <= offset && nodeEnd >= offset)\n        return { node: node, offset: offset - root };\n      root = nodeEnd;\n    }\n    a: {\n      for (; node; ) {\n        if (node.nextSibling) {\n          node = node.nextSibling;\n          break a;\n        }\n        node = node.parentNode;\n      }\n      node = void 0;\n    }\n    node = getLeafNode(node);\n  }\n}\nfunction containsNode(outerNode, innerNode) {\n  return outerNode && innerNode\n    ? outerNode === innerNode\n      ? !0\n      : outerNode && 3 === outerNode.nodeType\n        ? !1\n        : innerNode && 3 === innerNode.nodeType\n          ? containsNode(outerNode, innerNode.parentNode)\n          : \"contains\" in outerNode\n            ? outerNode.contains(innerNode)\n            : outerNode.compareDocumentPosition\n              ? !!(outerNode.compareDocumentPosition(innerNode) & 16)\n              : !1\n    : !1;\n}\nfunction getActiveElementDeep(containerInfo) {\n  containerInfo =\n    null != containerInfo &&\n    null != containerInfo.ownerDocument &&\n    null != containerInfo.ownerDocument.defaultView\n      ? containerInfo.ownerDocument.defaultView\n      : window;\n  for (\n    var element = getActiveElement(containerInfo.document);\n    element instanceof containerInfo.HTMLIFrameElement;\n\n  ) {\n    try {\n      var JSCompiler_inline_result =\n        \"string\" === typeof element.contentWindow.location.href;\n    } catch (err) {\n      JSCompiler_inline_result = !1;\n    }\n    if (JSCompiler_inline_result) containerInfo = element.contentWindow;\n    else break;\n    element = getActiveElement(containerInfo.document);\n  }\n  return element;\n}\nfunction hasSelectionCapabilities(elem) {\n  var nodeName = elem && elem.nodeName && elem.nodeName.toLowerCase();\n  return (\n    nodeName &&\n    ((\"input\" === nodeName &&\n      (\"text\" === elem.type ||\n        \"search\" === elem.type ||\n        \"tel\" === elem.type ||\n        \"url\" === elem.type ||\n        \"password\" === elem.type)) ||\n      \"textarea\" === nodeName ||\n      \"true\" === elem.contentEditable)\n  );\n}\nvar skipSelectionChangeEvent =\n    canUseDOM && \"documentMode\" in document && 11 >= document.documentMode,\n  activeElement = null,\n  activeElementInst = null,\n  lastSelection = null,\n  mouseDown = !1;\nfunction constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget) {\n  var doc =\n    nativeEventTarget.window === nativeEventTarget\n      ? nativeEventTarget.document\n      : 9 === nativeEventTarget.nodeType\n        ? nativeEventTarget\n        : nativeEventTarget.ownerDocument;\n  mouseDown ||\n    null == activeElement ||\n    activeElement !== getActiveElement(doc) ||\n    ((doc = activeElement),\n    \"selectionStart\" in doc && hasSelectionCapabilities(doc)\n      ? (doc = { start: doc.selectionStart, end: doc.selectionEnd })\n      : ((doc = (\n          (doc.ownerDocument && doc.ownerDocument.defaultView) ||\n          window\n        ).getSelection()),\n        (doc = {\n          anchorNode: doc.anchorNode,\n          anchorOffset: doc.anchorOffset,\n          focusNode: doc.focusNode,\n          focusOffset: doc.focusOffset\n        })),\n    (lastSelection && shallowEqual(lastSelection, doc)) ||\n      ((lastSelection = doc),\n      (doc = accumulateTwoPhaseListeners(activeElementInst, \"onSelect\")),\n      0 < doc.length &&\n        ((nativeEvent = new SyntheticEvent(\n          \"onSelect\",\n          \"select\",\n          null,\n          nativeEvent,\n          nativeEventTarget\n        )),\n        dispatchQueue.push({ event: nativeEvent, listeners: doc }),\n        (nativeEvent.target = activeElement))));\n}\nfunction makePrefixMap(styleProp, eventName) {\n  var prefixes = {};\n  prefixes[styleProp.toLowerCase()] = eventName.toLowerCase();\n  prefixes[\"Webkit\" + styleProp] = \"webkit\" + eventName;\n  prefixes[\"Moz\" + styleProp] = \"moz\" + eventName;\n  return prefixes;\n}\nvar vendorPrefixes = {\n    animationend: makePrefixMap(\"Animation\", \"AnimationEnd\"),\n    animationiteration: makePrefixMap(\"Animation\", \"AnimationIteration\"),\n    animationstart: makePrefixMap(\"Animation\", \"AnimationStart\"),\n    transitionrun: makePrefixMap(\"Transition\", \"TransitionRun\"),\n    transitionstart: makePrefixMap(\"Transition\", \"TransitionStart\"),\n    transitioncancel: makePrefixMap(\"Transition\", \"TransitionCancel\"),\n    transitionend: makePrefixMap(\"Transition\", \"TransitionEnd\")\n  },\n  prefixedEventNames = {},\n  style = {};\ncanUseDOM &&\n  ((style = document.createElement(\"div\").style),\n  \"AnimationEvent\" in window ||\n    (delete vendorPrefixes.animationend.animation,\n    delete vendorPrefixes.animationiteration.animation,\n    delete vendorPrefixes.animationstart.animation),\n  \"TransitionEvent\" in window ||\n    delete vendorPrefixes.transitionend.transition);\nfunction getVendorPrefixedEventName(eventName) {\n  if (prefixedEventNames[eventName]) return prefixedEventNames[eventName];\n  if (!vendorPrefixes[eventName]) return eventName;\n  var prefixMap = vendorPrefixes[eventName],\n    styleProp;\n  for (styleProp in prefixMap)\n    if (prefixMap.hasOwnProperty(styleProp) && styleProp in style)\n      return (prefixedEventNames[eventName] = prefixMap[styleProp]);\n  return eventName;\n}\nvar ANIMATION_END = getVendorPrefixedEventName(\"animationend\"),\n  ANIMATION_ITERATION = getVendorPrefixedEventName(\"animationiteration\"),\n  ANIMATION_START = getVendorPrefixedEventName(\"animationstart\"),\n  TRANSITION_RUN = getVendorPrefixedEventName(\"transitionrun\"),\n  TRANSITION_START = getVendorPrefixedEventName(\"transitionstart\"),\n  TRANSITION_CANCEL = getVendorPrefixedEventName(\"transitioncancel\"),\n  TRANSITION_END = getVendorPrefixedEventName(\"transitionend\"),\n  topLevelEventsToReactNames = new Map(),\n  simpleEventPluginEvents =\n    \"abort auxClick beforeToggle cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel\".split(\n      \" \"\n    );\nsimpleEventPluginEvents.push(\"scrollEnd\");\nfunction registerSimpleEvent(domEventName, reactName) {\n  topLevelEventsToReactNames.set(domEventName, reactName);\n  registerTwoPhaseEvent(reactName, [domEventName]);\n}\nvar CapturedStacks = new WeakMap();\nfunction createCapturedValueAtFiber(value, source) {\n  if (\"object\" === typeof value && null !== value) {\n    var existing = CapturedStacks.get(value);\n    if (void 0 !== existing) return existing;\n    source = {\n      value: value,\n      source: source,\n      stack: getStackByFiberInDevAndProd(source)\n    };\n    CapturedStacks.set(value, source);\n    return source;\n  }\n  return {\n    value: value,\n    source: source,\n    stack: getStackByFiberInDevAndProd(source)\n  };\n}\nvar concurrentQueues = [],\n  concurrentQueuesIndex = 0,\n  concurrentlyUpdatedLanes = 0;\nfunction finishQueueingConcurrentUpdates() {\n  for (\n    var endIndex = concurrentQueuesIndex,\n      i = (concurrentlyUpdatedLanes = concurrentQueuesIndex = 0);\n    i < endIndex;\n\n  ) {\n    var fiber = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var queue = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var update = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    var lane = concurrentQueues[i];\n    concurrentQueues[i++] = null;\n    if (null !== queue && null !== update) {\n      var pending = queue.pending;\n      null === pending\n        ? (update.next = update)\n        : ((update.next = pending.next), (pending.next = update));\n      queue.pending = update;\n    }\n    0 !== lane && markUpdateLaneFromFiberToRoot(fiber, update, lane);\n  }\n}\nfunction enqueueUpdate$1(fiber, queue, update, lane) {\n  concurrentQueues[concurrentQueuesIndex++] = fiber;\n  concurrentQueues[concurrentQueuesIndex++] = queue;\n  concurrentQueues[concurrentQueuesIndex++] = update;\n  concurrentQueues[concurrentQueuesIndex++] = lane;\n  concurrentlyUpdatedLanes |= lane;\n  fiber.lanes |= lane;\n  fiber = fiber.alternate;\n  null !== fiber && (fiber.lanes |= lane);\n}\nfunction enqueueConcurrentHookUpdate(fiber, queue, update, lane) {\n  enqueueUpdate$1(fiber, queue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction enqueueConcurrentRenderForLane(fiber, lane) {\n  enqueueUpdate$1(fiber, null, null, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction markUpdateLaneFromFiberToRoot(sourceFiber, update, lane) {\n  sourceFiber.lanes |= lane;\n  var alternate = sourceFiber.alternate;\n  null !== alternate && (alternate.lanes |= lane);\n  for (var isHidden = !1, parent = sourceFiber.return; null !== parent; )\n    (parent.childLanes |= lane),\n      (alternate = parent.alternate),\n      null !== alternate && (alternate.childLanes |= lane),\n      22 === parent.tag &&\n        ((sourceFiber = parent.stateNode),\n        null === sourceFiber || sourceFiber._visibility & 1 || (isHidden = !0)),\n      (sourceFiber = parent),\n      (parent = parent.return);\n  return 3 === sourceFiber.tag\n    ? ((parent = sourceFiber.stateNode),\n      isHidden &&\n        null !== update &&\n        ((isHidden = 31 - clz32(lane)),\n        (sourceFiber = parent.hiddenUpdates),\n        (alternate = sourceFiber[isHidden]),\n        null === alternate\n          ? (sourceFiber[isHidden] = [update])\n          : alternate.push(update),\n        (update.lane = lane | 536870912)),\n      parent)\n    : null;\n}\nfunction getRootForUpdatedFiber(sourceFiber) {\n  if (50 < nestedUpdateCount)\n    throw (\n      ((nestedUpdateCount = 0),\n      (rootWithNestedUpdates = null),\n      Error(formatProdErrorMessage(185)))\n    );\n  for (var parent = sourceFiber.return; null !== parent; )\n    (sourceFiber = parent), (parent = sourceFiber.return);\n  return 3 === sourceFiber.tag ? sourceFiber.stateNode : null;\n}\nvar emptyContextObject = {};\nfunction FiberNode(tag, pendingProps, key, mode) {\n  this.tag = tag;\n  this.key = key;\n  this.sibling =\n    this.child =\n    this.return =\n    this.stateNode =\n    this.type =\n    this.elementType =\n      null;\n  this.index = 0;\n  this.refCleanup = this.ref = null;\n  this.pendingProps = pendingProps;\n  this.dependencies =\n    this.memoizedState =\n    this.updateQueue =\n    this.memoizedProps =\n      null;\n  this.mode = mode;\n  this.subtreeFlags = this.flags = 0;\n  this.deletions = null;\n  this.childLanes = this.lanes = 0;\n  this.alternate = null;\n}\nfunction createFiberImplClass(tag, pendingProps, key, mode) {\n  return new FiberNode(tag, pendingProps, key, mode);\n}\nfunction shouldConstruct(Component) {\n  Component = Component.prototype;\n  return !(!Component || !Component.isReactComponent);\n}\nfunction createWorkInProgress(current, pendingProps) {\n  var workInProgress = current.alternate;\n  null === workInProgress\n    ? ((workInProgress = createFiberImplClass(\n        current.tag,\n        pendingProps,\n        current.key,\n        current.mode\n      )),\n      (workInProgress.elementType = current.elementType),\n      (workInProgress.type = current.type),\n      (workInProgress.stateNode = current.stateNode),\n      (workInProgress.alternate = current),\n      (current.alternate = workInProgress))\n    : ((workInProgress.pendingProps = pendingProps),\n      (workInProgress.type = current.type),\n      (workInProgress.flags = 0),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null));\n  workInProgress.flags = current.flags & 65011712;\n  workInProgress.childLanes = current.childLanes;\n  workInProgress.lanes = current.lanes;\n  workInProgress.child = current.child;\n  workInProgress.memoizedProps = current.memoizedProps;\n  workInProgress.memoizedState = current.memoizedState;\n  workInProgress.updateQueue = current.updateQueue;\n  pendingProps = current.dependencies;\n  workInProgress.dependencies =\n    null === pendingProps\n      ? null\n      : { lanes: pendingProps.lanes, firstContext: pendingProps.firstContext };\n  workInProgress.sibling = current.sibling;\n  workInProgress.index = current.index;\n  workInProgress.ref = current.ref;\n  workInProgress.refCleanup = current.refCleanup;\n  return workInProgress;\n}\nfunction resetWorkInProgress(workInProgress, renderLanes) {\n  workInProgress.flags &= 65011714;\n  var current = workInProgress.alternate;\n  null === current\n    ? ((workInProgress.childLanes = 0),\n      (workInProgress.lanes = renderLanes),\n      (workInProgress.child = null),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.memoizedProps = null),\n      (workInProgress.memoizedState = null),\n      (workInProgress.updateQueue = null),\n      (workInProgress.dependencies = null),\n      (workInProgress.stateNode = null))\n    : ((workInProgress.childLanes = current.childLanes),\n      (workInProgress.lanes = current.lanes),\n      (workInProgress.child = current.child),\n      (workInProgress.subtreeFlags = 0),\n      (workInProgress.deletions = null),\n      (workInProgress.memoizedProps = current.memoizedProps),\n      (workInProgress.memoizedState = current.memoizedState),\n      (workInProgress.updateQueue = current.updateQueue),\n      (workInProgress.type = current.type),\n      (renderLanes = current.dependencies),\n      (workInProgress.dependencies =\n        null === renderLanes\n          ? null\n          : {\n              lanes: renderLanes.lanes,\n              firstContext: renderLanes.firstContext\n            }));\n  return workInProgress;\n}\nfunction createFiberFromTypeAndProps(\n  type,\n  key,\n  pendingProps,\n  owner,\n  mode,\n  lanes\n) {\n  var fiberTag = 0;\n  owner = type;\n  if (\"function\" === typeof type) shouldConstruct(type) && (fiberTag = 1);\n  else if (\"string\" === typeof type)\n    fiberTag = isHostHoistableType(\n      type,\n      pendingProps,\n      contextStackCursor.current\n    )\n      ? 26\n      : \"html\" === type || \"head\" === type || \"body\" === type\n        ? 27\n        : 5;\n  else\n    a: switch (type) {\n      case REACT_ACTIVITY_TYPE:\n        return (\n          (type = createFiberImplClass(31, pendingProps, key, mode)),\n          (type.elementType = REACT_ACTIVITY_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_FRAGMENT_TYPE:\n        return createFiberFromFragment(pendingProps.children, mode, lanes, key);\n      case REACT_STRICT_MODE_TYPE:\n        fiberTag = 8;\n        mode |= 24;\n        break;\n      case REACT_PROFILER_TYPE:\n        return (\n          (type = createFiberImplClass(12, pendingProps, key, mode | 2)),\n          (type.elementType = REACT_PROFILER_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_TYPE:\n        return (\n          (type = createFiberImplClass(13, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      case REACT_SUSPENSE_LIST_TYPE:\n        return (\n          (type = createFiberImplClass(19, pendingProps, key, mode)),\n          (type.elementType = REACT_SUSPENSE_LIST_TYPE),\n          (type.lanes = lanes),\n          type\n        );\n      default:\n        if (\"object\" === typeof type && null !== type)\n          switch (type.$$typeof) {\n            case REACT_PROVIDER_TYPE:\n            case REACT_CONTEXT_TYPE:\n              fiberTag = 10;\n              break a;\n            case REACT_CONSUMER_TYPE:\n              fiberTag = 9;\n              break a;\n            case REACT_FORWARD_REF_TYPE:\n              fiberTag = 11;\n              break a;\n            case REACT_MEMO_TYPE:\n              fiberTag = 14;\n              break a;\n            case REACT_LAZY_TYPE:\n              fiberTag = 16;\n              owner = null;\n              break a;\n          }\n        fiberTag = 29;\n        pendingProps = Error(\n          formatProdErrorMessage(130, null === type ? \"null\" : typeof type, \"\")\n        );\n        owner = null;\n    }\n  key = createFiberImplClass(fiberTag, pendingProps, key, mode);\n  key.elementType = type;\n  key.type = owner;\n  key.lanes = lanes;\n  return key;\n}\nfunction createFiberFromFragment(elements, mode, lanes, key) {\n  elements = createFiberImplClass(7, elements, key, mode);\n  elements.lanes = lanes;\n  return elements;\n}\nfunction createFiberFromText(content, mode, lanes) {\n  content = createFiberImplClass(6, content, null, mode);\n  content.lanes = lanes;\n  return content;\n}\nfunction createFiberFromPortal(portal, mode, lanes) {\n  mode = createFiberImplClass(\n    4,\n    null !== portal.children ? portal.children : [],\n    portal.key,\n    mode\n  );\n  mode.lanes = lanes;\n  mode.stateNode = {\n    containerInfo: portal.containerInfo,\n    pendingChildren: null,\n    implementation: portal.implementation\n  };\n  return mode;\n}\nvar forkStack = [],\n  forkStackIndex = 0,\n  treeForkProvider = null,\n  treeForkCount = 0,\n  idStack = [],\n  idStackIndex = 0,\n  treeContextProvider = null,\n  treeContextId = 1,\n  treeContextOverflow = \"\";\nfunction pushTreeFork(workInProgress, totalChildren) {\n  forkStack[forkStackIndex++] = treeForkCount;\n  forkStack[forkStackIndex++] = treeForkProvider;\n  treeForkProvider = workInProgress;\n  treeForkCount = totalChildren;\n}\nfunction pushTreeId(workInProgress, totalChildren, index) {\n  idStack[idStackIndex++] = treeContextId;\n  idStack[idStackIndex++] = treeContextOverflow;\n  idStack[idStackIndex++] = treeContextProvider;\n  treeContextProvider = workInProgress;\n  var baseIdWithLeadingBit = treeContextId;\n  workInProgress = treeContextOverflow;\n  var baseLength = 32 - clz32(baseIdWithLeadingBit) - 1;\n  baseIdWithLeadingBit &= ~(1 << baseLength);\n  index += 1;\n  var length = 32 - clz32(totalChildren) + baseLength;\n  if (30 < length) {\n    var numberOfOverflowBits = baseLength - (baseLength % 5);\n    length = (\n      baseIdWithLeadingBit &\n      ((1 << numberOfOverflowBits) - 1)\n    ).toString(32);\n    baseIdWithLeadingBit >>= numberOfOverflowBits;\n    baseLength -= numberOfOverflowBits;\n    treeContextId =\n      (1 << (32 - clz32(totalChildren) + baseLength)) |\n      (index << baseLength) |\n      baseIdWithLeadingBit;\n    treeContextOverflow = length + workInProgress;\n  } else\n    (treeContextId =\n      (1 << length) | (index << baseLength) | baseIdWithLeadingBit),\n      (treeContextOverflow = workInProgress);\n}\nfunction pushMaterializedTreeId(workInProgress) {\n  null !== workInProgress.return &&\n    (pushTreeFork(workInProgress, 1), pushTreeId(workInProgress, 1, 0));\n}\nfunction popTreeContext(workInProgress) {\n  for (; workInProgress === treeForkProvider; )\n    (treeForkProvider = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null),\n      (treeForkCount = forkStack[--forkStackIndex]),\n      (forkStack[forkStackIndex] = null);\n  for (; workInProgress === treeContextProvider; )\n    (treeContextProvider = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextOverflow = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null),\n      (treeContextId = idStack[--idStackIndex]),\n      (idStack[idStackIndex] = null);\n}\nvar hydrationParentFiber = null,\n  nextHydratableInstance = null,\n  isHydrating = !1,\n  hydrationErrors = null,\n  rootOrSingletonContext = !1,\n  HydrationMismatchException = Error(formatProdErrorMessage(519));\nfunction throwOnHydrationMismatch(fiber) {\n  var error = Error(formatProdErrorMessage(418, \"\"));\n  queueHydrationError(createCapturedValueAtFiber(error, fiber));\n  throw HydrationMismatchException;\n}\nfunction prepareToHydrateHostInstance(fiber) {\n  var instance = fiber.stateNode,\n    type = fiber.type,\n    props = fiber.memoizedProps;\n  instance[internalInstanceKey] = fiber;\n  instance[internalPropsKey] = props;\n  switch (type) {\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"cancel\", instance);\n      listenToNonDelegatedEvent(\"close\", instance);\n      break;\n    case \"iframe\":\n    case \"object\":\n    case \"embed\":\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (type = 0; type < mediaEventTypes.length; type++)\n        listenToNonDelegatedEvent(mediaEventTypes[type], instance);\n      break;\n    case \"source\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      break;\n    case \"img\":\n    case \"image\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", instance);\n      listenToNonDelegatedEvent(\"load\", instance);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", instance);\n      break;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      initInput(\n        instance,\n        props.value,\n        props.defaultValue,\n        props.checked,\n        props.defaultChecked,\n        props.type,\n        props.name,\n        !0\n      );\n      track(instance);\n      break;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", instance);\n      break;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", instance),\n        initTextarea(instance, props.value, props.defaultValue, props.children),\n        track(instance);\n  }\n  type = props.children;\n  (\"string\" !== typeof type &&\n    \"number\" !== typeof type &&\n    \"bigint\" !== typeof type) ||\n  instance.textContent === \"\" + type ||\n  !0 === props.suppressHydrationWarning ||\n  checkForUnmatchedText(instance.textContent, type)\n    ? (null != props.popover &&\n        (listenToNonDelegatedEvent(\"beforetoggle\", instance),\n        listenToNonDelegatedEvent(\"toggle\", instance)),\n      null != props.onScroll && listenToNonDelegatedEvent(\"scroll\", instance),\n      null != props.onScrollEnd &&\n        listenToNonDelegatedEvent(\"scrollend\", instance),\n      null != props.onClick && (instance.onclick = noop$1),\n      (instance = !0))\n    : (instance = !1);\n  instance || throwOnHydrationMismatch(fiber);\n}\nfunction popToNextHostParent(fiber) {\n  for (hydrationParentFiber = fiber.return; hydrationParentFiber; )\n    switch (hydrationParentFiber.tag) {\n      case 5:\n      case 13:\n        rootOrSingletonContext = !1;\n        return;\n      case 27:\n      case 3:\n        rootOrSingletonContext = !0;\n        return;\n      default:\n        hydrationParentFiber = hydrationParentFiber.return;\n    }\n}\nfunction popHydrationState(fiber) {\n  if (fiber !== hydrationParentFiber) return !1;\n  if (!isHydrating) return popToNextHostParent(fiber), (isHydrating = !0), !1;\n  var tag = fiber.tag,\n    JSCompiler_temp;\n  if ((JSCompiler_temp = 3 !== tag && 27 !== tag)) {\n    if ((JSCompiler_temp = 5 === tag))\n      (JSCompiler_temp = fiber.type),\n        (JSCompiler_temp =\n          !(\"form\" !== JSCompiler_temp && \"button\" !== JSCompiler_temp) ||\n          shouldSetTextContent(fiber.type, fiber.memoizedProps));\n    JSCompiler_temp = !JSCompiler_temp;\n  }\n  JSCompiler_temp && nextHydratableInstance && throwOnHydrationMismatch(fiber);\n  popToNextHostParent(fiber);\n  if (13 === tag) {\n    fiber = fiber.memoizedState;\n    fiber = null !== fiber ? fiber.dehydrated : null;\n    if (!fiber) throw Error(formatProdErrorMessage(317));\n    a: {\n      fiber = fiber.nextSibling;\n      for (tag = 0; fiber; ) {\n        if (8 === fiber.nodeType)\n          if (((JSCompiler_temp = fiber.data), \"/$\" === JSCompiler_temp)) {\n            if (0 === tag) {\n              nextHydratableInstance = getNextHydratable(fiber.nextSibling);\n              break a;\n            }\n            tag--;\n          } else\n            (\"$\" !== JSCompiler_temp &&\n              \"$!\" !== JSCompiler_temp &&\n              \"$?\" !== JSCompiler_temp) ||\n              tag++;\n        fiber = fiber.nextSibling;\n      }\n      nextHydratableInstance = null;\n    }\n  } else\n    27 === tag\n      ? ((tag = nextHydratableInstance),\n        isSingletonScope(fiber.type)\n          ? ((fiber = previousHydratableOnEnteringScopedSingleton),\n            (previousHydratableOnEnteringScopedSingleton = null),\n            (nextHydratableInstance = fiber))\n          : (nextHydratableInstance = tag))\n      : (nextHydratableInstance = hydrationParentFiber\n          ? getNextHydratable(fiber.stateNode.nextSibling)\n          : null);\n  return !0;\n}\nfunction resetHydrationState() {\n  nextHydratableInstance = hydrationParentFiber = null;\n  isHydrating = !1;\n}\nfunction upgradeHydrationErrorsToRecoverable() {\n  var queuedErrors = hydrationErrors;\n  null !== queuedErrors &&\n    (null === workInProgressRootRecoverableErrors\n      ? (workInProgressRootRecoverableErrors = queuedErrors)\n      : workInProgressRootRecoverableErrors.push.apply(\n          workInProgressRootRecoverableErrors,\n          queuedErrors\n        ),\n    (hydrationErrors = null));\n  return queuedErrors;\n}\nfunction queueHydrationError(error) {\n  null === hydrationErrors\n    ? (hydrationErrors = [error])\n    : hydrationErrors.push(error);\n}\nvar valueCursor = createCursor(null),\n  currentlyRenderingFiber$1 = null,\n  lastContextDependency = null;\nfunction pushProvider(providerFiber, context, nextValue) {\n  push(valueCursor, context._currentValue);\n  context._currentValue = nextValue;\n}\nfunction popProvider(context) {\n  context._currentValue = valueCursor.current;\n  pop(valueCursor);\n}\nfunction scheduleContextWorkOnParentPath(parent, renderLanes, propagationRoot) {\n  for (; null !== parent; ) {\n    var alternate = parent.alternate;\n    (parent.childLanes & renderLanes) !== renderLanes\n      ? ((parent.childLanes |= renderLanes),\n        null !== alternate && (alternate.childLanes |= renderLanes))\n      : null !== alternate &&\n        (alternate.childLanes & renderLanes) !== renderLanes &&\n        (alternate.childLanes |= renderLanes);\n    if (parent === propagationRoot) break;\n    parent = parent.return;\n  }\n}\nfunction propagateContextChanges(\n  workInProgress,\n  contexts,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  var fiber = workInProgress.child;\n  null !== fiber && (fiber.return = workInProgress);\n  for (; null !== fiber; ) {\n    var list = fiber.dependencies;\n    if (null !== list) {\n      var nextFiber = fiber.child;\n      list = list.firstContext;\n      a: for (; null !== list; ) {\n        var dependency = list;\n        list = fiber;\n        for (var i = 0; i < contexts.length; i++)\n          if (dependency.context === contexts[i]) {\n            list.lanes |= renderLanes;\n            dependency = list.alternate;\n            null !== dependency && (dependency.lanes |= renderLanes);\n            scheduleContextWorkOnParentPath(\n              list.return,\n              renderLanes,\n              workInProgress\n            );\n            forcePropagateEntireTree || (nextFiber = null);\n            break a;\n          }\n        list = dependency.next;\n      }\n    } else if (18 === fiber.tag) {\n      nextFiber = fiber.return;\n      if (null === nextFiber) throw Error(formatProdErrorMessage(341));\n      nextFiber.lanes |= renderLanes;\n      list = nextFiber.alternate;\n      null !== list && (list.lanes |= renderLanes);\n      scheduleContextWorkOnParentPath(nextFiber, renderLanes, workInProgress);\n      nextFiber = null;\n    } else nextFiber = fiber.child;\n    if (null !== nextFiber) nextFiber.return = fiber;\n    else\n      for (nextFiber = fiber; null !== nextFiber; ) {\n        if (nextFiber === workInProgress) {\n          nextFiber = null;\n          break;\n        }\n        fiber = nextFiber.sibling;\n        if (null !== fiber) {\n          fiber.return = nextFiber.return;\n          nextFiber = fiber;\n          break;\n        }\n        nextFiber = nextFiber.return;\n      }\n    fiber = nextFiber;\n  }\n}\nfunction propagateParentContextChanges(\n  current,\n  workInProgress,\n  renderLanes,\n  forcePropagateEntireTree\n) {\n  current = null;\n  for (\n    var parent = workInProgress, isInsidePropagationBailout = !1;\n    null !== parent;\n\n  ) {\n    if (!isInsidePropagationBailout)\n      if (0 !== (parent.flags & 524288)) isInsidePropagationBailout = !0;\n      else if (0 !== (parent.flags & 262144)) break;\n    if (10 === parent.tag) {\n      var currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent = currentParent.memoizedProps;\n      if (null !== currentParent) {\n        var context = parent.type;\n        objectIs(parent.pendingProps.value, currentParent.value) ||\n          (null !== current ? current.push(context) : (current = [context]));\n      }\n    } else if (parent === hostTransitionProviderCursor.current) {\n      currentParent = parent.alternate;\n      if (null === currentParent) throw Error(formatProdErrorMessage(387));\n      currentParent.memoizedState.memoizedState !==\n        parent.memoizedState.memoizedState &&\n        (null !== current\n          ? current.push(HostTransitionContext)\n          : (current = [HostTransitionContext]));\n    }\n    parent = parent.return;\n  }\n  null !== current &&\n    propagateContextChanges(\n      workInProgress,\n      current,\n      renderLanes,\n      forcePropagateEntireTree\n    );\n  workInProgress.flags |= 262144;\n}\nfunction checkIfContextChanged(currentDependencies) {\n  for (\n    currentDependencies = currentDependencies.firstContext;\n    null !== currentDependencies;\n\n  ) {\n    if (\n      !objectIs(\n        currentDependencies.context._currentValue,\n        currentDependencies.memoizedValue\n      )\n    )\n      return !0;\n    currentDependencies = currentDependencies.next;\n  }\n  return !1;\n}\nfunction prepareToReadContext(workInProgress) {\n  currentlyRenderingFiber$1 = workInProgress;\n  lastContextDependency = null;\n  workInProgress = workInProgress.dependencies;\n  null !== workInProgress && (workInProgress.firstContext = null);\n}\nfunction readContext(context) {\n  return readContextForConsumer(currentlyRenderingFiber$1, context);\n}\nfunction readContextDuringReconciliation(consumer, context) {\n  null === currentlyRenderingFiber$1 && prepareToReadContext(consumer);\n  return readContextForConsumer(consumer, context);\n}\nfunction readContextForConsumer(consumer, context) {\n  var value = context._currentValue;\n  context = { context: context, memoizedValue: value, next: null };\n  if (null === lastContextDependency) {\n    if (null === consumer) throw Error(formatProdErrorMessage(308));\n    lastContextDependency = context;\n    consumer.dependencies = { lanes: 0, firstContext: context };\n    consumer.flags |= 524288;\n  } else lastContextDependency = lastContextDependency.next = context;\n  return value;\n}\nvar AbortControllerLocal =\n    \"undefined\" !== typeof AbortController\n      ? AbortController\n      : function () {\n          var listeners = [],\n            signal = (this.signal = {\n              aborted: !1,\n              addEventListener: function (type, listener) {\n                listeners.push(listener);\n              }\n            });\n          this.abort = function () {\n            signal.aborted = !0;\n            listeners.forEach(function (listener) {\n              return listener();\n            });\n          };\n        },\n  scheduleCallback$2 = Scheduler.unstable_scheduleCallback,\n  NormalPriority = Scheduler.unstable_NormalPriority,\n  CacheContext = {\n    $$typeof: REACT_CONTEXT_TYPE,\n    Consumer: null,\n    Provider: null,\n    _currentValue: null,\n    _currentValue2: null,\n    _threadCount: 0\n  };\nfunction createCache() {\n  return {\n    controller: new AbortControllerLocal(),\n    data: new Map(),\n    refCount: 0\n  };\n}\nfunction releaseCache(cache) {\n  cache.refCount--;\n  0 === cache.refCount &&\n    scheduleCallback$2(NormalPriority, function () {\n      cache.controller.abort();\n    });\n}\nvar currentEntangledListeners = null,\n  currentEntangledPendingCount = 0,\n  currentEntangledLane = 0,\n  currentEntangledActionThenable = null;\nfunction entangleAsyncAction(transition, thenable) {\n  if (null === currentEntangledListeners) {\n    var entangledListeners = (currentEntangledListeners = []);\n    currentEntangledPendingCount = 0;\n    currentEntangledLane = requestTransitionLane();\n    currentEntangledActionThenable = {\n      status: \"pending\",\n      value: void 0,\n      then: function (resolve) {\n        entangledListeners.push(resolve);\n      }\n    };\n  }\n  currentEntangledPendingCount++;\n  thenable.then(pingEngtangledActionScope, pingEngtangledActionScope);\n  return thenable;\n}\nfunction pingEngtangledActionScope() {\n  if (\n    0 === --currentEntangledPendingCount &&\n    null !== currentEntangledListeners\n  ) {\n    null !== currentEntangledActionThenable &&\n      (currentEntangledActionThenable.status = \"fulfilled\");\n    var listeners = currentEntangledListeners;\n    currentEntangledListeners = null;\n    currentEntangledLane = 0;\n    currentEntangledActionThenable = null;\n    for (var i = 0; i < listeners.length; i++) (0, listeners[i])();\n  }\n}\nfunction chainThenableValue(thenable, result) {\n  var listeners = [],\n    thenableWithOverride = {\n      status: \"pending\",\n      value: null,\n      reason: null,\n      then: function (resolve) {\n        listeners.push(resolve);\n      }\n    };\n  thenable.then(\n    function () {\n      thenableWithOverride.status = \"fulfilled\";\n      thenableWithOverride.value = result;\n      for (var i = 0; i < listeners.length; i++) (0, listeners[i])(result);\n    },\n    function (error) {\n      thenableWithOverride.status = \"rejected\";\n      thenableWithOverride.reason = error;\n      for (error = 0; error < listeners.length; error++)\n        (0, listeners[error])(void 0);\n    }\n  );\n  return thenableWithOverride;\n}\nvar prevOnStartTransitionFinish = ReactSharedInternals.S;\nReactSharedInternals.S = function (transition, returnValue) {\n  \"object\" === typeof returnValue &&\n    null !== returnValue &&\n    \"function\" === typeof returnValue.then &&\n    entangleAsyncAction(transition, returnValue);\n  null !== prevOnStartTransitionFinish &&\n    prevOnStartTransitionFinish(transition, returnValue);\n};\nvar resumedCache = createCursor(null);\nfunction peekCacheFromPool() {\n  var cacheResumedFromPreviousRender = resumedCache.current;\n  return null !== cacheResumedFromPreviousRender\n    ? cacheResumedFromPreviousRender\n    : workInProgressRoot.pooledCache;\n}\nfunction pushTransition(offscreenWorkInProgress, prevCachePool) {\n  null === prevCachePool\n    ? push(resumedCache, resumedCache.current)\n    : push(resumedCache, prevCachePool.pool);\n}\nfunction getSuspendedCache() {\n  var cacheFromPool = peekCacheFromPool();\n  return null === cacheFromPool\n    ? null\n    : { parent: CacheContext._currentValue, pool: cacheFromPool };\n}\nvar SuspenseException = Error(formatProdErrorMessage(460)),\n  SuspenseyCommitException = Error(formatProdErrorMessage(474)),\n  SuspenseActionException = Error(formatProdErrorMessage(542)),\n  noopSuspenseyCommitThenable = { then: function () {} };\nfunction isThenableResolved(thenable) {\n  thenable = thenable.status;\n  return \"fulfilled\" === thenable || \"rejected\" === thenable;\n}\nfunction noop$3() {}\nfunction trackUsedThenable(thenableState, thenable, index) {\n  index = thenableState[index];\n  void 0 === index\n    ? thenableState.push(thenable)\n    : index !== thenable && (thenable.then(noop$3, noop$3), (thenable = index));\n  switch (thenable.status) {\n    case \"fulfilled\":\n      return thenable.value;\n    case \"rejected\":\n      throw (\n        ((thenableState = thenable.reason),\n        checkIfUseWrappedInAsyncCatch(thenableState),\n        thenableState)\n      );\n    default:\n      if (\"string\" === typeof thenable.status) thenable.then(noop$3, noop$3);\n      else {\n        thenableState = workInProgressRoot;\n        if (null !== thenableState && 100 < thenableState.shellSuspendCounter)\n          throw Error(formatProdErrorMessage(482));\n        thenableState = thenable;\n        thenableState.status = \"pending\";\n        thenableState.then(\n          function (fulfilledValue) {\n            if (\"pending\" === thenable.status) {\n              var fulfilledThenable = thenable;\n              fulfilledThenable.status = \"fulfilled\";\n              fulfilledThenable.value = fulfilledValue;\n            }\n          },\n          function (error) {\n            if (\"pending\" === thenable.status) {\n              var rejectedThenable = thenable;\n              rejectedThenable.status = \"rejected\";\n              rejectedThenable.reason = error;\n            }\n          }\n        );\n      }\n      switch (thenable.status) {\n        case \"fulfilled\":\n          return thenable.value;\n        case \"rejected\":\n          throw (\n            ((thenableState = thenable.reason),\n            checkIfUseWrappedInAsyncCatch(thenableState),\n            thenableState)\n          );\n      }\n      suspendedThenable = thenable;\n      throw SuspenseException;\n  }\n}\nvar suspendedThenable = null;\nfunction getSuspendedThenable() {\n  if (null === suspendedThenable) throw Error(formatProdErrorMessage(459));\n  var thenable = suspendedThenable;\n  suspendedThenable = null;\n  return thenable;\n}\nfunction checkIfUseWrappedInAsyncCatch(rejectedReason) {\n  if (\n    rejectedReason === SuspenseException ||\n    rejectedReason === SuspenseActionException\n  )\n    throw Error(formatProdErrorMessage(483));\n}\nvar hasForceUpdate = !1;\nfunction initializeUpdateQueue(fiber) {\n  fiber.updateQueue = {\n    baseState: fiber.memoizedState,\n    firstBaseUpdate: null,\n    lastBaseUpdate: null,\n    shared: { pending: null, lanes: 0, hiddenCallbacks: null },\n    callbacks: null\n  };\n}\nfunction cloneUpdateQueue(current, workInProgress) {\n  current = current.updateQueue;\n  workInProgress.updateQueue === current &&\n    (workInProgress.updateQueue = {\n      baseState: current.baseState,\n      firstBaseUpdate: current.firstBaseUpdate,\n      lastBaseUpdate: current.lastBaseUpdate,\n      shared: current.shared,\n      callbacks: null\n    });\n}\nfunction createUpdate(lane) {\n  return { lane: lane, tag: 0, payload: null, callback: null, next: null };\n}\nfunction enqueueUpdate(fiber, update, lane) {\n  var updateQueue = fiber.updateQueue;\n  if (null === updateQueue) return null;\n  updateQueue = updateQueue.shared;\n  if (0 !== (executionContext & 2)) {\n    var pending = updateQueue.pending;\n    null === pending\n      ? (update.next = update)\n      : ((update.next = pending.next), (pending.next = update));\n    updateQueue.pending = update;\n    update = getRootForUpdatedFiber(fiber);\n    markUpdateLaneFromFiberToRoot(fiber, null, lane);\n    return update;\n  }\n  enqueueUpdate$1(fiber, updateQueue, update, lane);\n  return getRootForUpdatedFiber(fiber);\n}\nfunction entangleTransitions(root, fiber, lane) {\n  fiber = fiber.updateQueue;\n  if (null !== fiber && ((fiber = fiber.shared), 0 !== (lane & 4194048))) {\n    var queueLanes = fiber.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    fiber.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nfunction enqueueCapturedUpdate(workInProgress, capturedUpdate) {\n  var queue = workInProgress.updateQueue,\n    current = workInProgress.alternate;\n  if (\n    null !== current &&\n    ((current = current.updateQueue), queue === current)\n  ) {\n    var newFirst = null,\n      newLast = null;\n    queue = queue.firstBaseUpdate;\n    if (null !== queue) {\n      do {\n        var clone = {\n          lane: queue.lane,\n          tag: queue.tag,\n          payload: queue.payload,\n          callback: null,\n          next: null\n        };\n        null === newLast\n          ? (newFirst = newLast = clone)\n          : (newLast = newLast.next = clone);\n        queue = queue.next;\n      } while (null !== queue);\n      null === newLast\n        ? (newFirst = newLast = capturedUpdate)\n        : (newLast = newLast.next = capturedUpdate);\n    } else newFirst = newLast = capturedUpdate;\n    queue = {\n      baseState: current.baseState,\n      firstBaseUpdate: newFirst,\n      lastBaseUpdate: newLast,\n      shared: current.shared,\n      callbacks: current.callbacks\n    };\n    workInProgress.updateQueue = queue;\n    return;\n  }\n  workInProgress = queue.lastBaseUpdate;\n  null === workInProgress\n    ? (queue.firstBaseUpdate = capturedUpdate)\n    : (workInProgress.next = capturedUpdate);\n  queue.lastBaseUpdate = capturedUpdate;\n}\nvar didReadFromEntangledAsyncAction = !1;\nfunction suspendIfUpdateReadFromEntangledAsyncAction() {\n  if (didReadFromEntangledAsyncAction) {\n    var entangledActionThenable = currentEntangledActionThenable;\n    if (null !== entangledActionThenable) throw entangledActionThenable;\n  }\n}\nfunction processUpdateQueue(\n  workInProgress$jscomp$0,\n  props,\n  instance$jscomp$0,\n  renderLanes\n) {\n  didReadFromEntangledAsyncAction = !1;\n  var queue = workInProgress$jscomp$0.updateQueue;\n  hasForceUpdate = !1;\n  var firstBaseUpdate = queue.firstBaseUpdate,\n    lastBaseUpdate = queue.lastBaseUpdate,\n    pendingQueue = queue.shared.pending;\n  if (null !== pendingQueue) {\n    queue.shared.pending = null;\n    var lastPendingUpdate = pendingQueue,\n      firstPendingUpdate = lastPendingUpdate.next;\n    lastPendingUpdate.next = null;\n    null === lastBaseUpdate\n      ? (firstBaseUpdate = firstPendingUpdate)\n      : (lastBaseUpdate.next = firstPendingUpdate);\n    lastBaseUpdate = lastPendingUpdate;\n    var current = workInProgress$jscomp$0.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      (pendingQueue = current.lastBaseUpdate),\n      pendingQueue !== lastBaseUpdate &&\n        (null === pendingQueue\n          ? (current.firstBaseUpdate = firstPendingUpdate)\n          : (pendingQueue.next = firstPendingUpdate),\n        (current.lastBaseUpdate = lastPendingUpdate)));\n  }\n  if (null !== firstBaseUpdate) {\n    var newState = queue.baseState;\n    lastBaseUpdate = 0;\n    current = firstPendingUpdate = lastPendingUpdate = null;\n    pendingQueue = firstBaseUpdate;\n    do {\n      var updateLane = pendingQueue.lane & -536870913,\n        isHiddenUpdate = updateLane !== pendingQueue.lane;\n      if (\n        isHiddenUpdate\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        0 !== updateLane &&\n          updateLane === currentEntangledLane &&\n          (didReadFromEntangledAsyncAction = !0);\n        null !== current &&\n          (current = current.next =\n            {\n              lane: 0,\n              tag: pendingQueue.tag,\n              payload: pendingQueue.payload,\n              callback: null,\n              next: null\n            });\n        a: {\n          var workInProgress = workInProgress$jscomp$0,\n            update = pendingQueue;\n          updateLane = props;\n          var instance = instance$jscomp$0;\n          switch (update.tag) {\n            case 1:\n              workInProgress = update.payload;\n              if (\"function\" === typeof workInProgress) {\n                newState = workInProgress.call(instance, newState, updateLane);\n                break a;\n              }\n              newState = workInProgress;\n              break a;\n            case 3:\n              workInProgress.flags = (workInProgress.flags & -65537) | 128;\n            case 0:\n              workInProgress = update.payload;\n              updateLane =\n                \"function\" === typeof workInProgress\n                  ? workInProgress.call(instance, newState, updateLane)\n                  : workInProgress;\n              if (null === updateLane || void 0 === updateLane) break a;\n              newState = assign({}, newState, updateLane);\n              break a;\n            case 2:\n              hasForceUpdate = !0;\n          }\n        }\n        updateLane = pendingQueue.callback;\n        null !== updateLane &&\n          ((workInProgress$jscomp$0.flags |= 64),\n          isHiddenUpdate && (workInProgress$jscomp$0.flags |= 8192),\n          (isHiddenUpdate = queue.callbacks),\n          null === isHiddenUpdate\n            ? (queue.callbacks = [updateLane])\n            : isHiddenUpdate.push(updateLane));\n      } else\n        (isHiddenUpdate = {\n          lane: updateLane,\n          tag: pendingQueue.tag,\n          payload: pendingQueue.payload,\n          callback: pendingQueue.callback,\n          next: null\n        }),\n          null === current\n            ? ((firstPendingUpdate = current = isHiddenUpdate),\n              (lastPendingUpdate = newState))\n            : (current = current.next = isHiddenUpdate),\n          (lastBaseUpdate |= updateLane);\n      pendingQueue = pendingQueue.next;\n      if (null === pendingQueue)\n        if (((pendingQueue = queue.shared.pending), null === pendingQueue))\n          break;\n        else\n          (isHiddenUpdate = pendingQueue),\n            (pendingQueue = isHiddenUpdate.next),\n            (isHiddenUpdate.next = null),\n            (queue.lastBaseUpdate = isHiddenUpdate),\n            (queue.shared.pending = null);\n    } while (1);\n    null === current && (lastPendingUpdate = newState);\n    queue.baseState = lastPendingUpdate;\n    queue.firstBaseUpdate = firstPendingUpdate;\n    queue.lastBaseUpdate = current;\n    null === firstBaseUpdate && (queue.shared.lanes = 0);\n    workInProgressRootSkippedLanes |= lastBaseUpdate;\n    workInProgress$jscomp$0.lanes = lastBaseUpdate;\n    workInProgress$jscomp$0.memoizedState = newState;\n  }\n}\nfunction callCallback(callback, context) {\n  if (\"function\" !== typeof callback)\n    throw Error(formatProdErrorMessage(191, callback));\n  callback.call(context);\n}\nfunction commitCallbacks(updateQueue, context) {\n  var callbacks = updateQueue.callbacks;\n  if (null !== callbacks)\n    for (\n      updateQueue.callbacks = null, updateQueue = 0;\n      updateQueue < callbacks.length;\n      updateQueue++\n    )\n      callCallback(callbacks[updateQueue], context);\n}\nvar currentTreeHiddenStackCursor = createCursor(null),\n  prevEntangledRenderLanesCursor = createCursor(0);\nfunction pushHiddenContext(fiber, context) {\n  fiber = entangledRenderLanes;\n  push(prevEntangledRenderLanesCursor, fiber);\n  push(currentTreeHiddenStackCursor, context);\n  entangledRenderLanes = fiber | context.baseLanes;\n}\nfunction reuseHiddenContextOnStack() {\n  push(prevEntangledRenderLanesCursor, entangledRenderLanes);\n  push(currentTreeHiddenStackCursor, currentTreeHiddenStackCursor.current);\n}\nfunction popHiddenContext() {\n  entangledRenderLanes = prevEntangledRenderLanesCursor.current;\n  pop(currentTreeHiddenStackCursor);\n  pop(prevEntangledRenderLanesCursor);\n}\nvar renderLanes = 0,\n  currentlyRenderingFiber = null,\n  currentHook = null,\n  workInProgressHook = null,\n  didScheduleRenderPhaseUpdate = !1,\n  didScheduleRenderPhaseUpdateDuringThisPass = !1,\n  shouldDoubleInvokeUserFnsInHooksDEV = !1,\n  localIdCounter = 0,\n  thenableIndexCounter$1 = 0,\n  thenableState$1 = null,\n  globalClientIdCounter = 0;\nfunction throwInvalidHookError() {\n  throw Error(formatProdErrorMessage(321));\n}\nfunction areHookInputsEqual(nextDeps, prevDeps) {\n  if (null === prevDeps) return !1;\n  for (var i = 0; i < prevDeps.length && i < nextDeps.length; i++)\n    if (!objectIs(nextDeps[i], prevDeps[i])) return !1;\n  return !0;\n}\nfunction renderWithHooks(\n  current,\n  workInProgress,\n  Component,\n  props,\n  secondArg,\n  nextRenderLanes\n) {\n  renderLanes = nextRenderLanes;\n  currentlyRenderingFiber = workInProgress;\n  workInProgress.memoizedState = null;\n  workInProgress.updateQueue = null;\n  workInProgress.lanes = 0;\n  ReactSharedInternals.H =\n    null === current || null === current.memoizedState\n      ? HooksDispatcherOnMount\n      : HooksDispatcherOnUpdate;\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  nextRenderLanes = Component(props, secondArg);\n  shouldDoubleInvokeUserFnsInHooksDEV = !1;\n  didScheduleRenderPhaseUpdateDuringThisPass &&\n    (nextRenderLanes = renderWithHooksAgain(\n      workInProgress,\n      Component,\n      props,\n      secondArg\n    ));\n  finishRenderingHooks(current);\n  return nextRenderLanes;\n}\nfunction finishRenderingHooks(current) {\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  var didRenderTooFewHooks = null !== currentHook && null !== currentHook.next;\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdate = !1;\n  thenableIndexCounter$1 = 0;\n  thenableState$1 = null;\n  if (didRenderTooFewHooks) throw Error(formatProdErrorMessage(300));\n  null === current ||\n    didReceiveUpdate ||\n    ((current = current.dependencies),\n    null !== current &&\n      checkIfContextChanged(current) &&\n      (didReceiveUpdate = !0));\n}\nfunction renderWithHooksAgain(workInProgress, Component, props, secondArg) {\n  currentlyRenderingFiber = workInProgress;\n  var numberOfReRenders = 0;\n  do {\n    didScheduleRenderPhaseUpdateDuringThisPass && (thenableState$1 = null);\n    thenableIndexCounter$1 = 0;\n    didScheduleRenderPhaseUpdateDuringThisPass = !1;\n    if (25 <= numberOfReRenders) throw Error(formatProdErrorMessage(301));\n    numberOfReRenders += 1;\n    workInProgressHook = currentHook = null;\n    if (null != workInProgress.updateQueue) {\n      var children = workInProgress.updateQueue;\n      children.lastEffect = null;\n      children.events = null;\n      children.stores = null;\n      null != children.memoCache && (children.memoCache.index = 0);\n    }\n    ReactSharedInternals.H = HooksDispatcherOnRerender;\n    children = Component(props, secondArg);\n  } while (didScheduleRenderPhaseUpdateDuringThisPass);\n  return children;\n}\nfunction TransitionAwareHostComponent() {\n  var dispatcher = ReactSharedInternals.H,\n    maybeThenable = dispatcher.useState()[0];\n  maybeThenable =\n    \"function\" === typeof maybeThenable.then\n      ? useThenable(maybeThenable)\n      : maybeThenable;\n  dispatcher = dispatcher.useState()[0];\n  (null !== currentHook ? currentHook.memoizedState : null) !== dispatcher &&\n    (currentlyRenderingFiber.flags |= 1024);\n  return maybeThenable;\n}\nfunction checkDidRenderIdHook() {\n  var didRenderIdHook = 0 !== localIdCounter;\n  localIdCounter = 0;\n  return didRenderIdHook;\n}\nfunction bailoutHooks(current, workInProgress, lanes) {\n  workInProgress.updateQueue = current.updateQueue;\n  workInProgress.flags &= -2053;\n  current.lanes &= ~lanes;\n}\nfunction resetHooksOnUnwind(workInProgress) {\n  if (didScheduleRenderPhaseUpdate) {\n    for (\n      workInProgress = workInProgress.memoizedState;\n      null !== workInProgress;\n\n    ) {\n      var queue = workInProgress.queue;\n      null !== queue && (queue.pending = null);\n      workInProgress = workInProgress.next;\n    }\n    didScheduleRenderPhaseUpdate = !1;\n  }\n  renderLanes = 0;\n  workInProgressHook = currentHook = currentlyRenderingFiber = null;\n  didScheduleRenderPhaseUpdateDuringThisPass = !1;\n  thenableIndexCounter$1 = localIdCounter = 0;\n  thenableState$1 = null;\n}\nfunction mountWorkInProgressHook() {\n  var hook = {\n    memoizedState: null,\n    baseState: null,\n    baseQueue: null,\n    queue: null,\n    next: null\n  };\n  null === workInProgressHook\n    ? (currentlyRenderingFiber.memoizedState = workInProgressHook = hook)\n    : (workInProgressHook = workInProgressHook.next = hook);\n  return workInProgressHook;\n}\nfunction updateWorkInProgressHook() {\n  if (null === currentHook) {\n    var nextCurrentHook = currentlyRenderingFiber.alternate;\n    nextCurrentHook =\n      null !== nextCurrentHook ? nextCurrentHook.memoizedState : null;\n  } else nextCurrentHook = currentHook.next;\n  var nextWorkInProgressHook =\n    null === workInProgressHook\n      ? currentlyRenderingFiber.memoizedState\n      : workInProgressHook.next;\n  if (null !== nextWorkInProgressHook)\n    (workInProgressHook = nextWorkInProgressHook),\n      (currentHook = nextCurrentHook);\n  else {\n    if (null === nextCurrentHook) {\n      if (null === currentlyRenderingFiber.alternate)\n        throw Error(formatProdErrorMessage(467));\n      throw Error(formatProdErrorMessage(310));\n    }\n    currentHook = nextCurrentHook;\n    nextCurrentHook = {\n      memoizedState: currentHook.memoizedState,\n      baseState: currentHook.baseState,\n      baseQueue: currentHook.baseQueue,\n      queue: currentHook.queue,\n      next: null\n    };\n    null === workInProgressHook\n      ? (currentlyRenderingFiber.memoizedState = workInProgressHook =\n          nextCurrentHook)\n      : (workInProgressHook = workInProgressHook.next = nextCurrentHook);\n  }\n  return workInProgressHook;\n}\nfunction createFunctionComponentUpdateQueue() {\n  return { lastEffect: null, events: null, stores: null, memoCache: null };\n}\nfunction useThenable(thenable) {\n  var index = thenableIndexCounter$1;\n  thenableIndexCounter$1 += 1;\n  null === thenableState$1 && (thenableState$1 = []);\n  thenable = trackUsedThenable(thenableState$1, thenable, index);\n  index = currentlyRenderingFiber;\n  null ===\n    (null === workInProgressHook\n      ? index.memoizedState\n      : workInProgressHook.next) &&\n    ((index = index.alternate),\n    (ReactSharedInternals.H =\n      null === index || null === index.memoizedState\n        ? HooksDispatcherOnMount\n        : HooksDispatcherOnUpdate));\n  return thenable;\n}\nfunction use(usable) {\n  if (null !== usable && \"object\" === typeof usable) {\n    if (\"function\" === typeof usable.then) return useThenable(usable);\n    if (usable.$$typeof === REACT_CONTEXT_TYPE) return readContext(usable);\n  }\n  throw Error(formatProdErrorMessage(438, String(usable)));\n}\nfunction useMemoCache(size) {\n  var memoCache = null,\n    updateQueue = currentlyRenderingFiber.updateQueue;\n  null !== updateQueue && (memoCache = updateQueue.memoCache);\n  if (null == memoCache) {\n    var current = currentlyRenderingFiber.alternate;\n    null !== current &&\n      ((current = current.updateQueue),\n      null !== current &&\n        ((current = current.memoCache),\n        null != current &&\n          (memoCache = {\n            data: current.data.map(function (array) {\n              return array.slice();\n            }),\n            index: 0\n          })));\n  }\n  null == memoCache && (memoCache = { data: [], index: 0 });\n  null === updateQueue &&\n    ((updateQueue = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = updateQueue));\n  updateQueue.memoCache = memoCache;\n  updateQueue = memoCache.data[memoCache.index];\n  if (void 0 === updateQueue)\n    for (\n      updateQueue = memoCache.data[memoCache.index] = Array(size), current = 0;\n      current < size;\n      current++\n    )\n      updateQueue[current] = REACT_MEMO_CACHE_SENTINEL;\n  memoCache.index++;\n  return updateQueue;\n}\nfunction basicStateReducer(state, action) {\n  return \"function\" === typeof action ? action(state) : action;\n}\nfunction updateReducer(reducer) {\n  var hook = updateWorkInProgressHook();\n  return updateReducerImpl(hook, currentHook, reducer);\n}\nfunction updateReducerImpl(hook, current, reducer) {\n  var queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var baseQueue = hook.baseQueue,\n    pendingQueue = queue.pending;\n  if (null !== pendingQueue) {\n    if (null !== baseQueue) {\n      var baseFirst = baseQueue.next;\n      baseQueue.next = pendingQueue.next;\n      pendingQueue.next = baseFirst;\n    }\n    current.baseQueue = baseQueue = pendingQueue;\n    queue.pending = null;\n  }\n  pendingQueue = hook.baseState;\n  if (null === baseQueue) hook.memoizedState = pendingQueue;\n  else {\n    current = baseQueue.next;\n    var newBaseQueueFirst = (baseFirst = null),\n      newBaseQueueLast = null,\n      update = current,\n      didReadFromEntangledAsyncAction$32 = !1;\n    do {\n      var updateLane = update.lane & -536870913;\n      if (\n        updateLane !== update.lane\n          ? (workInProgressRootRenderLanes & updateLane) === updateLane\n          : (renderLanes & updateLane) === updateLane\n      ) {\n        var revertLane = update.revertLane;\n        if (0 === revertLane)\n          null !== newBaseQueueLast &&\n            (newBaseQueueLast = newBaseQueueLast.next =\n              {\n                lane: 0,\n                revertLane: 0,\n                action: update.action,\n                hasEagerState: update.hasEagerState,\n                eagerState: update.eagerState,\n                next: null\n              }),\n            updateLane === currentEntangledLane &&\n              (didReadFromEntangledAsyncAction$32 = !0);\n        else if ((renderLanes & revertLane) === revertLane) {\n          update = update.next;\n          revertLane === currentEntangledLane &&\n            (didReadFromEntangledAsyncAction$32 = !0);\n          continue;\n        } else\n          (updateLane = {\n            lane: 0,\n            revertLane: update.revertLane,\n            action: update.action,\n            hasEagerState: update.hasEagerState,\n            eagerState: update.eagerState,\n            next: null\n          }),\n            null === newBaseQueueLast\n              ? ((newBaseQueueFirst = newBaseQueueLast = updateLane),\n                (baseFirst = pendingQueue))\n              : (newBaseQueueLast = newBaseQueueLast.next = updateLane),\n            (currentlyRenderingFiber.lanes |= revertLane),\n            (workInProgressRootSkippedLanes |= revertLane);\n        updateLane = update.action;\n        shouldDoubleInvokeUserFnsInHooksDEV &&\n          reducer(pendingQueue, updateLane);\n        pendingQueue = update.hasEagerState\n          ? update.eagerState\n          : reducer(pendingQueue, updateLane);\n      } else\n        (revertLane = {\n          lane: updateLane,\n          revertLane: update.revertLane,\n          action: update.action,\n          hasEagerState: update.hasEagerState,\n          eagerState: update.eagerState,\n          next: null\n        }),\n          null === newBaseQueueLast\n            ? ((newBaseQueueFirst = newBaseQueueLast = revertLane),\n              (baseFirst = pendingQueue))\n            : (newBaseQueueLast = newBaseQueueLast.next = revertLane),\n          (currentlyRenderingFiber.lanes |= updateLane),\n          (workInProgressRootSkippedLanes |= updateLane);\n      update = update.next;\n    } while (null !== update && update !== current);\n    null === newBaseQueueLast\n      ? (baseFirst = pendingQueue)\n      : (newBaseQueueLast.next = newBaseQueueFirst);\n    if (\n      !objectIs(pendingQueue, hook.memoizedState) &&\n      ((didReceiveUpdate = !0),\n      didReadFromEntangledAsyncAction$32 &&\n        ((reducer = currentEntangledActionThenable), null !== reducer))\n    )\n      throw reducer;\n    hook.memoizedState = pendingQueue;\n    hook.baseState = baseFirst;\n    hook.baseQueue = newBaseQueueLast;\n    queue.lastRenderedState = pendingQueue;\n  }\n  null === baseQueue && (queue.lanes = 0);\n  return [hook.memoizedState, queue.dispatch];\n}\nfunction rerenderReducer(reducer) {\n  var hook = updateWorkInProgressHook(),\n    queue = hook.queue;\n  if (null === queue) throw Error(formatProdErrorMessage(311));\n  queue.lastRenderedReducer = reducer;\n  var dispatch = queue.dispatch,\n    lastRenderPhaseUpdate = queue.pending,\n    newState = hook.memoizedState;\n  if (null !== lastRenderPhaseUpdate) {\n    queue.pending = null;\n    var update = (lastRenderPhaseUpdate = lastRenderPhaseUpdate.next);\n    do (newState = reducer(newState, update.action)), (update = update.next);\n    while (update !== lastRenderPhaseUpdate);\n    objectIs(newState, hook.memoizedState) || (didReceiveUpdate = !0);\n    hook.memoizedState = newState;\n    null === hook.baseQueue && (hook.baseState = newState);\n    queue.lastRenderedState = newState;\n  }\n  return [newState, dispatch];\n}\nfunction updateSyncExternalStore(subscribe, getSnapshot, getServerSnapshot) {\n  var fiber = currentlyRenderingFiber,\n    hook = updateWorkInProgressHook(),\n    isHydrating$jscomp$0 = isHydrating;\n  if (isHydrating$jscomp$0) {\n    if (void 0 === getServerSnapshot) throw Error(formatProdErrorMessage(407));\n    getServerSnapshot = getServerSnapshot();\n  } else getServerSnapshot = getSnapshot();\n  var snapshotChanged = !objectIs(\n    (currentHook || hook).memoizedState,\n    getServerSnapshot\n  );\n  snapshotChanged &&\n    ((hook.memoizedState = getServerSnapshot), (didReceiveUpdate = !0));\n  hook = hook.queue;\n  var create = subscribeToStore.bind(null, fiber, hook, subscribe);\n  updateEffectImpl(2048, 8, create, [subscribe]);\n  if (\n    hook.getSnapshot !== getSnapshot ||\n    snapshotChanged ||\n    (null !== workInProgressHook && workInProgressHook.memoizedState.tag & 1)\n  ) {\n    fiber.flags |= 2048;\n    pushSimpleEffect(\n      9,\n      createEffectInstance(),\n      updateStoreInstance.bind(\n        null,\n        fiber,\n        hook,\n        getServerSnapshot,\n        getSnapshot\n      ),\n      null\n    );\n    if (null === workInProgressRoot) throw Error(formatProdErrorMessage(349));\n    isHydrating$jscomp$0 ||\n      0 !== (renderLanes & 124) ||\n      pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n  }\n  return getServerSnapshot;\n}\nfunction pushStoreConsistencyCheck(fiber, getSnapshot, renderedSnapshot) {\n  fiber.flags |= 16384;\n  fiber = { getSnapshot: getSnapshot, value: renderedSnapshot };\n  getSnapshot = currentlyRenderingFiber.updateQueue;\n  null === getSnapshot\n    ? ((getSnapshot = createFunctionComponentUpdateQueue()),\n      (currentlyRenderingFiber.updateQueue = getSnapshot),\n      (getSnapshot.stores = [fiber]))\n    : ((renderedSnapshot = getSnapshot.stores),\n      null === renderedSnapshot\n        ? (getSnapshot.stores = [fiber])\n        : renderedSnapshot.push(fiber));\n}\nfunction updateStoreInstance(fiber, inst, nextSnapshot, getSnapshot) {\n  inst.value = nextSnapshot;\n  inst.getSnapshot = getSnapshot;\n  checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n}\nfunction subscribeToStore(fiber, inst, subscribe) {\n  return subscribe(function () {\n    checkIfSnapshotChanged(inst) && forceStoreRerender(fiber);\n  });\n}\nfunction checkIfSnapshotChanged(inst) {\n  var latestGetSnapshot = inst.getSnapshot;\n  inst = inst.value;\n  try {\n    var nextValue = latestGetSnapshot();\n    return !objectIs(inst, nextValue);\n  } catch (error) {\n    return !0;\n  }\n}\nfunction forceStoreRerender(fiber) {\n  var root = enqueueConcurrentRenderForLane(fiber, 2);\n  null !== root && scheduleUpdateOnFiber(root, fiber, 2);\n}\nfunction mountStateImpl(initialState) {\n  var hook = mountWorkInProgressHook();\n  if (\"function\" === typeof initialState) {\n    var initialStateInitializer = initialState;\n    initialState = initialStateInitializer();\n    if (shouldDoubleInvokeUserFnsInHooksDEV) {\n      setIsStrictModeForDevtools(!0);\n      try {\n        initialStateInitializer();\n      } finally {\n        setIsStrictModeForDevtools(!1);\n      }\n    }\n  }\n  hook.memoizedState = hook.baseState = initialState;\n  hook.queue = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: basicStateReducer,\n    lastRenderedState: initialState\n  };\n  return hook;\n}\nfunction updateOptimisticImpl(hook, current, passthrough, reducer) {\n  hook.baseState = passthrough;\n  return updateReducerImpl(\n    hook,\n    currentHook,\n    \"function\" === typeof reducer ? reducer : basicStateReducer\n  );\n}\nfunction dispatchActionState(\n  fiber,\n  actionQueue,\n  setPendingState,\n  setState,\n  payload\n) {\n  if (isRenderPhaseUpdate(fiber)) throw Error(formatProdErrorMessage(485));\n  fiber = actionQueue.action;\n  if (null !== fiber) {\n    var actionNode = {\n      payload: payload,\n      action: fiber,\n      next: null,\n      isTransition: !0,\n      status: \"pending\",\n      value: null,\n      reason: null,\n      listeners: [],\n      then: function (listener) {\n        actionNode.listeners.push(listener);\n      }\n    };\n    null !== ReactSharedInternals.T\n      ? setPendingState(!0)\n      : (actionNode.isTransition = !1);\n    setState(actionNode);\n    setPendingState = actionQueue.pending;\n    null === setPendingState\n      ? ((actionNode.next = actionQueue.pending = actionNode),\n        runActionStateAction(actionQueue, actionNode))\n      : ((actionNode.next = setPendingState.next),\n        (actionQueue.pending = setPendingState.next = actionNode));\n  }\n}\nfunction runActionStateAction(actionQueue, node) {\n  var action = node.action,\n    payload = node.payload,\n    prevState = actionQueue.state;\n  if (node.isTransition) {\n    var prevTransition = ReactSharedInternals.T,\n      currentTransition = {};\n    ReactSharedInternals.T = currentTransition;\n    try {\n      var returnValue = action(prevState, payload),\n        onStartTransitionFinish = ReactSharedInternals.S;\n      null !== onStartTransitionFinish &&\n        onStartTransitionFinish(currentTransition, returnValue);\n      handleActionReturnValue(actionQueue, node, returnValue);\n    } catch (error) {\n      onActionError(actionQueue, node, error);\n    } finally {\n      ReactSharedInternals.T = prevTransition;\n    }\n  } else\n    try {\n      (prevTransition = action(prevState, payload)),\n        handleActionReturnValue(actionQueue, node, prevTransition);\n    } catch (error$38) {\n      onActionError(actionQueue, node, error$38);\n    }\n}\nfunction handleActionReturnValue(actionQueue, node, returnValue) {\n  null !== returnValue &&\n  \"object\" === typeof returnValue &&\n  \"function\" === typeof returnValue.then\n    ? returnValue.then(\n        function (nextState) {\n          onActionSuccess(actionQueue, node, nextState);\n        },\n        function (error) {\n          return onActionError(actionQueue, node, error);\n        }\n      )\n    : onActionSuccess(actionQueue, node, returnValue);\n}\nfunction onActionSuccess(actionQueue, actionNode, nextState) {\n  actionNode.status = \"fulfilled\";\n  actionNode.value = nextState;\n  notifyActionListeners(actionNode);\n  actionQueue.state = nextState;\n  actionNode = actionQueue.pending;\n  null !== actionNode &&\n    ((nextState = actionNode.next),\n    nextState === actionNode\n      ? (actionQueue.pending = null)\n      : ((nextState = nextState.next),\n        (actionNode.next = nextState),\n        runActionStateAction(actionQueue, nextState)));\n}\nfunction onActionError(actionQueue, actionNode, error) {\n  var last = actionQueue.pending;\n  actionQueue.pending = null;\n  if (null !== last) {\n    last = last.next;\n    do\n      (actionNode.status = \"rejected\"),\n        (actionNode.reason = error),\n        notifyActionListeners(actionNode),\n        (actionNode = actionNode.next);\n    while (actionNode !== last);\n  }\n  actionQueue.action = null;\n}\nfunction notifyActionListeners(actionNode) {\n  actionNode = actionNode.listeners;\n  for (var i = 0; i < actionNode.length; i++) (0, actionNode[i])();\n}\nfunction actionStateReducer(oldState, newState) {\n  return newState;\n}\nfunction mountActionState(action, initialStateProp) {\n  if (isHydrating) {\n    var ssrFormState = workInProgressRoot.formState;\n    if (null !== ssrFormState) {\n      a: {\n        var JSCompiler_inline_result = currentlyRenderingFiber;\n        if (isHydrating) {\n          if (nextHydratableInstance) {\n            b: {\n              var JSCompiler_inline_result$jscomp$0 = nextHydratableInstance;\n              for (\n                var inRootOrSingleton = rootOrSingletonContext;\n                8 !== JSCompiler_inline_result$jscomp$0.nodeType;\n\n              ) {\n                if (!inRootOrSingleton) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n                JSCompiler_inline_result$jscomp$0 = getNextHydratable(\n                  JSCompiler_inline_result$jscomp$0.nextSibling\n                );\n                if (null === JSCompiler_inline_result$jscomp$0) {\n                  JSCompiler_inline_result$jscomp$0 = null;\n                  break b;\n                }\n              }\n              inRootOrSingleton = JSCompiler_inline_result$jscomp$0.data;\n              JSCompiler_inline_result$jscomp$0 =\n                \"F!\" === inRootOrSingleton || \"F\" === inRootOrSingleton\n                  ? JSCompiler_inline_result$jscomp$0\n                  : null;\n            }\n            if (JSCompiler_inline_result$jscomp$0) {\n              nextHydratableInstance = getNextHydratable(\n                JSCompiler_inline_result$jscomp$0.nextSibling\n              );\n              JSCompiler_inline_result =\n                \"F!\" === JSCompiler_inline_result$jscomp$0.data;\n              break a;\n            }\n          }\n          throwOnHydrationMismatch(JSCompiler_inline_result);\n        }\n        JSCompiler_inline_result = !1;\n      }\n      JSCompiler_inline_result && (initialStateProp = ssrFormState[0]);\n    }\n  }\n  ssrFormState = mountWorkInProgressHook();\n  ssrFormState.memoizedState = ssrFormState.baseState = initialStateProp;\n  JSCompiler_inline_result = {\n    pending: null,\n    lanes: 0,\n    dispatch: null,\n    lastRenderedReducer: actionStateReducer,\n    lastRenderedState: initialStateProp\n  };\n  ssrFormState.queue = JSCompiler_inline_result;\n  ssrFormState = dispatchSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result\n  );\n  JSCompiler_inline_result.dispatch = ssrFormState;\n  JSCompiler_inline_result = mountStateImpl(!1);\n  inRootOrSingleton = dispatchOptimisticSetState.bind(\n    null,\n    currentlyRenderingFiber,\n    !1,\n    JSCompiler_inline_result.queue\n  );\n  JSCompiler_inline_result = mountWorkInProgressHook();\n  JSCompiler_inline_result$jscomp$0 = {\n    state: initialStateProp,\n    dispatch: null,\n    action: action,\n    pending: null\n  };\n  JSCompiler_inline_result.queue = JSCompiler_inline_result$jscomp$0;\n  ssrFormState = dispatchActionState.bind(\n    null,\n    currentlyRenderingFiber,\n    JSCompiler_inline_result$jscomp$0,\n    inRootOrSingleton,\n    ssrFormState\n  );\n  JSCompiler_inline_result$jscomp$0.dispatch = ssrFormState;\n  JSCompiler_inline_result.memoizedState = action;\n  return [initialStateProp, ssrFormState, !1];\n}\nfunction updateActionState(action) {\n  var stateHook = updateWorkInProgressHook();\n  return updateActionStateImpl(stateHook, currentHook, action);\n}\nfunction updateActionStateImpl(stateHook, currentStateHook, action) {\n  currentStateHook = updateReducerImpl(\n    stateHook,\n    currentStateHook,\n    actionStateReducer\n  )[0];\n  stateHook = updateReducer(basicStateReducer)[0];\n  if (\n    \"object\" === typeof currentStateHook &&\n    null !== currentStateHook &&\n    \"function\" === typeof currentStateHook.then\n  )\n    try {\n      var state = useThenable(currentStateHook);\n    } catch (x) {\n      if (x === SuspenseException) throw SuspenseActionException;\n      throw x;\n    }\n  else state = currentStateHook;\n  currentStateHook = updateWorkInProgressHook();\n  var actionQueue = currentStateHook.queue,\n    dispatch = actionQueue.dispatch;\n  action !== currentStateHook.memoizedState &&\n    ((currentlyRenderingFiber.flags |= 2048),\n    pushSimpleEffect(\n      9,\n      createEffectInstance(),\n      actionStateActionEffect.bind(null, actionQueue, action),\n      null\n    ));\n  return [state, dispatch, stateHook];\n}\nfunction actionStateActionEffect(actionQueue, action) {\n  actionQueue.action = action;\n}\nfunction rerenderActionState(action) {\n  var stateHook = updateWorkInProgressHook(),\n    currentStateHook = currentHook;\n  if (null !== currentStateHook)\n    return updateActionStateImpl(stateHook, currentStateHook, action);\n  updateWorkInProgressHook();\n  stateHook = stateHook.memoizedState;\n  currentStateHook = updateWorkInProgressHook();\n  var dispatch = currentStateHook.queue.dispatch;\n  currentStateHook.memoizedState = action;\n  return [stateHook, dispatch, !1];\n}\nfunction pushSimpleEffect(tag, inst, create, createDeps) {\n  tag = { tag: tag, create: create, deps: createDeps, inst: inst, next: null };\n  inst = currentlyRenderingFiber.updateQueue;\n  null === inst &&\n    ((inst = createFunctionComponentUpdateQueue()),\n    (currentlyRenderingFiber.updateQueue = inst));\n  create = inst.lastEffect;\n  null === create\n    ? (inst.lastEffect = tag.next = tag)\n    : ((createDeps = create.next),\n      (create.next = tag),\n      (tag.next = createDeps),\n      (inst.lastEffect = tag));\n  return tag;\n}\nfunction createEffectInstance() {\n  return { destroy: void 0, resource: void 0 };\n}\nfunction updateRef() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction mountEffectImpl(fiberFlags, hookFlags, create, createDeps) {\n  var hook = mountWorkInProgressHook();\n  createDeps = void 0 === createDeps ? null : createDeps;\n  currentlyRenderingFiber.flags |= fiberFlags;\n  hook.memoizedState = pushSimpleEffect(\n    1 | hookFlags,\n    createEffectInstance(),\n    create,\n    createDeps\n  );\n}\nfunction updateEffectImpl(fiberFlags, hookFlags, create, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var inst = hook.memoizedState.inst;\n  null !== currentHook &&\n  null !== deps &&\n  areHookInputsEqual(deps, currentHook.memoizedState.deps)\n    ? (hook.memoizedState = pushSimpleEffect(hookFlags, inst, create, deps))\n    : ((currentlyRenderingFiber.flags |= fiberFlags),\n      (hook.memoizedState = pushSimpleEffect(\n        1 | hookFlags,\n        inst,\n        create,\n        deps\n      )));\n}\nfunction mountEffect(create, createDeps) {\n  mountEffectImpl(8390656, 8, create, createDeps);\n}\nfunction updateEffect(create, createDeps) {\n  updateEffectImpl(2048, 8, create, createDeps);\n}\nfunction updateInsertionEffect(create, deps) {\n  return updateEffectImpl(4, 2, create, deps);\n}\nfunction updateLayoutEffect(create, deps) {\n  return updateEffectImpl(4, 4, create, deps);\n}\nfunction imperativeHandleEffect(create, ref) {\n  if (\"function\" === typeof ref) {\n    create = create();\n    var refCleanup = ref(create);\n    return function () {\n      \"function\" === typeof refCleanup ? refCleanup() : ref(null);\n    };\n  }\n  if (null !== ref && void 0 !== ref)\n    return (\n      (create = create()),\n      (ref.current = create),\n      function () {\n        ref.current = null;\n      }\n    );\n}\nfunction updateImperativeHandle(ref, create, deps) {\n  deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n  updateEffectImpl(4, 4, imperativeHandleEffect.bind(null, create, ref), deps);\n}\nfunction mountDebugValue() {}\nfunction updateCallback(callback, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  hook.memoizedState = [callback, deps];\n  return callback;\n}\nfunction updateMemo(nextCreate, deps) {\n  var hook = updateWorkInProgressHook();\n  deps = void 0 === deps ? null : deps;\n  var prevState = hook.memoizedState;\n  if (null !== deps && areHookInputsEqual(deps, prevState[1]))\n    return prevState[0];\n  prevState = nextCreate();\n  if (shouldDoubleInvokeUserFnsInHooksDEV) {\n    setIsStrictModeForDevtools(!0);\n    try {\n      nextCreate();\n    } finally {\n      setIsStrictModeForDevtools(!1);\n    }\n  }\n  hook.memoizedState = [prevState, deps];\n  return prevState;\n}\nfunction mountDeferredValueImpl(hook, value, initialValue) {\n  if (void 0 === initialValue || 0 !== (renderLanes & 1073741824))\n    return (hook.memoizedState = value);\n  hook.memoizedState = initialValue;\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return initialValue;\n}\nfunction updateDeferredValueImpl(hook, prevValue, value, initialValue) {\n  if (objectIs(value, prevValue)) return value;\n  if (null !== currentTreeHiddenStackCursor.current)\n    return (\n      (hook = mountDeferredValueImpl(hook, value, initialValue)),\n      objectIs(hook, prevValue) || (didReceiveUpdate = !0),\n      hook\n    );\n  if (0 === (renderLanes & 42))\n    return (didReceiveUpdate = !0), (hook.memoizedState = value);\n  hook = requestDeferredLane();\n  currentlyRenderingFiber.lanes |= hook;\n  workInProgressRootSkippedLanes |= hook;\n  return prevValue;\n}\nfunction startTransition(fiber, queue, pendingState, finishedState, callback) {\n  var previousPriority = ReactDOMSharedInternals.p;\n  ReactDOMSharedInternals.p =\n    0 !== previousPriority && 8 > previousPriority ? previousPriority : 8;\n  var prevTransition = ReactSharedInternals.T,\n    currentTransition = {};\n  ReactSharedInternals.T = currentTransition;\n  dispatchOptimisticSetState(fiber, !1, queue, pendingState);\n  try {\n    var returnValue = callback(),\n      onStartTransitionFinish = ReactSharedInternals.S;\n    null !== onStartTransitionFinish &&\n      onStartTransitionFinish(currentTransition, returnValue);\n    if (\n      null !== returnValue &&\n      \"object\" === typeof returnValue &&\n      \"function\" === typeof returnValue.then\n    ) {\n      var thenableForFinishedState = chainThenableValue(\n        returnValue,\n        finishedState\n      );\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        thenableForFinishedState,\n        requestUpdateLane(fiber)\n      );\n    } else\n      dispatchSetStateInternal(\n        fiber,\n        queue,\n        finishedState,\n        requestUpdateLane(fiber)\n      );\n  } catch (error) {\n    dispatchSetStateInternal(\n      fiber,\n      queue,\n      { then: function () {}, status: \"rejected\", reason: error },\n      requestUpdateLane()\n    );\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction noop$2() {}\nfunction startHostTransition(formFiber, pendingState, action, formData) {\n  if (5 !== formFiber.tag) throw Error(formatProdErrorMessage(476));\n  var queue = ensureFormComponentIsStateful(formFiber).queue;\n  startTransition(\n    formFiber,\n    queue,\n    pendingState,\n    sharedNotPendingObject,\n    null === action\n      ? noop$2\n      : function () {\n          requestFormReset$1(formFiber);\n          return action(formData);\n        }\n  );\n}\nfunction ensureFormComponentIsStateful(formFiber) {\n  var existingStateHook = formFiber.memoizedState;\n  if (null !== existingStateHook) return existingStateHook;\n  existingStateHook = {\n    memoizedState: sharedNotPendingObject,\n    baseState: sharedNotPendingObject,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: sharedNotPendingObject\n    },\n    next: null\n  };\n  var initialResetState = {};\n  existingStateHook.next = {\n    memoizedState: initialResetState,\n    baseState: initialResetState,\n    baseQueue: null,\n    queue: {\n      pending: null,\n      lanes: 0,\n      dispatch: null,\n      lastRenderedReducer: basicStateReducer,\n      lastRenderedState: initialResetState\n    },\n    next: null\n  };\n  formFiber.memoizedState = existingStateHook;\n  formFiber = formFiber.alternate;\n  null !== formFiber && (formFiber.memoizedState = existingStateHook);\n  return existingStateHook;\n}\nfunction requestFormReset$1(formFiber) {\n  var resetStateQueue = ensureFormComponentIsStateful(formFiber).next.queue;\n  dispatchSetStateInternal(formFiber, resetStateQueue, {}, requestUpdateLane());\n}\nfunction useHostTransitionStatus() {\n  return readContext(HostTransitionContext);\n}\nfunction updateId() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction updateRefresh() {\n  return updateWorkInProgressHook().memoizedState;\n}\nfunction refreshCache(fiber) {\n  for (var provider = fiber.return; null !== provider; ) {\n    switch (provider.tag) {\n      case 24:\n      case 3:\n        var lane = requestUpdateLane();\n        fiber = createUpdate(lane);\n        var root$41 = enqueueUpdate(provider, fiber, lane);\n        null !== root$41 &&\n          (scheduleUpdateOnFiber(root$41, provider, lane),\n          entangleTransitions(root$41, provider, lane));\n        provider = { cache: createCache() };\n        fiber.payload = provider;\n        return;\n    }\n    provider = provider.return;\n  }\n}\nfunction dispatchReducerAction(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  action = {\n    lane: lane,\n    revertLane: 0,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  isRenderPhaseUpdate(fiber)\n    ? enqueueRenderPhaseUpdate(queue, action)\n    : ((action = enqueueConcurrentHookUpdate(fiber, queue, action, lane)),\n      null !== action &&\n        (scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane)));\n}\nfunction dispatchSetState(fiber, queue, action) {\n  var lane = requestUpdateLane();\n  dispatchSetStateInternal(fiber, queue, action, lane);\n}\nfunction dispatchSetStateInternal(fiber, queue, action, lane) {\n  var update = {\n    lane: lane,\n    revertLane: 0,\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) enqueueRenderPhaseUpdate(queue, update);\n  else {\n    var alternate = fiber.alternate;\n    if (\n      0 === fiber.lanes &&\n      (null === alternate || 0 === alternate.lanes) &&\n      ((alternate = queue.lastRenderedReducer), null !== alternate)\n    )\n      try {\n        var currentState = queue.lastRenderedState,\n          eagerState = alternate(currentState, action);\n        update.hasEagerState = !0;\n        update.eagerState = eagerState;\n        if (objectIs(eagerState, currentState))\n          return (\n            enqueueUpdate$1(fiber, queue, update, 0),\n            null === workInProgressRoot && finishQueueingConcurrentUpdates(),\n            !1\n          );\n      } catch (error) {\n      } finally {\n      }\n    action = enqueueConcurrentHookUpdate(fiber, queue, update, lane);\n    if (null !== action)\n      return (\n        scheduleUpdateOnFiber(action, fiber, lane),\n        entangleTransitionUpdate(action, queue, lane),\n        !0\n      );\n  }\n  return !1;\n}\nfunction dispatchOptimisticSetState(fiber, throwIfDuringRender, queue, action) {\n  action = {\n    lane: 2,\n    revertLane: requestTransitionLane(),\n    action: action,\n    hasEagerState: !1,\n    eagerState: null,\n    next: null\n  };\n  if (isRenderPhaseUpdate(fiber)) {\n    if (throwIfDuringRender) throw Error(formatProdErrorMessage(479));\n  } else\n    (throwIfDuringRender = enqueueConcurrentHookUpdate(\n      fiber,\n      queue,\n      action,\n      2\n    )),\n      null !== throwIfDuringRender &&\n        scheduleUpdateOnFiber(throwIfDuringRender, fiber, 2);\n}\nfunction isRenderPhaseUpdate(fiber) {\n  var alternate = fiber.alternate;\n  return (\n    fiber === currentlyRenderingFiber ||\n    (null !== alternate && alternate === currentlyRenderingFiber)\n  );\n}\nfunction enqueueRenderPhaseUpdate(queue, update) {\n  didScheduleRenderPhaseUpdateDuringThisPass = didScheduleRenderPhaseUpdate =\n    !0;\n  var pending = queue.pending;\n  null === pending\n    ? (update.next = update)\n    : ((update.next = pending.next), (pending.next = update));\n  queue.pending = update;\n}\nfunction entangleTransitionUpdate(root, queue, lane) {\n  if (0 !== (lane & 4194048)) {\n    var queueLanes = queue.lanes;\n    queueLanes &= root.pendingLanes;\n    lane |= queueLanes;\n    queue.lanes = lane;\n    markRootEntangled(root, lane);\n  }\n}\nvar ContextOnlyDispatcher = {\n    readContext: readContext,\n    use: use,\n    useCallback: throwInvalidHookError,\n    useContext: throwInvalidHookError,\n    useEffect: throwInvalidHookError,\n    useImperativeHandle: throwInvalidHookError,\n    useLayoutEffect: throwInvalidHookError,\n    useInsertionEffect: throwInvalidHookError,\n    useMemo: throwInvalidHookError,\n    useReducer: throwInvalidHookError,\n    useRef: throwInvalidHookError,\n    useState: throwInvalidHookError,\n    useDebugValue: throwInvalidHookError,\n    useDeferredValue: throwInvalidHookError,\n    useTransition: throwInvalidHookError,\n    useSyncExternalStore: throwInvalidHookError,\n    useId: throwInvalidHookError,\n    useHostTransitionStatus: throwInvalidHookError,\n    useFormState: throwInvalidHookError,\n    useActionState: throwInvalidHookError,\n    useOptimistic: throwInvalidHookError,\n    useMemoCache: throwInvalidHookError,\n    useCacheRefresh: throwInvalidHookError\n  },\n  HooksDispatcherOnMount = {\n    readContext: readContext,\n    use: use,\n    useCallback: function (callback, deps) {\n      mountWorkInProgressHook().memoizedState = [\n        callback,\n        void 0 === deps ? null : deps\n      ];\n      return callback;\n    },\n    useContext: readContext,\n    useEffect: mountEffect,\n    useImperativeHandle: function (ref, create, deps) {\n      deps = null !== deps && void 0 !== deps ? deps.concat([ref]) : null;\n      mountEffectImpl(\n        4194308,\n        4,\n        imperativeHandleEffect.bind(null, create, ref),\n        deps\n      );\n    },\n    useLayoutEffect: function (create, deps) {\n      return mountEffectImpl(4194308, 4, create, deps);\n    },\n    useInsertionEffect: function (create, deps) {\n      mountEffectImpl(4, 2, create, deps);\n    },\n    useMemo: function (nextCreate, deps) {\n      var hook = mountWorkInProgressHook();\n      deps = void 0 === deps ? null : deps;\n      var nextValue = nextCreate();\n      if (shouldDoubleInvokeUserFnsInHooksDEV) {\n        setIsStrictModeForDevtools(!0);\n        try {\n          nextCreate();\n        } finally {\n          setIsStrictModeForDevtools(!1);\n        }\n      }\n      hook.memoizedState = [nextValue, deps];\n      return nextValue;\n    },\n    useReducer: function (reducer, initialArg, init) {\n      var hook = mountWorkInProgressHook();\n      if (void 0 !== init) {\n        var initialState = init(initialArg);\n        if (shouldDoubleInvokeUserFnsInHooksDEV) {\n          setIsStrictModeForDevtools(!0);\n          try {\n            init(initialArg);\n          } finally {\n            setIsStrictModeForDevtools(!1);\n          }\n        }\n      } else initialState = initialArg;\n      hook.memoizedState = hook.baseState = initialState;\n      reducer = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: reducer,\n        lastRenderedState: initialState\n      };\n      hook.queue = reducer;\n      reducer = reducer.dispatch = dispatchReducerAction.bind(\n        null,\n        currentlyRenderingFiber,\n        reducer\n      );\n      return [hook.memoizedState, reducer];\n    },\n    useRef: function (initialValue) {\n      var hook = mountWorkInProgressHook();\n      initialValue = { current: initialValue };\n      return (hook.memoizedState = initialValue);\n    },\n    useState: function (initialState) {\n      initialState = mountStateImpl(initialState);\n      var queue = initialState.queue,\n        dispatch = dispatchSetState.bind(null, currentlyRenderingFiber, queue);\n      queue.dispatch = dispatch;\n      return [initialState.memoizedState, dispatch];\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = mountWorkInProgressHook();\n      return mountDeferredValueImpl(hook, value, initialValue);\n    },\n    useTransition: function () {\n      var stateHook = mountStateImpl(!1);\n      stateHook = startTransition.bind(\n        null,\n        currentlyRenderingFiber,\n        stateHook.queue,\n        !0,\n        !1\n      );\n      mountWorkInProgressHook().memoizedState = stateHook;\n      return [!1, stateHook];\n    },\n    useSyncExternalStore: function (subscribe, getSnapshot, getServerSnapshot) {\n      var fiber = currentlyRenderingFiber,\n        hook = mountWorkInProgressHook();\n      if (isHydrating) {\n        if (void 0 === getServerSnapshot)\n          throw Error(formatProdErrorMessage(407));\n        getServerSnapshot = getServerSnapshot();\n      } else {\n        getServerSnapshot = getSnapshot();\n        if (null === workInProgressRoot)\n          throw Error(formatProdErrorMessage(349));\n        0 !== (workInProgressRootRenderLanes & 124) ||\n          pushStoreConsistencyCheck(fiber, getSnapshot, getServerSnapshot);\n      }\n      hook.memoizedState = getServerSnapshot;\n      var inst = { value: getServerSnapshot, getSnapshot: getSnapshot };\n      hook.queue = inst;\n      mountEffect(subscribeToStore.bind(null, fiber, inst, subscribe), [\n        subscribe\n      ]);\n      fiber.flags |= 2048;\n      pushSimpleEffect(\n        9,\n        createEffectInstance(),\n        updateStoreInstance.bind(\n          null,\n          fiber,\n          inst,\n          getServerSnapshot,\n          getSnapshot\n        ),\n        null\n      );\n      return getServerSnapshot;\n    },\n    useId: function () {\n      var hook = mountWorkInProgressHook(),\n        identifierPrefix = workInProgressRoot.identifierPrefix;\n      if (isHydrating) {\n        var JSCompiler_inline_result = treeContextOverflow;\n        var idWithLeadingBit = treeContextId;\n        JSCompiler_inline_result =\n          (\n            idWithLeadingBit & ~(1 << (32 - clz32(idWithLeadingBit) - 1))\n          ).toString(32) + JSCompiler_inline_result;\n        identifierPrefix =\n          \"\\u00ab\" + identifierPrefix + \"R\" + JSCompiler_inline_result;\n        JSCompiler_inline_result = localIdCounter++;\n        0 < JSCompiler_inline_result &&\n          (identifierPrefix += \"H\" + JSCompiler_inline_result.toString(32));\n        identifierPrefix += \"\\u00bb\";\n      } else\n        (JSCompiler_inline_result = globalClientIdCounter++),\n          (identifierPrefix =\n            \"\\u00ab\" +\n            identifierPrefix +\n            \"r\" +\n            JSCompiler_inline_result.toString(32) +\n            \"\\u00bb\");\n      return (hook.memoizedState = identifierPrefix);\n    },\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: mountActionState,\n    useActionState: mountActionState,\n    useOptimistic: function (passthrough) {\n      var hook = mountWorkInProgressHook();\n      hook.memoizedState = hook.baseState = passthrough;\n      var queue = {\n        pending: null,\n        lanes: 0,\n        dispatch: null,\n        lastRenderedReducer: null,\n        lastRenderedState: null\n      };\n      hook.queue = queue;\n      hook = dispatchOptimisticSetState.bind(\n        null,\n        currentlyRenderingFiber,\n        !0,\n        queue\n      );\n      queue.dispatch = hook;\n      return [passthrough, hook];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: function () {\n      return (mountWorkInProgressHook().memoizedState = refreshCache.bind(\n        null,\n        currentlyRenderingFiber\n      ));\n    }\n  },\n  HooksDispatcherOnUpdate = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: updateReducer,\n    useRef: updateRef,\n    useState: function () {\n      return updateReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return updateDeferredValueImpl(\n        hook,\n        currentHook.memoizedState,\n        value,\n        initialValue\n      );\n    },\n    useTransition: function () {\n      var booleanOrThenable = updateReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: updateActionState,\n    useActionState: updateActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  },\n  HooksDispatcherOnRerender = {\n    readContext: readContext,\n    use: use,\n    useCallback: updateCallback,\n    useContext: readContext,\n    useEffect: updateEffect,\n    useImperativeHandle: updateImperativeHandle,\n    useInsertionEffect: updateInsertionEffect,\n    useLayoutEffect: updateLayoutEffect,\n    useMemo: updateMemo,\n    useReducer: rerenderReducer,\n    useRef: updateRef,\n    useState: function () {\n      return rerenderReducer(basicStateReducer);\n    },\n    useDebugValue: mountDebugValue,\n    useDeferredValue: function (value, initialValue) {\n      var hook = updateWorkInProgressHook();\n      return null === currentHook\n        ? mountDeferredValueImpl(hook, value, initialValue)\n        : updateDeferredValueImpl(\n            hook,\n            currentHook.memoizedState,\n            value,\n            initialValue\n          );\n    },\n    useTransition: function () {\n      var booleanOrThenable = rerenderReducer(basicStateReducer)[0],\n        start = updateWorkInProgressHook().memoizedState;\n      return [\n        \"boolean\" === typeof booleanOrThenable\n          ? booleanOrThenable\n          : useThenable(booleanOrThenable),\n        start\n      ];\n    },\n    useSyncExternalStore: updateSyncExternalStore,\n    useId: updateId,\n    useHostTransitionStatus: useHostTransitionStatus,\n    useFormState: rerenderActionState,\n    useActionState: rerenderActionState,\n    useOptimistic: function (passthrough, reducer) {\n      var hook = updateWorkInProgressHook();\n      if (null !== currentHook)\n        return updateOptimisticImpl(hook, currentHook, passthrough, reducer);\n      hook.baseState = passthrough;\n      return [passthrough, hook.queue.dispatch];\n    },\n    useMemoCache: useMemoCache,\n    useCacheRefresh: updateRefresh\n  },\n  thenableState = null,\n  thenableIndexCounter = 0;\nfunction unwrapThenable(thenable) {\n  var index = thenableIndexCounter;\n  thenableIndexCounter += 1;\n  null === thenableState && (thenableState = []);\n  return trackUsedThenable(thenableState, thenable, index);\n}\nfunction coerceRef(workInProgress, element) {\n  element = element.props.ref;\n  workInProgress.ref = void 0 !== element ? element : null;\n}\nfunction throwOnInvalidObjectType(returnFiber, newChild) {\n  if (newChild.$$typeof === REACT_LEGACY_ELEMENT_TYPE)\n    throw Error(formatProdErrorMessage(525));\n  returnFiber = Object.prototype.toString.call(newChild);\n  throw Error(\n    formatProdErrorMessage(\n      31,\n      \"[object Object]\" === returnFiber\n        ? \"object with keys {\" + Object.keys(newChild).join(\", \") + \"}\"\n        : returnFiber\n    )\n  );\n}\nfunction resolveLazy(lazyType) {\n  var init = lazyType._init;\n  return init(lazyType._payload);\n}\nfunction createChildReconciler(shouldTrackSideEffects) {\n  function deleteChild(returnFiber, childToDelete) {\n    if (shouldTrackSideEffects) {\n      var deletions = returnFiber.deletions;\n      null === deletions\n        ? ((returnFiber.deletions = [childToDelete]), (returnFiber.flags |= 16))\n        : deletions.push(childToDelete);\n    }\n  }\n  function deleteRemainingChildren(returnFiber, currentFirstChild) {\n    if (!shouldTrackSideEffects) return null;\n    for (; null !== currentFirstChild; )\n      deleteChild(returnFiber, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return null;\n  }\n  function mapRemainingChildren(currentFirstChild) {\n    for (var existingChildren = new Map(); null !== currentFirstChild; )\n      null !== currentFirstChild.key\n        ? existingChildren.set(currentFirstChild.key, currentFirstChild)\n        : existingChildren.set(currentFirstChild.index, currentFirstChild),\n        (currentFirstChild = currentFirstChild.sibling);\n    return existingChildren;\n  }\n  function useFiber(fiber, pendingProps) {\n    fiber = createWorkInProgress(fiber, pendingProps);\n    fiber.index = 0;\n    fiber.sibling = null;\n    return fiber;\n  }\n  function placeChild(newFiber, lastPlacedIndex, newIndex) {\n    newFiber.index = newIndex;\n    if (!shouldTrackSideEffects)\n      return (newFiber.flags |= 1048576), lastPlacedIndex;\n    newIndex = newFiber.alternate;\n    if (null !== newIndex)\n      return (\n        (newIndex = newIndex.index),\n        newIndex < lastPlacedIndex\n          ? ((newFiber.flags |= 67108866), lastPlacedIndex)\n          : newIndex\n      );\n    newFiber.flags |= 67108866;\n    return lastPlacedIndex;\n  }\n  function placeSingleChild(newFiber) {\n    shouldTrackSideEffects &&\n      null === newFiber.alternate &&\n      (newFiber.flags |= 67108866);\n    return newFiber;\n  }\n  function updateTextNode(returnFiber, current, textContent, lanes) {\n    if (null === current || 6 !== current.tag)\n      return (\n        (current = createFiberFromText(textContent, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, textContent);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateElement(returnFiber, current, element, lanes) {\n    var elementType = element.type;\n    if (elementType === REACT_FRAGMENT_TYPE)\n      return updateFragment(\n        returnFiber,\n        current,\n        element.props.children,\n        lanes,\n        element.key\n      );\n    if (\n      null !== current &&\n      (current.elementType === elementType ||\n        (\"object\" === typeof elementType &&\n          null !== elementType &&\n          elementType.$$typeof === REACT_LAZY_TYPE &&\n          resolveLazy(elementType) === current.type))\n    )\n      return (\n        (current = useFiber(current, element.props)),\n        coerceRef(current, element),\n        (current.return = returnFiber),\n        current\n      );\n    current = createFiberFromTypeAndProps(\n      element.type,\n      element.key,\n      element.props,\n      null,\n      returnFiber.mode,\n      lanes\n    );\n    coerceRef(current, element);\n    current.return = returnFiber;\n    return current;\n  }\n  function updatePortal(returnFiber, current, portal, lanes) {\n    if (\n      null === current ||\n      4 !== current.tag ||\n      current.stateNode.containerInfo !== portal.containerInfo ||\n      current.stateNode.implementation !== portal.implementation\n    )\n      return (\n        (current = createFiberFromPortal(portal, returnFiber.mode, lanes)),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, portal.children || []);\n    current.return = returnFiber;\n    return current;\n  }\n  function updateFragment(returnFiber, current, fragment, lanes, key) {\n    if (null === current || 7 !== current.tag)\n      return (\n        (current = createFiberFromFragment(\n          fragment,\n          returnFiber.mode,\n          lanes,\n          key\n        )),\n        (current.return = returnFiber),\n        current\n      );\n    current = useFiber(current, fragment);\n    current.return = returnFiber;\n    return current;\n  }\n  function createChild(returnFiber, newChild, lanes) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (newChild = createFiberFromText(\n          \"\" + newChild,\n          returnFiber.mode,\n          lanes\n        )),\n        (newChild.return = returnFiber),\n        newChild\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (lanes = createFiberFromTypeAndProps(\n              newChild.type,\n              newChild.key,\n              newChild.props,\n              null,\n              returnFiber.mode,\n              lanes\n            )),\n            coerceRef(lanes, newChild),\n            (lanes.return = returnFiber),\n            lanes\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (newChild = createFiberFromPortal(\n              newChild,\n              returnFiber.mode,\n              lanes\n            )),\n            (newChild.return = returnFiber),\n            newChild\n          );\n        case REACT_LAZY_TYPE:\n          var init = newChild._init;\n          newChild = init(newChild._payload);\n          return createChild(returnFiber, newChild, lanes);\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (newChild = createFiberFromFragment(\n            newChild,\n            returnFiber.mode,\n            lanes,\n            null\n          )),\n          (newChild.return = returnFiber),\n          newChild\n        );\n      if (\"function\" === typeof newChild.then)\n        return createChild(returnFiber, unwrapThenable(newChild), lanes);\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return createChild(\n          returnFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateSlot(returnFiber, oldFiber, newChild, lanes) {\n    var key = null !== oldFiber ? oldFiber.key : null;\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return null !== key\n        ? null\n        : updateTextNode(returnFiber, oldFiber, \"\" + newChild, lanes);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return newChild.key === key\n            ? updateElement(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_PORTAL_TYPE:\n          return newChild.key === key\n            ? updatePortal(returnFiber, oldFiber, newChild, lanes)\n            : null;\n        case REACT_LAZY_TYPE:\n          return (\n            (key = newChild._init),\n            (newChild = key(newChild._payload)),\n            updateSlot(returnFiber, oldFiber, newChild, lanes)\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return null !== key\n          ? null\n          : updateFragment(returnFiber, oldFiber, newChild, lanes, null);\n      if (\"function\" === typeof newChild.then)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateSlot(\n          returnFiber,\n          oldFiber,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function updateFromMap(\n    existingChildren,\n    returnFiber,\n    newIdx,\n    newChild,\n    lanes\n  ) {\n    if (\n      (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n    )\n      return (\n        (existingChildren = existingChildren.get(newIdx) || null),\n        updateTextNode(returnFiber, existingChildren, \"\" + newChild, lanes)\n      );\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updateElement(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_PORTAL_TYPE:\n          return (\n            (existingChildren =\n              existingChildren.get(\n                null === newChild.key ? newIdx : newChild.key\n              ) || null),\n            updatePortal(returnFiber, existingChildren, newChild, lanes)\n          );\n        case REACT_LAZY_TYPE:\n          var init = newChild._init;\n          newChild = init(newChild._payload);\n          return updateFromMap(\n            existingChildren,\n            returnFiber,\n            newIdx,\n            newChild,\n            lanes\n          );\n      }\n      if (isArrayImpl(newChild) || getIteratorFn(newChild))\n        return (\n          (existingChildren = existingChildren.get(newIdx) || null),\n          updateFragment(returnFiber, existingChildren, newChild, lanes, null)\n        );\n      if (\"function\" === typeof newChild.then)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return updateFromMap(\n          existingChildren,\n          returnFiber,\n          newIdx,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return null;\n  }\n  function reconcileChildrenArray(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null;\n      null !== oldFiber && newIdx < newChildren.length;\n      newIdx++\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(\n        returnFiber,\n        oldFiber,\n        newChildren[newIdx],\n        lanes\n      );\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (newIdx === newChildren.length)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; newIdx < newChildren.length; newIdx++)\n        (oldFiber = createChild(returnFiber, newChildren[newIdx], lanes)),\n          null !== oldFiber &&\n            ((currentFirstChild = placeChild(\n              oldFiber,\n              currentFirstChild,\n              newIdx\n            )),\n            null === previousNewFiber\n              ? (resultingFirstChild = oldFiber)\n              : (previousNewFiber.sibling = oldFiber),\n            (previousNewFiber = oldFiber));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      newIdx < newChildren.length;\n      newIdx++\n    )\n      (nextOldFiber = updateFromMap(\n        oldFiber,\n        returnFiber,\n        newIdx,\n        newChildren[newIdx],\n        lanes\n      )),\n        null !== nextOldFiber &&\n          (shouldTrackSideEffects &&\n            null !== nextOldFiber.alternate &&\n            oldFiber.delete(\n              null === nextOldFiber.key ? newIdx : nextOldFiber.key\n            ),\n          (currentFirstChild = placeChild(\n            nextOldFiber,\n            currentFirstChild,\n            newIdx\n          )),\n          null === previousNewFiber\n            ? (resultingFirstChild = nextOldFiber)\n            : (previousNewFiber.sibling = nextOldFiber),\n          (previousNewFiber = nextOldFiber));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildrenIterator(\n    returnFiber,\n    currentFirstChild,\n    newChildren,\n    lanes\n  ) {\n    if (null == newChildren) throw Error(formatProdErrorMessage(151));\n    for (\n      var resultingFirstChild = null,\n        previousNewFiber = null,\n        oldFiber = currentFirstChild,\n        newIdx = (currentFirstChild = 0),\n        nextOldFiber = null,\n        step = newChildren.next();\n      null !== oldFiber && !step.done;\n      newIdx++, step = newChildren.next()\n    ) {\n      oldFiber.index > newIdx\n        ? ((nextOldFiber = oldFiber), (oldFiber = null))\n        : (nextOldFiber = oldFiber.sibling);\n      var newFiber = updateSlot(returnFiber, oldFiber, step.value, lanes);\n      if (null === newFiber) {\n        null === oldFiber && (oldFiber = nextOldFiber);\n        break;\n      }\n      shouldTrackSideEffects &&\n        oldFiber &&\n        null === newFiber.alternate &&\n        deleteChild(returnFiber, oldFiber);\n      currentFirstChild = placeChild(newFiber, currentFirstChild, newIdx);\n      null === previousNewFiber\n        ? (resultingFirstChild = newFiber)\n        : (previousNewFiber.sibling = newFiber);\n      previousNewFiber = newFiber;\n      oldFiber = nextOldFiber;\n    }\n    if (step.done)\n      return (\n        deleteRemainingChildren(returnFiber, oldFiber),\n        isHydrating && pushTreeFork(returnFiber, newIdx),\n        resultingFirstChild\n      );\n    if (null === oldFiber) {\n      for (; !step.done; newIdx++, step = newChildren.next())\n        (step = createChild(returnFiber, step.value, lanes)),\n          null !== step &&\n            ((currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n            null === previousNewFiber\n              ? (resultingFirstChild = step)\n              : (previousNewFiber.sibling = step),\n            (previousNewFiber = step));\n      isHydrating && pushTreeFork(returnFiber, newIdx);\n      return resultingFirstChild;\n    }\n    for (\n      oldFiber = mapRemainingChildren(oldFiber);\n      !step.done;\n      newIdx++, step = newChildren.next()\n    )\n      (step = updateFromMap(oldFiber, returnFiber, newIdx, step.value, lanes)),\n        null !== step &&\n          (shouldTrackSideEffects &&\n            null !== step.alternate &&\n            oldFiber.delete(null === step.key ? newIdx : step.key),\n          (currentFirstChild = placeChild(step, currentFirstChild, newIdx)),\n          null === previousNewFiber\n            ? (resultingFirstChild = step)\n            : (previousNewFiber.sibling = step),\n          (previousNewFiber = step));\n    shouldTrackSideEffects &&\n      oldFiber.forEach(function (child) {\n        return deleteChild(returnFiber, child);\n      });\n    isHydrating && pushTreeFork(returnFiber, newIdx);\n    return resultingFirstChild;\n  }\n  function reconcileChildFibersImpl(\n    returnFiber,\n    currentFirstChild,\n    newChild,\n    lanes\n  ) {\n    \"object\" === typeof newChild &&\n      null !== newChild &&\n      newChild.type === REACT_FRAGMENT_TYPE &&\n      null === newChild.key &&\n      (newChild = newChild.props.children);\n    if (\"object\" === typeof newChild && null !== newChild) {\n      switch (newChild.$$typeof) {\n        case REACT_ELEMENT_TYPE:\n          a: {\n            for (var key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key) {\n                key = newChild.type;\n                if (key === REACT_FRAGMENT_TYPE) {\n                  if (7 === currentFirstChild.tag) {\n                    deleteRemainingChildren(\n                      returnFiber,\n                      currentFirstChild.sibling\n                    );\n                    lanes = useFiber(\n                      currentFirstChild,\n                      newChild.props.children\n                    );\n                    lanes.return = returnFiber;\n                    returnFiber = lanes;\n                    break a;\n                  }\n                } else if (\n                  currentFirstChild.elementType === key ||\n                  (\"object\" === typeof key &&\n                    null !== key &&\n                    key.$$typeof === REACT_LAZY_TYPE &&\n                    resolveLazy(key) === currentFirstChild.type)\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.props);\n                  coerceRef(lanes, newChild);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                }\n                deleteRemainingChildren(returnFiber, currentFirstChild);\n                break;\n              } else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            newChild.type === REACT_FRAGMENT_TYPE\n              ? ((lanes = createFiberFromFragment(\n                  newChild.props.children,\n                  returnFiber.mode,\n                  lanes,\n                  newChild.key\n                )),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes))\n              : ((lanes = createFiberFromTypeAndProps(\n                  newChild.type,\n                  newChild.key,\n                  newChild.props,\n                  null,\n                  returnFiber.mode,\n                  lanes\n                )),\n                coerceRef(lanes, newChild),\n                (lanes.return = returnFiber),\n                (returnFiber = lanes));\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_PORTAL_TYPE:\n          a: {\n            for (key = newChild.key; null !== currentFirstChild; ) {\n              if (currentFirstChild.key === key)\n                if (\n                  4 === currentFirstChild.tag &&\n                  currentFirstChild.stateNode.containerInfo ===\n                    newChild.containerInfo &&\n                  currentFirstChild.stateNode.implementation ===\n                    newChild.implementation\n                ) {\n                  deleteRemainingChildren(\n                    returnFiber,\n                    currentFirstChild.sibling\n                  );\n                  lanes = useFiber(currentFirstChild, newChild.children || []);\n                  lanes.return = returnFiber;\n                  returnFiber = lanes;\n                  break a;\n                } else {\n                  deleteRemainingChildren(returnFiber, currentFirstChild);\n                  break;\n                }\n              else deleteChild(returnFiber, currentFirstChild);\n              currentFirstChild = currentFirstChild.sibling;\n            }\n            lanes = createFiberFromPortal(newChild, returnFiber.mode, lanes);\n            lanes.return = returnFiber;\n            returnFiber = lanes;\n          }\n          return placeSingleChild(returnFiber);\n        case REACT_LAZY_TYPE:\n          return (\n            (key = newChild._init),\n            (newChild = key(newChild._payload)),\n            reconcileChildFibersImpl(\n              returnFiber,\n              currentFirstChild,\n              newChild,\n              lanes\n            )\n          );\n      }\n      if (isArrayImpl(newChild))\n        return reconcileChildrenArray(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      if (getIteratorFn(newChild)) {\n        key = getIteratorFn(newChild);\n        if (\"function\" !== typeof key) throw Error(formatProdErrorMessage(150));\n        newChild = key.call(newChild);\n        return reconcileChildrenIterator(\n          returnFiber,\n          currentFirstChild,\n          newChild,\n          lanes\n        );\n      }\n      if (\"function\" === typeof newChild.then)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          unwrapThenable(newChild),\n          lanes\n        );\n      if (newChild.$$typeof === REACT_CONTEXT_TYPE)\n        return reconcileChildFibersImpl(\n          returnFiber,\n          currentFirstChild,\n          readContextDuringReconciliation(returnFiber, newChild),\n          lanes\n        );\n      throwOnInvalidObjectType(returnFiber, newChild);\n    }\n    return (\"string\" === typeof newChild && \"\" !== newChild) ||\n      \"number\" === typeof newChild ||\n      \"bigint\" === typeof newChild\n      ? ((newChild = \"\" + newChild),\n        null !== currentFirstChild && 6 === currentFirstChild.tag\n          ? (deleteRemainingChildren(returnFiber, currentFirstChild.sibling),\n            (lanes = useFiber(currentFirstChild, newChild)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes))\n          : (deleteRemainingChildren(returnFiber, currentFirstChild),\n            (lanes = createFiberFromText(newChild, returnFiber.mode, lanes)),\n            (lanes.return = returnFiber),\n            (returnFiber = lanes)),\n        placeSingleChild(returnFiber))\n      : deleteRemainingChildren(returnFiber, currentFirstChild);\n  }\n  return function (returnFiber, currentFirstChild, newChild, lanes) {\n    try {\n      thenableIndexCounter = 0;\n      var firstChildFiber = reconcileChildFibersImpl(\n        returnFiber,\n        currentFirstChild,\n        newChild,\n        lanes\n      );\n      thenableState = null;\n      return firstChildFiber;\n    } catch (x) {\n      if (x === SuspenseException || x === SuspenseActionException) throw x;\n      var fiber = createFiberImplClass(29, x, null, returnFiber.mode);\n      fiber.lanes = lanes;\n      fiber.return = returnFiber;\n      return fiber;\n    } finally {\n    }\n  };\n}\nvar reconcileChildFibers = createChildReconciler(!0),\n  mountChildFibers = createChildReconciler(!1),\n  suspenseHandlerStackCursor = createCursor(null),\n  shellBoundary = null;\nfunction pushPrimaryTreeSuspenseHandler(handler) {\n  var current = handler.alternate;\n  push(suspenseStackCursor, suspenseStackCursor.current & 1);\n  push(suspenseHandlerStackCursor, handler);\n  null === shellBoundary &&\n    (null === current || null !== currentTreeHiddenStackCursor.current\n      ? (shellBoundary = handler)\n      : null !== current.memoizedState && (shellBoundary = handler));\n}\nfunction pushOffscreenSuspenseHandler(fiber) {\n  if (22 === fiber.tag) {\n    if (\n      (push(suspenseStackCursor, suspenseStackCursor.current),\n      push(suspenseHandlerStackCursor, fiber),\n      null === shellBoundary)\n    ) {\n      var current = fiber.alternate;\n      null !== current &&\n        null !== current.memoizedState &&\n        (shellBoundary = fiber);\n    }\n  } else reuseSuspenseHandlerOnStack(fiber);\n}\nfunction reuseSuspenseHandlerOnStack() {\n  push(suspenseStackCursor, suspenseStackCursor.current);\n  push(suspenseHandlerStackCursor, suspenseHandlerStackCursor.current);\n}\nfunction popSuspenseHandler(fiber) {\n  pop(suspenseHandlerStackCursor);\n  shellBoundary === fiber && (shellBoundary = null);\n  pop(suspenseStackCursor);\n}\nvar suspenseStackCursor = createCursor(0);\nfunction findFirstSuspended(row) {\n  for (var node = row; null !== node; ) {\n    if (13 === node.tag) {\n      var state = node.memoizedState;\n      if (\n        null !== state &&\n        ((state = state.dehydrated),\n        null === state ||\n          \"$?\" === state.data ||\n          isSuspenseInstanceFallback(state))\n      )\n        return node;\n    } else if (19 === node.tag && void 0 !== node.memoizedProps.revealOrder) {\n      if (0 !== (node.flags & 128)) return node;\n    } else if (null !== node.child) {\n      node.child.return = node;\n      node = node.child;\n      continue;\n    }\n    if (node === row) break;\n    for (; null === node.sibling; ) {\n      if (null === node.return || node.return === row) return null;\n      node = node.return;\n    }\n    node.sibling.return = node.return;\n    node = node.sibling;\n  }\n  return null;\n}\nfunction applyDerivedStateFromProps(\n  workInProgress,\n  ctor,\n  getDerivedStateFromProps,\n  nextProps\n) {\n  ctor = workInProgress.memoizedState;\n  getDerivedStateFromProps = getDerivedStateFromProps(nextProps, ctor);\n  getDerivedStateFromProps =\n    null === getDerivedStateFromProps || void 0 === getDerivedStateFromProps\n      ? ctor\n      : assign({}, ctor, getDerivedStateFromProps);\n  workInProgress.memoizedState = getDerivedStateFromProps;\n  0 === workInProgress.lanes &&\n    (workInProgress.updateQueue.baseState = getDerivedStateFromProps);\n}\nvar classComponentUpdater = {\n  enqueueSetState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueReplaceState: function (inst, payload, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 1;\n    update.payload = payload;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    payload = enqueueUpdate(inst, update, lane);\n    null !== payload &&\n      (scheduleUpdateOnFiber(payload, inst, lane),\n      entangleTransitions(payload, inst, lane));\n  },\n  enqueueForceUpdate: function (inst, callback) {\n    inst = inst._reactInternals;\n    var lane = requestUpdateLane(),\n      update = createUpdate(lane);\n    update.tag = 2;\n    void 0 !== callback && null !== callback && (update.callback = callback);\n    callback = enqueueUpdate(inst, update, lane);\n    null !== callback &&\n      (scheduleUpdateOnFiber(callback, inst, lane),\n      entangleTransitions(callback, inst, lane));\n  }\n};\nfunction checkShouldComponentUpdate(\n  workInProgress,\n  ctor,\n  oldProps,\n  newProps,\n  oldState,\n  newState,\n  nextContext\n) {\n  workInProgress = workInProgress.stateNode;\n  return \"function\" === typeof workInProgress.shouldComponentUpdate\n    ? workInProgress.shouldComponentUpdate(newProps, newState, nextContext)\n    : ctor.prototype && ctor.prototype.isPureReactComponent\n      ? !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState)\n      : !0;\n}\nfunction callComponentWillReceiveProps(\n  workInProgress,\n  instance,\n  newProps,\n  nextContext\n) {\n  workInProgress = instance.state;\n  \"function\" === typeof instance.componentWillReceiveProps &&\n    instance.componentWillReceiveProps(newProps, nextContext);\n  \"function\" === typeof instance.UNSAFE_componentWillReceiveProps &&\n    instance.UNSAFE_componentWillReceiveProps(newProps, nextContext);\n  instance.state !== workInProgress &&\n    classComponentUpdater.enqueueReplaceState(instance, instance.state, null);\n}\nfunction resolveClassComponentProps(Component, baseProps) {\n  var newProps = baseProps;\n  if (\"ref\" in baseProps) {\n    newProps = {};\n    for (var propName in baseProps)\n      \"ref\" !== propName && (newProps[propName] = baseProps[propName]);\n  }\n  if ((Component = Component.defaultProps)) {\n    newProps === baseProps && (newProps = assign({}, newProps));\n    for (var propName$73 in Component)\n      void 0 === newProps[propName$73] &&\n        (newProps[propName$73] = Component[propName$73]);\n  }\n  return newProps;\n}\nvar reportGlobalError =\n  \"function\" === typeof reportError\n    ? reportError\n    : function (error) {\n        if (\n          \"object\" === typeof window &&\n          \"function\" === typeof window.ErrorEvent\n        ) {\n          var event = new window.ErrorEvent(\"error\", {\n            bubbles: !0,\n            cancelable: !0,\n            message:\n              \"object\" === typeof error &&\n              null !== error &&\n              \"string\" === typeof error.message\n                ? String(error.message)\n                : String(error),\n            error: error\n          });\n          if (!window.dispatchEvent(event)) return;\n        } else if (\n          \"object\" === typeof process &&\n          \"function\" === typeof process.emit\n        ) {\n          process.emit(\"uncaughtException\", error);\n          return;\n        }\n        console.error(error);\n      };\nfunction defaultOnUncaughtError(error) {\n  reportGlobalError(error);\n}\nfunction defaultOnCaughtError(error) {\n  console.error(error);\n}\nfunction defaultOnRecoverableError(error) {\n  reportGlobalError(error);\n}\nfunction logUncaughtError(root, errorInfo) {\n  try {\n    var onUncaughtError = root.onUncaughtError;\n    onUncaughtError(errorInfo.value, { componentStack: errorInfo.stack });\n  } catch (e$74) {\n    setTimeout(function () {\n      throw e$74;\n    });\n  }\n}\nfunction logCaughtError(root, boundary, errorInfo) {\n  try {\n    var onCaughtError = root.onCaughtError;\n    onCaughtError(errorInfo.value, {\n      componentStack: errorInfo.stack,\n      errorBoundary: 1 === boundary.tag ? boundary.stateNode : null\n    });\n  } catch (e$75) {\n    setTimeout(function () {\n      throw e$75;\n    });\n  }\n}\nfunction createRootErrorUpdate(root, errorInfo, lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  lane.payload = { element: null };\n  lane.callback = function () {\n    logUncaughtError(root, errorInfo);\n  };\n  return lane;\n}\nfunction createClassErrorUpdate(lane) {\n  lane = createUpdate(lane);\n  lane.tag = 3;\n  return lane;\n}\nfunction initializeClassErrorUpdate(update, root, fiber, errorInfo) {\n  var getDerivedStateFromError = fiber.type.getDerivedStateFromError;\n  if (\"function\" === typeof getDerivedStateFromError) {\n    var error = errorInfo.value;\n    update.payload = function () {\n      return getDerivedStateFromError(error);\n    };\n    update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n    };\n  }\n  var inst = fiber.stateNode;\n  null !== inst &&\n    \"function\" === typeof inst.componentDidCatch &&\n    (update.callback = function () {\n      logCaughtError(root, fiber, errorInfo);\n      \"function\" !== typeof getDerivedStateFromError &&\n        (null === legacyErrorBoundariesThatAlreadyFailed\n          ? (legacyErrorBoundariesThatAlreadyFailed = new Set([this]))\n          : legacyErrorBoundariesThatAlreadyFailed.add(this));\n      var stack = errorInfo.stack;\n      this.componentDidCatch(errorInfo.value, {\n        componentStack: null !== stack ? stack : \"\"\n      });\n    });\n}\nfunction throwException(\n  root,\n  returnFiber,\n  sourceFiber,\n  value,\n  rootRenderLanes\n) {\n  sourceFiber.flags |= 32768;\n  if (\n    null !== value &&\n    \"object\" === typeof value &&\n    \"function\" === typeof value.then\n  ) {\n    returnFiber = sourceFiber.alternate;\n    null !== returnFiber &&\n      propagateParentContextChanges(\n        returnFiber,\n        sourceFiber,\n        rootRenderLanes,\n        !0\n      );\n    sourceFiber = suspenseHandlerStackCursor.current;\n    if (null !== sourceFiber) {\n      switch (sourceFiber.tag) {\n        case 13:\n          return (\n            null === shellBoundary\n              ? renderDidSuspendDelayIfPossible()\n              : null === sourceFiber.alternate &&\n                0 === workInProgressRootExitStatus &&\n                (workInProgressRootExitStatus = 3),\n            (sourceFiber.flags &= -257),\n            (sourceFiber.flags |= 65536),\n            (sourceFiber.lanes = rootRenderLanes),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? (sourceFiber.updateQueue = new Set([value]))\n                  : returnFiber.add(value),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n        case 22:\n          return (\n            (sourceFiber.flags |= 65536),\n            value === noopSuspenseyCommitThenable\n              ? (sourceFiber.flags |= 16384)\n              : ((returnFiber = sourceFiber.updateQueue),\n                null === returnFiber\n                  ? ((returnFiber = {\n                      transitions: null,\n                      markerInstances: null,\n                      retryQueue: new Set([value])\n                    }),\n                    (sourceFiber.updateQueue = returnFiber))\n                  : ((sourceFiber = returnFiber.retryQueue),\n                    null === sourceFiber\n                      ? (returnFiber.retryQueue = new Set([value]))\n                      : sourceFiber.add(value)),\n                attachPingListener(root, value, rootRenderLanes)),\n            !1\n          );\n      }\n      throw Error(formatProdErrorMessage(435, sourceFiber.tag));\n    }\n    attachPingListener(root, value, rootRenderLanes);\n    renderDidSuspendDelayIfPossible();\n    return !1;\n  }\n  if (isHydrating)\n    return (\n      (returnFiber = suspenseHandlerStackCursor.current),\n      null !== returnFiber\n        ? (0 === (returnFiber.flags & 65536) && (returnFiber.flags |= 256),\n          (returnFiber.flags |= 65536),\n          (returnFiber.lanes = rootRenderLanes),\n          value !== HydrationMismatchException &&\n            ((root = Error(formatProdErrorMessage(422), { cause: value })),\n            queueHydrationError(createCapturedValueAtFiber(root, sourceFiber))))\n        : (value !== HydrationMismatchException &&\n            ((returnFiber = Error(formatProdErrorMessage(423), {\n              cause: value\n            })),\n            queueHydrationError(\n              createCapturedValueAtFiber(returnFiber, sourceFiber)\n            )),\n          (root = root.current.alternate),\n          (root.flags |= 65536),\n          (rootRenderLanes &= -rootRenderLanes),\n          (root.lanes |= rootRenderLanes),\n          (value = createCapturedValueAtFiber(value, sourceFiber)),\n          (rootRenderLanes = createRootErrorUpdate(\n            root.stateNode,\n            value,\n            rootRenderLanes\n          )),\n          enqueueCapturedUpdate(root, rootRenderLanes),\n          4 !== workInProgressRootExitStatus &&\n            (workInProgressRootExitStatus = 2)),\n      !1\n    );\n  var wrapperError = Error(formatProdErrorMessage(520), { cause: value });\n  wrapperError = createCapturedValueAtFiber(wrapperError, sourceFiber);\n  null === workInProgressRootConcurrentErrors\n    ? (workInProgressRootConcurrentErrors = [wrapperError])\n    : workInProgressRootConcurrentErrors.push(wrapperError);\n  4 !== workInProgressRootExitStatus && (workInProgressRootExitStatus = 2);\n  if (null === returnFiber) return !0;\n  value = createCapturedValueAtFiber(value, sourceFiber);\n  sourceFiber = returnFiber;\n  do {\n    switch (sourceFiber.tag) {\n      case 3:\n        return (\n          (sourceFiber.flags |= 65536),\n          (root = rootRenderLanes & -rootRenderLanes),\n          (sourceFiber.lanes |= root),\n          (root = createRootErrorUpdate(sourceFiber.stateNode, value, root)),\n          enqueueCapturedUpdate(sourceFiber, root),\n          !1\n        );\n      case 1:\n        if (\n          ((returnFiber = sourceFiber.type),\n          (wrapperError = sourceFiber.stateNode),\n          0 === (sourceFiber.flags & 128) &&\n            (\"function\" === typeof returnFiber.getDerivedStateFromError ||\n              (null !== wrapperError &&\n                \"function\" === typeof wrapperError.componentDidCatch &&\n                (null === legacyErrorBoundariesThatAlreadyFailed ||\n                  !legacyErrorBoundariesThatAlreadyFailed.has(wrapperError)))))\n        )\n          return (\n            (sourceFiber.flags |= 65536),\n            (rootRenderLanes &= -rootRenderLanes),\n            (sourceFiber.lanes |= rootRenderLanes),\n            (rootRenderLanes = createClassErrorUpdate(rootRenderLanes)),\n            initializeClassErrorUpdate(\n              rootRenderLanes,\n              root,\n              sourceFiber,\n              value\n            ),\n            enqueueCapturedUpdate(sourceFiber, rootRenderLanes),\n            !1\n          );\n    }\n    sourceFiber = sourceFiber.return;\n  } while (null !== sourceFiber);\n  return !1;\n}\nvar SelectiveHydrationException = Error(formatProdErrorMessage(461)),\n  didReceiveUpdate = !1;\nfunction reconcileChildren(current, workInProgress, nextChildren, renderLanes) {\n  workInProgress.child =\n    null === current\n      ? mountChildFibers(workInProgress, null, nextChildren, renderLanes)\n      : reconcileChildFibers(\n          workInProgress,\n          current.child,\n          nextChildren,\n          renderLanes\n        );\n}\nfunction updateForwardRef(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  Component = Component.render;\n  var ref = workInProgress.ref;\n  if (\"ref\" in nextProps) {\n    var propsWithoutRef = {};\n    for (var key in nextProps)\n      \"ref\" !== key && (propsWithoutRef[key] = nextProps[key]);\n  } else propsWithoutRef = nextProps;\n  prepareToReadContext(workInProgress);\n  nextProps = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    propsWithoutRef,\n    ref,\n    renderLanes\n  );\n  key = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && key && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null === current) {\n    var type = Component.type;\n    if (\n      \"function\" === typeof type &&\n      !shouldConstruct(type) &&\n      void 0 === type.defaultProps &&\n      null === Component.compare\n    )\n      return (\n        (workInProgress.tag = 15),\n        (workInProgress.type = type),\n        updateSimpleMemoComponent(\n          current,\n          workInProgress,\n          type,\n          nextProps,\n          renderLanes\n        )\n      );\n    current = createFiberFromTypeAndProps(\n      Component.type,\n      null,\n      nextProps,\n      workInProgress,\n      workInProgress.mode,\n      renderLanes\n    );\n    current.ref = workInProgress.ref;\n    current.return = workInProgress;\n    return (workInProgress.child = current);\n  }\n  type = current.child;\n  if (!checkScheduledUpdateOrContext(current, renderLanes)) {\n    var prevProps = type.memoizedProps;\n    Component = Component.compare;\n    Component = null !== Component ? Component : shallowEqual;\n    if (Component(prevProps, nextProps) && current.ref === workInProgress.ref)\n      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n  }\n  workInProgress.flags |= 1;\n  current = createWorkInProgress(type, nextProps);\n  current.ref = workInProgress.ref;\n  current.return = workInProgress;\n  return (workInProgress.child = current);\n}\nfunction updateSimpleMemoComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  if (null !== current) {\n    var prevProps = current.memoizedProps;\n    if (\n      shallowEqual(prevProps, nextProps) &&\n      current.ref === workInProgress.ref\n    )\n      if (\n        ((didReceiveUpdate = !1),\n        (workInProgress.pendingProps = nextProps = prevProps),\n        checkScheduledUpdateOrContext(current, renderLanes))\n      )\n        0 !== (current.flags & 131072) && (didReceiveUpdate = !0);\n      else\n        return (\n          (workInProgress.lanes = current.lanes),\n          bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n        );\n  }\n  return updateFunctionComponent(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    renderLanes\n  );\n}\nfunction updateOffscreenComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    nextChildren = nextProps.children,\n    prevState = null !== current ? current.memoizedState : null;\n  if (\"hidden\" === nextProps.mode) {\n    if (0 !== (workInProgress.flags & 128)) {\n      nextProps =\n        null !== prevState ? prevState.baseLanes | renderLanes : renderLanes;\n      if (null !== current) {\n        nextChildren = workInProgress.child = current.child;\n        for (prevState = 0; null !== nextChildren; )\n          (prevState =\n            prevState | nextChildren.lanes | nextChildren.childLanes),\n            (nextChildren = nextChildren.sibling);\n        workInProgress.childLanes = prevState & ~nextProps;\n      } else (workInProgress.childLanes = 0), (workInProgress.child = null);\n      return deferHiddenOffscreenComponent(\n        current,\n        workInProgress,\n        nextProps,\n        renderLanes\n      );\n    }\n    if (0 !== (renderLanes & 536870912))\n      (workInProgress.memoizedState = { baseLanes: 0, cachePool: null }),\n        null !== current &&\n          pushTransition(\n            workInProgress,\n            null !== prevState ? prevState.cachePool : null\n          ),\n        null !== prevState\n          ? pushHiddenContext(workInProgress, prevState)\n          : reuseHiddenContextOnStack(),\n        pushOffscreenSuspenseHandler(workInProgress);\n    else\n      return (\n        (workInProgress.lanes = workInProgress.childLanes = 536870912),\n        deferHiddenOffscreenComponent(\n          current,\n          workInProgress,\n          null !== prevState ? prevState.baseLanes | renderLanes : renderLanes,\n          renderLanes\n        )\n      );\n  } else\n    null !== prevState\n      ? (pushTransition(workInProgress, prevState.cachePool),\n        pushHiddenContext(workInProgress, prevState),\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (workInProgress.memoizedState = null))\n      : (null !== current && pushTransition(workInProgress, null),\n        reuseHiddenContextOnStack(),\n        reuseSuspenseHandlerOnStack(workInProgress));\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nfunction deferHiddenOffscreenComponent(\n  current,\n  workInProgress,\n  nextBaseLanes,\n  renderLanes\n) {\n  var JSCompiler_inline_result = peekCacheFromPool();\n  JSCompiler_inline_result =\n    null === JSCompiler_inline_result\n      ? null\n      : { parent: CacheContext._currentValue, pool: JSCompiler_inline_result };\n  workInProgress.memoizedState = {\n    baseLanes: nextBaseLanes,\n    cachePool: JSCompiler_inline_result\n  };\n  null !== current && pushTransition(workInProgress, null);\n  reuseHiddenContextOnStack();\n  pushOffscreenSuspenseHandler(workInProgress);\n  null !== current &&\n    propagateParentContextChanges(current, workInProgress, renderLanes, !0);\n  return null;\n}\nfunction markRef(current, workInProgress) {\n  var ref = workInProgress.ref;\n  if (null === ref)\n    null !== current &&\n      null !== current.ref &&\n      (workInProgress.flags |= 4194816);\n  else {\n    if (\"function\" !== typeof ref && \"object\" !== typeof ref)\n      throw Error(formatProdErrorMessage(284));\n    if (null === current || current.ref !== ref)\n      workInProgress.flags |= 4194816;\n  }\n}\nfunction updateFunctionComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  Component = renderWithHooks(\n    current,\n    workInProgress,\n    Component,\n    nextProps,\n    void 0,\n    renderLanes\n  );\n  nextProps = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && nextProps && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, Component, renderLanes);\n  return workInProgress.child;\n}\nfunction replayFunctionComponent(\n  current,\n  workInProgress,\n  nextProps,\n  Component,\n  secondArg,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  workInProgress.updateQueue = null;\n  nextProps = renderWithHooksAgain(\n    workInProgress,\n    Component,\n    nextProps,\n    secondArg\n  );\n  finishRenderingHooks(current);\n  Component = checkDidRenderIdHook();\n  if (null !== current && !didReceiveUpdate)\n    return (\n      bailoutHooks(current, workInProgress, renderLanes),\n      bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes)\n    );\n  isHydrating && Component && pushMaterializedTreeId(workInProgress);\n  workInProgress.flags |= 1;\n  reconcileChildren(current, workInProgress, nextProps, renderLanes);\n  return workInProgress.child;\n}\nfunction updateClassComponent(\n  current,\n  workInProgress,\n  Component,\n  nextProps,\n  renderLanes\n) {\n  prepareToReadContext(workInProgress);\n  if (null === workInProgress.stateNode) {\n    var context = emptyContextObject,\n      contextType = Component.contextType;\n    \"object\" === typeof contextType &&\n      null !== contextType &&\n      (context = readContext(contextType));\n    context = new Component(nextProps, context);\n    workInProgress.memoizedState =\n      null !== context.state && void 0 !== context.state ? context.state : null;\n    context.updater = classComponentUpdater;\n    workInProgress.stateNode = context;\n    context._reactInternals = workInProgress;\n    context = workInProgress.stateNode;\n    context.props = nextProps;\n    context.state = workInProgress.memoizedState;\n    context.refs = {};\n    initializeUpdateQueue(workInProgress);\n    contextType = Component.contextType;\n    context.context =\n      \"object\" === typeof contextType && null !== contextType\n        ? readContext(contextType)\n        : emptyContextObject;\n    context.state = workInProgress.memoizedState;\n    contextType = Component.getDerivedStateFromProps;\n    \"function\" === typeof contextType &&\n      (applyDerivedStateFromProps(\n        workInProgress,\n        Component,\n        contextType,\n        nextProps\n      ),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof Component.getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate ||\n      (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n        \"function\" !== typeof context.componentWillMount) ||\n      ((contextType = context.state),\n      \"function\" === typeof context.componentWillMount &&\n        context.componentWillMount(),\n      \"function\" === typeof context.UNSAFE_componentWillMount &&\n        context.UNSAFE_componentWillMount(),\n      contextType !== context.state &&\n        classComponentUpdater.enqueueReplaceState(context, context.state, null),\n      processUpdateQueue(workInProgress, nextProps, context, renderLanes),\n      suspendIfUpdateReadFromEntangledAsyncAction(),\n      (context.state = workInProgress.memoizedState));\n    \"function\" === typeof context.componentDidMount &&\n      (workInProgress.flags |= 4194308);\n    nextProps = !0;\n  } else if (null === current) {\n    context = workInProgress.stateNode;\n    var unresolvedOldProps = workInProgress.memoizedProps,\n      oldProps = resolveClassComponentProps(Component, unresolvedOldProps);\n    context.props = oldProps;\n    var oldContext = context.context,\n      contextType$jscomp$0 = Component.contextType;\n    contextType = emptyContextObject;\n    \"object\" === typeof contextType$jscomp$0 &&\n      null !== contextType$jscomp$0 &&\n      (contextType = readContext(contextType$jscomp$0));\n    var getDerivedStateFromProps = Component.getDerivedStateFromProps;\n    contextType$jscomp$0 =\n      \"function\" === typeof getDerivedStateFromProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate;\n    unresolvedOldProps = workInProgress.pendingProps !== unresolvedOldProps;\n    contextType$jscomp$0 ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((unresolvedOldProps || oldContext !== contextType) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          contextType\n        ));\n    hasForceUpdate = !1;\n    var oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    oldContext = workInProgress.memoizedState;\n    unresolvedOldProps || oldState !== oldContext || hasForceUpdate\n      ? (\"function\" === typeof getDerivedStateFromProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            getDerivedStateFromProps,\n            nextProps\n          ),\n          (oldContext = workInProgress.memoizedState)),\n        (oldProps =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            oldProps,\n            nextProps,\n            oldState,\n            oldContext,\n            contextType\n          ))\n          ? (contextType$jscomp$0 ||\n              (\"function\" !== typeof context.UNSAFE_componentWillMount &&\n                \"function\" !== typeof context.componentWillMount) ||\n              (\"function\" === typeof context.componentWillMount &&\n                context.componentWillMount(),\n              \"function\" === typeof context.UNSAFE_componentWillMount &&\n                context.UNSAFE_componentWillMount()),\n            \"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308))\n          : (\"function\" === typeof context.componentDidMount &&\n              (workInProgress.flags |= 4194308),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = oldContext)),\n        (context.props = nextProps),\n        (context.state = oldContext),\n        (context.context = contextType),\n        (nextProps = oldProps))\n      : (\"function\" === typeof context.componentDidMount &&\n          (workInProgress.flags |= 4194308),\n        (nextProps = !1));\n  } else {\n    context = workInProgress.stateNode;\n    cloneUpdateQueue(current, workInProgress);\n    contextType = workInProgress.memoizedProps;\n    contextType$jscomp$0 = resolveClassComponentProps(Component, contextType);\n    context.props = contextType$jscomp$0;\n    getDerivedStateFromProps = workInProgress.pendingProps;\n    oldState = context.context;\n    oldContext = Component.contextType;\n    oldProps = emptyContextObject;\n    \"object\" === typeof oldContext &&\n      null !== oldContext &&\n      (oldProps = readContext(oldContext));\n    unresolvedOldProps = Component.getDerivedStateFromProps;\n    (oldContext =\n      \"function\" === typeof unresolvedOldProps ||\n      \"function\" === typeof context.getSnapshotBeforeUpdate) ||\n      (\"function\" !== typeof context.UNSAFE_componentWillReceiveProps &&\n        \"function\" !== typeof context.componentWillReceiveProps) ||\n      ((contextType !== getDerivedStateFromProps || oldState !== oldProps) &&\n        callComponentWillReceiveProps(\n          workInProgress,\n          context,\n          nextProps,\n          oldProps\n        ));\n    hasForceUpdate = !1;\n    oldState = workInProgress.memoizedState;\n    context.state = oldState;\n    processUpdateQueue(workInProgress, nextProps, context, renderLanes);\n    suspendIfUpdateReadFromEntangledAsyncAction();\n    var newState = workInProgress.memoizedState;\n    contextType !== getDerivedStateFromProps ||\n    oldState !== newState ||\n    hasForceUpdate ||\n    (null !== current &&\n      null !== current.dependencies &&\n      checkIfContextChanged(current.dependencies))\n      ? (\"function\" === typeof unresolvedOldProps &&\n          (applyDerivedStateFromProps(\n            workInProgress,\n            Component,\n            unresolvedOldProps,\n            nextProps\n          ),\n          (newState = workInProgress.memoizedState)),\n        (contextType$jscomp$0 =\n          hasForceUpdate ||\n          checkShouldComponentUpdate(\n            workInProgress,\n            Component,\n            contextType$jscomp$0,\n            nextProps,\n            oldState,\n            newState,\n            oldProps\n          ) ||\n          (null !== current &&\n            null !== current.dependencies &&\n            checkIfContextChanged(current.dependencies)))\n          ? (oldContext ||\n              (\"function\" !== typeof context.UNSAFE_componentWillUpdate &&\n                \"function\" !== typeof context.componentWillUpdate) ||\n              (\"function\" === typeof context.componentWillUpdate &&\n                context.componentWillUpdate(nextProps, newState, oldProps),\n              \"function\" === typeof context.UNSAFE_componentWillUpdate &&\n                context.UNSAFE_componentWillUpdate(\n                  nextProps,\n                  newState,\n                  oldProps\n                )),\n            \"function\" === typeof context.componentDidUpdate &&\n              (workInProgress.flags |= 4),\n            \"function\" === typeof context.getSnapshotBeforeUpdate &&\n              (workInProgress.flags |= 1024))\n          : (\"function\" !== typeof context.componentDidUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 4),\n            \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n              (contextType === current.memoizedProps &&\n                oldState === current.memoizedState) ||\n              (workInProgress.flags |= 1024),\n            (workInProgress.memoizedProps = nextProps),\n            (workInProgress.memoizedState = newState)),\n        (context.props = nextProps),\n        (context.state = newState),\n        (context.context = oldProps),\n        (nextProps = contextType$jscomp$0))\n      : (\"function\" !== typeof context.componentDidUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 4),\n        \"function\" !== typeof context.getSnapshotBeforeUpdate ||\n          (contextType === current.memoizedProps &&\n            oldState === current.memoizedState) ||\n          (workInProgress.flags |= 1024),\n        (nextProps = !1));\n  }\n  context = nextProps;\n  markRef(current, workInProgress);\n  nextProps = 0 !== (workInProgress.flags & 128);\n  context || nextProps\n    ? ((context = workInProgress.stateNode),\n      (Component =\n        nextProps && \"function\" !== typeof Component.getDerivedStateFromError\n          ? null\n          : context.render()),\n      (workInProgress.flags |= 1),\n      null !== current && nextProps\n        ? ((workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            current.child,\n            null,\n            renderLanes\n          )),\n          (workInProgress.child = reconcileChildFibers(\n            workInProgress,\n            null,\n            Component,\n            renderLanes\n          )))\n        : reconcileChildren(current, workInProgress, Component, renderLanes),\n      (workInProgress.memoizedState = context.state),\n      (current = workInProgress.child))\n    : (current = bailoutOnAlreadyFinishedWork(\n        current,\n        workInProgress,\n        renderLanes\n      ));\n  return current;\n}\nfunction mountHostRootWithoutHydrating(\n  current,\n  workInProgress,\n  nextChildren,\n  renderLanes\n) {\n  resetHydrationState();\n  workInProgress.flags |= 256;\n  reconcileChildren(current, workInProgress, nextChildren, renderLanes);\n  return workInProgress.child;\n}\nvar SUSPENDED_MARKER = {\n  dehydrated: null,\n  treeContext: null,\n  retryLane: 0,\n  hydrationErrors: null\n};\nfunction mountSuspenseOffscreenState(renderLanes) {\n  return { baseLanes: renderLanes, cachePool: getSuspendedCache() };\n}\nfunction getRemainingWorkInPrimaryTree(\n  current,\n  primaryTreeDidDefer,\n  renderLanes\n) {\n  current = null !== current ? current.childLanes & ~renderLanes : 0;\n  primaryTreeDidDefer && (current |= workInProgressDeferredLane);\n  return current;\n}\nfunction updateSuspenseComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    showFallback = !1,\n    didSuspend = 0 !== (workInProgress.flags & 128),\n    JSCompiler_temp;\n  (JSCompiler_temp = didSuspend) ||\n    (JSCompiler_temp =\n      null !== current && null === current.memoizedState\n        ? !1\n        : 0 !== (suspenseStackCursor.current & 2));\n  JSCompiler_temp && ((showFallback = !0), (workInProgress.flags &= -129));\n  JSCompiler_temp = 0 !== (workInProgress.flags & 32);\n  workInProgress.flags &= -33;\n  if (null === current) {\n    if (isHydrating) {\n      showFallback\n        ? pushPrimaryTreeSuspenseHandler(workInProgress)\n        : reuseSuspenseHandlerOnStack(workInProgress);\n      if (isHydrating) {\n        var nextInstance = nextHydratableInstance,\n          JSCompiler_temp$jscomp$0;\n        if ((JSCompiler_temp$jscomp$0 = nextInstance)) {\n          c: {\n            JSCompiler_temp$jscomp$0 = nextInstance;\n            for (\n              nextInstance = rootOrSingletonContext;\n              8 !== JSCompiler_temp$jscomp$0.nodeType;\n\n            ) {\n              if (!nextInstance) {\n                nextInstance = null;\n                break c;\n              }\n              JSCompiler_temp$jscomp$0 = getNextHydratable(\n                JSCompiler_temp$jscomp$0.nextSibling\n              );\n              if (null === JSCompiler_temp$jscomp$0) {\n                nextInstance = null;\n                break c;\n              }\n            }\n            nextInstance = JSCompiler_temp$jscomp$0;\n          }\n          null !== nextInstance\n            ? ((workInProgress.memoizedState = {\n                dehydrated: nextInstance,\n                treeContext:\n                  null !== treeContextProvider\n                    ? { id: treeContextId, overflow: treeContextOverflow }\n                    : null,\n                retryLane: 536870912,\n                hydrationErrors: null\n              }),\n              (JSCompiler_temp$jscomp$0 = createFiberImplClass(\n                18,\n                null,\n                null,\n                0\n              )),\n              (JSCompiler_temp$jscomp$0.stateNode = nextInstance),\n              (JSCompiler_temp$jscomp$0.return = workInProgress),\n              (workInProgress.child = JSCompiler_temp$jscomp$0),\n              (hydrationParentFiber = workInProgress),\n              (nextHydratableInstance = null),\n              (JSCompiler_temp$jscomp$0 = !0))\n            : (JSCompiler_temp$jscomp$0 = !1);\n        }\n        JSCompiler_temp$jscomp$0 || throwOnHydrationMismatch(workInProgress);\n      }\n      nextInstance = workInProgress.memoizedState;\n      if (\n        null !== nextInstance &&\n        ((nextInstance = nextInstance.dehydrated), null !== nextInstance)\n      )\n        return (\n          isSuspenseInstanceFallback(nextInstance)\n            ? (workInProgress.lanes = 32)\n            : (workInProgress.lanes = 536870912),\n          null\n        );\n      popSuspenseHandler(workInProgress);\n    }\n    nextInstance = nextProps.children;\n    nextProps = nextProps.fallback;\n    if (showFallback)\n      return (\n        reuseSuspenseHandlerOnStack(workInProgress),\n        (showFallback = workInProgress.mode),\n        (nextInstance = mountWorkInProgressOffscreenFiber(\n          { mode: \"hidden\", children: nextInstance },\n          showFallback\n        )),\n        (nextProps = createFiberFromFragment(\n          nextProps,\n          showFallback,\n          renderLanes,\n          null\n        )),\n        (nextInstance.return = workInProgress),\n        (nextProps.return = workInProgress),\n        (nextInstance.sibling = nextProps),\n        (workInProgress.child = nextInstance),\n        (showFallback = workInProgress.child),\n        (showFallback.memoizedState = mountSuspenseOffscreenState(renderLanes)),\n        (showFallback.childLanes = getRemainingWorkInPrimaryTree(\n          current,\n          JSCompiler_temp,\n          renderLanes\n        )),\n        (workInProgress.memoizedState = SUSPENDED_MARKER),\n        nextProps\n      );\n    pushPrimaryTreeSuspenseHandler(workInProgress);\n    return mountSuspensePrimaryChildren(workInProgress, nextInstance);\n  }\n  JSCompiler_temp$jscomp$0 = current.memoizedState;\n  if (\n    null !== JSCompiler_temp$jscomp$0 &&\n    ((nextInstance = JSCompiler_temp$jscomp$0.dehydrated),\n    null !== nextInstance)\n  ) {\n    if (didSuspend)\n      workInProgress.flags & 256\n        ? (pushPrimaryTreeSuspenseHandler(workInProgress),\n          (workInProgress.flags &= -257),\n          (workInProgress = retrySuspenseComponentWithoutHydrating(\n            current,\n            workInProgress,\n            renderLanes\n          )))\n        : null !== workInProgress.memoizedState\n          ? (reuseSuspenseHandlerOnStack(workInProgress),\n            (workInProgress.child = current.child),\n            (workInProgress.flags |= 128),\n            (workInProgress = null))\n          : (reuseSuspenseHandlerOnStack(workInProgress),\n            (showFallback = nextProps.fallback),\n            (nextInstance = workInProgress.mode),\n            (nextProps = mountWorkInProgressOffscreenFiber(\n              { mode: \"visible\", children: nextProps.children },\n              nextInstance\n            )),\n            (showFallback = createFiberFromFragment(\n              showFallback,\n              nextInstance,\n              renderLanes,\n              null\n            )),\n            (showFallback.flags |= 2),\n            (nextProps.return = workInProgress),\n            (showFallback.return = workInProgress),\n            (nextProps.sibling = showFallback),\n            (workInProgress.child = nextProps),\n            reconcileChildFibers(\n              workInProgress,\n              current.child,\n              null,\n              renderLanes\n            ),\n            (nextProps = workInProgress.child),\n            (nextProps.memoizedState =\n              mountSuspenseOffscreenState(renderLanes)),\n            (nextProps.childLanes = getRemainingWorkInPrimaryTree(\n              current,\n              JSCompiler_temp,\n              renderLanes\n            )),\n            (workInProgress.memoizedState = SUSPENDED_MARKER),\n            (workInProgress = showFallback));\n    else if (\n      (pushPrimaryTreeSuspenseHandler(workInProgress),\n      isSuspenseInstanceFallback(nextInstance))\n    ) {\n      JSCompiler_temp =\n        nextInstance.nextSibling && nextInstance.nextSibling.dataset;\n      if (JSCompiler_temp) var digest = JSCompiler_temp.dgst;\n      JSCompiler_temp = digest;\n      nextProps = Error(formatProdErrorMessage(419));\n      nextProps.stack = \"\";\n      nextProps.digest = JSCompiler_temp;\n      queueHydrationError({ value: nextProps, source: null, stack: null });\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else if (\n      (didReceiveUpdate ||\n        propagateParentContextChanges(current, workInProgress, renderLanes, !1),\n      (JSCompiler_temp = 0 !== (renderLanes & current.childLanes)),\n      didReceiveUpdate || JSCompiler_temp)\n    ) {\n      JSCompiler_temp = workInProgressRoot;\n      if (\n        null !== JSCompiler_temp &&\n        ((nextProps = renderLanes & -renderLanes),\n        (nextProps =\n          0 !== (nextProps & 42)\n            ? 1\n            : getBumpedLaneForHydrationByLane(nextProps)),\n        (nextProps =\n          0 !== (nextProps & (JSCompiler_temp.suspendedLanes | renderLanes))\n            ? 0\n            : nextProps),\n        0 !== nextProps && nextProps !== JSCompiler_temp$jscomp$0.retryLane)\n      )\n        throw (\n          ((JSCompiler_temp$jscomp$0.retryLane = nextProps),\n          enqueueConcurrentRenderForLane(current, nextProps),\n          scheduleUpdateOnFiber(JSCompiler_temp, current, nextProps),\n          SelectiveHydrationException)\n        );\n      \"$?\" === nextInstance.data || renderDidSuspendDelayIfPossible();\n      workInProgress = retrySuspenseComponentWithoutHydrating(\n        current,\n        workInProgress,\n        renderLanes\n      );\n    } else\n      \"$?\" === nextInstance.data\n        ? ((workInProgress.flags |= 192),\n          (workInProgress.child = current.child),\n          (workInProgress = null))\n        : ((current = JSCompiler_temp$jscomp$0.treeContext),\n          (nextHydratableInstance = getNextHydratable(\n            nextInstance.nextSibling\n          )),\n          (hydrationParentFiber = workInProgress),\n          (isHydrating = !0),\n          (hydrationErrors = null),\n          (rootOrSingletonContext = !1),\n          null !== current &&\n            ((idStack[idStackIndex++] = treeContextId),\n            (idStack[idStackIndex++] = treeContextOverflow),\n            (idStack[idStackIndex++] = treeContextProvider),\n            (treeContextId = current.id),\n            (treeContextOverflow = current.overflow),\n            (treeContextProvider = workInProgress)),\n          (workInProgress = mountSuspensePrimaryChildren(\n            workInProgress,\n            nextProps.children\n          )),\n          (workInProgress.flags |= 4096));\n    return workInProgress;\n  }\n  if (showFallback)\n    return (\n      reuseSuspenseHandlerOnStack(workInProgress),\n      (showFallback = nextProps.fallback),\n      (nextInstance = workInProgress.mode),\n      (JSCompiler_temp$jscomp$0 = current.child),\n      (digest = JSCompiler_temp$jscomp$0.sibling),\n      (nextProps = createWorkInProgress(JSCompiler_temp$jscomp$0, {\n        mode: \"hidden\",\n        children: nextProps.children\n      })),\n      (nextProps.subtreeFlags =\n        JSCompiler_temp$jscomp$0.subtreeFlags & 65011712),\n      null !== digest\n        ? (showFallback = createWorkInProgress(digest, showFallback))\n        : ((showFallback = createFiberFromFragment(\n            showFallback,\n            nextInstance,\n            renderLanes,\n            null\n          )),\n          (showFallback.flags |= 2)),\n      (showFallback.return = workInProgress),\n      (nextProps.return = workInProgress),\n      (nextProps.sibling = showFallback),\n      (workInProgress.child = nextProps),\n      (nextProps = showFallback),\n      (showFallback = workInProgress.child),\n      (nextInstance = current.child.memoizedState),\n      null === nextInstance\n        ? (nextInstance = mountSuspenseOffscreenState(renderLanes))\n        : ((JSCompiler_temp$jscomp$0 = nextInstance.cachePool),\n          null !== JSCompiler_temp$jscomp$0\n            ? ((digest = CacheContext._currentValue),\n              (JSCompiler_temp$jscomp$0 =\n                JSCompiler_temp$jscomp$0.parent !== digest\n                  ? { parent: digest, pool: digest }\n                  : JSCompiler_temp$jscomp$0))\n            : (JSCompiler_temp$jscomp$0 = getSuspendedCache()),\n          (nextInstance = {\n            baseLanes: nextInstance.baseLanes | renderLanes,\n            cachePool: JSCompiler_temp$jscomp$0\n          })),\n      (showFallback.memoizedState = nextInstance),\n      (showFallback.childLanes = getRemainingWorkInPrimaryTree(\n        current,\n        JSCompiler_temp,\n        renderLanes\n      )),\n      (workInProgress.memoizedState = SUSPENDED_MARKER),\n      nextProps\n    );\n  pushPrimaryTreeSuspenseHandler(workInProgress);\n  renderLanes = current.child;\n  current = renderLanes.sibling;\n  renderLanes = createWorkInProgress(renderLanes, {\n    mode: \"visible\",\n    children: nextProps.children\n  });\n  renderLanes.return = workInProgress;\n  renderLanes.sibling = null;\n  null !== current &&\n    ((JSCompiler_temp = workInProgress.deletions),\n    null === JSCompiler_temp\n      ? ((workInProgress.deletions = [current]), (workInProgress.flags |= 16))\n      : JSCompiler_temp.push(current));\n  workInProgress.child = renderLanes;\n  workInProgress.memoizedState = null;\n  return renderLanes;\n}\nfunction mountSuspensePrimaryChildren(workInProgress, primaryChildren) {\n  primaryChildren = mountWorkInProgressOffscreenFiber(\n    { mode: \"visible\", children: primaryChildren },\n    workInProgress.mode\n  );\n  primaryChildren.return = workInProgress;\n  return (workInProgress.child = primaryChildren);\n}\nfunction mountWorkInProgressOffscreenFiber(offscreenProps, mode) {\n  offscreenProps = createFiberImplClass(22, offscreenProps, null, mode);\n  offscreenProps.lanes = 0;\n  offscreenProps.stateNode = {\n    _visibility: 1,\n    _pendingMarkers: null,\n    _retryCache: null,\n    _transitions: null\n  };\n  return offscreenProps;\n}\nfunction retrySuspenseComponentWithoutHydrating(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  reconcileChildFibers(workInProgress, current.child, null, renderLanes);\n  current = mountSuspensePrimaryChildren(\n    workInProgress,\n    workInProgress.pendingProps.children\n  );\n  current.flags |= 2;\n  workInProgress.memoizedState = null;\n  return current;\n}\nfunction scheduleSuspenseWorkOnFiber(fiber, renderLanes, propagationRoot) {\n  fiber.lanes |= renderLanes;\n  var alternate = fiber.alternate;\n  null !== alternate && (alternate.lanes |= renderLanes);\n  scheduleContextWorkOnParentPath(fiber.return, renderLanes, propagationRoot);\n}\nfunction initSuspenseListRenderState(\n  workInProgress,\n  isBackwards,\n  tail,\n  lastContentRow,\n  tailMode\n) {\n  var renderState = workInProgress.memoizedState;\n  null === renderState\n    ? (workInProgress.memoizedState = {\n        isBackwards: isBackwards,\n        rendering: null,\n        renderingStartTime: 0,\n        last: lastContentRow,\n        tail: tail,\n        tailMode: tailMode\n      })\n    : ((renderState.isBackwards = isBackwards),\n      (renderState.rendering = null),\n      (renderState.renderingStartTime = 0),\n      (renderState.last = lastContentRow),\n      (renderState.tail = tail),\n      (renderState.tailMode = tailMode));\n}\nfunction updateSuspenseListComponent(current, workInProgress, renderLanes) {\n  var nextProps = workInProgress.pendingProps,\n    revealOrder = nextProps.revealOrder,\n    tailMode = nextProps.tail;\n  reconcileChildren(current, workInProgress, nextProps.children, renderLanes);\n  nextProps = suspenseStackCursor.current;\n  if (0 !== (nextProps & 2))\n    (nextProps = (nextProps & 1) | 2), (workInProgress.flags |= 128);\n  else {\n    if (null !== current && 0 !== (current.flags & 128))\n      a: for (current = workInProgress.child; null !== current; ) {\n        if (13 === current.tag)\n          null !== current.memoizedState &&\n            scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n        else if (19 === current.tag)\n          scheduleSuspenseWorkOnFiber(current, renderLanes, workInProgress);\n        else if (null !== current.child) {\n          current.child.return = current;\n          current = current.child;\n          continue;\n        }\n        if (current === workInProgress) break a;\n        for (; null === current.sibling; ) {\n          if (null === current.return || current.return === workInProgress)\n            break a;\n          current = current.return;\n        }\n        current.sibling.return = current.return;\n        current = current.sibling;\n      }\n    nextProps &= 1;\n  }\n  push(suspenseStackCursor, nextProps);\n  switch (revealOrder) {\n    case \"forwards\":\n      renderLanes = workInProgress.child;\n      for (revealOrder = null; null !== renderLanes; )\n        (current = renderLanes.alternate),\n          null !== current &&\n            null === findFirstSuspended(current) &&\n            (revealOrder = renderLanes),\n          (renderLanes = renderLanes.sibling);\n      renderLanes = revealOrder;\n      null === renderLanes\n        ? ((revealOrder = workInProgress.child), (workInProgress.child = null))\n        : ((revealOrder = renderLanes.sibling), (renderLanes.sibling = null));\n      initSuspenseListRenderState(\n        workInProgress,\n        !1,\n        revealOrder,\n        renderLanes,\n        tailMode\n      );\n      break;\n    case \"backwards\":\n      renderLanes = null;\n      revealOrder = workInProgress.child;\n      for (workInProgress.child = null; null !== revealOrder; ) {\n        current = revealOrder.alternate;\n        if (null !== current && null === findFirstSuspended(current)) {\n          workInProgress.child = revealOrder;\n          break;\n        }\n        current = revealOrder.sibling;\n        revealOrder.sibling = renderLanes;\n        renderLanes = revealOrder;\n        revealOrder = current;\n      }\n      initSuspenseListRenderState(\n        workInProgress,\n        !0,\n        renderLanes,\n        null,\n        tailMode\n      );\n      break;\n    case \"together\":\n      initSuspenseListRenderState(workInProgress, !1, null, null, void 0);\n      break;\n    default:\n      workInProgress.memoizedState = null;\n  }\n  return workInProgress.child;\n}\nfunction bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes) {\n  null !== current && (workInProgress.dependencies = current.dependencies);\n  workInProgressRootSkippedLanes |= workInProgress.lanes;\n  if (0 === (renderLanes & workInProgress.childLanes))\n    if (null !== current) {\n      if (\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        0 === (renderLanes & workInProgress.childLanes))\n      )\n        return null;\n    } else return null;\n  if (null !== current && workInProgress.child !== current.child)\n    throw Error(formatProdErrorMessage(153));\n  if (null !== workInProgress.child) {\n    current = workInProgress.child;\n    renderLanes = createWorkInProgress(current, current.pendingProps);\n    workInProgress.child = renderLanes;\n    for (renderLanes.return = workInProgress; null !== current.sibling; )\n      (current = current.sibling),\n        (renderLanes = renderLanes.sibling =\n          createWorkInProgress(current, current.pendingProps)),\n        (renderLanes.return = workInProgress);\n    renderLanes.sibling = null;\n  }\n  return workInProgress.child;\n}\nfunction checkScheduledUpdateOrContext(current, renderLanes) {\n  if (0 !== (current.lanes & renderLanes)) return !0;\n  current = current.dependencies;\n  return null !== current && checkIfContextChanged(current) ? !0 : !1;\n}\nfunction attemptEarlyBailoutIfNoScheduledUpdate(\n  current,\n  workInProgress,\n  renderLanes\n) {\n  switch (workInProgress.tag) {\n    case 3:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n      resetHydrationState();\n      break;\n    case 27:\n    case 5:\n      pushHostContext(workInProgress);\n      break;\n    case 4:\n      pushHostContainer(workInProgress, workInProgress.stateNode.containerInfo);\n      break;\n    case 10:\n      pushProvider(\n        workInProgress,\n        workInProgress.type,\n        workInProgress.memoizedProps.value\n      );\n      break;\n    case 13:\n      var state = workInProgress.memoizedState;\n      if (null !== state) {\n        if (null !== state.dehydrated)\n          return (\n            pushPrimaryTreeSuspenseHandler(workInProgress),\n            (workInProgress.flags |= 128),\n            null\n          );\n        if (0 !== (renderLanes & workInProgress.child.childLanes))\n          return updateSuspenseComponent(current, workInProgress, renderLanes);\n        pushPrimaryTreeSuspenseHandler(workInProgress);\n        current = bailoutOnAlreadyFinishedWork(\n          current,\n          workInProgress,\n          renderLanes\n        );\n        return null !== current ? current.sibling : null;\n      }\n      pushPrimaryTreeSuspenseHandler(workInProgress);\n      break;\n    case 19:\n      var didSuspendBefore = 0 !== (current.flags & 128);\n      state = 0 !== (renderLanes & workInProgress.childLanes);\n      state ||\n        (propagateParentContextChanges(\n          current,\n          workInProgress,\n          renderLanes,\n          !1\n        ),\n        (state = 0 !== (renderLanes & workInProgress.childLanes)));\n      if (didSuspendBefore) {\n        if (state)\n          return updateSuspenseListComponent(\n            current,\n            workInProgress,\n            renderLanes\n          );\n        workInProgress.flags |= 128;\n      }\n      didSuspendBefore = workInProgress.memoizedState;\n      null !== didSuspendBefore &&\n        ((didSuspendBefore.rendering = null),\n        (didSuspendBefore.tail = null),\n        (didSuspendBefore.lastEffect = null));\n      push(suspenseStackCursor, suspenseStackCursor.current);\n      if (state) break;\n      else return null;\n    case 22:\n    case 23:\n      return (\n        (workInProgress.lanes = 0),\n        updateOffscreenComponent(current, workInProgress, renderLanes)\n      );\n    case 24:\n      pushProvider(workInProgress, CacheContext, current.memoizedState.cache);\n  }\n  return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);\n}\nfunction beginWork(current, workInProgress, renderLanes) {\n  if (null !== current)\n    if (current.memoizedProps !== workInProgress.pendingProps)\n      didReceiveUpdate = !0;\n    else {\n      if (\n        !checkScheduledUpdateOrContext(current, renderLanes) &&\n        0 === (workInProgress.flags & 128)\n      )\n        return (\n          (didReceiveUpdate = !1),\n          attemptEarlyBailoutIfNoScheduledUpdate(\n            current,\n            workInProgress,\n            renderLanes\n          )\n        );\n      didReceiveUpdate = 0 !== (current.flags & 131072) ? !0 : !1;\n    }\n  else\n    (didReceiveUpdate = !1),\n      isHydrating &&\n        0 !== (workInProgress.flags & 1048576) &&\n        pushTreeId(workInProgress, treeForkCount, workInProgress.index);\n  workInProgress.lanes = 0;\n  switch (workInProgress.tag) {\n    case 16:\n      a: {\n        current = workInProgress.pendingProps;\n        var lazyComponent = workInProgress.elementType,\n          init = lazyComponent._init;\n        lazyComponent = init(lazyComponent._payload);\n        workInProgress.type = lazyComponent;\n        if (\"function\" === typeof lazyComponent)\n          shouldConstruct(lazyComponent)\n            ? ((current = resolveClassComponentProps(lazyComponent, current)),\n              (workInProgress.tag = 1),\n              (workInProgress = updateClassComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              )))\n            : ((workInProgress.tag = 0),\n              (workInProgress = updateFunctionComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              )));\n        else {\n          if (void 0 !== lazyComponent && null !== lazyComponent)\n            if (\n              ((init = lazyComponent.$$typeof), init === REACT_FORWARD_REF_TYPE)\n            ) {\n              workInProgress.tag = 11;\n              workInProgress = updateForwardRef(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              );\n              break a;\n            } else if (init === REACT_MEMO_TYPE) {\n              workInProgress.tag = 14;\n              workInProgress = updateMemoComponent(\n                null,\n                workInProgress,\n                lazyComponent,\n                current,\n                renderLanes\n              );\n              break a;\n            }\n          workInProgress =\n            getComponentNameFromType(lazyComponent) || lazyComponent;\n          throw Error(formatProdErrorMessage(306, workInProgress, \"\"));\n        }\n      }\n      return workInProgress;\n    case 0:\n      return updateFunctionComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 1:\n      return (\n        (lazyComponent = workInProgress.type),\n        (init = resolveClassComponentProps(\n          lazyComponent,\n          workInProgress.pendingProps\n        )),\n        updateClassComponent(\n          current,\n          workInProgress,\n          lazyComponent,\n          init,\n          renderLanes\n        )\n      );\n    case 3:\n      a: {\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        );\n        if (null === current) throw Error(formatProdErrorMessage(387));\n        lazyComponent = workInProgress.pendingProps;\n        var prevState = workInProgress.memoizedState;\n        init = prevState.element;\n        cloneUpdateQueue(current, workInProgress);\n        processUpdateQueue(workInProgress, lazyComponent, null, renderLanes);\n        var nextState = workInProgress.memoizedState;\n        lazyComponent = nextState.cache;\n        pushProvider(workInProgress, CacheContext, lazyComponent);\n        lazyComponent !== prevState.cache &&\n          propagateContextChanges(\n            workInProgress,\n            [CacheContext],\n            renderLanes,\n            !0\n          );\n        suspendIfUpdateReadFromEntangledAsyncAction();\n        lazyComponent = nextState.element;\n        if (prevState.isDehydrated)\n          if (\n            ((prevState = {\n              element: lazyComponent,\n              isDehydrated: !1,\n              cache: nextState.cache\n            }),\n            (workInProgress.updateQueue.baseState = prevState),\n            (workInProgress.memoizedState = prevState),\n            workInProgress.flags & 256)\n          ) {\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            );\n            break a;\n          } else if (lazyComponent !== init) {\n            init = createCapturedValueAtFiber(\n              Error(formatProdErrorMessage(424)),\n              workInProgress\n            );\n            queueHydrationError(init);\n            workInProgress = mountHostRootWithoutHydrating(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            );\n            break a;\n          } else {\n            current = workInProgress.stateNode.containerInfo;\n            switch (current.nodeType) {\n              case 9:\n                current = current.body;\n                break;\n              default:\n                current =\n                  \"HTML\" === current.nodeName\n                    ? current.ownerDocument.body\n                    : current;\n            }\n            nextHydratableInstance = getNextHydratable(current.firstChild);\n            hydrationParentFiber = workInProgress;\n            isHydrating = !0;\n            hydrationErrors = null;\n            rootOrSingletonContext = !0;\n            renderLanes = mountChildFibers(\n              workInProgress,\n              null,\n              lazyComponent,\n              renderLanes\n            );\n            for (workInProgress.child = renderLanes; renderLanes; )\n              (renderLanes.flags = (renderLanes.flags & -3) | 4096),\n                (renderLanes = renderLanes.sibling);\n          }\n        else {\n          resetHydrationState();\n          if (lazyComponent === init) {\n            workInProgress = bailoutOnAlreadyFinishedWork(\n              current,\n              workInProgress,\n              renderLanes\n            );\n            break a;\n          }\n          reconcileChildren(\n            current,\n            workInProgress,\n            lazyComponent,\n            renderLanes\n          );\n        }\n        workInProgress = workInProgress.child;\n      }\n      return workInProgress;\n    case 26:\n      return (\n        markRef(current, workInProgress),\n        null === current\n          ? (renderLanes = getResource(\n              workInProgress.type,\n              null,\n              workInProgress.pendingProps,\n              null\n            ))\n            ? (workInProgress.memoizedState = renderLanes)\n            : isHydrating ||\n              ((renderLanes = workInProgress.type),\n              (current = workInProgress.pendingProps),\n              (lazyComponent = getOwnerDocumentFromRootContainer(\n                rootInstanceStackCursor.current\n              ).createElement(renderLanes)),\n              (lazyComponent[internalInstanceKey] = workInProgress),\n              (lazyComponent[internalPropsKey] = current),\n              setInitialProperties(lazyComponent, renderLanes, current),\n              markNodeAsHoistable(lazyComponent),\n              (workInProgress.stateNode = lazyComponent))\n          : (workInProgress.memoizedState = getResource(\n              workInProgress.type,\n              current.memoizedProps,\n              workInProgress.pendingProps,\n              current.memoizedState\n            )),\n        null\n      );\n    case 27:\n      return (\n        pushHostContext(workInProgress),\n        null === current &&\n          isHydrating &&\n          ((lazyComponent = workInProgress.stateNode =\n            resolveSingletonInstance(\n              workInProgress.type,\n              workInProgress.pendingProps,\n              rootInstanceStackCursor.current\n            )),\n          (hydrationParentFiber = workInProgress),\n          (rootOrSingletonContext = !0),\n          (init = nextHydratableInstance),\n          isSingletonScope(workInProgress.type)\n            ? ((previousHydratableOnEnteringScopedSingleton = init),\n              (nextHydratableInstance = getNextHydratable(\n                lazyComponent.firstChild\n              )))\n            : (nextHydratableInstance = init)),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        markRef(current, workInProgress),\n        null === current && (workInProgress.flags |= 4194304),\n        workInProgress.child\n      );\n    case 5:\n      if (null === current && isHydrating) {\n        if ((init = lazyComponent = nextHydratableInstance))\n          (lazyComponent = canHydrateInstance(\n            lazyComponent,\n            workInProgress.type,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== lazyComponent\n              ? ((workInProgress.stateNode = lazyComponent),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = getNextHydratable(\n                  lazyComponent.firstChild\n                )),\n                (rootOrSingletonContext = !1),\n                (init = !0))\n              : (init = !1);\n        init || throwOnHydrationMismatch(workInProgress);\n      }\n      pushHostContext(workInProgress);\n      init = workInProgress.type;\n      prevState = workInProgress.pendingProps;\n      nextState = null !== current ? current.memoizedProps : null;\n      lazyComponent = prevState.children;\n      shouldSetTextContent(init, prevState)\n        ? (lazyComponent = null)\n        : null !== nextState &&\n          shouldSetTextContent(init, nextState) &&\n          (workInProgress.flags |= 32);\n      null !== workInProgress.memoizedState &&\n        ((init = renderWithHooks(\n          current,\n          workInProgress,\n          TransitionAwareHostComponent,\n          null,\n          null,\n          renderLanes\n        )),\n        (HostTransitionContext._currentValue = init));\n      markRef(current, workInProgress);\n      reconcileChildren(current, workInProgress, lazyComponent, renderLanes);\n      return workInProgress.child;\n    case 6:\n      if (null === current && isHydrating) {\n        if ((current = renderLanes = nextHydratableInstance))\n          (renderLanes = canHydrateTextInstance(\n            renderLanes,\n            workInProgress.pendingProps,\n            rootOrSingletonContext\n          )),\n            null !== renderLanes\n              ? ((workInProgress.stateNode = renderLanes),\n                (hydrationParentFiber = workInProgress),\n                (nextHydratableInstance = null),\n                (current = !0))\n              : (current = !1);\n        current || throwOnHydrationMismatch(workInProgress);\n      }\n      return null;\n    case 13:\n      return updateSuspenseComponent(current, workInProgress, renderLanes);\n    case 4:\n      return (\n        pushHostContainer(\n          workInProgress,\n          workInProgress.stateNode.containerInfo\n        ),\n        (lazyComponent = workInProgress.pendingProps),\n        null === current\n          ? (workInProgress.child = reconcileChildFibers(\n              workInProgress,\n              null,\n              lazyComponent,\n              renderLanes\n            ))\n          : reconcileChildren(\n              current,\n              workInProgress,\n              lazyComponent,\n              renderLanes\n            ),\n        workInProgress.child\n      );\n    case 11:\n      return updateForwardRef(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 7:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 8:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 12:\n      return (\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 10:\n      return (\n        (lazyComponent = workInProgress.pendingProps),\n        pushProvider(workInProgress, workInProgress.type, lazyComponent.value),\n        reconcileChildren(\n          current,\n          workInProgress,\n          lazyComponent.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 9:\n      return (\n        (init = workInProgress.type._context),\n        (lazyComponent = workInProgress.pendingProps.children),\n        prepareToReadContext(workInProgress),\n        (init = readContext(init)),\n        (lazyComponent = lazyComponent(init)),\n        (workInProgress.flags |= 1),\n        reconcileChildren(current, workInProgress, lazyComponent, renderLanes),\n        workInProgress.child\n      );\n    case 14:\n      return updateMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 15:\n      return updateSimpleMemoComponent(\n        current,\n        workInProgress,\n        workInProgress.type,\n        workInProgress.pendingProps,\n        renderLanes\n      );\n    case 19:\n      return updateSuspenseListComponent(current, workInProgress, renderLanes);\n    case 31:\n      return (\n        (lazyComponent = workInProgress.pendingProps),\n        (renderLanes = workInProgress.mode),\n        (lazyComponent = {\n          mode: lazyComponent.mode,\n          children: lazyComponent.children\n        }),\n        null === current\n          ? ((renderLanes = mountWorkInProgressOffscreenFiber(\n              lazyComponent,\n              renderLanes\n            )),\n            (renderLanes.ref = workInProgress.ref),\n            (workInProgress.child = renderLanes),\n            (renderLanes.return = workInProgress),\n            (workInProgress = renderLanes))\n          : ((renderLanes = createWorkInProgress(current.child, lazyComponent)),\n            (renderLanes.ref = workInProgress.ref),\n            (workInProgress.child = renderLanes),\n            (renderLanes.return = workInProgress),\n            (workInProgress = renderLanes)),\n        workInProgress\n      );\n    case 22:\n      return updateOffscreenComponent(current, workInProgress, renderLanes);\n    case 24:\n      return (\n        prepareToReadContext(workInProgress),\n        (lazyComponent = readContext(CacheContext)),\n        null === current\n          ? ((init = peekCacheFromPool()),\n            null === init &&\n              ((init = workInProgressRoot),\n              (prevState = createCache()),\n              (init.pooledCache = prevState),\n              prevState.refCount++,\n              null !== prevState && (init.pooledCacheLanes |= renderLanes),\n              (init = prevState)),\n            (workInProgress.memoizedState = {\n              parent: lazyComponent,\n              cache: init\n            }),\n            initializeUpdateQueue(workInProgress),\n            pushProvider(workInProgress, CacheContext, init))\n          : (0 !== (current.lanes & renderLanes) &&\n              (cloneUpdateQueue(current, workInProgress),\n              processUpdateQueue(workInProgress, null, null, renderLanes),\n              suspendIfUpdateReadFromEntangledAsyncAction()),\n            (init = current.memoizedState),\n            (prevState = workInProgress.memoizedState),\n            init.parent !== lazyComponent\n              ? ((init = { parent: lazyComponent, cache: lazyComponent }),\n                (workInProgress.memoizedState = init),\n                0 === workInProgress.lanes &&\n                  (workInProgress.memoizedState =\n                    workInProgress.updateQueue.baseState =\n                      init),\n                pushProvider(workInProgress, CacheContext, lazyComponent))\n              : ((lazyComponent = prevState.cache),\n                pushProvider(workInProgress, CacheContext, lazyComponent),\n                lazyComponent !== init.cache &&\n                  propagateContextChanges(\n                    workInProgress,\n                    [CacheContext],\n                    renderLanes,\n                    !0\n                  ))),\n        reconcileChildren(\n          current,\n          workInProgress,\n          workInProgress.pendingProps.children,\n          renderLanes\n        ),\n        workInProgress.child\n      );\n    case 29:\n      throw workInProgress.pendingProps;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction markUpdate(workInProgress) {\n  workInProgress.flags |= 4;\n}\nfunction preloadResourceAndSuspendIfNeeded(workInProgress, resource) {\n  if (\"stylesheet\" !== resource.type || 0 !== (resource.state.loading & 4))\n    workInProgress.flags &= -16777217;\n  else if (((workInProgress.flags |= 16777216), !preloadResource(resource))) {\n    resource = suspenseHandlerStackCursor.current;\n    if (\n      null !== resource &&\n      ((workInProgressRootRenderLanes & 4194048) ===\n      workInProgressRootRenderLanes\n        ? null !== shellBoundary\n        : ((workInProgressRootRenderLanes & 62914560) !==\n            workInProgressRootRenderLanes &&\n            0 === (workInProgressRootRenderLanes & 536870912)) ||\n          resource !== shellBoundary)\n    )\n      throw (\n        ((suspendedThenable = noopSuspenseyCommitThenable),\n        SuspenseyCommitException)\n      );\n    workInProgress.flags |= 8192;\n  }\n}\nfunction scheduleRetryEffect(workInProgress, retryQueue) {\n  null !== retryQueue && (workInProgress.flags |= 4);\n  workInProgress.flags & 16384 &&\n    ((retryQueue =\n      22 !== workInProgress.tag ? claimNextRetryLane() : 536870912),\n    (workInProgress.lanes |= retryQueue),\n    (workInProgressSuspendedRetryLanes |= retryQueue));\n}\nfunction cutOffTailIfNeeded(renderState, hasRenderedATailFallback) {\n  if (!isHydrating)\n    switch (renderState.tailMode) {\n      case \"hidden\":\n        hasRenderedATailFallback = renderState.tail;\n        for (var lastTailNode = null; null !== hasRenderedATailFallback; )\n          null !== hasRenderedATailFallback.alternate &&\n            (lastTailNode = hasRenderedATailFallback),\n            (hasRenderedATailFallback = hasRenderedATailFallback.sibling);\n        null === lastTailNode\n          ? (renderState.tail = null)\n          : (lastTailNode.sibling = null);\n        break;\n      case \"collapsed\":\n        lastTailNode = renderState.tail;\n        for (var lastTailNode$113 = null; null !== lastTailNode; )\n          null !== lastTailNode.alternate && (lastTailNode$113 = lastTailNode),\n            (lastTailNode = lastTailNode.sibling);\n        null === lastTailNode$113\n          ? hasRenderedATailFallback || null === renderState.tail\n            ? (renderState.tail = null)\n            : (renderState.tail.sibling = null)\n          : (lastTailNode$113.sibling = null);\n    }\n}\nfunction bubbleProperties(completedWork) {\n  var didBailout =\n      null !== completedWork.alternate &&\n      completedWork.alternate.child === completedWork.child,\n    newChildLanes = 0,\n    subtreeFlags = 0;\n  if (didBailout)\n    for (var child$114 = completedWork.child; null !== child$114; )\n      (newChildLanes |= child$114.lanes | child$114.childLanes),\n        (subtreeFlags |= child$114.subtreeFlags & 65011712),\n        (subtreeFlags |= child$114.flags & 65011712),\n        (child$114.return = completedWork),\n        (child$114 = child$114.sibling);\n  else\n    for (child$114 = completedWork.child; null !== child$114; )\n      (newChildLanes |= child$114.lanes | child$114.childLanes),\n        (subtreeFlags |= child$114.subtreeFlags),\n        (subtreeFlags |= child$114.flags),\n        (child$114.return = completedWork),\n        (child$114 = child$114.sibling);\n  completedWork.subtreeFlags |= subtreeFlags;\n  completedWork.childLanes = newChildLanes;\n  return didBailout;\n}\nfunction completeWork(current, workInProgress, renderLanes) {\n  var newProps = workInProgress.pendingProps;\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 31:\n    case 16:\n    case 15:\n    case 0:\n    case 11:\n    case 7:\n    case 8:\n    case 12:\n    case 9:\n    case 14:\n      return bubbleProperties(workInProgress), null;\n    case 1:\n      return bubbleProperties(workInProgress), null;\n    case 3:\n      renderLanes = workInProgress.stateNode;\n      newProps = null;\n      null !== current && (newProps = current.memoizedState.cache);\n      workInProgress.memoizedState.cache !== newProps &&\n        (workInProgress.flags |= 2048);\n      popProvider(CacheContext);\n      popHostContainer();\n      renderLanes.pendingContext &&\n        ((renderLanes.context = renderLanes.pendingContext),\n        (renderLanes.pendingContext = null));\n      if (null === current || null === current.child)\n        popHydrationState(workInProgress)\n          ? markUpdate(workInProgress)\n          : null === current ||\n            (current.memoizedState.isDehydrated &&\n              0 === (workInProgress.flags & 256)) ||\n            ((workInProgress.flags |= 1024),\n            upgradeHydrationErrorsToRecoverable());\n      bubbleProperties(workInProgress);\n      return null;\n    case 26:\n      return (\n        (renderLanes = workInProgress.memoizedState),\n        null === current\n          ? (markUpdate(workInProgress),\n            null !== renderLanes\n              ? (bubbleProperties(workInProgress),\n                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))\n              : (bubbleProperties(workInProgress),\n                (workInProgress.flags &= -16777217)))\n          : renderLanes\n            ? renderLanes !== current.memoizedState\n              ? (markUpdate(workInProgress),\n                bubbleProperties(workInProgress),\n                preloadResourceAndSuspendIfNeeded(workInProgress, renderLanes))\n              : (bubbleProperties(workInProgress),\n                (workInProgress.flags &= -16777217))\n            : (current.memoizedProps !== newProps && markUpdate(workInProgress),\n              bubbleProperties(workInProgress),\n              (workInProgress.flags &= -16777217)),\n        null\n      );\n    case 27:\n      popHostContext(workInProgress);\n      renderLanes = rootInstanceStackCursor.current;\n      var type = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        popHydrationState(workInProgress)\n          ? prepareToHydrateHostInstance(workInProgress, current)\n          : ((current = resolveSingletonInstance(type, newProps, renderLanes)),\n            (workInProgress.stateNode = current),\n            markUpdate(workInProgress));\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 5:\n      popHostContext(workInProgress);\n      renderLanes = workInProgress.type;\n      if (null !== current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (!newProps) {\n          if (null === workInProgress.stateNode)\n            throw Error(formatProdErrorMessage(166));\n          bubbleProperties(workInProgress);\n          return null;\n        }\n        current = contextStackCursor.current;\n        if (popHydrationState(workInProgress))\n          prepareToHydrateHostInstance(workInProgress, current);\n        else {\n          type = getOwnerDocumentFromRootContainer(\n            rootInstanceStackCursor.current\n          );\n          switch (current) {\n            case 1:\n              current = type.createElementNS(\n                \"http://www.w3.org/2000/svg\",\n                renderLanes\n              );\n              break;\n            case 2:\n              current = type.createElementNS(\n                \"http://www.w3.org/1998/Math/MathML\",\n                renderLanes\n              );\n              break;\n            default:\n              switch (renderLanes) {\n                case \"svg\":\n                  current = type.createElementNS(\n                    \"http://www.w3.org/2000/svg\",\n                    renderLanes\n                  );\n                  break;\n                case \"math\":\n                  current = type.createElementNS(\n                    \"http://www.w3.org/1998/Math/MathML\",\n                    renderLanes\n                  );\n                  break;\n                case \"script\":\n                  current = type.createElement(\"div\");\n                  current.innerHTML = \"<script>\\x3c/script>\";\n                  current = current.removeChild(current.firstChild);\n                  break;\n                case \"select\":\n                  current =\n                    \"string\" === typeof newProps.is\n                      ? type.createElement(\"select\", { is: newProps.is })\n                      : type.createElement(\"select\");\n                  newProps.multiple\n                    ? (current.multiple = !0)\n                    : newProps.size && (current.size = newProps.size);\n                  break;\n                default:\n                  current =\n                    \"string\" === typeof newProps.is\n                      ? type.createElement(renderLanes, { is: newProps.is })\n                      : type.createElement(renderLanes);\n              }\n          }\n          current[internalInstanceKey] = workInProgress;\n          current[internalPropsKey] = newProps;\n          a: for (type = workInProgress.child; null !== type; ) {\n            if (5 === type.tag || 6 === type.tag)\n              current.appendChild(type.stateNode);\n            else if (4 !== type.tag && 27 !== type.tag && null !== type.child) {\n              type.child.return = type;\n              type = type.child;\n              continue;\n            }\n            if (type === workInProgress) break a;\n            for (; null === type.sibling; ) {\n              if (null === type.return || type.return === workInProgress)\n                break a;\n              type = type.return;\n            }\n            type.sibling.return = type.return;\n            type = type.sibling;\n          }\n          workInProgress.stateNode = current;\n          a: switch (\n            (setInitialProperties(current, renderLanes, newProps), renderLanes)\n          ) {\n            case \"button\":\n            case \"input\":\n            case \"select\":\n            case \"textarea\":\n              current = !!newProps.autoFocus;\n              break a;\n            case \"img\":\n              current = !0;\n              break a;\n            default:\n              current = !1;\n          }\n          current && markUpdate(workInProgress);\n        }\n      }\n      bubbleProperties(workInProgress);\n      workInProgress.flags &= -16777217;\n      return null;\n    case 6:\n      if (current && null != workInProgress.stateNode)\n        current.memoizedProps !== newProps && markUpdate(workInProgress);\n      else {\n        if (\"string\" !== typeof newProps && null === workInProgress.stateNode)\n          throw Error(formatProdErrorMessage(166));\n        current = rootInstanceStackCursor.current;\n        if (popHydrationState(workInProgress)) {\n          current = workInProgress.stateNode;\n          renderLanes = workInProgress.memoizedProps;\n          newProps = null;\n          type = hydrationParentFiber;\n          if (null !== type)\n            switch (type.tag) {\n              case 27:\n              case 5:\n                newProps = type.memoizedProps;\n            }\n          current[internalInstanceKey] = workInProgress;\n          current =\n            current.nodeValue === renderLanes ||\n            (null !== newProps && !0 === newProps.suppressHydrationWarning) ||\n            checkForUnmatchedText(current.nodeValue, renderLanes)\n              ? !0\n              : !1;\n          current || throwOnHydrationMismatch(workInProgress);\n        } else\n          (current =\n            getOwnerDocumentFromRootContainer(current).createTextNode(\n              newProps\n            )),\n            (current[internalInstanceKey] = workInProgress),\n            (workInProgress.stateNode = current);\n      }\n      bubbleProperties(workInProgress);\n      return null;\n    case 13:\n      newProps = workInProgress.memoizedState;\n      if (\n        null === current ||\n        (null !== current.memoizedState &&\n          null !== current.memoizedState.dehydrated)\n      ) {\n        type = popHydrationState(workInProgress);\n        if (null !== newProps && null !== newProps.dehydrated) {\n          if (null === current) {\n            if (!type) throw Error(formatProdErrorMessage(318));\n            type = workInProgress.memoizedState;\n            type = null !== type ? type.dehydrated : null;\n            if (!type) throw Error(formatProdErrorMessage(317));\n            type[internalInstanceKey] = workInProgress;\n          } else\n            resetHydrationState(),\n              0 === (workInProgress.flags & 128) &&\n                (workInProgress.memoizedState = null),\n              (workInProgress.flags |= 4);\n          bubbleProperties(workInProgress);\n          type = !1;\n        } else\n          (type = upgradeHydrationErrorsToRecoverable()),\n            null !== current &&\n              null !== current.memoizedState &&\n              (current.memoizedState.hydrationErrors = type),\n            (type = !0);\n        if (!type) {\n          if (workInProgress.flags & 256)\n            return popSuspenseHandler(workInProgress), workInProgress;\n          popSuspenseHandler(workInProgress);\n          return null;\n        }\n      }\n      popSuspenseHandler(workInProgress);\n      if (0 !== (workInProgress.flags & 128))\n        return (workInProgress.lanes = renderLanes), workInProgress;\n      renderLanes = null !== newProps;\n      current = null !== current && null !== current.memoizedState;\n      if (renderLanes) {\n        newProps = workInProgress.child;\n        type = null;\n        null !== newProps.alternate &&\n          null !== newProps.alternate.memoizedState &&\n          null !== newProps.alternate.memoizedState.cachePool &&\n          (type = newProps.alternate.memoizedState.cachePool.pool);\n        var cache$127 = null;\n        null !== newProps.memoizedState &&\n          null !== newProps.memoizedState.cachePool &&\n          (cache$127 = newProps.memoizedState.cachePool.pool);\n        cache$127 !== type && (newProps.flags |= 2048);\n      }\n      renderLanes !== current &&\n        renderLanes &&\n        (workInProgress.child.flags |= 8192);\n      scheduleRetryEffect(workInProgress, workInProgress.updateQueue);\n      bubbleProperties(workInProgress);\n      return null;\n    case 4:\n      return (\n        popHostContainer(),\n        null === current &&\n          listenToAllSupportedEvents(workInProgress.stateNode.containerInfo),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 10:\n      return (\n        popProvider(workInProgress.type), bubbleProperties(workInProgress), null\n      );\n    case 19:\n      pop(suspenseStackCursor);\n      type = workInProgress.memoizedState;\n      if (null === type) return bubbleProperties(workInProgress), null;\n      newProps = 0 !== (workInProgress.flags & 128);\n      cache$127 = type.rendering;\n      if (null === cache$127)\n        if (newProps) cutOffTailIfNeeded(type, !1);\n        else {\n          if (\n            0 !== workInProgressRootExitStatus ||\n            (null !== current && 0 !== (current.flags & 128))\n          )\n            for (current = workInProgress.child; null !== current; ) {\n              cache$127 = findFirstSuspended(current);\n              if (null !== cache$127) {\n                workInProgress.flags |= 128;\n                cutOffTailIfNeeded(type, !1);\n                current = cache$127.updateQueue;\n                workInProgress.updateQueue = current;\n                scheduleRetryEffect(workInProgress, current);\n                workInProgress.subtreeFlags = 0;\n                current = renderLanes;\n                for (renderLanes = workInProgress.child; null !== renderLanes; )\n                  resetWorkInProgress(renderLanes, current),\n                    (renderLanes = renderLanes.sibling);\n                push(\n                  suspenseStackCursor,\n                  (suspenseStackCursor.current & 1) | 2\n                );\n                return workInProgress.child;\n              }\n              current = current.sibling;\n            }\n          null !== type.tail &&\n            now() > workInProgressRootRenderTargetTime &&\n            ((workInProgress.flags |= 128),\n            (newProps = !0),\n            cutOffTailIfNeeded(type, !1),\n            (workInProgress.lanes = 4194304));\n        }\n      else {\n        if (!newProps)\n          if (((current = findFirstSuspended(cache$127)), null !== current)) {\n            if (\n              ((workInProgress.flags |= 128),\n              (newProps = !0),\n              (current = current.updateQueue),\n              (workInProgress.updateQueue = current),\n              scheduleRetryEffect(workInProgress, current),\n              cutOffTailIfNeeded(type, !0),\n              null === type.tail &&\n                \"hidden\" === type.tailMode &&\n                !cache$127.alternate &&\n                !isHydrating)\n            )\n              return bubbleProperties(workInProgress), null;\n          } else\n            2 * now() - type.renderingStartTime >\n              workInProgressRootRenderTargetTime &&\n              536870912 !== renderLanes &&\n              ((workInProgress.flags |= 128),\n              (newProps = !0),\n              cutOffTailIfNeeded(type, !1),\n              (workInProgress.lanes = 4194304));\n        type.isBackwards\n          ? ((cache$127.sibling = workInProgress.child),\n            (workInProgress.child = cache$127))\n          : ((current = type.last),\n            null !== current\n              ? (current.sibling = cache$127)\n              : (workInProgress.child = cache$127),\n            (type.last = cache$127));\n      }\n      if (null !== type.tail)\n        return (\n          (workInProgress = type.tail),\n          (type.rendering = workInProgress),\n          (type.tail = workInProgress.sibling),\n          (type.renderingStartTime = now()),\n          (workInProgress.sibling = null),\n          (current = suspenseStackCursor.current),\n          push(suspenseStackCursor, newProps ? (current & 1) | 2 : current & 1),\n          workInProgress\n        );\n      bubbleProperties(workInProgress);\n      return null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        (newProps = null !== workInProgress.memoizedState),\n        null !== current\n          ? (null !== current.memoizedState) !== newProps &&\n            (workInProgress.flags |= 8192)\n          : newProps && (workInProgress.flags |= 8192),\n        newProps\n          ? 0 !== (renderLanes & 536870912) &&\n            0 === (workInProgress.flags & 128) &&\n            (bubbleProperties(workInProgress),\n            workInProgress.subtreeFlags & 6 && (workInProgress.flags |= 8192))\n          : bubbleProperties(workInProgress),\n        (renderLanes = workInProgress.updateQueue),\n        null !== renderLanes &&\n          scheduleRetryEffect(workInProgress, renderLanes.retryQueue),\n        (renderLanes = null),\n        null !== current &&\n          null !== current.memoizedState &&\n          null !== current.memoizedState.cachePool &&\n          (renderLanes = current.memoizedState.cachePool.pool),\n        (newProps = null),\n        null !== workInProgress.memoizedState &&\n          null !== workInProgress.memoizedState.cachePool &&\n          (newProps = workInProgress.memoizedState.cachePool.pool),\n        newProps !== renderLanes && (workInProgress.flags |= 2048),\n        null !== current && pop(resumedCache),\n        null\n      );\n    case 24:\n      return (\n        (renderLanes = null),\n        null !== current && (renderLanes = current.memoizedState.cache),\n        workInProgress.memoizedState.cache !== renderLanes &&\n          (workInProgress.flags |= 2048),\n        popProvider(CacheContext),\n        bubbleProperties(workInProgress),\n        null\n      );\n    case 25:\n      return null;\n    case 30:\n      return null;\n  }\n  throw Error(formatProdErrorMessage(156, workInProgress.tag));\n}\nfunction unwindWork(current, workInProgress) {\n  popTreeContext(workInProgress);\n  switch (workInProgress.tag) {\n    case 1:\n      return (\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 3:\n      return (\n        popProvider(CacheContext),\n        popHostContainer(),\n        (current = workInProgress.flags),\n        0 !== (current & 65536) && 0 === (current & 128)\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 26:\n    case 27:\n    case 5:\n      return popHostContext(workInProgress), null;\n    case 13:\n      popSuspenseHandler(workInProgress);\n      current = workInProgress.memoizedState;\n      if (null !== current && null !== current.dehydrated) {\n        if (null === workInProgress.alternate)\n          throw Error(formatProdErrorMessage(340));\n        resetHydrationState();\n      }\n      current = workInProgress.flags;\n      return current & 65536\n        ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n        : null;\n    case 19:\n      return pop(suspenseStackCursor), null;\n    case 4:\n      return popHostContainer(), null;\n    case 10:\n      return popProvider(workInProgress.type), null;\n    case 22:\n    case 23:\n      return (\n        popSuspenseHandler(workInProgress),\n        popHiddenContext(),\n        null !== current && pop(resumedCache),\n        (current = workInProgress.flags),\n        current & 65536\n          ? ((workInProgress.flags = (current & -65537) | 128), workInProgress)\n          : null\n      );\n    case 24:\n      return popProvider(CacheContext), null;\n    case 25:\n      return null;\n    default:\n      return null;\n  }\n}\nfunction unwindInterruptedWork(current, interruptedWork) {\n  popTreeContext(interruptedWork);\n  switch (interruptedWork.tag) {\n    case 3:\n      popProvider(CacheContext);\n      popHostContainer();\n      break;\n    case 26:\n    case 27:\n    case 5:\n      popHostContext(interruptedWork);\n      break;\n    case 4:\n      popHostContainer();\n      break;\n    case 13:\n      popSuspenseHandler(interruptedWork);\n      break;\n    case 19:\n      pop(suspenseStackCursor);\n      break;\n    case 10:\n      popProvider(interruptedWork.type);\n      break;\n    case 22:\n    case 23:\n      popSuspenseHandler(interruptedWork);\n      popHiddenContext();\n      null !== current && pop(resumedCache);\n      break;\n    case 24:\n      popProvider(CacheContext);\n  }\n}\nfunction commitHookEffectListMount(flags, finishedWork) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          lastEffect = void 0;\n          var create = updateQueue.create,\n            inst = updateQueue.inst;\n          lastEffect = create();\n          inst.destroy = lastEffect;\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHookEffectListUnmount(\n  flags,\n  finishedWork,\n  nearestMountedAncestor$jscomp$0\n) {\n  try {\n    var updateQueue = finishedWork.updateQueue,\n      lastEffect = null !== updateQueue ? updateQueue.lastEffect : null;\n    if (null !== lastEffect) {\n      var firstEffect = lastEffect.next;\n      updateQueue = firstEffect;\n      do {\n        if ((updateQueue.tag & flags) === flags) {\n          var inst = updateQueue.inst,\n            destroy = inst.destroy;\n          if (void 0 !== destroy) {\n            inst.destroy = void 0;\n            lastEffect = finishedWork;\n            var nearestMountedAncestor = nearestMountedAncestor$jscomp$0,\n              destroy_ = destroy;\n            try {\n              destroy_();\n            } catch (error) {\n              captureCommitPhaseError(\n                lastEffect,\n                nearestMountedAncestor,\n                error\n              );\n            }\n          }\n        }\n        updateQueue = updateQueue.next;\n      } while (updateQueue !== firstEffect);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitClassCallbacks(finishedWork) {\n  var updateQueue = finishedWork.updateQueue;\n  if (null !== updateQueue) {\n    var instance = finishedWork.stateNode;\n    try {\n      commitCallbacks(updateQueue, instance);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n  }\n}\nfunction safelyCallComponentWillUnmount(\n  current,\n  nearestMountedAncestor,\n  instance\n) {\n  instance.props = resolveClassComponentProps(\n    current.type,\n    current.memoizedProps\n  );\n  instance.state = current.memoizedState;\n  try {\n    instance.componentWillUnmount();\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyAttachRef(current, nearestMountedAncestor) {\n  try {\n    var ref = current.ref;\n    if (null !== ref) {\n      switch (current.tag) {\n        case 26:\n        case 27:\n        case 5:\n          var instanceToUse = current.stateNode;\n          break;\n        case 30:\n          instanceToUse = current.stateNode;\n          break;\n        default:\n          instanceToUse = current.stateNode;\n      }\n      \"function\" === typeof ref\n        ? (current.refCleanup = ref(instanceToUse))\n        : (ref.current = instanceToUse);\n    }\n  } catch (error) {\n    captureCommitPhaseError(current, nearestMountedAncestor, error);\n  }\n}\nfunction safelyDetachRef(current, nearestMountedAncestor) {\n  var ref = current.ref,\n    refCleanup = current.refCleanup;\n  if (null !== ref)\n    if (\"function\" === typeof refCleanup)\n      try {\n        refCleanup();\n      } catch (error) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error);\n      } finally {\n        (current.refCleanup = null),\n          (current = current.alternate),\n          null != current && (current.refCleanup = null);\n      }\n    else if (\"function\" === typeof ref)\n      try {\n        ref(null);\n      } catch (error$143) {\n        captureCommitPhaseError(current, nearestMountedAncestor, error$143);\n      }\n    else ref.current = null;\n}\nfunction commitHostMount(finishedWork) {\n  var type = finishedWork.type,\n    props = finishedWork.memoizedProps,\n    instance = finishedWork.stateNode;\n  try {\n    a: switch (type) {\n      case \"button\":\n      case \"input\":\n      case \"select\":\n      case \"textarea\":\n        props.autoFocus && instance.focus();\n        break a;\n      case \"img\":\n        props.src\n          ? (instance.src = props.src)\n          : props.srcSet && (instance.srcset = props.srcSet);\n    }\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction commitHostUpdate(finishedWork, newProps, oldProps) {\n  try {\n    var domElement = finishedWork.stateNode;\n    updateProperties(domElement, finishedWork.type, oldProps, newProps);\n    domElement[internalPropsKey] = newProps;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nfunction isHostParent(fiber) {\n  return (\n    5 === fiber.tag ||\n    3 === fiber.tag ||\n    26 === fiber.tag ||\n    (27 === fiber.tag && isSingletonScope(fiber.type)) ||\n    4 === fiber.tag\n  );\n}\nfunction getHostSibling(fiber) {\n  a: for (;;) {\n    for (; null === fiber.sibling; ) {\n      if (null === fiber.return || isHostParent(fiber.return)) return null;\n      fiber = fiber.return;\n    }\n    fiber.sibling.return = fiber.return;\n    for (\n      fiber = fiber.sibling;\n      5 !== fiber.tag && 6 !== fiber.tag && 18 !== fiber.tag;\n\n    ) {\n      if (27 === fiber.tag && isSingletonScope(fiber.type)) continue a;\n      if (fiber.flags & 2) continue a;\n      if (null === fiber.child || 4 === fiber.tag) continue a;\n      else (fiber.child.return = fiber), (fiber = fiber.child);\n    }\n    if (!(fiber.flags & 2)) return fiber.stateNode;\n  }\n}\nfunction insertOrAppendPlacementNodeIntoContainer(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before\n        ? (9 === parent.nodeType\n            ? parent.body\n            : \"HTML\" === parent.nodeName\n              ? parent.ownerDocument.body\n              : parent\n          ).insertBefore(node, before)\n        : ((before =\n            9 === parent.nodeType\n              ? parent.body\n              : \"HTML\" === parent.nodeName\n                ? parent.ownerDocument.body\n                : parent),\n          before.appendChild(node),\n          (parent = parent._reactRootContainer),\n          (null !== parent && void 0 !== parent) ||\n            null !== before.onclick ||\n            (before.onclick = noop$1));\n  else if (\n    4 !== tag &&\n    (27 === tag &&\n      isSingletonScope(node.type) &&\n      ((parent = node.stateNode), (before = null)),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNodeIntoContainer(node, before, parent),\n        (node = node.sibling);\n}\nfunction insertOrAppendPlacementNode(node, before, parent) {\n  var tag = node.tag;\n  if (5 === tag || 6 === tag)\n    (node = node.stateNode),\n      before ? parent.insertBefore(node, before) : parent.appendChild(node);\n  else if (\n    4 !== tag &&\n    (27 === tag && isSingletonScope(node.type) && (parent = node.stateNode),\n    (node = node.child),\n    null !== node)\n  )\n    for (\n      insertOrAppendPlacementNode(node, before, parent), node = node.sibling;\n      null !== node;\n\n    )\n      insertOrAppendPlacementNode(node, before, parent), (node = node.sibling);\n}\nfunction commitHostSingletonAcquisition(finishedWork) {\n  var singleton = finishedWork.stateNode,\n    props = finishedWork.memoizedProps;\n  try {\n    for (\n      var type = finishedWork.type, attributes = singleton.attributes;\n      attributes.length;\n\n    )\n      singleton.removeAttributeNode(attributes[0]);\n    setInitialProperties(singleton, type, props);\n    singleton[internalInstanceKey] = finishedWork;\n    singleton[internalPropsKey] = props;\n  } catch (error) {\n    captureCommitPhaseError(finishedWork, finishedWork.return, error);\n  }\n}\nvar offscreenSubtreeIsHidden = !1,\n  offscreenSubtreeWasHidden = !1,\n  needsFormReset = !1,\n  PossiblyWeakSet = \"function\" === typeof WeakSet ? WeakSet : Set,\n  nextEffect = null;\nfunction commitBeforeMutationEffects(root, firstChild) {\n  root = root.containerInfo;\n  eventsEnabled = _enabled;\n  root = getActiveElementDeep(root);\n  if (hasSelectionCapabilities(root)) {\n    if (\"selectionStart\" in root)\n      var JSCompiler_temp = {\n        start: root.selectionStart,\n        end: root.selectionEnd\n      };\n    else\n      a: {\n        JSCompiler_temp =\n          ((JSCompiler_temp = root.ownerDocument) &&\n            JSCompiler_temp.defaultView) ||\n          window;\n        var selection =\n          JSCompiler_temp.getSelection && JSCompiler_temp.getSelection();\n        if (selection && 0 !== selection.rangeCount) {\n          JSCompiler_temp = selection.anchorNode;\n          var anchorOffset = selection.anchorOffset,\n            focusNode = selection.focusNode;\n          selection = selection.focusOffset;\n          try {\n            JSCompiler_temp.nodeType, focusNode.nodeType;\n          } catch (e$20) {\n            JSCompiler_temp = null;\n            break a;\n          }\n          var length = 0,\n            start = -1,\n            end = -1,\n            indexWithinAnchor = 0,\n            indexWithinFocus = 0,\n            node = root,\n            parentNode = null;\n          b: for (;;) {\n            for (var next; ; ) {\n              node !== JSCompiler_temp ||\n                (0 !== anchorOffset && 3 !== node.nodeType) ||\n                (start = length + anchorOffset);\n              node !== focusNode ||\n                (0 !== selection && 3 !== node.nodeType) ||\n                (end = length + selection);\n              3 === node.nodeType && (length += node.nodeValue.length);\n              if (null === (next = node.firstChild)) break;\n              parentNode = node;\n              node = next;\n            }\n            for (;;) {\n              if (node === root) break b;\n              parentNode === JSCompiler_temp &&\n                ++indexWithinAnchor === anchorOffset &&\n                (start = length);\n              parentNode === focusNode &&\n                ++indexWithinFocus === selection &&\n                (end = length);\n              if (null !== (next = node.nextSibling)) break;\n              node = parentNode;\n              parentNode = node.parentNode;\n            }\n            node = next;\n          }\n          JSCompiler_temp =\n            -1 === start || -1 === end ? null : { start: start, end: end };\n        } else JSCompiler_temp = null;\n      }\n    JSCompiler_temp = JSCompiler_temp || { start: 0, end: 0 };\n  } else JSCompiler_temp = null;\n  selectionInformation = { focusedElem: root, selectionRange: JSCompiler_temp };\n  _enabled = !1;\n  for (nextEffect = firstChild; null !== nextEffect; )\n    if (\n      ((firstChild = nextEffect),\n      (root = firstChild.child),\n      0 !== (firstChild.subtreeFlags & 1024) && null !== root)\n    )\n      (root.return = firstChild), (nextEffect = root);\n    else\n      for (; null !== nextEffect; ) {\n        firstChild = nextEffect;\n        focusNode = firstChild.alternate;\n        root = firstChild.flags;\n        switch (firstChild.tag) {\n          case 0:\n            break;\n          case 11:\n          case 15:\n            break;\n          case 1:\n            if (0 !== (root & 1024) && null !== focusNode) {\n              root = void 0;\n              JSCompiler_temp = firstChild;\n              anchorOffset = focusNode.memoizedProps;\n              focusNode = focusNode.memoizedState;\n              selection = JSCompiler_temp.stateNode;\n              try {\n                var resolvedPrevProps = resolveClassComponentProps(\n                  JSCompiler_temp.type,\n                  anchorOffset,\n                  JSCompiler_temp.elementType === JSCompiler_temp.type\n                );\n                root = selection.getSnapshotBeforeUpdate(\n                  resolvedPrevProps,\n                  focusNode\n                );\n                selection.__reactInternalSnapshotBeforeUpdate = root;\n              } catch (error) {\n                captureCommitPhaseError(\n                  JSCompiler_temp,\n                  JSCompiler_temp.return,\n                  error\n                );\n              }\n            }\n            break;\n          case 3:\n            if (0 !== (root & 1024))\n              if (\n                ((root = firstChild.stateNode.containerInfo),\n                (JSCompiler_temp = root.nodeType),\n                9 === JSCompiler_temp)\n              )\n                clearContainerSparingly(root);\n              else if (1 === JSCompiler_temp)\n                switch (root.nodeName) {\n                  case \"HEAD\":\n                  case \"HTML\":\n                  case \"BODY\":\n                    clearContainerSparingly(root);\n                    break;\n                  default:\n                    root.textContent = \"\";\n                }\n            break;\n          case 5:\n          case 26:\n          case 27:\n          case 6:\n          case 4:\n          case 17:\n            break;\n          default:\n            if (0 !== (root & 1024)) throw Error(formatProdErrorMessage(163));\n        }\n        root = firstChild.sibling;\n        if (null !== root) {\n          root.return = firstChild.return;\n          nextEffect = root;\n          break;\n        }\n        nextEffect = firstChild.return;\n      }\n}\nfunction commitLayoutEffectOnFiber(finishedRoot, current, finishedWork) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitHookEffectListMount(5, finishedWork);\n      break;\n    case 1:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (flags & 4)\n        if (((finishedRoot = finishedWork.stateNode), null === current))\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(finishedWork, finishedWork.return, error);\n          }\n        else {\n          var prevProps = resolveClassComponentProps(\n            finishedWork.type,\n            current.memoizedProps\n          );\n          current = current.memoizedState;\n          try {\n            finishedRoot.componentDidUpdate(\n              prevProps,\n              current,\n              finishedRoot.__reactInternalSnapshotBeforeUpdate\n            );\n          } catch (error$142) {\n            captureCommitPhaseError(\n              finishedWork,\n              finishedWork.return,\n              error$142\n            );\n          }\n        }\n      flags & 64 && commitClassCallbacks(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      if (\n        flags & 64 &&\n        ((finishedRoot = finishedWork.updateQueue), null !== finishedRoot)\n      ) {\n        current = null;\n        if (null !== finishedWork.child)\n          switch (finishedWork.child.tag) {\n            case 27:\n            case 5:\n              current = finishedWork.child.stateNode;\n              break;\n            case 1:\n              current = finishedWork.child.stateNode;\n          }\n        try {\n          commitCallbacks(finishedRoot, current);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 27:\n      null === current &&\n        flags & 4 &&\n        commitHostSingletonAcquisition(finishedWork);\n    case 26:\n    case 5:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      null === current && flags & 4 && commitHostMount(finishedWork);\n      flags & 512 && safelyAttachRef(finishedWork, finishedWork.return);\n      break;\n    case 12:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n      flags & 4 && commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n      flags & 64 &&\n        ((finishedRoot = finishedWork.memoizedState),\n        null !== finishedRoot &&\n          ((finishedRoot = finishedRoot.dehydrated),\n          null !== finishedRoot &&\n            ((finishedWork = retryDehydratedSuspenseBoundary.bind(\n              null,\n              finishedWork\n            )),\n            registerSuspenseInstanceRetry(finishedRoot, finishedWork))));\n      break;\n    case 22:\n      flags = null !== finishedWork.memoizedState || offscreenSubtreeIsHidden;\n      if (!flags) {\n        current =\n          (null !== current && null !== current.memoizedState) ||\n          offscreenSubtreeWasHidden;\n        prevProps = offscreenSubtreeIsHidden;\n        var prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n        offscreenSubtreeIsHidden = flags;\n        (offscreenSubtreeWasHidden = current) && !prevOffscreenSubtreeWasHidden\n          ? recursivelyTraverseReappearLayoutEffects(\n              finishedRoot,\n              finishedWork,\n              0 !== (finishedWork.subtreeFlags & 8772)\n            )\n          : recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n        offscreenSubtreeIsHidden = prevProps;\n        offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      }\n      break;\n    case 30:\n      break;\n    default:\n      recursivelyTraverseLayoutEffects(finishedRoot, finishedWork);\n  }\n}\nfunction detachFiberAfterEffects(fiber) {\n  var alternate = fiber.alternate;\n  null !== alternate &&\n    ((fiber.alternate = null), detachFiberAfterEffects(alternate));\n  fiber.child = null;\n  fiber.deletions = null;\n  fiber.sibling = null;\n  5 === fiber.tag &&\n    ((alternate = fiber.stateNode),\n    null !== alternate && detachDeletedInstance(alternate));\n  fiber.stateNode = null;\n  fiber.return = null;\n  fiber.dependencies = null;\n  fiber.memoizedProps = null;\n  fiber.memoizedState = null;\n  fiber.pendingProps = null;\n  fiber.stateNode = null;\n  fiber.updateQueue = null;\n}\nvar hostParent = null,\n  hostParentIsContainer = !1;\nfunction recursivelyTraverseDeletionEffects(\n  finishedRoot,\n  nearestMountedAncestor,\n  parent\n) {\n  for (parent = parent.child; null !== parent; )\n    commitDeletionEffectsOnFiber(finishedRoot, nearestMountedAncestor, parent),\n      (parent = parent.sibling);\n}\nfunction commitDeletionEffectsOnFiber(\n  finishedRoot,\n  nearestMountedAncestor,\n  deletedFiber\n) {\n  if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberUnmount)\n    try {\n      injectedHook.onCommitFiberUnmount(rendererID, deletedFiber);\n    } catch (err) {}\n  switch (deletedFiber.tag) {\n    case 26:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      deletedFiber.memoizedState\n        ? deletedFiber.memoizedState.count--\n        : deletedFiber.stateNode &&\n          ((deletedFiber = deletedFiber.stateNode),\n          deletedFiber.parentNode.removeChild(deletedFiber));\n      break;\n    case 27:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n      var prevHostParent = hostParent,\n        prevHostParentIsContainer = hostParentIsContainer;\n      isSingletonScope(deletedFiber.type) &&\n        ((hostParent = deletedFiber.stateNode), (hostParentIsContainer = !1));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      releaseSingletonInstance(deletedFiber.stateNode);\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 5:\n      offscreenSubtreeWasHidden ||\n        safelyDetachRef(deletedFiber, nearestMountedAncestor);\n    case 6:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = null;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      if (null !== hostParent)\n        if (hostParentIsContainer)\n          try {\n            (9 === hostParent.nodeType\n              ? hostParent.body\n              : \"HTML\" === hostParent.nodeName\n                ? hostParent.ownerDocument.body\n                : hostParent\n            ).removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n        else\n          try {\n            hostParent.removeChild(deletedFiber.stateNode);\n          } catch (error) {\n            captureCommitPhaseError(\n              deletedFiber,\n              nearestMountedAncestor,\n              error\n            );\n          }\n      break;\n    case 18:\n      null !== hostParent &&\n        (hostParentIsContainer\n          ? ((finishedRoot = hostParent),\n            clearSuspenseBoundary(\n              9 === finishedRoot.nodeType\n                ? finishedRoot.body\n                : \"HTML\" === finishedRoot.nodeName\n                  ? finishedRoot.ownerDocument.body\n                  : finishedRoot,\n              deletedFiber.stateNode\n            ),\n            retryIfBlockedOn(finishedRoot))\n          : clearSuspenseBoundary(hostParent, deletedFiber.stateNode));\n      break;\n    case 4:\n      prevHostParent = hostParent;\n      prevHostParentIsContainer = hostParentIsContainer;\n      hostParent = deletedFiber.stateNode.containerInfo;\n      hostParentIsContainer = !0;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      hostParent = prevHostParent;\n      hostParentIsContainer = prevHostParentIsContainer;\n      break;\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(2, deletedFiber, nearestMountedAncestor);\n      offscreenSubtreeWasHidden ||\n        commitHookEffectListUnmount(4, deletedFiber, nearestMountedAncestor);\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 1:\n      offscreenSubtreeWasHidden ||\n        (safelyDetachRef(deletedFiber, nearestMountedAncestor),\n        (prevHostParent = deletedFiber.stateNode),\n        \"function\" === typeof prevHostParent.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            deletedFiber,\n            nearestMountedAncestor,\n            prevHostParent\n          ));\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 21:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      break;\n    case 22:\n      offscreenSubtreeWasHidden =\n        (prevHostParent = offscreenSubtreeWasHidden) ||\n        null !== deletedFiber.memoizedState;\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n      offscreenSubtreeWasHidden = prevHostParent;\n      break;\n    default:\n      recursivelyTraverseDeletionEffects(\n        finishedRoot,\n        nearestMountedAncestor,\n        deletedFiber\n      );\n  }\n}\nfunction commitSuspenseHydrationCallbacks(finishedRoot, finishedWork) {\n  if (\n    null === finishedWork.memoizedState &&\n    ((finishedRoot = finishedWork.alternate),\n    null !== finishedRoot &&\n      ((finishedRoot = finishedRoot.memoizedState),\n      null !== finishedRoot &&\n        ((finishedRoot = finishedRoot.dehydrated), null !== finishedRoot)))\n  )\n    try {\n      retryIfBlockedOn(finishedRoot);\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n}\nfunction getRetryCache(finishedWork) {\n  switch (finishedWork.tag) {\n    case 13:\n    case 19:\n      var retryCache = finishedWork.stateNode;\n      null === retryCache &&\n        (retryCache = finishedWork.stateNode = new PossiblyWeakSet());\n      return retryCache;\n    case 22:\n      return (\n        (finishedWork = finishedWork.stateNode),\n        (retryCache = finishedWork._retryCache),\n        null === retryCache &&\n          (retryCache = finishedWork._retryCache = new PossiblyWeakSet()),\n        retryCache\n      );\n    default:\n      throw Error(formatProdErrorMessage(435, finishedWork.tag));\n  }\n}\nfunction attachSuspenseRetryListeners(finishedWork, wakeables) {\n  var retryCache = getRetryCache(finishedWork);\n  wakeables.forEach(function (wakeable) {\n    var retry = resolveRetryWakeable.bind(null, finishedWork, wakeable);\n    retryCache.has(wakeable) ||\n      (retryCache.add(wakeable), wakeable.then(retry, retry));\n  });\n}\nfunction recursivelyTraverseMutationEffects(root$jscomp$0, parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (null !== deletions)\n    for (var i = 0; i < deletions.length; i++) {\n      var childToDelete = deletions[i],\n        root = root$jscomp$0,\n        returnFiber = parentFiber,\n        parent = returnFiber;\n      a: for (; null !== parent; ) {\n        switch (parent.tag) {\n          case 27:\n            if (isSingletonScope(parent.type)) {\n              hostParent = parent.stateNode;\n              hostParentIsContainer = !1;\n              break a;\n            }\n            break;\n          case 5:\n            hostParent = parent.stateNode;\n            hostParentIsContainer = !1;\n            break a;\n          case 3:\n          case 4:\n            hostParent = parent.stateNode.containerInfo;\n            hostParentIsContainer = !0;\n            break a;\n        }\n        parent = parent.return;\n      }\n      if (null === hostParent) throw Error(formatProdErrorMessage(160));\n      commitDeletionEffectsOnFiber(root, returnFiber, childToDelete);\n      hostParent = null;\n      hostParentIsContainer = !1;\n      root = childToDelete.alternate;\n      null !== root && (root.return = null);\n      childToDelete.return = null;\n    }\n  if (parentFiber.subtreeFlags & 13878)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitMutationEffectsOnFiber(parentFiber, root$jscomp$0),\n        (parentFiber = parentFiber.sibling);\n}\nvar currentHoistableRoot = null;\nfunction commitMutationEffectsOnFiber(finishedWork, root) {\n  var current = finishedWork.alternate,\n    flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 14:\n    case 15:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        (commitHookEffectListUnmount(3, finishedWork, finishedWork.return),\n        commitHookEffectListMount(3, finishedWork),\n        commitHookEffectListUnmount(5, finishedWork, finishedWork.return));\n      break;\n    case 1:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      flags & 64 &&\n        offscreenSubtreeIsHidden &&\n        ((finishedWork = finishedWork.updateQueue),\n        null !== finishedWork &&\n          ((flags = finishedWork.callbacks),\n          null !== flags &&\n            ((current = finishedWork.shared.hiddenCallbacks),\n            (finishedWork.shared.hiddenCallbacks =\n              null === current ? flags : current.concat(flags)))));\n      break;\n    case 26:\n      var hoistableRoot = currentHoistableRoot;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (flags & 4) {\n        var currentResource = null !== current ? current.memoizedState : null;\n        flags = finishedWork.memoizedState;\n        if (null === current)\n          if (null === flags)\n            if (null === finishedWork.stateNode) {\n              a: {\n                flags = finishedWork.type;\n                current = finishedWork.memoizedProps;\n                hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n                b: switch (flags) {\n                  case \"title\":\n                    currentResource =\n                      hoistableRoot.getElementsByTagName(\"title\")[0];\n                    if (\n                      !currentResource ||\n                      currentResource[internalHoistableMarker] ||\n                      currentResource[internalInstanceKey] ||\n                      \"http://www.w3.org/2000/svg\" ===\n                        currentResource.namespaceURI ||\n                      currentResource.hasAttribute(\"itemprop\")\n                    )\n                      (currentResource = hoistableRoot.createElement(flags)),\n                        hoistableRoot.head.insertBefore(\n                          currentResource,\n                          hoistableRoot.querySelector(\"head > title\")\n                        );\n                    setInitialProperties(currentResource, flags, current);\n                    currentResource[internalInstanceKey] = finishedWork;\n                    markNodeAsHoistable(currentResource);\n                    flags = currentResource;\n                    break a;\n                  case \"link\":\n                    var maybeNodes = getHydratableHoistableCache(\n                      \"link\",\n                      \"href\",\n                      hoistableRoot\n                    ).get(flags + (current.href || \"\"));\n                    if (maybeNodes)\n                      for (var i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"href\") ===\n                            (null == current.href || \"\" === current.href\n                              ? null\n                              : current.href) &&\n                            currentResource.getAttribute(\"rel\") ===\n                              (null == current.rel ? null : current.rel) &&\n                            currentResource.getAttribute(\"title\") ===\n                              (null == current.title ? null : current.title) &&\n                            currentResource.getAttribute(\"crossorigin\") ===\n                              (null == current.crossOrigin\n                                ? null\n                                : current.crossOrigin))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  case \"meta\":\n                    if (\n                      (maybeNodes = getHydratableHoistableCache(\n                        \"meta\",\n                        \"content\",\n                        hoistableRoot\n                      ).get(flags + (current.content || \"\")))\n                    )\n                      for (i = 0; i < maybeNodes.length; i++)\n                        if (\n                          ((currentResource = maybeNodes[i]),\n                          currentResource.getAttribute(\"content\") ===\n                            (null == current.content\n                              ? null\n                              : \"\" + current.content) &&\n                            currentResource.getAttribute(\"name\") ===\n                              (null == current.name ? null : current.name) &&\n                            currentResource.getAttribute(\"property\") ===\n                              (null == current.property\n                                ? null\n                                : current.property) &&\n                            currentResource.getAttribute(\"http-equiv\") ===\n                              (null == current.httpEquiv\n                                ? null\n                                : current.httpEquiv) &&\n                            currentResource.getAttribute(\"charset\") ===\n                              (null == current.charSet\n                                ? null\n                                : current.charSet))\n                        ) {\n                          maybeNodes.splice(i, 1);\n                          break b;\n                        }\n                    currentResource = hoistableRoot.createElement(flags);\n                    setInitialProperties(currentResource, flags, current);\n                    hoistableRoot.head.appendChild(currentResource);\n                    break;\n                  default:\n                    throw Error(formatProdErrorMessage(468, flags));\n                }\n                currentResource[internalInstanceKey] = finishedWork;\n                markNodeAsHoistable(currentResource);\n                flags = currentResource;\n              }\n              finishedWork.stateNode = flags;\n            } else\n              mountHoistable(\n                hoistableRoot,\n                finishedWork.type,\n                finishedWork.stateNode\n              );\n          else\n            finishedWork.stateNode = acquireResource(\n              hoistableRoot,\n              flags,\n              finishedWork.memoizedProps\n            );\n        else\n          currentResource !== flags\n            ? (null === currentResource\n                ? null !== current.stateNode &&\n                  ((current = current.stateNode),\n                  current.parentNode.removeChild(current))\n                : currentResource.count--,\n              null === flags\n                ? mountHoistable(\n                    hoistableRoot,\n                    finishedWork.type,\n                    finishedWork.stateNode\n                  )\n                : acquireResource(\n                    hoistableRoot,\n                    flags,\n                    finishedWork.memoizedProps\n                  ))\n            : null === flags &&\n              null !== finishedWork.stateNode &&\n              commitHostUpdate(\n                finishedWork,\n                finishedWork.memoizedProps,\n                current.memoizedProps\n              );\n      }\n      break;\n    case 27:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      null !== current &&\n        flags & 4 &&\n        commitHostUpdate(\n          finishedWork,\n          finishedWork.memoizedProps,\n          current.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 512 &&\n        (offscreenSubtreeWasHidden ||\n          null === current ||\n          safelyDetachRef(current, current.return));\n      if (finishedWork.flags & 32) {\n        hoistableRoot = finishedWork.stateNode;\n        try {\n          setTextContent(hoistableRoot, \"\");\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      flags & 4 &&\n        null != finishedWork.stateNode &&\n        ((hoistableRoot = finishedWork.memoizedProps),\n        commitHostUpdate(\n          finishedWork,\n          hoistableRoot,\n          null !== current ? current.memoizedProps : hoistableRoot\n        ));\n      flags & 1024 && (needsFormReset = !0);\n      break;\n    case 6:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4) {\n        if (null === finishedWork.stateNode)\n          throw Error(formatProdErrorMessage(162));\n        flags = finishedWork.memoizedProps;\n        current = finishedWork.stateNode;\n        try {\n          current.nodeValue = flags;\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      }\n      break;\n    case 3:\n      tagCaches = null;\n      hoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(root.containerInfo);\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      currentHoistableRoot = hoistableRoot;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 4 && null !== current && current.memoizedState.isDehydrated)\n        try {\n          retryIfBlockedOn(root.containerInfo);\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      needsFormReset &&\n        ((needsFormReset = !1), recursivelyResetForms(finishedWork));\n      break;\n    case 4:\n      flags = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(\n        finishedWork.stateNode.containerInfo\n      );\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      currentHoistableRoot = flags;\n      break;\n    case 12:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      break;\n    case 13:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      finishedWork.child.flags & 8192 &&\n        (null !== finishedWork.memoizedState) !==\n          (null !== current && null !== current.memoizedState) &&\n        (globalMostRecentFallbackTime = now());\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 22:\n      hoistableRoot = null !== finishedWork.memoizedState;\n      var wasHidden = null !== current && null !== current.memoizedState,\n        prevOffscreenSubtreeIsHidden = offscreenSubtreeIsHidden,\n        prevOffscreenSubtreeWasHidden = offscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden || hoistableRoot;\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden || wasHidden;\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      offscreenSubtreeWasHidden = prevOffscreenSubtreeWasHidden;\n      offscreenSubtreeIsHidden = prevOffscreenSubtreeIsHidden;\n      commitReconciliationEffects(finishedWork);\n      if (flags & 8192)\n        a: for (\n          root = finishedWork.stateNode,\n            root._visibility = hoistableRoot\n              ? root._visibility & -2\n              : root._visibility | 1,\n            hoistableRoot &&\n              (null === current ||\n                wasHidden ||\n                offscreenSubtreeIsHidden ||\n                offscreenSubtreeWasHidden ||\n                recursivelyTraverseDisappearLayoutEffects(finishedWork)),\n            current = null,\n            root = finishedWork;\n          ;\n\n        ) {\n          if (5 === root.tag || 26 === root.tag) {\n            if (null === current) {\n              wasHidden = current = root;\n              try {\n                if (((currentResource = wasHidden.stateNode), hoistableRoot))\n                  (maybeNodes = currentResource.style),\n                    \"function\" === typeof maybeNodes.setProperty\n                      ? maybeNodes.setProperty(\"display\", \"none\", \"important\")\n                      : (maybeNodes.display = \"none\");\n                else {\n                  i = wasHidden.stateNode;\n                  var styleProp = wasHidden.memoizedProps.style,\n                    display =\n                      void 0 !== styleProp &&\n                      null !== styleProp &&\n                      styleProp.hasOwnProperty(\"display\")\n                        ? styleProp.display\n                        : null;\n                  i.style.display =\n                    null == display || \"boolean\" === typeof display\n                      ? \"\"\n                      : (\"\" + display).trim();\n                }\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (6 === root.tag) {\n            if (null === current) {\n              wasHidden = root;\n              try {\n                wasHidden.stateNode.nodeValue = hoistableRoot\n                  ? \"\"\n                  : wasHidden.memoizedProps;\n              } catch (error) {\n                captureCommitPhaseError(wasHidden, wasHidden.return, error);\n              }\n            }\n          } else if (\n            ((22 !== root.tag && 23 !== root.tag) ||\n              null === root.memoizedState ||\n              root === finishedWork) &&\n            null !== root.child\n          ) {\n            root.child.return = root;\n            root = root.child;\n            continue;\n          }\n          if (root === finishedWork) break a;\n          for (; null === root.sibling; ) {\n            if (null === root.return || root.return === finishedWork) break a;\n            current === root && (current = null);\n            root = root.return;\n          }\n          current === root && (current = null);\n          root.sibling.return = root.return;\n          root = root.sibling;\n        }\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((current = flags.retryQueue),\n          null !== current &&\n            ((flags.retryQueue = null),\n            attachSuspenseRetryListeners(finishedWork, current))));\n      break;\n    case 19:\n      recursivelyTraverseMutationEffects(root, finishedWork);\n      commitReconciliationEffects(finishedWork);\n      flags & 4 &&\n        ((flags = finishedWork.updateQueue),\n        null !== flags &&\n          ((finishedWork.updateQueue = null),\n          attachSuspenseRetryListeners(finishedWork, flags)));\n      break;\n    case 30:\n      break;\n    case 21:\n      break;\n    default:\n      recursivelyTraverseMutationEffects(root, finishedWork),\n        commitReconciliationEffects(finishedWork);\n  }\n}\nfunction commitReconciliationEffects(finishedWork) {\n  var flags = finishedWork.flags;\n  if (flags & 2) {\n    try {\n      for (\n        var hostParentFiber, parentFiber = finishedWork.return;\n        null !== parentFiber;\n\n      ) {\n        if (isHostParent(parentFiber)) {\n          hostParentFiber = parentFiber;\n          break;\n        }\n        parentFiber = parentFiber.return;\n      }\n      if (null == hostParentFiber) throw Error(formatProdErrorMessage(160));\n      switch (hostParentFiber.tag) {\n        case 27:\n          var parent = hostParentFiber.stateNode,\n            before = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before, parent);\n          break;\n        case 5:\n          var parent$144 = hostParentFiber.stateNode;\n          hostParentFiber.flags & 32 &&\n            (setTextContent(parent$144, \"\"), (hostParentFiber.flags &= -33));\n          var before$145 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNode(finishedWork, before$145, parent$144);\n          break;\n        case 3:\n        case 4:\n          var parent$146 = hostParentFiber.stateNode.containerInfo,\n            before$147 = getHostSibling(finishedWork);\n          insertOrAppendPlacementNodeIntoContainer(\n            finishedWork,\n            before$147,\n            parent$146\n          );\n          break;\n        default:\n          throw Error(formatProdErrorMessage(161));\n      }\n    } catch (error) {\n      captureCommitPhaseError(finishedWork, finishedWork.return, error);\n    }\n    finishedWork.flags &= -3;\n  }\n  flags & 4096 && (finishedWork.flags &= -4097);\n}\nfunction recursivelyResetForms(parentFiber) {\n  if (parentFiber.subtreeFlags & 1024)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var fiber = parentFiber;\n      recursivelyResetForms(fiber);\n      5 === fiber.tag && fiber.flags & 1024 && fiber.stateNode.reset();\n      parentFiber = parentFiber.sibling;\n    }\n}\nfunction recursivelyTraverseLayoutEffects(root, parentFiber) {\n  if (parentFiber.subtreeFlags & 8772)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitLayoutEffectOnFiber(root, parentFiber.alternate, parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction recursivelyTraverseDisappearLayoutEffects(parentFiber) {\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedWork = parentFiber;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 14:\n      case 15:\n        commitHookEffectListUnmount(4, finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 1:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        var instance = finishedWork.stateNode;\n        \"function\" === typeof instance.componentWillUnmount &&\n          safelyCallComponentWillUnmount(\n            finishedWork,\n            finishedWork.return,\n            instance\n          );\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 27:\n        releaseSingletonInstance(finishedWork.stateNode);\n      case 26:\n      case 5:\n        safelyDetachRef(finishedWork, finishedWork.return);\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      case 30:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n        break;\n      default:\n        recursivelyTraverseDisappearLayoutEffects(finishedWork);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseReappearLayoutEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 8772);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var current = parentFiber.alternate,\n      finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(4, finishedWork);\n        break;\n      case 1:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        current = finishedWork;\n        finishedRoot = current.stateNode;\n        if (\"function\" === typeof finishedRoot.componentDidMount)\n          try {\n            finishedRoot.componentDidMount();\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        current = finishedWork;\n        finishedRoot = current.updateQueue;\n        if (null !== finishedRoot) {\n          var instance = current.stateNode;\n          try {\n            var hiddenCallbacks = finishedRoot.shared.hiddenCallbacks;\n            if (null !== hiddenCallbacks)\n              for (\n                finishedRoot.shared.hiddenCallbacks = null, finishedRoot = 0;\n                finishedRoot < hiddenCallbacks.length;\n                finishedRoot++\n              )\n                callCallback(hiddenCallbacks[finishedRoot], instance);\n          } catch (error) {\n            captureCommitPhaseError(current, current.return, error);\n          }\n        }\n        includeWorkInProgressEffects &&\n          flags & 64 &&\n          commitClassCallbacks(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 27:\n        commitHostSingletonAcquisition(finishedWork);\n      case 26:\n      case 5:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          null === current &&\n          flags & 4 &&\n          commitHostMount(finishedWork);\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 12:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        break;\n      case 13:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 4 &&\n          commitSuspenseHydrationCallbacks(finishedRoot, finishedWork);\n        break;\n      case 22:\n        null === finishedWork.memoizedState &&\n          recursivelyTraverseReappearLayoutEffects(\n            finishedRoot,\n            finishedWork,\n            includeWorkInProgressEffects\n          );\n        safelyAttachRef(finishedWork, finishedWork.return);\n        break;\n      case 30:\n        break;\n      default:\n        recursivelyTraverseReappearLayoutEffects(\n          finishedRoot,\n          finishedWork,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitOffscreenPassiveMountEffects(current, finishedWork) {\n  var previousCache = null;\n  null !== current &&\n    null !== current.memoizedState &&\n    null !== current.memoizedState.cachePool &&\n    (previousCache = current.memoizedState.cachePool.pool);\n  current = null;\n  null !== finishedWork.memoizedState &&\n    null !== finishedWork.memoizedState.cachePool &&\n    (current = finishedWork.memoizedState.cachePool.pool);\n  current !== previousCache &&\n    (null != current && current.refCount++,\n    null != previousCache && releaseCache(previousCache));\n}\nfunction commitCachePassiveMountEffect(current, finishedWork) {\n  current = null;\n  null !== finishedWork.alternate &&\n    (current = finishedWork.alternate.memoizedState.cache);\n  finishedWork = finishedWork.memoizedState.cache;\n  finishedWork !== current &&\n    (finishedWork.refCount++, null != current && releaseCache(current));\n}\nfunction recursivelyTraversePassiveMountEffects(\n  root,\n  parentFiber,\n  committedLanes,\n  committedTransitions\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveMountOnFiber(\n        root,\n        parentFiber,\n        committedLanes,\n        committedTransitions\n      ),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveMountOnFiber(\n  finishedRoot,\n  finishedWork,\n  committedLanes,\n  committedTransitions\n) {\n  var flags = finishedWork.flags;\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 && commitHookEffectListMount(9, finishedWork);\n      break;\n    case 1:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 3:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        ((finishedRoot = null),\n        null !== finishedWork.alternate &&\n          (finishedRoot = finishedWork.alternate.memoizedState.cache),\n        (finishedWork = finishedWork.memoizedState.cache),\n        finishedWork !== finishedRoot &&\n          (finishedWork.refCount++,\n          null != finishedRoot && releaseCache(finishedRoot)));\n      break;\n    case 12:\n      if (flags & 2048) {\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n        finishedRoot = finishedWork.stateNode;\n        try {\n          var _finishedWork$memoize2 = finishedWork.memoizedProps,\n            id = _finishedWork$memoize2.id,\n            onPostCommit = _finishedWork$memoize2.onPostCommit;\n          \"function\" === typeof onPostCommit &&\n            onPostCommit(\n              id,\n              null === finishedWork.alternate ? \"mount\" : \"update\",\n              finishedRoot.passiveEffectDuration,\n              -0\n            );\n        } catch (error) {\n          captureCommitPhaseError(finishedWork, finishedWork.return, error);\n        }\n      } else\n        recursivelyTraversePassiveMountEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions\n        );\n      break;\n    case 13:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      break;\n    case 23:\n      break;\n    case 22:\n      _finishedWork$memoize2 = finishedWork.stateNode;\n      id = finishedWork.alternate;\n      null !== finishedWork.memoizedState\n        ? _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork)\n        : _finishedWork$memoize2._visibility & 2\n          ? recursivelyTraversePassiveMountEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions\n            )\n          : ((_finishedWork$memoize2._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              0 !== (finishedWork.subtreeFlags & 10256)\n            ));\n      flags & 2048 && commitOffscreenPassiveMountEffects(id, finishedWork);\n      break;\n    case 24:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n      flags & 2048 &&\n        commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveMountEffects(\n        finishedRoot,\n        finishedWork,\n        committedLanes,\n        committedTransitions\n      );\n  }\n}\nfunction recursivelyTraverseReconnectPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber,\n  committedLanes$jscomp$0,\n  committedTransitions$jscomp$0,\n  includeWorkInProgressEffects\n) {\n  includeWorkInProgressEffects =\n    includeWorkInProgressEffects && 0 !== (parentFiber.subtreeFlags & 10256);\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    var finishedRoot = finishedRoot$jscomp$0,\n      finishedWork = parentFiber,\n      committedLanes = committedLanes$jscomp$0,\n      committedTransitions = committedTransitions$jscomp$0,\n      flags = finishedWork.flags;\n    switch (finishedWork.tag) {\n      case 0:\n      case 11:\n      case 15:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        commitHookEffectListMount(8, finishedWork);\n        break;\n      case 23:\n        break;\n      case 22:\n        var instance = finishedWork.stateNode;\n        null !== finishedWork.memoizedState\n          ? instance._visibility & 2\n            ? recursivelyTraverseReconnectPassiveEffects(\n                finishedRoot,\n                finishedWork,\n                committedLanes,\n                committedTransitions,\n                includeWorkInProgressEffects\n              )\n            : recursivelyTraverseAtomicPassiveEffects(\n                finishedRoot,\n                finishedWork\n              )\n          : ((instance._visibility |= 2),\n            recursivelyTraverseReconnectPassiveEffects(\n              finishedRoot,\n              finishedWork,\n              committedLanes,\n              committedTransitions,\n              includeWorkInProgressEffects\n            ));\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitOffscreenPassiveMountEffects(\n            finishedWork.alternate,\n            finishedWork\n          );\n        break;\n      case 24:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n        includeWorkInProgressEffects &&\n          flags & 2048 &&\n          commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n        break;\n      default:\n        recursivelyTraverseReconnectPassiveEffects(\n          finishedRoot,\n          finishedWork,\n          committedLanes,\n          committedTransitions,\n          includeWorkInProgressEffects\n        );\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction recursivelyTraverseAtomicPassiveEffects(\n  finishedRoot$jscomp$0,\n  parentFiber\n) {\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n      var finishedRoot = finishedRoot$jscomp$0,\n        finishedWork = parentFiber,\n        flags = finishedWork.flags;\n      switch (finishedWork.tag) {\n        case 22:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitOffscreenPassiveMountEffects(\n              finishedWork.alternate,\n              finishedWork\n            );\n          break;\n        case 24:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n          flags & 2048 &&\n            commitCachePassiveMountEffect(finishedWork.alternate, finishedWork);\n          break;\n        default:\n          recursivelyTraverseAtomicPassiveEffects(finishedRoot, finishedWork);\n      }\n      parentFiber = parentFiber.sibling;\n    }\n}\nvar suspenseyCommitFlag = 8192;\nfunction recursivelyAccumulateSuspenseyCommit(parentFiber) {\n  if (parentFiber.subtreeFlags & suspenseyCommitFlag)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      accumulateSuspenseyCommitOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction accumulateSuspenseyCommitOnFiber(fiber) {\n  switch (fiber.tag) {\n    case 26:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      fiber.flags & suspenseyCommitFlag &&\n        null !== fiber.memoizedState &&\n        suspendResource(\n          currentHoistableRoot,\n          fiber.memoizedState,\n          fiber.memoizedProps\n        );\n      break;\n    case 5:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      break;\n    case 3:\n    case 4:\n      var previousHoistableRoot = currentHoistableRoot;\n      currentHoistableRoot = getHoistableRoot(fiber.stateNode.containerInfo);\n      recursivelyAccumulateSuspenseyCommit(fiber);\n      currentHoistableRoot = previousHoistableRoot;\n      break;\n    case 22:\n      null === fiber.memoizedState &&\n        ((previousHoistableRoot = fiber.alternate),\n        null !== previousHoistableRoot &&\n        null !== previousHoistableRoot.memoizedState\n          ? ((previousHoistableRoot = suspenseyCommitFlag),\n            (suspenseyCommitFlag = 16777216),\n            recursivelyAccumulateSuspenseyCommit(fiber),\n            (suspenseyCommitFlag = previousHoistableRoot))\n          : recursivelyAccumulateSuspenseyCommit(fiber));\n      break;\n    default:\n      recursivelyAccumulateSuspenseyCommit(fiber);\n  }\n}\nfunction detachAlternateSiblings(parentFiber) {\n  var previousFiber = parentFiber.alternate;\n  if (\n    null !== previousFiber &&\n    ((parentFiber = previousFiber.child), null !== parentFiber)\n  ) {\n    previousFiber.child = null;\n    do\n      (previousFiber = parentFiber.sibling),\n        (parentFiber.sibling = null),\n        (parentFiber = previousFiber);\n    while (null !== parentFiber);\n  }\n}\nfunction recursivelyTraversePassiveUnmountEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  if (parentFiber.subtreeFlags & 10256)\n    for (parentFiber = parentFiber.child; null !== parentFiber; )\n      commitPassiveUnmountOnFiber(parentFiber),\n        (parentFiber = parentFiber.sibling);\n}\nfunction commitPassiveUnmountOnFiber(finishedWork) {\n  switch (finishedWork.tag) {\n    case 0:\n    case 11:\n    case 15:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      finishedWork.flags & 2048 &&\n        commitHookEffectListUnmount(9, finishedWork, finishedWork.return);\n      break;\n    case 3:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 12:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    case 22:\n      var instance = finishedWork.stateNode;\n      null !== finishedWork.memoizedState &&\n      instance._visibility & 2 &&\n      (null === finishedWork.return || 13 !== finishedWork.return.tag)\n        ? ((instance._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(finishedWork))\n        : recursivelyTraversePassiveUnmountEffects(finishedWork);\n      break;\n    default:\n      recursivelyTraversePassiveUnmountEffects(finishedWork);\n  }\n}\nfunction recursivelyTraverseDisconnectPassiveEffects(parentFiber) {\n  var deletions = parentFiber.deletions;\n  if (0 !== (parentFiber.flags & 16)) {\n    if (null !== deletions)\n      for (var i = 0; i < deletions.length; i++) {\n        var childToDelete = deletions[i];\n        nextEffect = childToDelete;\n        commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n          childToDelete,\n          parentFiber\n        );\n      }\n    detachAlternateSiblings(parentFiber);\n  }\n  for (parentFiber = parentFiber.child; null !== parentFiber; ) {\n    deletions = parentFiber;\n    switch (deletions.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, deletions, deletions.return);\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n        break;\n      case 22:\n        i = deletions.stateNode;\n        i._visibility & 2 &&\n          ((i._visibility &= -3),\n          recursivelyTraverseDisconnectPassiveEffects(deletions));\n        break;\n      default:\n        recursivelyTraverseDisconnectPassiveEffects(deletions);\n    }\n    parentFiber = parentFiber.sibling;\n  }\n}\nfunction commitPassiveUnmountEffectsInsideOfDeletedTree_begin(\n  deletedSubtreeRoot,\n  nearestMountedAncestor\n) {\n  for (; null !== nextEffect; ) {\n    var fiber = nextEffect;\n    switch (fiber.tag) {\n      case 0:\n      case 11:\n      case 15:\n        commitHookEffectListUnmount(8, fiber, nearestMountedAncestor);\n        break;\n      case 23:\n      case 22:\n        if (\n          null !== fiber.memoizedState &&\n          null !== fiber.memoizedState.cachePool\n        ) {\n          var cache = fiber.memoizedState.cachePool.pool;\n          null != cache && cache.refCount++;\n        }\n        break;\n      case 24:\n        releaseCache(fiber.memoizedState.cache);\n    }\n    cache = fiber.child;\n    if (null !== cache) (cache.return = fiber), (nextEffect = cache);\n    else\n      a: for (fiber = deletedSubtreeRoot; null !== nextEffect; ) {\n        cache = nextEffect;\n        var sibling = cache.sibling,\n          returnFiber = cache.return;\n        detachFiberAfterEffects(cache);\n        if (cache === fiber) {\n          nextEffect = null;\n          break a;\n        }\n        if (null !== sibling) {\n          sibling.return = returnFiber;\n          nextEffect = sibling;\n          break a;\n        }\n        nextEffect = returnFiber;\n      }\n  }\n}\nvar DefaultAsyncDispatcher = {\n    getCacheForType: function (resourceType) {\n      var cache = readContext(CacheContext),\n        cacheForType = cache.data.get(resourceType);\n      void 0 === cacheForType &&\n        ((cacheForType = resourceType()),\n        cache.data.set(resourceType, cacheForType));\n      return cacheForType;\n    }\n  },\n  PossiblyWeakMap = \"function\" === typeof WeakMap ? WeakMap : Map,\n  executionContext = 0,\n  workInProgressRoot = null,\n  workInProgress = null,\n  workInProgressRootRenderLanes = 0,\n  workInProgressSuspendedReason = 0,\n  workInProgressThrownValue = null,\n  workInProgressRootDidSkipSuspendedSiblings = !1,\n  workInProgressRootIsPrerendering = !1,\n  workInProgressRootDidAttachPingListener = !1,\n  entangledRenderLanes = 0,\n  workInProgressRootExitStatus = 0,\n  workInProgressRootSkippedLanes = 0,\n  workInProgressRootInterleavedUpdatedLanes = 0,\n  workInProgressRootPingedLanes = 0,\n  workInProgressDeferredLane = 0,\n  workInProgressSuspendedRetryLanes = 0,\n  workInProgressRootConcurrentErrors = null,\n  workInProgressRootRecoverableErrors = null,\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1,\n  globalMostRecentFallbackTime = 0,\n  workInProgressRootRenderTargetTime = Infinity,\n  workInProgressTransitions = null,\n  legacyErrorBoundariesThatAlreadyFailed = null,\n  pendingEffectsStatus = 0,\n  pendingEffectsRoot = null,\n  pendingFinishedWork = null,\n  pendingEffectsLanes = 0,\n  pendingEffectsRemainingLanes = 0,\n  pendingPassiveTransitions = null,\n  pendingRecoverableErrors = null,\n  nestedUpdateCount = 0,\n  rootWithNestedUpdates = null;\nfunction requestUpdateLane() {\n  if (0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes)\n    return workInProgressRootRenderLanes & -workInProgressRootRenderLanes;\n  if (null !== ReactSharedInternals.T) {\n    var actionScopeLane = currentEntangledLane;\n    return 0 !== actionScopeLane ? actionScopeLane : requestTransitionLane();\n  }\n  return resolveUpdatePriority();\n}\nfunction requestDeferredLane() {\n  0 === workInProgressDeferredLane &&\n    (workInProgressDeferredLane =\n      0 === (workInProgressRootRenderLanes & 536870912) || isHydrating\n        ? claimNextTransitionLane()\n        : 536870912);\n  var suspenseHandler = suspenseHandlerStackCursor.current;\n  null !== suspenseHandler && (suspenseHandler.flags |= 32);\n  return workInProgressDeferredLane;\n}\nfunction scheduleUpdateOnFiber(root, fiber, lane) {\n  if (\n    (root === workInProgressRoot &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    prepareFreshStack(root, 0),\n      markRootSuspended(\n        root,\n        workInProgressRootRenderLanes,\n        workInProgressDeferredLane,\n        !1\n      );\n  markRootUpdated$1(root, lane);\n  if (0 === (executionContext & 2) || root !== workInProgressRoot)\n    root === workInProgressRoot &&\n      (0 === (executionContext & 2) &&\n        (workInProgressRootInterleavedUpdatedLanes |= lane),\n      4 === workInProgressRootExitStatus &&\n        markRootSuspended(\n          root,\n          workInProgressRootRenderLanes,\n          workInProgressDeferredLane,\n          !1\n        )),\n      ensureRootIsScheduled(root);\n}\nfunction performWorkOnRoot(root$jscomp$0, lanes, forceSync) {\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  var shouldTimeSlice =\n      (!forceSync &&\n        0 === (lanes & 124) &&\n        0 === (lanes & root$jscomp$0.expiredLanes)) ||\n      checkIfRootIsPrerendering(root$jscomp$0, lanes),\n    exitStatus = shouldTimeSlice\n      ? renderRootConcurrent(root$jscomp$0, lanes)\n      : renderRootSync(root$jscomp$0, lanes, !0),\n    renderWasConcurrent = shouldTimeSlice;\n  do {\n    if (0 === exitStatus) {\n      workInProgressRootIsPrerendering &&\n        !shouldTimeSlice &&\n        markRootSuspended(root$jscomp$0, lanes, 0, !1);\n      break;\n    } else {\n      forceSync = root$jscomp$0.current.alternate;\n      if (\n        renderWasConcurrent &&\n        !isRenderConsistentWithExternalStores(forceSync)\n      ) {\n        exitStatus = renderRootSync(root$jscomp$0, lanes, !1);\n        renderWasConcurrent = !1;\n        continue;\n      }\n      if (2 === exitStatus) {\n        renderWasConcurrent = lanes;\n        if (root$jscomp$0.errorRecoveryDisabledLanes & renderWasConcurrent)\n          var JSCompiler_inline_result = 0;\n        else\n          (JSCompiler_inline_result = root$jscomp$0.pendingLanes & -536870913),\n            (JSCompiler_inline_result =\n              0 !== JSCompiler_inline_result\n                ? JSCompiler_inline_result\n                : JSCompiler_inline_result & 536870912\n                  ? 536870912\n                  : 0);\n        if (0 !== JSCompiler_inline_result) {\n          lanes = JSCompiler_inline_result;\n          a: {\n            var root = root$jscomp$0;\n            exitStatus = workInProgressRootConcurrentErrors;\n            var wasRootDehydrated = root.current.memoizedState.isDehydrated;\n            wasRootDehydrated &&\n              (prepareFreshStack(root, JSCompiler_inline_result).flags |= 256);\n            JSCompiler_inline_result = renderRootSync(\n              root,\n              JSCompiler_inline_result,\n              !1\n            );\n            if (2 !== JSCompiler_inline_result) {\n              if (\n                workInProgressRootDidAttachPingListener &&\n                !wasRootDehydrated\n              ) {\n                root.errorRecoveryDisabledLanes |= renderWasConcurrent;\n                workInProgressRootInterleavedUpdatedLanes |=\n                  renderWasConcurrent;\n                exitStatus = 4;\n                break a;\n              }\n              renderWasConcurrent = workInProgressRootRecoverableErrors;\n              workInProgressRootRecoverableErrors = exitStatus;\n              null !== renderWasConcurrent &&\n                (null === workInProgressRootRecoverableErrors\n                  ? (workInProgressRootRecoverableErrors = renderWasConcurrent)\n                  : workInProgressRootRecoverableErrors.push.apply(\n                      workInProgressRootRecoverableErrors,\n                      renderWasConcurrent\n                    ));\n            }\n            exitStatus = JSCompiler_inline_result;\n          }\n          renderWasConcurrent = !1;\n          if (2 !== exitStatus) continue;\n        }\n      }\n      if (1 === exitStatus) {\n        prepareFreshStack(root$jscomp$0, 0);\n        markRootSuspended(root$jscomp$0, lanes, 0, !0);\n        break;\n      }\n      a: {\n        shouldTimeSlice = root$jscomp$0;\n        renderWasConcurrent = exitStatus;\n        switch (renderWasConcurrent) {\n          case 0:\n          case 1:\n            throw Error(formatProdErrorMessage(345));\n          case 4:\n            if ((lanes & 4194048) !== lanes) break;\n          case 6:\n            markRootSuspended(\n              shouldTimeSlice,\n              lanes,\n              workInProgressDeferredLane,\n              !workInProgressRootDidSkipSuspendedSiblings\n            );\n            break a;\n          case 2:\n            workInProgressRootRecoverableErrors = null;\n            break;\n          case 3:\n          case 5:\n            break;\n          default:\n            throw Error(formatProdErrorMessage(329));\n        }\n        if (\n          (lanes & 62914560) === lanes &&\n          ((exitStatus = globalMostRecentFallbackTime + 300 - now()),\n          10 < exitStatus)\n        ) {\n          markRootSuspended(\n            shouldTimeSlice,\n            lanes,\n            workInProgressDeferredLane,\n            !workInProgressRootDidSkipSuspendedSiblings\n          );\n          if (0 !== getNextLanes(shouldTimeSlice, 0, !0)) break a;\n          shouldTimeSlice.timeoutHandle = scheduleTimeout(\n            commitRootWhenReady.bind(\n              null,\n              shouldTimeSlice,\n              forceSync,\n              workInProgressRootRecoverableErrors,\n              workInProgressTransitions,\n              workInProgressRootDidIncludeRecursiveRenderUpdate,\n              lanes,\n              workInProgressDeferredLane,\n              workInProgressRootInterleavedUpdatedLanes,\n              workInProgressSuspendedRetryLanes,\n              workInProgressRootDidSkipSuspendedSiblings,\n              renderWasConcurrent,\n              2,\n              -0,\n              0\n            ),\n            exitStatus\n          );\n          break a;\n        }\n        commitRootWhenReady(\n          shouldTimeSlice,\n          forceSync,\n          workInProgressRootRecoverableErrors,\n          workInProgressTransitions,\n          workInProgressRootDidIncludeRecursiveRenderUpdate,\n          lanes,\n          workInProgressDeferredLane,\n          workInProgressRootInterleavedUpdatedLanes,\n          workInProgressSuspendedRetryLanes,\n          workInProgressRootDidSkipSuspendedSiblings,\n          renderWasConcurrent,\n          0,\n          -0,\n          0\n        );\n      }\n    }\n    break;\n  } while (1);\n  ensureRootIsScheduled(root$jscomp$0);\n}\nfunction commitRootWhenReady(\n  root,\n  finishedWork,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  lanes,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes,\n  didSkipSuspendedSiblings,\n  exitStatus,\n  suspendedCommitReason,\n  completedRenderStartTime,\n  completedRenderEndTime\n) {\n  root.timeoutHandle = -1;\n  suspendedCommitReason = finishedWork.subtreeFlags;\n  if (\n    suspendedCommitReason & 8192 ||\n    16785408 === (suspendedCommitReason & 16785408)\n  )\n    if (\n      ((suspendedState = { stylesheets: null, count: 0, unsuspend: noop }),\n      accumulateSuspenseyCommitOnFiber(finishedWork),\n      (suspendedCommitReason = waitForCommitToBeReady()),\n      null !== suspendedCommitReason)\n    ) {\n      root.cancelPendingCommit = suspendedCommitReason(\n        commitRoot.bind(\n          null,\n          root,\n          finishedWork,\n          lanes,\n          recoverableErrors,\n          transitions,\n          didIncludeRenderPhaseUpdate,\n          spawnedLane,\n          updatedLanes,\n          suspendedRetryLanes,\n          exitStatus,\n          1,\n          completedRenderStartTime,\n          completedRenderEndTime\n        )\n      );\n      markRootSuspended(root, lanes, spawnedLane, !didSkipSuspendedSiblings);\n      return;\n    }\n  commitRoot(\n    root,\n    finishedWork,\n    lanes,\n    recoverableErrors,\n    transitions,\n    didIncludeRenderPhaseUpdate,\n    spawnedLane,\n    updatedLanes,\n    suspendedRetryLanes\n  );\n}\nfunction isRenderConsistentWithExternalStores(finishedWork) {\n  for (var node = finishedWork; ; ) {\n    var tag = node.tag;\n    if (\n      (0 === tag || 11 === tag || 15 === tag) &&\n      node.flags & 16384 &&\n      ((tag = node.updateQueue),\n      null !== tag && ((tag = tag.stores), null !== tag))\n    )\n      for (var i = 0; i < tag.length; i++) {\n        var check = tag[i],\n          getSnapshot = check.getSnapshot;\n        check = check.value;\n        try {\n          if (!objectIs(getSnapshot(), check)) return !1;\n        } catch (error) {\n          return !1;\n        }\n      }\n    tag = node.child;\n    if (node.subtreeFlags & 16384 && null !== tag)\n      (tag.return = node), (node = tag);\n    else {\n      if (node === finishedWork) break;\n      for (; null === node.sibling; ) {\n        if (null === node.return || node.return === finishedWork) return !0;\n        node = node.return;\n      }\n      node.sibling.return = node.return;\n      node = node.sibling;\n    }\n  }\n  return !0;\n}\nfunction markRootSuspended(\n  root,\n  suspendedLanes,\n  spawnedLane,\n  didAttemptEntireTree\n) {\n  suspendedLanes &= ~workInProgressRootPingedLanes;\n  suspendedLanes &= ~workInProgressRootInterleavedUpdatedLanes;\n  root.suspendedLanes |= suspendedLanes;\n  root.pingedLanes &= ~suspendedLanes;\n  didAttemptEntireTree && (root.warmLanes |= suspendedLanes);\n  didAttemptEntireTree = root.expirationTimes;\n  for (var lanes = suspendedLanes; 0 < lanes; ) {\n    var index$4 = 31 - clz32(lanes),\n      lane = 1 << index$4;\n    didAttemptEntireTree[index$4] = -1;\n    lanes &= ~lane;\n  }\n  0 !== spawnedLane &&\n    markSpawnedDeferredLane(root, spawnedLane, suspendedLanes);\n}\nfunction flushSyncWork$1() {\n  return 0 === (executionContext & 6)\n    ? (flushSyncWorkAcrossRoots_impl(0, !1), !1)\n    : !0;\n}\nfunction resetWorkInProgressStack() {\n  if (null !== workInProgress) {\n    if (0 === workInProgressSuspendedReason)\n      var interruptedWork = workInProgress.return;\n    else\n      (interruptedWork = workInProgress),\n        (lastContextDependency = currentlyRenderingFiber$1 = null),\n        resetHooksOnUnwind(interruptedWork),\n        (thenableState = null),\n        (thenableIndexCounter = 0),\n        (interruptedWork = workInProgress);\n    for (; null !== interruptedWork; )\n      unwindInterruptedWork(interruptedWork.alternate, interruptedWork),\n        (interruptedWork = interruptedWork.return);\n    workInProgress = null;\n  }\n}\nfunction prepareFreshStack(root, lanes) {\n  var timeoutHandle = root.timeoutHandle;\n  -1 !== timeoutHandle &&\n    ((root.timeoutHandle = -1), cancelTimeout(timeoutHandle));\n  timeoutHandle = root.cancelPendingCommit;\n  null !== timeoutHandle &&\n    ((root.cancelPendingCommit = null), timeoutHandle());\n  resetWorkInProgressStack();\n  workInProgressRoot = root;\n  workInProgress = timeoutHandle = createWorkInProgress(root.current, null);\n  workInProgressRootRenderLanes = lanes;\n  workInProgressSuspendedReason = 0;\n  workInProgressThrownValue = null;\n  workInProgressRootDidSkipSuspendedSiblings = !1;\n  workInProgressRootIsPrerendering = checkIfRootIsPrerendering(root, lanes);\n  workInProgressRootDidAttachPingListener = !1;\n  workInProgressSuspendedRetryLanes =\n    workInProgressDeferredLane =\n    workInProgressRootPingedLanes =\n    workInProgressRootInterleavedUpdatedLanes =\n    workInProgressRootSkippedLanes =\n    workInProgressRootExitStatus =\n      0;\n  workInProgressRootRecoverableErrors = workInProgressRootConcurrentErrors =\n    null;\n  workInProgressRootDidIncludeRecursiveRenderUpdate = !1;\n  0 !== (lanes & 8) && (lanes |= lanes & 32);\n  var allEntangledLanes = root.entangledLanes;\n  if (0 !== allEntangledLanes)\n    for (\n      root = root.entanglements, allEntangledLanes &= lanes;\n      0 < allEntangledLanes;\n\n    ) {\n      var index$2 = 31 - clz32(allEntangledLanes),\n        lane = 1 << index$2;\n      lanes |= root[index$2];\n      allEntangledLanes &= ~lane;\n    }\n  entangledRenderLanes = lanes;\n  finishQueueingConcurrentUpdates();\n  return timeoutHandle;\n}\nfunction handleThrow(root, thrownValue) {\n  currentlyRenderingFiber = null;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  thrownValue === SuspenseException || thrownValue === SuspenseActionException\n    ? ((thrownValue = getSuspendedThenable()),\n      (workInProgressSuspendedReason = 3))\n    : thrownValue === SuspenseyCommitException\n      ? ((thrownValue = getSuspendedThenable()),\n        (workInProgressSuspendedReason = 4))\n      : (workInProgressSuspendedReason =\n          thrownValue === SelectiveHydrationException\n            ? 8\n            : null !== thrownValue &&\n                \"object\" === typeof thrownValue &&\n                \"function\" === typeof thrownValue.then\n              ? 6\n              : 1);\n  workInProgressThrownValue = thrownValue;\n  null === workInProgress &&\n    ((workInProgressRootExitStatus = 1),\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    ));\n}\nfunction pushDispatcher() {\n  var prevDispatcher = ReactSharedInternals.H;\n  ReactSharedInternals.H = ContextOnlyDispatcher;\n  return null === prevDispatcher ? ContextOnlyDispatcher : prevDispatcher;\n}\nfunction pushAsyncDispatcher() {\n  var prevAsyncDispatcher = ReactSharedInternals.A;\n  ReactSharedInternals.A = DefaultAsyncDispatcher;\n  return prevAsyncDispatcher;\n}\nfunction renderDidSuspendDelayIfPossible() {\n  workInProgressRootExitStatus = 4;\n  workInProgressRootDidSkipSuspendedSiblings ||\n    ((workInProgressRootRenderLanes & 4194048) !==\n      workInProgressRootRenderLanes &&\n      null !== suspenseHandlerStackCursor.current) ||\n    (workInProgressRootIsPrerendering = !0);\n  (0 === (workInProgressRootSkippedLanes & 134217727) &&\n    0 === (workInProgressRootInterleavedUpdatedLanes & 134217727)) ||\n    null === workInProgressRoot ||\n    markRootSuspended(\n      workInProgressRoot,\n      workInProgressRootRenderLanes,\n      workInProgressDeferredLane,\n      !1\n    );\n}\nfunction renderRootSync(root, lanes, shouldYieldForPrerendering) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  if (workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes)\n    (workInProgressTransitions = null), prepareFreshStack(root, lanes);\n  lanes = !1;\n  var exitStatus = workInProgressRootExitStatus;\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        var unitOfWork = workInProgress,\n          thrownValue = workInProgressThrownValue;\n        switch (workInProgressSuspendedReason) {\n          case 8:\n            resetWorkInProgressStack();\n            exitStatus = 6;\n            break a;\n          case 3:\n          case 2:\n          case 9:\n          case 6:\n            null === suspenseHandlerStackCursor.current && (lanes = !0);\n            var reason = workInProgressSuspendedReason;\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n            if (\n              shouldYieldForPrerendering &&\n              workInProgressRootIsPrerendering\n            ) {\n              exitStatus = 0;\n              break a;\n            }\n            break;\n          default:\n            (reason = workInProgressSuspendedReason),\n              (workInProgressSuspendedReason = 0),\n              (workInProgressThrownValue = null),\n              throwAndUnwindWorkLoop(root, unitOfWork, thrownValue, reason);\n        }\n      }\n      workLoopSync();\n      exitStatus = workInProgressRootExitStatus;\n      break;\n    } catch (thrownValue$167) {\n      handleThrow(root, thrownValue$167);\n    }\n  while (1);\n  lanes && root.shellSuspendCounter++;\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  executionContext = prevExecutionContext;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  null === workInProgress &&\n    ((workInProgressRoot = null),\n    (workInProgressRootRenderLanes = 0),\n    finishQueueingConcurrentUpdates());\n  return exitStatus;\n}\nfunction workLoopSync() {\n  for (; null !== workInProgress; ) performUnitOfWork(workInProgress);\n}\nfunction renderRootConcurrent(root, lanes) {\n  var prevExecutionContext = executionContext;\n  executionContext |= 2;\n  var prevDispatcher = pushDispatcher(),\n    prevAsyncDispatcher = pushAsyncDispatcher();\n  workInProgressRoot !== root || workInProgressRootRenderLanes !== lanes\n    ? ((workInProgressTransitions = null),\n      (workInProgressRootRenderTargetTime = now() + 500),\n      prepareFreshStack(root, lanes))\n    : (workInProgressRootIsPrerendering = checkIfRootIsPrerendering(\n        root,\n        lanes\n      ));\n  a: do\n    try {\n      if (0 !== workInProgressSuspendedReason && null !== workInProgress) {\n        lanes = workInProgress;\n        var thrownValue = workInProgressThrownValue;\n        b: switch (workInProgressSuspendedReason) {\n          case 1:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 1);\n            break;\n          case 2:\n          case 9:\n            if (isThenableResolved(thrownValue)) {\n              workInProgressSuspendedReason = 0;\n              workInProgressThrownValue = null;\n              replaySuspendedUnitOfWork(lanes);\n              break;\n            }\n            lanes = function () {\n              (2 !== workInProgressSuspendedReason &&\n                9 !== workInProgressSuspendedReason) ||\n                workInProgressRoot !== root ||\n                (workInProgressSuspendedReason = 7);\n              ensureRootIsScheduled(root);\n            };\n            thrownValue.then(lanes, lanes);\n            break a;\n          case 3:\n            workInProgressSuspendedReason = 7;\n            break a;\n          case 4:\n            workInProgressSuspendedReason = 5;\n            break a;\n          case 7:\n            isThenableResolved(thrownValue)\n              ? ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                replaySuspendedUnitOfWork(lanes))\n              : ((workInProgressSuspendedReason = 0),\n                (workInProgressThrownValue = null),\n                throwAndUnwindWorkLoop(root, lanes, thrownValue, 7));\n            break;\n          case 5:\n            var resource = null;\n            switch (workInProgress.tag) {\n              case 26:\n                resource = workInProgress.memoizedState;\n              case 5:\n              case 27:\n                var hostFiber = workInProgress;\n                if (resource ? preloadResource(resource) : 1) {\n                  workInProgressSuspendedReason = 0;\n                  workInProgressThrownValue = null;\n                  var sibling = hostFiber.sibling;\n                  if (null !== sibling) workInProgress = sibling;\n                  else {\n                    var returnFiber = hostFiber.return;\n                    null !== returnFiber\n                      ? ((workInProgress = returnFiber),\n                        completeUnitOfWork(returnFiber))\n                      : (workInProgress = null);\n                  }\n                  break b;\n                }\n            }\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 5);\n            break;\n          case 6:\n            workInProgressSuspendedReason = 0;\n            workInProgressThrownValue = null;\n            throwAndUnwindWorkLoop(root, lanes, thrownValue, 6);\n            break;\n          case 8:\n            resetWorkInProgressStack();\n            workInProgressRootExitStatus = 6;\n            break a;\n          default:\n            throw Error(formatProdErrorMessage(462));\n        }\n      }\n      workLoopConcurrentByScheduler();\n      break;\n    } catch (thrownValue$169) {\n      handleThrow(root, thrownValue$169);\n    }\n  while (1);\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  ReactSharedInternals.H = prevDispatcher;\n  ReactSharedInternals.A = prevAsyncDispatcher;\n  executionContext = prevExecutionContext;\n  if (null !== workInProgress) return 0;\n  workInProgressRoot = null;\n  workInProgressRootRenderLanes = 0;\n  finishQueueingConcurrentUpdates();\n  return workInProgressRootExitStatus;\n}\nfunction workLoopConcurrentByScheduler() {\n  for (; null !== workInProgress && !shouldYield(); )\n    performUnitOfWork(workInProgress);\n}\nfunction performUnitOfWork(unitOfWork) {\n  var next = beginWork(unitOfWork.alternate, unitOfWork, entangledRenderLanes);\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction replaySuspendedUnitOfWork(unitOfWork) {\n  var next = unitOfWork;\n  var current = next.alternate;\n  switch (next.tag) {\n    case 15:\n    case 0:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type,\n        void 0,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 11:\n      next = replayFunctionComponent(\n        current,\n        next,\n        next.pendingProps,\n        next.type.render,\n        next.ref,\n        workInProgressRootRenderLanes\n      );\n      break;\n    case 5:\n      resetHooksOnUnwind(next);\n    default:\n      unwindInterruptedWork(current, next),\n        (next = workInProgress =\n          resetWorkInProgress(next, entangledRenderLanes)),\n        (next = beginWork(current, next, entangledRenderLanes));\n  }\n  unitOfWork.memoizedProps = unitOfWork.pendingProps;\n  null === next ? completeUnitOfWork(unitOfWork) : (workInProgress = next);\n}\nfunction throwAndUnwindWorkLoop(\n  root,\n  unitOfWork,\n  thrownValue,\n  suspendedReason\n) {\n  lastContextDependency = currentlyRenderingFiber$1 = null;\n  resetHooksOnUnwind(unitOfWork);\n  thenableState = null;\n  thenableIndexCounter = 0;\n  var returnFiber = unitOfWork.return;\n  try {\n    if (\n      throwException(\n        root,\n        returnFiber,\n        unitOfWork,\n        thrownValue,\n        workInProgressRootRenderLanes\n      )\n    ) {\n      workInProgressRootExitStatus = 1;\n      logUncaughtError(\n        root,\n        createCapturedValueAtFiber(thrownValue, root.current)\n      );\n      workInProgress = null;\n      return;\n    }\n  } catch (error) {\n    if (null !== returnFiber) throw ((workInProgress = returnFiber), error);\n    workInProgressRootExitStatus = 1;\n    logUncaughtError(\n      root,\n      createCapturedValueAtFiber(thrownValue, root.current)\n    );\n    workInProgress = null;\n    return;\n  }\n  if (unitOfWork.flags & 32768) {\n    if (isHydrating || 1 === suspendedReason) root = !0;\n    else if (\n      workInProgressRootIsPrerendering ||\n      0 !== (workInProgressRootRenderLanes & 536870912)\n    )\n      root = !1;\n    else if (\n      ((workInProgressRootDidSkipSuspendedSiblings = root = !0),\n      2 === suspendedReason ||\n        9 === suspendedReason ||\n        3 === suspendedReason ||\n        6 === suspendedReason)\n    )\n      (suspendedReason = suspenseHandlerStackCursor.current),\n        null !== suspendedReason &&\n          13 === suspendedReason.tag &&\n          (suspendedReason.flags |= 16384);\n    unwindUnitOfWork(unitOfWork, root);\n  } else completeUnitOfWork(unitOfWork);\n}\nfunction completeUnitOfWork(unitOfWork) {\n  var completedWork = unitOfWork;\n  do {\n    if (0 !== (completedWork.flags & 32768)) {\n      unwindUnitOfWork(\n        completedWork,\n        workInProgressRootDidSkipSuspendedSiblings\n      );\n      return;\n    }\n    unitOfWork = completedWork.return;\n    var next = completeWork(\n      completedWork.alternate,\n      completedWork,\n      entangledRenderLanes\n    );\n    if (null !== next) {\n      workInProgress = next;\n      return;\n    }\n    completedWork = completedWork.sibling;\n    if (null !== completedWork) {\n      workInProgress = completedWork;\n      return;\n    }\n    workInProgress = completedWork = unitOfWork;\n  } while (null !== completedWork);\n  0 === workInProgressRootExitStatus && (workInProgressRootExitStatus = 5);\n}\nfunction unwindUnitOfWork(unitOfWork, skipSiblings) {\n  do {\n    var next = unwindWork(unitOfWork.alternate, unitOfWork);\n    if (null !== next) {\n      next.flags &= 32767;\n      workInProgress = next;\n      return;\n    }\n    next = unitOfWork.return;\n    null !== next &&\n      ((next.flags |= 32768), (next.subtreeFlags = 0), (next.deletions = null));\n    if (\n      !skipSiblings &&\n      ((unitOfWork = unitOfWork.sibling), null !== unitOfWork)\n    ) {\n      workInProgress = unitOfWork;\n      return;\n    }\n    workInProgress = unitOfWork = next;\n  } while (null !== unitOfWork);\n  workInProgressRootExitStatus = 6;\n  workInProgress = null;\n}\nfunction commitRoot(\n  root,\n  finishedWork,\n  lanes,\n  recoverableErrors,\n  transitions,\n  didIncludeRenderPhaseUpdate,\n  spawnedLane,\n  updatedLanes,\n  suspendedRetryLanes\n) {\n  root.cancelPendingCommit = null;\n  do flushPendingEffects();\n  while (0 !== pendingEffectsStatus);\n  if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(327));\n  if (null !== finishedWork) {\n    if (finishedWork === root.current) throw Error(formatProdErrorMessage(177));\n    didIncludeRenderPhaseUpdate = finishedWork.lanes | finishedWork.childLanes;\n    didIncludeRenderPhaseUpdate |= concurrentlyUpdatedLanes;\n    markRootFinished(\n      root,\n      lanes,\n      didIncludeRenderPhaseUpdate,\n      spawnedLane,\n      updatedLanes,\n      suspendedRetryLanes\n    );\n    root === workInProgressRoot &&\n      ((workInProgress = workInProgressRoot = null),\n      (workInProgressRootRenderLanes = 0));\n    pendingFinishedWork = finishedWork;\n    pendingEffectsRoot = root;\n    pendingEffectsLanes = lanes;\n    pendingEffectsRemainingLanes = didIncludeRenderPhaseUpdate;\n    pendingPassiveTransitions = transitions;\n    pendingRecoverableErrors = recoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? ((root.callbackNode = null),\n        (root.callbackPriority = 0),\n        scheduleCallback$1(NormalPriority$1, function () {\n          flushPassiveEffects(!0);\n          return null;\n        }))\n      : ((root.callbackNode = null), (root.callbackPriority = 0));\n    recoverableErrors = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || recoverableErrors) {\n      recoverableErrors = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      transitions = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      spawnedLane = executionContext;\n      executionContext |= 4;\n      try {\n        commitBeforeMutationEffects(root, finishedWork, lanes);\n      } finally {\n        (executionContext = spawnedLane),\n          (ReactDOMSharedInternals.p = transitions),\n          (ReactSharedInternals.T = recoverableErrors);\n      }\n    }\n    pendingEffectsStatus = 1;\n    flushMutationEffects();\n    flushLayoutEffects();\n    flushSpawnedWork();\n  }\n}\nfunction flushMutationEffects() {\n  if (1 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootMutationHasEffect = 0 !== (finishedWork.flags & 13878);\n    if (0 !== (finishedWork.subtreeFlags & 13878) || rootMutationHasEffect) {\n      rootMutationHasEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitMutationEffectsOnFiber(finishedWork, root);\n        var priorSelectionInformation = selectionInformation,\n          curFocusedElem = getActiveElementDeep(root.containerInfo),\n          priorFocusedElem = priorSelectionInformation.focusedElem,\n          priorSelectionRange = priorSelectionInformation.selectionRange;\n        if (\n          curFocusedElem !== priorFocusedElem &&\n          priorFocusedElem &&\n          priorFocusedElem.ownerDocument &&\n          containsNode(\n            priorFocusedElem.ownerDocument.documentElement,\n            priorFocusedElem\n          )\n        ) {\n          if (\n            null !== priorSelectionRange &&\n            hasSelectionCapabilities(priorFocusedElem)\n          ) {\n            var start = priorSelectionRange.start,\n              end = priorSelectionRange.end;\n            void 0 === end && (end = start);\n            if (\"selectionStart\" in priorFocusedElem)\n              (priorFocusedElem.selectionStart = start),\n                (priorFocusedElem.selectionEnd = Math.min(\n                  end,\n                  priorFocusedElem.value.length\n                ));\n            else {\n              var doc = priorFocusedElem.ownerDocument || document,\n                win = (doc && doc.defaultView) || window;\n              if (win.getSelection) {\n                var selection = win.getSelection(),\n                  length = priorFocusedElem.textContent.length,\n                  start$jscomp$0 = Math.min(priorSelectionRange.start, length),\n                  end$jscomp$0 =\n                    void 0 === priorSelectionRange.end\n                      ? start$jscomp$0\n                      : Math.min(priorSelectionRange.end, length);\n                !selection.extend &&\n                  start$jscomp$0 > end$jscomp$0 &&\n                  ((curFocusedElem = end$jscomp$0),\n                  (end$jscomp$0 = start$jscomp$0),\n                  (start$jscomp$0 = curFocusedElem));\n                var startMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    start$jscomp$0\n                  ),\n                  endMarker = getNodeForCharacterOffset(\n                    priorFocusedElem,\n                    end$jscomp$0\n                  );\n                if (\n                  startMarker &&\n                  endMarker &&\n                  (1 !== selection.rangeCount ||\n                    selection.anchorNode !== startMarker.node ||\n                    selection.anchorOffset !== startMarker.offset ||\n                    selection.focusNode !== endMarker.node ||\n                    selection.focusOffset !== endMarker.offset)\n                ) {\n                  var range = doc.createRange();\n                  range.setStart(startMarker.node, startMarker.offset);\n                  selection.removeAllRanges();\n                  start$jscomp$0 > end$jscomp$0\n                    ? (selection.addRange(range),\n                      selection.extend(endMarker.node, endMarker.offset))\n                    : (range.setEnd(endMarker.node, endMarker.offset),\n                      selection.addRange(range));\n                }\n              }\n            }\n          }\n          doc = [];\n          for (\n            selection = priorFocusedElem;\n            (selection = selection.parentNode);\n\n          )\n            1 === selection.nodeType &&\n              doc.push({\n                element: selection,\n                left: selection.scrollLeft,\n                top: selection.scrollTop\n              });\n          \"function\" === typeof priorFocusedElem.focus &&\n            priorFocusedElem.focus();\n          for (\n            priorFocusedElem = 0;\n            priorFocusedElem < doc.length;\n            priorFocusedElem++\n          ) {\n            var info = doc[priorFocusedElem];\n            info.element.scrollLeft = info.left;\n            info.element.scrollTop = info.top;\n          }\n        }\n        _enabled = !!eventsEnabled;\n        selectionInformation = eventsEnabled = null;\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootMutationHasEffect);\n      }\n    }\n    root.current = finishedWork;\n    pendingEffectsStatus = 2;\n  }\n}\nfunction flushLayoutEffects() {\n  if (2 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      rootHasLayoutEffect = 0 !== (finishedWork.flags & 8772);\n    if (0 !== (finishedWork.subtreeFlags & 8772) || rootHasLayoutEffect) {\n      rootHasLayoutEffect = ReactSharedInternals.T;\n      ReactSharedInternals.T = null;\n      var previousPriority = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      var prevExecutionContext = executionContext;\n      executionContext |= 4;\n      try {\n        commitLayoutEffectOnFiber(root, finishedWork.alternate, finishedWork);\n      } finally {\n        (executionContext = prevExecutionContext),\n          (ReactDOMSharedInternals.p = previousPriority),\n          (ReactSharedInternals.T = rootHasLayoutEffect);\n      }\n    }\n    pendingEffectsStatus = 3;\n  }\n}\nfunction flushSpawnedWork() {\n  if (4 === pendingEffectsStatus || 3 === pendingEffectsStatus) {\n    pendingEffectsStatus = 0;\n    requestPaint();\n    var root = pendingEffectsRoot,\n      finishedWork = pendingFinishedWork,\n      lanes = pendingEffectsLanes,\n      recoverableErrors = pendingRecoverableErrors;\n    0 !== (finishedWork.subtreeFlags & 10256) ||\n    0 !== (finishedWork.flags & 10256)\n      ? (pendingEffectsStatus = 5)\n      : ((pendingEffectsStatus = 0),\n        (pendingFinishedWork = pendingEffectsRoot = null),\n        releaseRootPooledCache(root, root.pendingLanes));\n    var remainingLanes = root.pendingLanes;\n    0 === remainingLanes && (legacyErrorBoundariesThatAlreadyFailed = null);\n    lanesToEventPriority(lanes);\n    finishedWork = finishedWork.stateNode;\n    if (injectedHook && \"function\" === typeof injectedHook.onCommitFiberRoot)\n      try {\n        injectedHook.onCommitFiberRoot(\n          rendererID,\n          finishedWork,\n          void 0,\n          128 === (finishedWork.current.flags & 128)\n        );\n      } catch (err) {}\n    if (null !== recoverableErrors) {\n      finishedWork = ReactSharedInternals.T;\n      remainingLanes = ReactDOMSharedInternals.p;\n      ReactDOMSharedInternals.p = 2;\n      ReactSharedInternals.T = null;\n      try {\n        for (\n          var onRecoverableError = root.onRecoverableError, i = 0;\n          i < recoverableErrors.length;\n          i++\n        ) {\n          var recoverableError = recoverableErrors[i];\n          onRecoverableError(recoverableError.value, {\n            componentStack: recoverableError.stack\n          });\n        }\n      } finally {\n        (ReactSharedInternals.T = finishedWork),\n          (ReactDOMSharedInternals.p = remainingLanes);\n      }\n    }\n    0 !== (pendingEffectsLanes & 3) && flushPendingEffects();\n    ensureRootIsScheduled(root);\n    remainingLanes = root.pendingLanes;\n    0 !== (lanes & 4194090) && 0 !== (remainingLanes & 42)\n      ? root === rootWithNestedUpdates\n        ? nestedUpdateCount++\n        : ((nestedUpdateCount = 0), (rootWithNestedUpdates = root))\n      : (nestedUpdateCount = 0);\n    flushSyncWorkAcrossRoots_impl(0, !1);\n  }\n}\nfunction releaseRootPooledCache(root, remainingLanes) {\n  0 === (root.pooledCacheLanes &= remainingLanes) &&\n    ((remainingLanes = root.pooledCache),\n    null != remainingLanes &&\n      ((root.pooledCache = null), releaseCache(remainingLanes)));\n}\nfunction flushPendingEffects(wasDelayedCommit) {\n  flushMutationEffects();\n  flushLayoutEffects();\n  flushSpawnedWork();\n  return flushPassiveEffects(wasDelayedCommit);\n}\nfunction flushPassiveEffects() {\n  if (5 !== pendingEffectsStatus) return !1;\n  var root = pendingEffectsRoot,\n    remainingLanes = pendingEffectsRemainingLanes;\n  pendingEffectsRemainingLanes = 0;\n  var renderPriority = lanesToEventPriority(pendingEffectsLanes),\n    prevTransition = ReactSharedInternals.T,\n    previousPriority = ReactDOMSharedInternals.p;\n  try {\n    ReactDOMSharedInternals.p = 32 > renderPriority ? 32 : renderPriority;\n    ReactSharedInternals.T = null;\n    renderPriority = pendingPassiveTransitions;\n    pendingPassiveTransitions = null;\n    var root$jscomp$0 = pendingEffectsRoot,\n      lanes = pendingEffectsLanes;\n    pendingEffectsStatus = 0;\n    pendingFinishedWork = pendingEffectsRoot = null;\n    pendingEffectsLanes = 0;\n    if (0 !== (executionContext & 6)) throw Error(formatProdErrorMessage(331));\n    var prevExecutionContext = executionContext;\n    executionContext |= 4;\n    commitPassiveUnmountOnFiber(root$jscomp$0.current);\n    commitPassiveMountOnFiber(\n      root$jscomp$0,\n      root$jscomp$0.current,\n      lanes,\n      renderPriority\n    );\n    executionContext = prevExecutionContext;\n    flushSyncWorkAcrossRoots_impl(0, !1);\n    if (\n      injectedHook &&\n      \"function\" === typeof injectedHook.onPostCommitFiberRoot\n    )\n      try {\n        injectedHook.onPostCommitFiberRoot(rendererID, root$jscomp$0);\n      } catch (err) {}\n    return !0;\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition),\n      releaseRootPooledCache(root, remainingLanes);\n  }\n}\nfunction captureCommitPhaseErrorOnRoot(rootFiber, sourceFiber, error) {\n  sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n  sourceFiber = createRootErrorUpdate(rootFiber.stateNode, sourceFiber, 2);\n  rootFiber = enqueueUpdate(rootFiber, sourceFiber, 2);\n  null !== rootFiber &&\n    (markRootUpdated$1(rootFiber, 2), ensureRootIsScheduled(rootFiber));\n}\nfunction captureCommitPhaseError(sourceFiber, nearestMountedAncestor, error) {\n  if (3 === sourceFiber.tag)\n    captureCommitPhaseErrorOnRoot(sourceFiber, sourceFiber, error);\n  else\n    for (; null !== nearestMountedAncestor; ) {\n      if (3 === nearestMountedAncestor.tag) {\n        captureCommitPhaseErrorOnRoot(\n          nearestMountedAncestor,\n          sourceFiber,\n          error\n        );\n        break;\n      } else if (1 === nearestMountedAncestor.tag) {\n        var instance = nearestMountedAncestor.stateNode;\n        if (\n          \"function\" ===\n            typeof nearestMountedAncestor.type.getDerivedStateFromError ||\n          (\"function\" === typeof instance.componentDidCatch &&\n            (null === legacyErrorBoundariesThatAlreadyFailed ||\n              !legacyErrorBoundariesThatAlreadyFailed.has(instance)))\n        ) {\n          sourceFiber = createCapturedValueAtFiber(error, sourceFiber);\n          error = createClassErrorUpdate(2);\n          instance = enqueueUpdate(nearestMountedAncestor, error, 2);\n          null !== instance &&\n            (initializeClassErrorUpdate(\n              error,\n              instance,\n              nearestMountedAncestor,\n              sourceFiber\n            ),\n            markRootUpdated$1(instance, 2),\n            ensureRootIsScheduled(instance));\n          break;\n        }\n      }\n      nearestMountedAncestor = nearestMountedAncestor.return;\n    }\n}\nfunction attachPingListener(root, wakeable, lanes) {\n  var pingCache = root.pingCache;\n  if (null === pingCache) {\n    pingCache = root.pingCache = new PossiblyWeakMap();\n    var threadIDs = new Set();\n    pingCache.set(wakeable, threadIDs);\n  } else\n    (threadIDs = pingCache.get(wakeable)),\n      void 0 === threadIDs &&\n        ((threadIDs = new Set()), pingCache.set(wakeable, threadIDs));\n  threadIDs.has(lanes) ||\n    ((workInProgressRootDidAttachPingListener = !0),\n    threadIDs.add(lanes),\n    (root = pingSuspendedRoot.bind(null, root, wakeable, lanes)),\n    wakeable.then(root, root));\n}\nfunction pingSuspendedRoot(root, wakeable, pingedLanes) {\n  var pingCache = root.pingCache;\n  null !== pingCache && pingCache.delete(wakeable);\n  root.pingedLanes |= root.suspendedLanes & pingedLanes;\n  root.warmLanes &= ~pingedLanes;\n  workInProgressRoot === root &&\n    (workInProgressRootRenderLanes & pingedLanes) === pingedLanes &&\n    (4 === workInProgressRootExitStatus ||\n    (3 === workInProgressRootExitStatus &&\n      (workInProgressRootRenderLanes & 62914560) ===\n        workInProgressRootRenderLanes &&\n      300 > now() - globalMostRecentFallbackTime)\n      ? 0 === (executionContext & 2) && prepareFreshStack(root, 0)\n      : (workInProgressRootPingedLanes |= pingedLanes),\n    workInProgressSuspendedRetryLanes === workInProgressRootRenderLanes &&\n      (workInProgressSuspendedRetryLanes = 0));\n  ensureRootIsScheduled(root);\n}\nfunction retryTimedOutBoundary(boundaryFiber, retryLane) {\n  0 === retryLane && (retryLane = claimNextRetryLane());\n  boundaryFiber = enqueueConcurrentRenderForLane(boundaryFiber, retryLane);\n  null !== boundaryFiber &&\n    (markRootUpdated$1(boundaryFiber, retryLane),\n    ensureRootIsScheduled(boundaryFiber));\n}\nfunction retryDehydratedSuspenseBoundary(boundaryFiber) {\n  var suspenseState = boundaryFiber.memoizedState,\n    retryLane = 0;\n  null !== suspenseState && (retryLane = suspenseState.retryLane);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction resolveRetryWakeable(boundaryFiber, wakeable) {\n  var retryLane = 0;\n  switch (boundaryFiber.tag) {\n    case 13:\n      var retryCache = boundaryFiber.stateNode;\n      var suspenseState = boundaryFiber.memoizedState;\n      null !== suspenseState && (retryLane = suspenseState.retryLane);\n      break;\n    case 19:\n      retryCache = boundaryFiber.stateNode;\n      break;\n    case 22:\n      retryCache = boundaryFiber.stateNode._retryCache;\n      break;\n    default:\n      throw Error(formatProdErrorMessage(314));\n  }\n  null !== retryCache && retryCache.delete(wakeable);\n  retryTimedOutBoundary(boundaryFiber, retryLane);\n}\nfunction scheduleCallback$1(priorityLevel, callback) {\n  return scheduleCallback$3(priorityLevel, callback);\n}\nvar firstScheduledRoot = null,\n  lastScheduledRoot = null,\n  didScheduleMicrotask = !1,\n  mightHavePendingSyncWork = !1,\n  isFlushingWork = !1,\n  currentEventTransitionLane = 0;\nfunction ensureRootIsScheduled(root) {\n  root !== lastScheduledRoot &&\n    null === root.next &&\n    (null === lastScheduledRoot\n      ? (firstScheduledRoot = lastScheduledRoot = root)\n      : (lastScheduledRoot = lastScheduledRoot.next = root));\n  mightHavePendingSyncWork = !0;\n  didScheduleMicrotask ||\n    ((didScheduleMicrotask = !0), scheduleImmediateRootScheduleTask());\n}\nfunction flushSyncWorkAcrossRoots_impl(syncTransitionLanes, onlyLegacy) {\n  if (!isFlushingWork && mightHavePendingSyncWork) {\n    isFlushingWork = !0;\n    do {\n      var didPerformSomeWork = !1;\n      for (var root$174 = firstScheduledRoot; null !== root$174; ) {\n        if (!onlyLegacy)\n          if (0 !== syncTransitionLanes) {\n            var pendingLanes = root$174.pendingLanes;\n            if (0 === pendingLanes) var JSCompiler_inline_result = 0;\n            else {\n              var suspendedLanes = root$174.suspendedLanes,\n                pingedLanes = root$174.pingedLanes;\n              JSCompiler_inline_result =\n                (1 << (31 - clz32(42 | syncTransitionLanes) + 1)) - 1;\n              JSCompiler_inline_result &=\n                pendingLanes & ~(suspendedLanes & ~pingedLanes);\n              JSCompiler_inline_result =\n                JSCompiler_inline_result & 201326741\n                  ? (JSCompiler_inline_result & 201326741) | 1\n                  : JSCompiler_inline_result\n                    ? JSCompiler_inline_result | 2\n                    : 0;\n            }\n            0 !== JSCompiler_inline_result &&\n              ((didPerformSomeWork = !0),\n              performSyncWorkOnRoot(root$174, JSCompiler_inline_result));\n          } else\n            (JSCompiler_inline_result = workInProgressRootRenderLanes),\n              (JSCompiler_inline_result = getNextLanes(\n                root$174,\n                root$174 === workInProgressRoot ? JSCompiler_inline_result : 0,\n                null !== root$174.cancelPendingCommit ||\n                  -1 !== root$174.timeoutHandle\n              )),\n              0 === (JSCompiler_inline_result & 3) ||\n                checkIfRootIsPrerendering(root$174, JSCompiler_inline_result) ||\n                ((didPerformSomeWork = !0),\n                performSyncWorkOnRoot(root$174, JSCompiler_inline_result));\n        root$174 = root$174.next;\n      }\n    } while (didPerformSomeWork);\n    isFlushingWork = !1;\n  }\n}\nfunction processRootScheduleInImmediateTask() {\n  processRootScheduleInMicrotask();\n}\nfunction processRootScheduleInMicrotask() {\n  mightHavePendingSyncWork = didScheduleMicrotask = !1;\n  var syncTransitionLanes = 0;\n  0 !== currentEventTransitionLane &&\n    (shouldAttemptEagerTransition() &&\n      (syncTransitionLanes = currentEventTransitionLane),\n    (currentEventTransitionLane = 0));\n  for (\n    var currentTime = now(), prev = null, root = firstScheduledRoot;\n    null !== root;\n\n  ) {\n    var next = root.next,\n      nextLanes = scheduleTaskForRootDuringMicrotask(root, currentTime);\n    if (0 === nextLanes)\n      (root.next = null),\n        null === prev ? (firstScheduledRoot = next) : (prev.next = next),\n        null === next && (lastScheduledRoot = prev);\n    else if (\n      ((prev = root), 0 !== syncTransitionLanes || 0 !== (nextLanes & 3))\n    )\n      mightHavePendingSyncWork = !0;\n    root = next;\n  }\n  flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);\n}\nfunction scheduleTaskForRootDuringMicrotask(root, currentTime) {\n  for (\n    var suspendedLanes = root.suspendedLanes,\n      pingedLanes = root.pingedLanes,\n      expirationTimes = root.expirationTimes,\n      lanes = root.pendingLanes & -62914561;\n    0 < lanes;\n\n  ) {\n    var index$3 = 31 - clz32(lanes),\n      lane = 1 << index$3,\n      expirationTime = expirationTimes[index$3];\n    if (-1 === expirationTime) {\n      if (0 === (lane & suspendedLanes) || 0 !== (lane & pingedLanes))\n        expirationTimes[index$3] = computeExpirationTime(lane, currentTime);\n    } else expirationTime <= currentTime && (root.expiredLanes |= lane);\n    lanes &= ~lane;\n  }\n  currentTime = workInProgressRoot;\n  suspendedLanes = workInProgressRootRenderLanes;\n  suspendedLanes = getNextLanes(\n    root,\n    root === currentTime ? suspendedLanes : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  pingedLanes = root.callbackNode;\n  if (\n    0 === suspendedLanes ||\n    (root === currentTime &&\n      (2 === workInProgressSuspendedReason ||\n        9 === workInProgressSuspendedReason)) ||\n    null !== root.cancelPendingCommit\n  )\n    return (\n      null !== pingedLanes &&\n        null !== pingedLanes &&\n        cancelCallback$1(pingedLanes),\n      (root.callbackNode = null),\n      (root.callbackPriority = 0)\n    );\n  if (\n    0 === (suspendedLanes & 3) ||\n    checkIfRootIsPrerendering(root, suspendedLanes)\n  ) {\n    currentTime = suspendedLanes & -suspendedLanes;\n    if (currentTime === root.callbackPriority) return currentTime;\n    null !== pingedLanes && cancelCallback$1(pingedLanes);\n    switch (lanesToEventPriority(suspendedLanes)) {\n      case 2:\n      case 8:\n        suspendedLanes = UserBlockingPriority;\n        break;\n      case 32:\n        suspendedLanes = NormalPriority$1;\n        break;\n      case 268435456:\n        suspendedLanes = IdlePriority;\n        break;\n      default:\n        suspendedLanes = NormalPriority$1;\n    }\n    pingedLanes = performWorkOnRootViaSchedulerTask.bind(null, root);\n    suspendedLanes = scheduleCallback$3(suspendedLanes, pingedLanes);\n    root.callbackPriority = currentTime;\n    root.callbackNode = suspendedLanes;\n    return currentTime;\n  }\n  null !== pingedLanes && null !== pingedLanes && cancelCallback$1(pingedLanes);\n  root.callbackPriority = 2;\n  root.callbackNode = null;\n  return 2;\n}\nfunction performWorkOnRootViaSchedulerTask(root, didTimeout) {\n  if (0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus)\n    return (root.callbackNode = null), (root.callbackPriority = 0), null;\n  var originalCallbackNode = root.callbackNode;\n  if (flushPendingEffects(!0) && root.callbackNode !== originalCallbackNode)\n    return null;\n  var workInProgressRootRenderLanes$jscomp$0 = workInProgressRootRenderLanes;\n  workInProgressRootRenderLanes$jscomp$0 = getNextLanes(\n    root,\n    root === workInProgressRoot ? workInProgressRootRenderLanes$jscomp$0 : 0,\n    null !== root.cancelPendingCommit || -1 !== root.timeoutHandle\n  );\n  if (0 === workInProgressRootRenderLanes$jscomp$0) return null;\n  performWorkOnRoot(root, workInProgressRootRenderLanes$jscomp$0, didTimeout);\n  scheduleTaskForRootDuringMicrotask(root, now());\n  return null != root.callbackNode && root.callbackNode === originalCallbackNode\n    ? performWorkOnRootViaSchedulerTask.bind(null, root)\n    : null;\n}\nfunction performSyncWorkOnRoot(root, lanes) {\n  if (flushPendingEffects()) return null;\n  performWorkOnRoot(root, lanes, !0);\n}\nfunction scheduleImmediateRootScheduleTask() {\n  scheduleMicrotask(function () {\n    0 !== (executionContext & 6)\n      ? scheduleCallback$3(\n          ImmediatePriority,\n          processRootScheduleInImmediateTask\n        )\n      : processRootScheduleInMicrotask();\n  });\n}\nfunction requestTransitionLane() {\n  0 === currentEventTransitionLane &&\n    (currentEventTransitionLane = claimNextTransitionLane());\n  return currentEventTransitionLane;\n}\nfunction coerceFormActionProp(actionProp) {\n  return null == actionProp ||\n    \"symbol\" === typeof actionProp ||\n    \"boolean\" === typeof actionProp\n    ? null\n    : \"function\" === typeof actionProp\n      ? actionProp\n      : sanitizeURL(\"\" + actionProp);\n}\nfunction createFormDataWithSubmitter(form, submitter) {\n  var temp = submitter.ownerDocument.createElement(\"input\");\n  temp.name = submitter.name;\n  temp.value = submitter.value;\n  form.id && temp.setAttribute(\"form\", form.id);\n  submitter.parentNode.insertBefore(temp, submitter);\n  form = new FormData(form);\n  temp.parentNode.removeChild(temp);\n  return form;\n}\nfunction extractEvents$1(\n  dispatchQueue,\n  domEventName,\n  maybeTargetInst,\n  nativeEvent,\n  nativeEventTarget\n) {\n  if (\n    \"submit\" === domEventName &&\n    maybeTargetInst &&\n    maybeTargetInst.stateNode === nativeEventTarget\n  ) {\n    var action = coerceFormActionProp(\n        (nativeEventTarget[internalPropsKey] || null).action\n      ),\n      submitter = nativeEvent.submitter;\n    submitter &&\n      ((domEventName = (domEventName = submitter[internalPropsKey] || null)\n        ? coerceFormActionProp(domEventName.formAction)\n        : submitter.getAttribute(\"formAction\")),\n      null !== domEventName && ((action = domEventName), (submitter = null)));\n    var event = new SyntheticEvent(\n      \"action\",\n      \"action\",\n      null,\n      nativeEvent,\n      nativeEventTarget\n    );\n    dispatchQueue.push({\n      event: event,\n      listeners: [\n        {\n          instance: null,\n          listener: function () {\n            if (nativeEvent.defaultPrevented) {\n              if (0 !== currentEventTransitionLane) {\n                var formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget);\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  null,\n                  formData\n                );\n              }\n            } else\n              \"function\" === typeof action &&\n                (event.preventDefault(),\n                (formData = submitter\n                  ? createFormDataWithSubmitter(nativeEventTarget, submitter)\n                  : new FormData(nativeEventTarget)),\n                startHostTransition(\n                  maybeTargetInst,\n                  {\n                    pending: !0,\n                    data: formData,\n                    method: nativeEventTarget.method,\n                    action: action\n                  },\n                  action,\n                  formData\n                ));\n          },\n          currentTarget: nativeEventTarget\n        }\n      ]\n    });\n  }\n}\nfor (\n  var i$jscomp$inline_1528 = 0;\n  i$jscomp$inline_1528 < simpleEventPluginEvents.length;\n  i$jscomp$inline_1528++\n) {\n  var eventName$jscomp$inline_1529 =\n      simpleEventPluginEvents[i$jscomp$inline_1528],\n    domEventName$jscomp$inline_1530 =\n      eventName$jscomp$inline_1529.toLowerCase(),\n    capitalizedEvent$jscomp$inline_1531 =\n      eventName$jscomp$inline_1529[0].toUpperCase() +\n      eventName$jscomp$inline_1529.slice(1);\n  registerSimpleEvent(\n    domEventName$jscomp$inline_1530,\n    \"on\" + capitalizedEvent$jscomp$inline_1531\n  );\n}\nregisterSimpleEvent(ANIMATION_END, \"onAnimationEnd\");\nregisterSimpleEvent(ANIMATION_ITERATION, \"onAnimationIteration\");\nregisterSimpleEvent(ANIMATION_START, \"onAnimationStart\");\nregisterSimpleEvent(\"dblclick\", \"onDoubleClick\");\nregisterSimpleEvent(\"focusin\", \"onFocus\");\nregisterSimpleEvent(\"focusout\", \"onBlur\");\nregisterSimpleEvent(TRANSITION_RUN, \"onTransitionRun\");\nregisterSimpleEvent(TRANSITION_START, \"onTransitionStart\");\nregisterSimpleEvent(TRANSITION_CANCEL, \"onTransitionCancel\");\nregisterSimpleEvent(TRANSITION_END, \"onTransitionEnd\");\nregisterDirectEvent(\"onMouseEnter\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onMouseLeave\", [\"mouseout\", \"mouseover\"]);\nregisterDirectEvent(\"onPointerEnter\", [\"pointerout\", \"pointerover\"]);\nregisterDirectEvent(\"onPointerLeave\", [\"pointerout\", \"pointerover\"]);\nregisterTwoPhaseEvent(\n  \"onChange\",\n  \"change click focusin focusout input keydown keyup selectionchange\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onSelect\",\n  \"focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange\".split(\n    \" \"\n  )\n);\nregisterTwoPhaseEvent(\"onBeforeInput\", [\n  \"compositionend\",\n  \"keypress\",\n  \"textInput\",\n  \"paste\"\n]);\nregisterTwoPhaseEvent(\n  \"onCompositionEnd\",\n  \"compositionend focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionStart\",\n  \"compositionstart focusout keydown keypress keyup mousedown\".split(\" \")\n);\nregisterTwoPhaseEvent(\n  \"onCompositionUpdate\",\n  \"compositionupdate focusout keydown keypress keyup mousedown\".split(\" \")\n);\nvar mediaEventTypes =\n    \"abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange resize seeked seeking stalled suspend timeupdate volumechange waiting\".split(\n      \" \"\n    ),\n  nonDelegatedEvents = new Set(\n    \"beforetoggle cancel close invalid load scroll scrollend toggle\"\n      .split(\" \")\n      .concat(mediaEventTypes)\n  );\nfunction processDispatchQueue(dispatchQueue, eventSystemFlags) {\n  eventSystemFlags = 0 !== (eventSystemFlags & 4);\n  for (var i = 0; i < dispatchQueue.length; i++) {\n    var _dispatchQueue$i = dispatchQueue[i],\n      event = _dispatchQueue$i.event;\n    _dispatchQueue$i = _dispatchQueue$i.listeners;\n    a: {\n      var previousInstance = void 0;\n      if (eventSystemFlags)\n        for (\n          var i$jscomp$0 = _dispatchQueue$i.length - 1;\n          0 <= i$jscomp$0;\n          i$jscomp$0--\n        ) {\n          var _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0],\n            instance = _dispatchListeners$i.instance,\n            currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n      else\n        for (\n          i$jscomp$0 = 0;\n          i$jscomp$0 < _dispatchQueue$i.length;\n          i$jscomp$0++\n        ) {\n          _dispatchListeners$i = _dispatchQueue$i[i$jscomp$0];\n          instance = _dispatchListeners$i.instance;\n          currentTarget = _dispatchListeners$i.currentTarget;\n          _dispatchListeners$i = _dispatchListeners$i.listener;\n          if (instance !== previousInstance && event.isPropagationStopped())\n            break a;\n          previousInstance = _dispatchListeners$i;\n          event.currentTarget = currentTarget;\n          try {\n            previousInstance(event);\n          } catch (error) {\n            reportGlobalError(error);\n          }\n          event.currentTarget = null;\n          previousInstance = instance;\n        }\n    }\n  }\n}\nfunction listenToNonDelegatedEvent(domEventName, targetElement) {\n  var JSCompiler_inline_result = targetElement[internalEventHandlersKey];\n  void 0 === JSCompiler_inline_result &&\n    (JSCompiler_inline_result = targetElement[internalEventHandlersKey] =\n      new Set());\n  var listenerSetKey = domEventName + \"__bubble\";\n  JSCompiler_inline_result.has(listenerSetKey) ||\n    (addTrappedEventListener(targetElement, domEventName, 2, !1),\n    JSCompiler_inline_result.add(listenerSetKey));\n}\nfunction listenToNativeEvent(domEventName, isCapturePhaseListener, target) {\n  var eventSystemFlags = 0;\n  isCapturePhaseListener && (eventSystemFlags |= 4);\n  addTrappedEventListener(\n    target,\n    domEventName,\n    eventSystemFlags,\n    isCapturePhaseListener\n  );\n}\nvar listeningMarker = \"_reactListening\" + Math.random().toString(36).slice(2);\nfunction listenToAllSupportedEvents(rootContainerElement) {\n  if (!rootContainerElement[listeningMarker]) {\n    rootContainerElement[listeningMarker] = !0;\n    allNativeEvents.forEach(function (domEventName) {\n      \"selectionchange\" !== domEventName &&\n        (nonDelegatedEvents.has(domEventName) ||\n          listenToNativeEvent(domEventName, !1, rootContainerElement),\n        listenToNativeEvent(domEventName, !0, rootContainerElement));\n    });\n    var ownerDocument =\n      9 === rootContainerElement.nodeType\n        ? rootContainerElement\n        : rootContainerElement.ownerDocument;\n    null === ownerDocument ||\n      ownerDocument[listeningMarker] ||\n      ((ownerDocument[listeningMarker] = !0),\n      listenToNativeEvent(\"selectionchange\", !1, ownerDocument));\n  }\n}\nfunction addTrappedEventListener(\n  targetContainer,\n  domEventName,\n  eventSystemFlags,\n  isCapturePhaseListener\n) {\n  switch (getEventPriority(domEventName)) {\n    case 2:\n      var listenerWrapper = dispatchDiscreteEvent;\n      break;\n    case 8:\n      listenerWrapper = dispatchContinuousEvent;\n      break;\n    default:\n      listenerWrapper = dispatchEvent;\n  }\n  eventSystemFlags = listenerWrapper.bind(\n    null,\n    domEventName,\n    eventSystemFlags,\n    targetContainer\n  );\n  listenerWrapper = void 0;\n  !passiveBrowserEventsSupported ||\n    (\"touchstart\" !== domEventName &&\n      \"touchmove\" !== domEventName &&\n      \"wheel\" !== domEventName) ||\n    (listenerWrapper = !0);\n  isCapturePhaseListener\n    ? void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          capture: !0,\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !0)\n    : void 0 !== listenerWrapper\n      ? targetContainer.addEventListener(domEventName, eventSystemFlags, {\n          passive: listenerWrapper\n        })\n      : targetContainer.addEventListener(domEventName, eventSystemFlags, !1);\n}\nfunction dispatchEventForPluginEventSystem(\n  domEventName,\n  eventSystemFlags,\n  nativeEvent,\n  targetInst$jscomp$0,\n  targetContainer\n) {\n  var ancestorInst = targetInst$jscomp$0;\n  if (\n    0 === (eventSystemFlags & 1) &&\n    0 === (eventSystemFlags & 2) &&\n    null !== targetInst$jscomp$0\n  )\n    a: for (;;) {\n      if (null === targetInst$jscomp$0) return;\n      var nodeTag = targetInst$jscomp$0.tag;\n      if (3 === nodeTag || 4 === nodeTag) {\n        var container = targetInst$jscomp$0.stateNode.containerInfo;\n        if (container === targetContainer) break;\n        if (4 === nodeTag)\n          for (nodeTag = targetInst$jscomp$0.return; null !== nodeTag; ) {\n            var grandTag = nodeTag.tag;\n            if (\n              (3 === grandTag || 4 === grandTag) &&\n              nodeTag.stateNode.containerInfo === targetContainer\n            )\n              return;\n            nodeTag = nodeTag.return;\n          }\n        for (; null !== container; ) {\n          nodeTag = getClosestInstanceFromNode(container);\n          if (null === nodeTag) return;\n          grandTag = nodeTag.tag;\n          if (\n            5 === grandTag ||\n            6 === grandTag ||\n            26 === grandTag ||\n            27 === grandTag\n          ) {\n            targetInst$jscomp$0 = ancestorInst = nodeTag;\n            continue a;\n          }\n          container = container.parentNode;\n        }\n      }\n      targetInst$jscomp$0 = targetInst$jscomp$0.return;\n    }\n  batchedUpdates$1(function () {\n    var targetInst = ancestorInst,\n      nativeEventTarget = getEventTarget(nativeEvent),\n      dispatchQueue = [];\n    a: {\n      var reactName = topLevelEventsToReactNames.get(domEventName);\n      if (void 0 !== reactName) {\n        var SyntheticEventCtor = SyntheticEvent,\n          reactEventType = domEventName;\n        switch (domEventName) {\n          case \"keypress\":\n            if (0 === getEventCharCode(nativeEvent)) break a;\n          case \"keydown\":\n          case \"keyup\":\n            SyntheticEventCtor = SyntheticKeyboardEvent;\n            break;\n          case \"focusin\":\n            reactEventType = \"focus\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"focusout\":\n            reactEventType = \"blur\";\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"beforeblur\":\n          case \"afterblur\":\n            SyntheticEventCtor = SyntheticFocusEvent;\n            break;\n          case \"click\":\n            if (2 === nativeEvent.button) break a;\n          case \"auxclick\":\n          case \"dblclick\":\n          case \"mousedown\":\n          case \"mousemove\":\n          case \"mouseup\":\n          case \"mouseout\":\n          case \"mouseover\":\n          case \"contextmenu\":\n            SyntheticEventCtor = SyntheticMouseEvent;\n            break;\n          case \"drag\":\n          case \"dragend\":\n          case \"dragenter\":\n          case \"dragexit\":\n          case \"dragleave\":\n          case \"dragover\":\n          case \"dragstart\":\n          case \"drop\":\n            SyntheticEventCtor = SyntheticDragEvent;\n            break;\n          case \"touchcancel\":\n          case \"touchend\":\n          case \"touchmove\":\n          case \"touchstart\":\n            SyntheticEventCtor = SyntheticTouchEvent;\n            break;\n          case ANIMATION_END:\n          case ANIMATION_ITERATION:\n          case ANIMATION_START:\n            SyntheticEventCtor = SyntheticAnimationEvent;\n            break;\n          case TRANSITION_END:\n            SyntheticEventCtor = SyntheticTransitionEvent;\n            break;\n          case \"scroll\":\n          case \"scrollend\":\n            SyntheticEventCtor = SyntheticUIEvent;\n            break;\n          case \"wheel\":\n            SyntheticEventCtor = SyntheticWheelEvent;\n            break;\n          case \"copy\":\n          case \"cut\":\n          case \"paste\":\n            SyntheticEventCtor = SyntheticClipboardEvent;\n            break;\n          case \"gotpointercapture\":\n          case \"lostpointercapture\":\n          case \"pointercancel\":\n          case \"pointerdown\":\n          case \"pointermove\":\n          case \"pointerout\":\n          case \"pointerover\":\n          case \"pointerup\":\n            SyntheticEventCtor = SyntheticPointerEvent;\n            break;\n          case \"toggle\":\n          case \"beforetoggle\":\n            SyntheticEventCtor = SyntheticToggleEvent;\n        }\n        var inCapturePhase = 0 !== (eventSystemFlags & 4),\n          accumulateTargetOnly =\n            !inCapturePhase &&\n            (\"scroll\" === domEventName || \"scrollend\" === domEventName),\n          reactEventName = inCapturePhase\n            ? null !== reactName\n              ? reactName + \"Capture\"\n              : null\n            : reactName;\n        inCapturePhase = [];\n        for (\n          var instance = targetInst, lastHostComponent;\n          null !== instance;\n\n        ) {\n          var _instance = instance;\n          lastHostComponent = _instance.stateNode;\n          _instance = _instance.tag;\n          (5 !== _instance && 26 !== _instance && 27 !== _instance) ||\n            null === lastHostComponent ||\n            null === reactEventName ||\n            ((_instance = getListener(instance, reactEventName)),\n            null != _instance &&\n              inCapturePhase.push(\n                createDispatchListener(instance, _instance, lastHostComponent)\n              ));\n          if (accumulateTargetOnly) break;\n          instance = instance.return;\n        }\n        0 < inCapturePhase.length &&\n          ((reactName = new SyntheticEventCtor(\n            reactName,\n            reactEventType,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: reactName, listeners: inCapturePhase }));\n      }\n    }\n    if (0 === (eventSystemFlags & 7)) {\n      a: {\n        reactName =\n          \"mouseover\" === domEventName || \"pointerover\" === domEventName;\n        SyntheticEventCtor =\n          \"mouseout\" === domEventName || \"pointerout\" === domEventName;\n        if (\n          reactName &&\n          nativeEvent !== currentReplayingEvent &&\n          (reactEventType =\n            nativeEvent.relatedTarget || nativeEvent.fromElement) &&\n          (getClosestInstanceFromNode(reactEventType) ||\n            reactEventType[internalContainerInstanceKey])\n        )\n          break a;\n        if (SyntheticEventCtor || reactName) {\n          reactName =\n            nativeEventTarget.window === nativeEventTarget\n              ? nativeEventTarget\n              : (reactName = nativeEventTarget.ownerDocument)\n                ? reactName.defaultView || reactName.parentWindow\n                : window;\n          if (SyntheticEventCtor) {\n            if (\n              ((reactEventType =\n                nativeEvent.relatedTarget || nativeEvent.toElement),\n              (SyntheticEventCtor = targetInst),\n              (reactEventType = reactEventType\n                ? getClosestInstanceFromNode(reactEventType)\n                : null),\n              null !== reactEventType &&\n                ((accumulateTargetOnly =\n                  getNearestMountedFiber(reactEventType)),\n                (inCapturePhase = reactEventType.tag),\n                reactEventType !== accumulateTargetOnly ||\n                  (5 !== inCapturePhase &&\n                    27 !== inCapturePhase &&\n                    6 !== inCapturePhase)))\n            )\n              reactEventType = null;\n          } else (SyntheticEventCtor = null), (reactEventType = targetInst);\n          if (SyntheticEventCtor !== reactEventType) {\n            inCapturePhase = SyntheticMouseEvent;\n            _instance = \"onMouseLeave\";\n            reactEventName = \"onMouseEnter\";\n            instance = \"mouse\";\n            if (\"pointerout\" === domEventName || \"pointerover\" === domEventName)\n              (inCapturePhase = SyntheticPointerEvent),\n                (_instance = \"onPointerLeave\"),\n                (reactEventName = \"onPointerEnter\"),\n                (instance = \"pointer\");\n            accumulateTargetOnly =\n              null == SyntheticEventCtor\n                ? reactName\n                : getNodeFromInstance(SyntheticEventCtor);\n            lastHostComponent =\n              null == reactEventType\n                ? reactName\n                : getNodeFromInstance(reactEventType);\n            reactName = new inCapturePhase(\n              _instance,\n              instance + \"leave\",\n              SyntheticEventCtor,\n              nativeEvent,\n              nativeEventTarget\n            );\n            reactName.target = accumulateTargetOnly;\n            reactName.relatedTarget = lastHostComponent;\n            _instance = null;\n            getClosestInstanceFromNode(nativeEventTarget) === targetInst &&\n              ((inCapturePhase = new inCapturePhase(\n                reactEventName,\n                instance + \"enter\",\n                reactEventType,\n                nativeEvent,\n                nativeEventTarget\n              )),\n              (inCapturePhase.target = lastHostComponent),\n              (inCapturePhase.relatedTarget = accumulateTargetOnly),\n              (_instance = inCapturePhase));\n            accumulateTargetOnly = _instance;\n            if (SyntheticEventCtor && reactEventType)\n              b: {\n                inCapturePhase = SyntheticEventCtor;\n                reactEventName = reactEventType;\n                instance = 0;\n                for (\n                  lastHostComponent = inCapturePhase;\n                  lastHostComponent;\n                  lastHostComponent = getParent(lastHostComponent)\n                )\n                  instance++;\n                lastHostComponent = 0;\n                for (\n                  _instance = reactEventName;\n                  _instance;\n                  _instance = getParent(_instance)\n                )\n                  lastHostComponent++;\n                for (; 0 < instance - lastHostComponent; )\n                  (inCapturePhase = getParent(inCapturePhase)), instance--;\n                for (; 0 < lastHostComponent - instance; )\n                  (reactEventName = getParent(reactEventName)),\n                    lastHostComponent--;\n                for (; instance--; ) {\n                  if (\n                    inCapturePhase === reactEventName ||\n                    (null !== reactEventName &&\n                      inCapturePhase === reactEventName.alternate)\n                  )\n                    break b;\n                  inCapturePhase = getParent(inCapturePhase);\n                  reactEventName = getParent(reactEventName);\n                }\n                inCapturePhase = null;\n              }\n            else inCapturePhase = null;\n            null !== SyntheticEventCtor &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                reactName,\n                SyntheticEventCtor,\n                inCapturePhase,\n                !1\n              );\n            null !== reactEventType &&\n              null !== accumulateTargetOnly &&\n              accumulateEnterLeaveListenersForEvent(\n                dispatchQueue,\n                accumulateTargetOnly,\n                reactEventType,\n                inCapturePhase,\n                !0\n              );\n          }\n        }\n      }\n      a: {\n        reactName = targetInst ? getNodeFromInstance(targetInst) : window;\n        SyntheticEventCtor =\n          reactName.nodeName && reactName.nodeName.toLowerCase();\n        if (\n          \"select\" === SyntheticEventCtor ||\n          (\"input\" === SyntheticEventCtor && \"file\" === reactName.type)\n        )\n          var getTargetInstFunc = getTargetInstForChangeEvent;\n        else if (isTextInputElement(reactName))\n          if (isInputEventSupported)\n            getTargetInstFunc = getTargetInstForInputOrChangeEvent;\n          else {\n            getTargetInstFunc = getTargetInstForInputEventPolyfill;\n            var handleEventFunc = handleEventsForInputEventPolyfill;\n          }\n        else\n          (SyntheticEventCtor = reactName.nodeName),\n            !SyntheticEventCtor ||\n            \"input\" !== SyntheticEventCtor.toLowerCase() ||\n            (\"checkbox\" !== reactName.type && \"radio\" !== reactName.type)\n              ? targetInst &&\n                isCustomElement(targetInst.elementType) &&\n                (getTargetInstFunc = getTargetInstForChangeEvent)\n              : (getTargetInstFunc = getTargetInstForClickEvent);\n        if (\n          getTargetInstFunc &&\n          (getTargetInstFunc = getTargetInstFunc(domEventName, targetInst))\n        ) {\n          createAndAccumulateChangeEvent(\n            dispatchQueue,\n            getTargetInstFunc,\n            nativeEvent,\n            nativeEventTarget\n          );\n          break a;\n        }\n        handleEventFunc && handleEventFunc(domEventName, reactName, targetInst);\n        \"focusout\" === domEventName &&\n          targetInst &&\n          \"number\" === reactName.type &&\n          null != targetInst.memoizedProps.value &&\n          setDefaultValue(reactName, \"number\", reactName.value);\n      }\n      handleEventFunc = targetInst ? getNodeFromInstance(targetInst) : window;\n      switch (domEventName) {\n        case \"focusin\":\n          if (\n            isTextInputElement(handleEventFunc) ||\n            \"true\" === handleEventFunc.contentEditable\n          )\n            (activeElement = handleEventFunc),\n              (activeElementInst = targetInst),\n              (lastSelection = null);\n          break;\n        case \"focusout\":\n          lastSelection = activeElementInst = activeElement = null;\n          break;\n        case \"mousedown\":\n          mouseDown = !0;\n          break;\n        case \"contextmenu\":\n        case \"mouseup\":\n        case \"dragend\":\n          mouseDown = !1;\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n          break;\n        case \"selectionchange\":\n          if (skipSelectionChangeEvent) break;\n        case \"keydown\":\n        case \"keyup\":\n          constructSelectEvent(dispatchQueue, nativeEvent, nativeEventTarget);\n      }\n      var fallbackData;\n      if (canUseCompositionEvent)\n        b: {\n          switch (domEventName) {\n            case \"compositionstart\":\n              var eventType = \"onCompositionStart\";\n              break b;\n            case \"compositionend\":\n              eventType = \"onCompositionEnd\";\n              break b;\n            case \"compositionupdate\":\n              eventType = \"onCompositionUpdate\";\n              break b;\n          }\n          eventType = void 0;\n        }\n      else\n        isComposing\n          ? isFallbackCompositionEnd(domEventName, nativeEvent) &&\n            (eventType = \"onCompositionEnd\")\n          : \"keydown\" === domEventName &&\n            229 === nativeEvent.keyCode &&\n            (eventType = \"onCompositionStart\");\n      eventType &&\n        (useFallbackCompositionData &&\n          \"ko\" !== nativeEvent.locale &&\n          (isComposing || \"onCompositionStart\" !== eventType\n            ? \"onCompositionEnd\" === eventType &&\n              isComposing &&\n              (fallbackData = getData())\n            : ((root = nativeEventTarget),\n              (startText = \"value\" in root ? root.value : root.textContent),\n              (isComposing = !0))),\n        (handleEventFunc = accumulateTwoPhaseListeners(targetInst, eventType)),\n        0 < handleEventFunc.length &&\n          ((eventType = new SyntheticCompositionEvent(\n            eventType,\n            domEventName,\n            null,\n            nativeEvent,\n            nativeEventTarget\n          )),\n          dispatchQueue.push({ event: eventType, listeners: handleEventFunc }),\n          fallbackData\n            ? (eventType.data = fallbackData)\n            : ((fallbackData = getDataFromCustomEvent(nativeEvent)),\n              null !== fallbackData && (eventType.data = fallbackData))));\n      if (\n        (fallbackData = canUseTextInputEvent\n          ? getNativeBeforeInputChars(domEventName, nativeEvent)\n          : getFallbackBeforeInputChars(domEventName, nativeEvent))\n      )\n        (eventType = accumulateTwoPhaseListeners(targetInst, \"onBeforeInput\")),\n          0 < eventType.length &&\n            ((handleEventFunc = new SyntheticCompositionEvent(\n              \"onBeforeInput\",\n              \"beforeinput\",\n              null,\n              nativeEvent,\n              nativeEventTarget\n            )),\n            dispatchQueue.push({\n              event: handleEventFunc,\n              listeners: eventType\n            }),\n            (handleEventFunc.data = fallbackData));\n      extractEvents$1(\n        dispatchQueue,\n        domEventName,\n        targetInst,\n        nativeEvent,\n        nativeEventTarget\n      );\n    }\n    processDispatchQueue(dispatchQueue, eventSystemFlags);\n  });\n}\nfunction createDispatchListener(instance, listener, currentTarget) {\n  return {\n    instance: instance,\n    listener: listener,\n    currentTarget: currentTarget\n  };\n}\nfunction accumulateTwoPhaseListeners(targetFiber, reactName) {\n  for (\n    var captureName = reactName + \"Capture\", listeners = [];\n    null !== targetFiber;\n\n  ) {\n    var _instance2 = targetFiber,\n      stateNode = _instance2.stateNode;\n    _instance2 = _instance2.tag;\n    (5 !== _instance2 && 26 !== _instance2 && 27 !== _instance2) ||\n      null === stateNode ||\n      ((_instance2 = getListener(targetFiber, captureName)),\n      null != _instance2 &&\n        listeners.unshift(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ),\n      (_instance2 = getListener(targetFiber, reactName)),\n      null != _instance2 &&\n        listeners.push(\n          createDispatchListener(targetFiber, _instance2, stateNode)\n        ));\n    if (3 === targetFiber.tag) return listeners;\n    targetFiber = targetFiber.return;\n  }\n  return [];\n}\nfunction getParent(inst) {\n  if (null === inst) return null;\n  do inst = inst.return;\n  while (inst && 5 !== inst.tag && 27 !== inst.tag);\n  return inst ? inst : null;\n}\nfunction accumulateEnterLeaveListenersForEvent(\n  dispatchQueue,\n  event,\n  target,\n  common,\n  inCapturePhase\n) {\n  for (\n    var registrationName = event._reactName, listeners = [];\n    null !== target && target !== common;\n\n  ) {\n    var _instance3 = target,\n      alternate = _instance3.alternate,\n      stateNode = _instance3.stateNode;\n    _instance3 = _instance3.tag;\n    if (null !== alternate && alternate === common) break;\n    (5 !== _instance3 && 26 !== _instance3 && 27 !== _instance3) ||\n      null === stateNode ||\n      ((alternate = stateNode),\n      inCapturePhase\n        ? ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.unshift(\n              createDispatchListener(target, stateNode, alternate)\n            ))\n        : inCapturePhase ||\n          ((stateNode = getListener(target, registrationName)),\n          null != stateNode &&\n            listeners.push(\n              createDispatchListener(target, stateNode, alternate)\n            )));\n    target = target.return;\n  }\n  0 !== listeners.length &&\n    dispatchQueue.push({ event: event, listeners: listeners });\n}\nvar NORMALIZE_NEWLINES_REGEX = /\\r\\n?/g,\n  NORMALIZE_NULL_AND_REPLACEMENT_REGEX = /\\u0000|\\uFFFD/g;\nfunction normalizeMarkupForTextOrAttribute(markup) {\n  return (\"string\" === typeof markup ? markup : \"\" + markup)\n    .replace(NORMALIZE_NEWLINES_REGEX, \"\\n\")\n    .replace(NORMALIZE_NULL_AND_REPLACEMENT_REGEX, \"\");\n}\nfunction checkForUnmatchedText(serverText, clientText) {\n  clientText = normalizeMarkupForTextOrAttribute(clientText);\n  return normalizeMarkupForTextOrAttribute(serverText) === clientText ? !0 : !1;\n}\nfunction noop$1() {}\nfunction setProp(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"children\":\n      \"string\" === typeof value\n        ? \"body\" === tag ||\n          (\"textarea\" === tag && \"\" === value) ||\n          setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          \"body\" !== tag &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"className\":\n      setValueForKnownAttribute(domElement, \"class\", value);\n      break;\n    case \"tabIndex\":\n      setValueForKnownAttribute(domElement, \"tabindex\", value);\n      break;\n    case \"dir\":\n    case \"role\":\n    case \"viewBox\":\n    case \"width\":\n    case \"height\":\n      setValueForKnownAttribute(domElement, key, value);\n      break;\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"data\":\n      if (\"object\" !== tag) {\n        setValueForKnownAttribute(domElement, \"data\", value);\n        break;\n      }\n    case \"src\":\n    case \"href\":\n      if (\"\" === value && (\"a\" !== tag || \"href\" !== key)) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"action\":\n    case \"formAction\":\n      if (\"function\" === typeof value) {\n        domElement.setAttribute(\n          key,\n          \"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')\"\n        );\n        break;\n      } else\n        \"function\" === typeof prevValue &&\n          (\"formAction\" === key\n            ? (\"input\" !== tag &&\n                setProp(domElement, tag, \"name\", props.name, props, null),\n              setProp(\n                domElement,\n                tag,\n                \"formEncType\",\n                props.formEncType,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formMethod\",\n                props.formMethod,\n                props,\n                null\n              ),\n              setProp(\n                domElement,\n                tag,\n                \"formTarget\",\n                props.formTarget,\n                props,\n                null\n              ))\n            : (setProp(domElement, tag, \"encType\", props.encType, props, null),\n              setProp(domElement, tag, \"method\", props.method, props, null),\n              setProp(domElement, tag, \"target\", props.target, props, null)));\n      if (\n        null == value ||\n        \"symbol\" === typeof value ||\n        \"boolean\" === typeof value\n      ) {\n        domElement.removeAttribute(key);\n        break;\n      }\n      value = sanitizeURL(\"\" + value);\n      domElement.setAttribute(key, value);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"multiple\":\n      domElement.multiple =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"muted\":\n      domElement.muted =\n        value && \"function\" !== typeof value && \"symbol\" !== typeof value;\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"defaultValue\":\n    case \"defaultChecked\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"autoFocus\":\n      break;\n    case \"xlinkHref\":\n      if (\n        null == value ||\n        \"function\" === typeof value ||\n        \"boolean\" === typeof value ||\n        \"symbol\" === typeof value\n      ) {\n        domElement.removeAttribute(\"xlink:href\");\n        break;\n      }\n      key = sanitizeURL(\"\" + value);\n      domElement.setAttributeNS(\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:href\",\n        key\n      );\n      break;\n    case \"contentEditable\":\n    case \"spellCheck\":\n    case \"draggable\":\n    case \"value\":\n    case \"autoReverse\":\n    case \"externalResourcesRequired\":\n    case \"focusable\":\n    case \"preserveAlpha\":\n      null != value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\" + value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"inert\":\n    case \"allowFullScreen\":\n    case \"async\":\n    case \"autoPlay\":\n    case \"controls\":\n    case \"default\":\n    case \"defer\":\n    case \"disabled\":\n    case \"disablePictureInPicture\":\n    case \"disableRemotePlayback\":\n    case \"formNoValidate\":\n    case \"hidden\":\n    case \"loop\":\n    case \"noModule\":\n    case \"noValidate\":\n    case \"open\":\n    case \"playsInline\":\n    case \"readOnly\":\n    case \"required\":\n    case \"reversed\":\n    case \"scoped\":\n    case \"seamless\":\n    case \"itemScope\":\n      value && \"function\" !== typeof value && \"symbol\" !== typeof value\n        ? domElement.setAttribute(key, \"\")\n        : domElement.removeAttribute(key);\n      break;\n    case \"capture\":\n    case \"download\":\n      !0 === value\n        ? domElement.setAttribute(key, \"\")\n        : !1 !== value &&\n            null != value &&\n            \"function\" !== typeof value &&\n            \"symbol\" !== typeof value\n          ? domElement.setAttribute(key, value)\n          : domElement.removeAttribute(key);\n      break;\n    case \"cols\":\n    case \"rows\":\n    case \"size\":\n    case \"span\":\n      null != value &&\n      \"function\" !== typeof value &&\n      \"symbol\" !== typeof value &&\n      !isNaN(value) &&\n      1 <= value\n        ? domElement.setAttribute(key, value)\n        : domElement.removeAttribute(key);\n      break;\n    case \"rowSpan\":\n    case \"start\":\n      null == value ||\n      \"function\" === typeof value ||\n      \"symbol\" === typeof value ||\n      isNaN(value)\n        ? domElement.removeAttribute(key)\n        : domElement.setAttribute(key, value);\n      break;\n    case \"popover\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      setValueForAttribute(domElement, \"popover\", value);\n      break;\n    case \"xlinkActuate\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:actuate\",\n        value\n      );\n      break;\n    case \"xlinkArcrole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:arcrole\",\n        value\n      );\n      break;\n    case \"xlinkRole\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:role\",\n        value\n      );\n      break;\n    case \"xlinkShow\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:show\",\n        value\n      );\n      break;\n    case \"xlinkTitle\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:title\",\n        value\n      );\n      break;\n    case \"xlinkType\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/1999/xlink\",\n        \"xlink:type\",\n        value\n      );\n      break;\n    case \"xmlBase\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:base\",\n        value\n      );\n      break;\n    case \"xmlLang\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:lang\",\n        value\n      );\n      break;\n    case \"xmlSpace\":\n      setValueForNamespacedAttribute(\n        domElement,\n        \"http://www.w3.org/XML/1998/namespace\",\n        \"xml:space\",\n        value\n      );\n      break;\n    case \"is\":\n      setValueForAttribute(domElement, \"is\", value);\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (\n        !(2 < key.length) ||\n        (\"o\" !== key[0] && \"O\" !== key[0]) ||\n        (\"n\" !== key[1] && \"N\" !== key[1])\n      )\n        (key = aliases.get(key) || key),\n          setValueForAttribute(domElement, key, value);\n  }\n}\nfunction setPropOnCustomElement(domElement, tag, key, value, props, prevValue) {\n  switch (key) {\n    case \"style\":\n      setValueForStyles(domElement, value, prevValue);\n      break;\n    case \"dangerouslySetInnerHTML\":\n      if (null != value) {\n        if (\"object\" !== typeof value || !(\"__html\" in value))\n          throw Error(formatProdErrorMessage(61));\n        key = value.__html;\n        if (null != key) {\n          if (null != props.children) throw Error(formatProdErrorMessage(60));\n          domElement.innerHTML = key;\n        }\n      }\n      break;\n    case \"children\":\n      \"string\" === typeof value\n        ? setTextContent(domElement, value)\n        : (\"number\" === typeof value || \"bigint\" === typeof value) &&\n          setTextContent(domElement, \"\" + value);\n      break;\n    case \"onScroll\":\n      null != value && listenToNonDelegatedEvent(\"scroll\", domElement);\n      break;\n    case \"onScrollEnd\":\n      null != value && listenToNonDelegatedEvent(\"scrollend\", domElement);\n      break;\n    case \"onClick\":\n      null != value && (domElement.onclick = noop$1);\n      break;\n    case \"suppressContentEditableWarning\":\n    case \"suppressHydrationWarning\":\n    case \"innerHTML\":\n    case \"ref\":\n      break;\n    case \"innerText\":\n    case \"textContent\":\n      break;\n    default:\n      if (!registrationNameDependencies.hasOwnProperty(key))\n        a: {\n          if (\n            \"o\" === key[0] &&\n            \"n\" === key[1] &&\n            ((props = key.endsWith(\"Capture\")),\n            (tag = key.slice(2, props ? key.length - 7 : void 0)),\n            (prevValue = domElement[internalPropsKey] || null),\n            (prevValue = null != prevValue ? prevValue[key] : null),\n            \"function\" === typeof prevValue &&\n              domElement.removeEventListener(tag, prevValue, props),\n            \"function\" === typeof value)\n          ) {\n            \"function\" !== typeof prevValue &&\n              null !== prevValue &&\n              (key in domElement\n                ? (domElement[key] = null)\n                : domElement.hasAttribute(key) &&\n                  domElement.removeAttribute(key));\n            domElement.addEventListener(tag, value, props);\n            break a;\n          }\n          key in domElement\n            ? (domElement[key] = value)\n            : !0 === value\n              ? domElement.setAttribute(key, \"\")\n              : setValueForAttribute(domElement, key, value);\n        }\n  }\n}\nfunction setInitialProperties(domElement, tag, props) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"img\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      var hasSrc = !1,\n        hasSrcSet = !1,\n        propKey;\n      for (propKey in props)\n        if (props.hasOwnProperty(propKey)) {\n          var propValue = props[propKey];\n          if (null != propValue)\n            switch (propKey) {\n              case \"src\":\n                hasSrc = !0;\n                break;\n              case \"srcSet\":\n                hasSrcSet = !0;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                throw Error(formatProdErrorMessage(137, tag));\n              default:\n                setProp(domElement, tag, propKey, propValue, props, null);\n            }\n        }\n      hasSrcSet &&\n        setProp(domElement, tag, \"srcSet\", props.srcSet, props, null);\n      hasSrc && setProp(domElement, tag, \"src\", props.src, props, null);\n      return;\n    case \"input\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      var defaultValue = (propKey = propValue = hasSrcSet = null),\n        checked = null,\n        defaultChecked = null;\n      for (hasSrc in props)\n        if (props.hasOwnProperty(hasSrc)) {\n          var propValue$188 = props[hasSrc];\n          if (null != propValue$188)\n            switch (hasSrc) {\n              case \"name\":\n                hasSrcSet = propValue$188;\n                break;\n              case \"type\":\n                propValue = propValue$188;\n                break;\n              case \"checked\":\n                checked = propValue$188;\n                break;\n              case \"defaultChecked\":\n                defaultChecked = propValue$188;\n                break;\n              case \"value\":\n                propKey = propValue$188;\n                break;\n              case \"defaultValue\":\n                defaultValue = propValue$188;\n                break;\n              case \"children\":\n              case \"dangerouslySetInnerHTML\":\n                if (null != propValue$188)\n                  throw Error(formatProdErrorMessage(137, tag));\n                break;\n              default:\n                setProp(domElement, tag, hasSrc, propValue$188, props, null);\n            }\n        }\n      initInput(\n        domElement,\n        propKey,\n        defaultValue,\n        checked,\n        defaultChecked,\n        propValue,\n        hasSrcSet,\n        !1\n      );\n      track(domElement);\n      return;\n    case \"select\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      hasSrc = propValue = propKey = null;\n      for (hasSrcSet in props)\n        if (\n          props.hasOwnProperty(hasSrcSet) &&\n          ((defaultValue = props[hasSrcSet]), null != defaultValue)\n        )\n          switch (hasSrcSet) {\n            case \"value\":\n              propKey = defaultValue;\n              break;\n            case \"defaultValue\":\n              propValue = defaultValue;\n              break;\n            case \"multiple\":\n              hasSrc = defaultValue;\n            default:\n              setProp(domElement, tag, hasSrcSet, defaultValue, props, null);\n          }\n      tag = propKey;\n      props = propValue;\n      domElement.multiple = !!hasSrc;\n      null != tag\n        ? updateOptions(domElement, !!hasSrc, tag, !1)\n        : null != props && updateOptions(domElement, !!hasSrc, props, !0);\n      return;\n    case \"textarea\":\n      listenToNonDelegatedEvent(\"invalid\", domElement);\n      propKey = hasSrcSet = hasSrc = null;\n      for (propValue in props)\n        if (\n          props.hasOwnProperty(propValue) &&\n          ((defaultValue = props[propValue]), null != defaultValue)\n        )\n          switch (propValue) {\n            case \"value\":\n              hasSrc = defaultValue;\n              break;\n            case \"defaultValue\":\n              hasSrcSet = defaultValue;\n              break;\n            case \"children\":\n              propKey = defaultValue;\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != defaultValue) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              setProp(domElement, tag, propValue, defaultValue, props, null);\n          }\n      initTextarea(domElement, hasSrc, hasSrcSet, propKey);\n      track(domElement);\n      return;\n    case \"option\":\n      for (checked in props)\n        if (\n          props.hasOwnProperty(checked) &&\n          ((hasSrc = props[checked]), null != hasSrc)\n        )\n          switch (checked) {\n            case \"selected\":\n              domElement.selected =\n                hasSrc &&\n                \"function\" !== typeof hasSrc &&\n                \"symbol\" !== typeof hasSrc;\n              break;\n            default:\n              setProp(domElement, tag, checked, hasSrc, props, null);\n          }\n      return;\n    case \"dialog\":\n      listenToNonDelegatedEvent(\"beforetoggle\", domElement);\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      listenToNonDelegatedEvent(\"cancel\", domElement);\n      listenToNonDelegatedEvent(\"close\", domElement);\n      break;\n    case \"iframe\":\n    case \"object\":\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"video\":\n    case \"audio\":\n      for (hasSrc = 0; hasSrc < mediaEventTypes.length; hasSrc++)\n        listenToNonDelegatedEvent(mediaEventTypes[hasSrc], domElement);\n      break;\n    case \"image\":\n      listenToNonDelegatedEvent(\"error\", domElement);\n      listenToNonDelegatedEvent(\"load\", domElement);\n      break;\n    case \"details\":\n      listenToNonDelegatedEvent(\"toggle\", domElement);\n      break;\n    case \"embed\":\n    case \"source\":\n    case \"link\":\n      listenToNonDelegatedEvent(\"error\", domElement),\n        listenToNonDelegatedEvent(\"load\", domElement);\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (defaultChecked in props)\n        if (\n          props.hasOwnProperty(defaultChecked) &&\n          ((hasSrc = props[defaultChecked]), null != hasSrc)\n        )\n          switch (defaultChecked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              throw Error(formatProdErrorMessage(137, tag));\n            default:\n              setProp(domElement, tag, defaultChecked, hasSrc, props, null);\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (propValue$188 in props)\n          props.hasOwnProperty(propValue$188) &&\n            ((hasSrc = props[propValue$188]),\n            void 0 !== hasSrc &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propValue$188,\n                hasSrc,\n                props,\n                void 0\n              ));\n        return;\n      }\n  }\n  for (defaultValue in props)\n    props.hasOwnProperty(defaultValue) &&\n      ((hasSrc = props[defaultValue]),\n      null != hasSrc &&\n        setProp(domElement, tag, defaultValue, hasSrc, props, null));\n}\nfunction updateProperties(domElement, tag, lastProps, nextProps) {\n  switch (tag) {\n    case \"div\":\n    case \"span\":\n    case \"svg\":\n    case \"path\":\n    case \"a\":\n    case \"g\":\n    case \"p\":\n    case \"li\":\n      break;\n    case \"input\":\n      var name = null,\n        type = null,\n        value = null,\n        defaultValue = null,\n        lastDefaultValue = null,\n        checked = null,\n        defaultChecked = null;\n      for (propKey in lastProps) {\n        var lastProp = lastProps[propKey];\n        if (lastProps.hasOwnProperty(propKey) && null != lastProp)\n          switch (propKey) {\n            case \"checked\":\n              break;\n            case \"value\":\n              break;\n            case \"defaultValue\":\n              lastDefaultValue = lastProp;\n            default:\n              nextProps.hasOwnProperty(propKey) ||\n                setProp(domElement, tag, propKey, null, nextProps, lastProp);\n          }\n      }\n      for (var propKey$205 in nextProps) {\n        var propKey = nextProps[propKey$205];\n        lastProp = lastProps[propKey$205];\n        if (\n          nextProps.hasOwnProperty(propKey$205) &&\n          (null != propKey || null != lastProp)\n        )\n          switch (propKey$205) {\n            case \"type\":\n              type = propKey;\n              break;\n            case \"name\":\n              name = propKey;\n              break;\n            case \"checked\":\n              checked = propKey;\n              break;\n            case \"defaultChecked\":\n              defaultChecked = propKey;\n              break;\n            case \"value\":\n              value = propKey;\n              break;\n            case \"defaultValue\":\n              defaultValue = propKey;\n              break;\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              propKey !== lastProp &&\n                setProp(\n                  domElement,\n                  tag,\n                  propKey$205,\n                  propKey,\n                  nextProps,\n                  lastProp\n                );\n          }\n      }\n      updateInput(\n        domElement,\n        value,\n        defaultValue,\n        lastDefaultValue,\n        checked,\n        defaultChecked,\n        type,\n        name\n      );\n      return;\n    case \"select\":\n      propKey = value = defaultValue = propKey$205 = null;\n      for (type in lastProps)\n        if (\n          ((lastDefaultValue = lastProps[type]),\n          lastProps.hasOwnProperty(type) && null != lastDefaultValue)\n        )\n          switch (type) {\n            case \"value\":\n              break;\n            case \"multiple\":\n              propKey = lastDefaultValue;\n            default:\n              nextProps.hasOwnProperty(type) ||\n                setProp(\n                  domElement,\n                  tag,\n                  type,\n                  null,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      for (name in nextProps)\n        if (\n          ((type = nextProps[name]),\n          (lastDefaultValue = lastProps[name]),\n          nextProps.hasOwnProperty(name) &&\n            (null != type || null != lastDefaultValue))\n        )\n          switch (name) {\n            case \"value\":\n              propKey$205 = type;\n              break;\n            case \"defaultValue\":\n              defaultValue = type;\n              break;\n            case \"multiple\":\n              value = type;\n            default:\n              type !== lastDefaultValue &&\n                setProp(\n                  domElement,\n                  tag,\n                  name,\n                  type,\n                  nextProps,\n                  lastDefaultValue\n                );\n          }\n      tag = defaultValue;\n      lastProps = value;\n      nextProps = propKey;\n      null != propKey$205\n        ? updateOptions(domElement, !!lastProps, propKey$205, !1)\n        : !!nextProps !== !!lastProps &&\n          (null != tag\n            ? updateOptions(domElement, !!lastProps, tag, !0)\n            : updateOptions(domElement, !!lastProps, lastProps ? [] : \"\", !1));\n      return;\n    case \"textarea\":\n      propKey = propKey$205 = null;\n      for (defaultValue in lastProps)\n        if (\n          ((name = lastProps[defaultValue]),\n          lastProps.hasOwnProperty(defaultValue) &&\n            null != name &&\n            !nextProps.hasOwnProperty(defaultValue))\n        )\n          switch (defaultValue) {\n            case \"value\":\n              break;\n            case \"children\":\n              break;\n            default:\n              setProp(domElement, tag, defaultValue, null, nextProps, name);\n          }\n      for (value in nextProps)\n        if (\n          ((name = nextProps[value]),\n          (type = lastProps[value]),\n          nextProps.hasOwnProperty(value) && (null != name || null != type))\n        )\n          switch (value) {\n            case \"value\":\n              propKey$205 = name;\n              break;\n            case \"defaultValue\":\n              propKey = name;\n              break;\n            case \"children\":\n              break;\n            case \"dangerouslySetInnerHTML\":\n              if (null != name) throw Error(formatProdErrorMessage(91));\n              break;\n            default:\n              name !== type &&\n                setProp(domElement, tag, value, name, nextProps, type);\n          }\n      updateTextarea(domElement, propKey$205, propKey);\n      return;\n    case \"option\":\n      for (var propKey$221 in lastProps)\n        if (\n          ((propKey$205 = lastProps[propKey$221]),\n          lastProps.hasOwnProperty(propKey$221) &&\n            null != propKey$205 &&\n            !nextProps.hasOwnProperty(propKey$221))\n        )\n          switch (propKey$221) {\n            case \"selected\":\n              domElement.selected = !1;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                propKey$221,\n                null,\n                nextProps,\n                propKey$205\n              );\n          }\n      for (lastDefaultValue in nextProps)\n        if (\n          ((propKey$205 = nextProps[lastDefaultValue]),\n          (propKey = lastProps[lastDefaultValue]),\n          nextProps.hasOwnProperty(lastDefaultValue) &&\n            propKey$205 !== propKey &&\n            (null != propKey$205 || null != propKey))\n        )\n          switch (lastDefaultValue) {\n            case \"selected\":\n              domElement.selected =\n                propKey$205 &&\n                \"function\" !== typeof propKey$205 &&\n                \"symbol\" !== typeof propKey$205;\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                lastDefaultValue,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    case \"img\":\n    case \"link\":\n    case \"area\":\n    case \"base\":\n    case \"br\":\n    case \"col\":\n    case \"embed\":\n    case \"hr\":\n    case \"keygen\":\n    case \"meta\":\n    case \"param\":\n    case \"source\":\n    case \"track\":\n    case \"wbr\":\n    case \"menuitem\":\n      for (var propKey$226 in lastProps)\n        (propKey$205 = lastProps[propKey$226]),\n          lastProps.hasOwnProperty(propKey$226) &&\n            null != propKey$205 &&\n            !nextProps.hasOwnProperty(propKey$226) &&\n            setProp(domElement, tag, propKey$226, null, nextProps, propKey$205);\n      for (checked in nextProps)\n        if (\n          ((propKey$205 = nextProps[checked]),\n          (propKey = lastProps[checked]),\n          nextProps.hasOwnProperty(checked) &&\n            propKey$205 !== propKey &&\n            (null != propKey$205 || null != propKey))\n        )\n          switch (checked) {\n            case \"children\":\n            case \"dangerouslySetInnerHTML\":\n              if (null != propKey$205)\n                throw Error(formatProdErrorMessage(137, tag));\n              break;\n            default:\n              setProp(\n                domElement,\n                tag,\n                checked,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n          }\n      return;\n    default:\n      if (isCustomElement(tag)) {\n        for (var propKey$231 in lastProps)\n          (propKey$205 = lastProps[propKey$231]),\n            lastProps.hasOwnProperty(propKey$231) &&\n              void 0 !== propKey$205 &&\n              !nextProps.hasOwnProperty(propKey$231) &&\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                propKey$231,\n                void 0,\n                nextProps,\n                propKey$205\n              );\n        for (defaultChecked in nextProps)\n          (propKey$205 = nextProps[defaultChecked]),\n            (propKey = lastProps[defaultChecked]),\n            !nextProps.hasOwnProperty(defaultChecked) ||\n              propKey$205 === propKey ||\n              (void 0 === propKey$205 && void 0 === propKey) ||\n              setPropOnCustomElement(\n                domElement,\n                tag,\n                defaultChecked,\n                propKey$205,\n                nextProps,\n                propKey\n              );\n        return;\n      }\n  }\n  for (var propKey$236 in lastProps)\n    (propKey$205 = lastProps[propKey$236]),\n      lastProps.hasOwnProperty(propKey$236) &&\n        null != propKey$205 &&\n        !nextProps.hasOwnProperty(propKey$236) &&\n        setProp(domElement, tag, propKey$236, null, nextProps, propKey$205);\n  for (lastProp in nextProps)\n    (propKey$205 = nextProps[lastProp]),\n      (propKey = lastProps[lastProp]),\n      !nextProps.hasOwnProperty(lastProp) ||\n        propKey$205 === propKey ||\n        (null == propKey$205 && null == propKey) ||\n        setProp(domElement, tag, lastProp, propKey$205, nextProps, propKey);\n}\nvar eventsEnabled = null,\n  selectionInformation = null;\nfunction getOwnerDocumentFromRootContainer(rootContainerElement) {\n  return 9 === rootContainerElement.nodeType\n    ? rootContainerElement\n    : rootContainerElement.ownerDocument;\n}\nfunction getOwnHostContext(namespaceURI) {\n  switch (namespaceURI) {\n    case \"http://www.w3.org/2000/svg\":\n      return 1;\n    case \"http://www.w3.org/1998/Math/MathML\":\n      return 2;\n    default:\n      return 0;\n  }\n}\nfunction getChildHostContextProd(parentNamespace, type) {\n  if (0 === parentNamespace)\n    switch (type) {\n      case \"svg\":\n        return 1;\n      case \"math\":\n        return 2;\n      default:\n        return 0;\n    }\n  return 1 === parentNamespace && \"foreignObject\" === type\n    ? 0\n    : parentNamespace;\n}\nfunction shouldSetTextContent(type, props) {\n  return (\n    \"textarea\" === type ||\n    \"noscript\" === type ||\n    \"string\" === typeof props.children ||\n    \"number\" === typeof props.children ||\n    \"bigint\" === typeof props.children ||\n    (\"object\" === typeof props.dangerouslySetInnerHTML &&\n      null !== props.dangerouslySetInnerHTML &&\n      null != props.dangerouslySetInnerHTML.__html)\n  );\n}\nvar currentPopstateTransitionEvent = null;\nfunction shouldAttemptEagerTransition() {\n  var event = window.event;\n  if (event && \"popstate\" === event.type) {\n    if (event === currentPopstateTransitionEvent) return !1;\n    currentPopstateTransitionEvent = event;\n    return !0;\n  }\n  currentPopstateTransitionEvent = null;\n  return !1;\n}\nvar scheduleTimeout = \"function\" === typeof setTimeout ? setTimeout : void 0,\n  cancelTimeout = \"function\" === typeof clearTimeout ? clearTimeout : void 0,\n  localPromise = \"function\" === typeof Promise ? Promise : void 0,\n  scheduleMicrotask =\n    \"function\" === typeof queueMicrotask\n      ? queueMicrotask\n      : \"undefined\" !== typeof localPromise\n        ? function (callback) {\n            return localPromise\n              .resolve(null)\n              .then(callback)\n              .catch(handleErrorInNextTick);\n          }\n        : scheduleTimeout;\nfunction handleErrorInNextTick(error) {\n  setTimeout(function () {\n    throw error;\n  });\n}\nfunction isSingletonScope(type) {\n  return \"head\" === type;\n}\nfunction clearSuspenseBoundary(parentInstance, suspenseInstance) {\n  var node = suspenseInstance,\n    possiblePreambleContribution = 0,\n    depth = 0;\n  do {\n    var nextNode = node.nextSibling;\n    parentInstance.removeChild(node);\n    if (nextNode && 8 === nextNode.nodeType)\n      if (((node = nextNode.data), \"/$\" === node)) {\n        if (\n          0 < possiblePreambleContribution &&\n          8 > possiblePreambleContribution\n        ) {\n          node = possiblePreambleContribution;\n          var ownerDocument = parentInstance.ownerDocument;\n          node & 1 && releaseSingletonInstance(ownerDocument.documentElement);\n          node & 2 && releaseSingletonInstance(ownerDocument.body);\n          if (node & 4)\n            for (\n              node = ownerDocument.head,\n                releaseSingletonInstance(node),\n                ownerDocument = node.firstChild;\n              ownerDocument;\n\n            ) {\n              var nextNode$jscomp$0 = ownerDocument.nextSibling,\n                nodeName = ownerDocument.nodeName;\n              ownerDocument[internalHoistableMarker] ||\n                \"SCRIPT\" === nodeName ||\n                \"STYLE\" === nodeName ||\n                (\"LINK\" === nodeName &&\n                  \"stylesheet\" === ownerDocument.rel.toLowerCase()) ||\n                node.removeChild(ownerDocument);\n              ownerDocument = nextNode$jscomp$0;\n            }\n        }\n        if (0 === depth) {\n          parentInstance.removeChild(nextNode);\n          retryIfBlockedOn(suspenseInstance);\n          return;\n        }\n        depth--;\n      } else\n        \"$\" === node || \"$?\" === node || \"$!\" === node\n          ? depth++\n          : (possiblePreambleContribution = node.charCodeAt(0) - 48);\n    else possiblePreambleContribution = 0;\n    node = nextNode;\n  } while (node);\n  retryIfBlockedOn(suspenseInstance);\n}\nfunction clearContainerSparingly(container) {\n  var nextNode = container.firstChild;\n  nextNode && 10 === nextNode.nodeType && (nextNode = nextNode.nextSibling);\n  for (; nextNode; ) {\n    var node = nextNode;\n    nextNode = nextNode.nextSibling;\n    switch (node.nodeName) {\n      case \"HTML\":\n      case \"HEAD\":\n      case \"BODY\":\n        clearContainerSparingly(node);\n        detachDeletedInstance(node);\n        continue;\n      case \"SCRIPT\":\n      case \"STYLE\":\n        continue;\n      case \"LINK\":\n        if (\"stylesheet\" === node.rel.toLowerCase()) continue;\n    }\n    container.removeChild(node);\n  }\n}\nfunction canHydrateInstance(instance, type, props, inRootOrSingleton) {\n  for (; 1 === instance.nodeType; ) {\n    var anyProps = props;\n    if (instance.nodeName.toLowerCase() !== type.toLowerCase()) {\n      if (\n        !inRootOrSingleton &&\n        (\"INPUT\" !== instance.nodeName || \"hidden\" !== instance.type)\n      )\n        break;\n    } else if (!inRootOrSingleton)\n      if (\"input\" === type && \"hidden\" === instance.type) {\n        var name = null == anyProps.name ? null : \"\" + anyProps.name;\n        if (\n          \"hidden\" === anyProps.type &&\n          instance.getAttribute(\"name\") === name\n        )\n          return instance;\n      } else return instance;\n    else if (!instance[internalHoistableMarker])\n      switch (type) {\n        case \"meta\":\n          if (!instance.hasAttribute(\"itemprop\")) break;\n          return instance;\n        case \"link\":\n          name = instance.getAttribute(\"rel\");\n          if (\"stylesheet\" === name && instance.hasAttribute(\"data-precedence\"))\n            break;\n          else if (\n            name !== anyProps.rel ||\n            instance.getAttribute(\"href\") !==\n              (null == anyProps.href || \"\" === anyProps.href\n                ? null\n                : anyProps.href) ||\n            instance.getAttribute(\"crossorigin\") !==\n              (null == anyProps.crossOrigin ? null : anyProps.crossOrigin) ||\n            instance.getAttribute(\"title\") !==\n              (null == anyProps.title ? null : anyProps.title)\n          )\n            break;\n          return instance;\n        case \"style\":\n          if (instance.hasAttribute(\"data-precedence\")) break;\n          return instance;\n        case \"script\":\n          name = instance.getAttribute(\"src\");\n          if (\n            (name !== (null == anyProps.src ? null : anyProps.src) ||\n              instance.getAttribute(\"type\") !==\n                (null == anyProps.type ? null : anyProps.type) ||\n              instance.getAttribute(\"crossorigin\") !==\n                (null == anyProps.crossOrigin ? null : anyProps.crossOrigin)) &&\n            name &&\n            instance.hasAttribute(\"async\") &&\n            !instance.hasAttribute(\"itemprop\")\n          )\n            break;\n          return instance;\n        default:\n          return instance;\n      }\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) break;\n  }\n  return null;\n}\nfunction canHydrateTextInstance(instance, text, inRootOrSingleton) {\n  if (\"\" === text) return null;\n  for (; 3 !== instance.nodeType; ) {\n    if (\n      (1 !== instance.nodeType ||\n        \"INPUT\" !== instance.nodeName ||\n        \"hidden\" !== instance.type) &&\n      !inRootOrSingleton\n    )\n      return null;\n    instance = getNextHydratable(instance.nextSibling);\n    if (null === instance) return null;\n  }\n  return instance;\n}\nfunction isSuspenseInstanceFallback(instance) {\n  return (\n    \"$!\" === instance.data ||\n    (\"$?\" === instance.data && \"complete\" === instance.ownerDocument.readyState)\n  );\n}\nfunction registerSuspenseInstanceRetry(instance, callback) {\n  var ownerDocument = instance.ownerDocument;\n  if (\"$?\" !== instance.data || \"complete\" === ownerDocument.readyState)\n    callback();\n  else {\n    var listener = function () {\n      callback();\n      ownerDocument.removeEventListener(\"DOMContentLoaded\", listener);\n    };\n    ownerDocument.addEventListener(\"DOMContentLoaded\", listener);\n    instance._reactRetry = listener;\n  }\n}\nfunction getNextHydratable(node) {\n  for (; null != node; node = node.nextSibling) {\n    var nodeType = node.nodeType;\n    if (1 === nodeType || 3 === nodeType) break;\n    if (8 === nodeType) {\n      nodeType = node.data;\n      if (\n        \"$\" === nodeType ||\n        \"$!\" === nodeType ||\n        \"$?\" === nodeType ||\n        \"F!\" === nodeType ||\n        \"F\" === nodeType\n      )\n        break;\n      if (\"/$\" === nodeType) return null;\n    }\n  }\n  return node;\n}\nvar previousHydratableOnEnteringScopedSingleton = null;\nfunction getParentSuspenseInstance(targetInstance) {\n  targetInstance = targetInstance.previousSibling;\n  for (var depth = 0; targetInstance; ) {\n    if (8 === targetInstance.nodeType) {\n      var data = targetInstance.data;\n      if (\"$\" === data || \"$!\" === data || \"$?\" === data) {\n        if (0 === depth) return targetInstance;\n        depth--;\n      } else \"/$\" === data && depth++;\n    }\n    targetInstance = targetInstance.previousSibling;\n  }\n  return null;\n}\nfunction resolveSingletonInstance(type, props, rootContainerInstance) {\n  props = getOwnerDocumentFromRootContainer(rootContainerInstance);\n  switch (type) {\n    case \"html\":\n      type = props.documentElement;\n      if (!type) throw Error(formatProdErrorMessage(452));\n      return type;\n    case \"head\":\n      type = props.head;\n      if (!type) throw Error(formatProdErrorMessage(453));\n      return type;\n    case \"body\":\n      type = props.body;\n      if (!type) throw Error(formatProdErrorMessage(454));\n      return type;\n    default:\n      throw Error(formatProdErrorMessage(451));\n  }\n}\nfunction releaseSingletonInstance(instance) {\n  for (var attributes = instance.attributes; attributes.length; )\n    instance.removeAttributeNode(attributes[0]);\n  detachDeletedInstance(instance);\n}\nvar preloadPropsMap = new Map(),\n  preconnectsSet = new Set();\nfunction getHoistableRoot(container) {\n  return \"function\" === typeof container.getRootNode\n    ? container.getRootNode()\n    : 9 === container.nodeType\n      ? container\n      : container.ownerDocument;\n}\nvar previousDispatcher = ReactDOMSharedInternals.d;\nReactDOMSharedInternals.d = {\n  f: flushSyncWork,\n  r: requestFormReset,\n  D: prefetchDNS,\n  C: preconnect,\n  L: preload,\n  m: preloadModule,\n  X: preinitScript,\n  S: preinitStyle,\n  M: preinitModuleScript\n};\nfunction flushSyncWork() {\n  var previousWasRendering = previousDispatcher.f(),\n    wasRendering = flushSyncWork$1();\n  return previousWasRendering || wasRendering;\n}\nfunction requestFormReset(form) {\n  var formInst = getInstanceFromNode(form);\n  null !== formInst && 5 === formInst.tag && \"form\" === formInst.type\n    ? requestFormReset$1(formInst)\n    : previousDispatcher.r(form);\n}\nvar globalDocument = \"undefined\" === typeof document ? null : document;\nfunction preconnectAs(rel, href, crossOrigin) {\n  var ownerDocument = globalDocument;\n  if (ownerDocument && \"string\" === typeof href && href) {\n    var limitedEscapedHref =\n      escapeSelectorAttributeValueInsideDoubleQuotes(href);\n    limitedEscapedHref =\n      'link[rel=\"' + rel + '\"][href=\"' + limitedEscapedHref + '\"]';\n    \"string\" === typeof crossOrigin &&\n      (limitedEscapedHref += '[crossorigin=\"' + crossOrigin + '\"]');\n    preconnectsSet.has(limitedEscapedHref) ||\n      (preconnectsSet.add(limitedEscapedHref),\n      (rel = { rel: rel, crossOrigin: crossOrigin, href: href }),\n      null === ownerDocument.querySelector(limitedEscapedHref) &&\n        ((href = ownerDocument.createElement(\"link\")),\n        setInitialProperties(href, \"link\", rel),\n        markNodeAsHoistable(href),\n        ownerDocument.head.appendChild(href)));\n  }\n}\nfunction prefetchDNS(href) {\n  previousDispatcher.D(href);\n  preconnectAs(\"dns-prefetch\", href, null);\n}\nfunction preconnect(href, crossOrigin) {\n  previousDispatcher.C(href, crossOrigin);\n  preconnectAs(\"preconnect\", href, crossOrigin);\n}\nfunction preload(href, as, options) {\n  previousDispatcher.L(href, as, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href && as) {\n    var preloadSelector =\n      'link[rel=\"preload\"][as=\"' +\n      escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n      '\"]';\n    \"image\" === as\n      ? options && options.imageSrcSet\n        ? ((preloadSelector +=\n            '[imagesrcset=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(\n              options.imageSrcSet\n            ) +\n            '\"]'),\n          \"string\" === typeof options.imageSizes &&\n            (preloadSelector +=\n              '[imagesizes=\"' +\n              escapeSelectorAttributeValueInsideDoubleQuotes(\n                options.imageSizes\n              ) +\n              '\"]'))\n        : (preloadSelector +=\n            '[href=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n            '\"]')\n      : (preloadSelector +=\n          '[href=\"' +\n          escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n          '\"]');\n    var key = preloadSelector;\n    switch (as) {\n      case \"style\":\n        key = getStyleKey(href);\n        break;\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    preloadPropsMap.has(key) ||\n      ((href = assign(\n        {\n          rel: \"preload\",\n          href:\n            \"image\" === as && options && options.imageSrcSet ? void 0 : href,\n          as: as\n        },\n        options\n      )),\n      preloadPropsMap.set(key, href),\n      null !== ownerDocument.querySelector(preloadSelector) ||\n        (\"style\" === as &&\n          ownerDocument.querySelector(getStylesheetSelectorFromKey(key))) ||\n        (\"script\" === as &&\n          ownerDocument.querySelector(getScriptSelectorFromKey(key))) ||\n        ((as = ownerDocument.createElement(\"link\")),\n        setInitialProperties(as, \"link\", href),\n        markNodeAsHoistable(as),\n        ownerDocument.head.appendChild(as)));\n  }\n}\nfunction preloadModule(href, options) {\n  previousDispatcher.m(href, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var as = options && \"string\" === typeof options.as ? options.as : \"script\",\n      preloadSelector =\n        'link[rel=\"modulepreload\"][as=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(as) +\n        '\"][href=\"' +\n        escapeSelectorAttributeValueInsideDoubleQuotes(href) +\n        '\"]',\n      key = preloadSelector;\n    switch (as) {\n      case \"audioworklet\":\n      case \"paintworklet\":\n      case \"serviceworker\":\n      case \"sharedworker\":\n      case \"worker\":\n      case \"script\":\n        key = getScriptKey(href);\n    }\n    if (\n      !preloadPropsMap.has(key) &&\n      ((href = assign({ rel: \"modulepreload\", href: href }, options)),\n      preloadPropsMap.set(key, href),\n      null === ownerDocument.querySelector(preloadSelector))\n    ) {\n      switch (as) {\n        case \"audioworklet\":\n        case \"paintworklet\":\n        case \"serviceworker\":\n        case \"sharedworker\":\n        case \"worker\":\n        case \"script\":\n          if (ownerDocument.querySelector(getScriptSelectorFromKey(key)))\n            return;\n      }\n      as = ownerDocument.createElement(\"link\");\n      setInitialProperties(as, \"link\", href);\n      markNodeAsHoistable(as);\n      ownerDocument.head.appendChild(as);\n    }\n  }\n}\nfunction preinitStyle(href, precedence, options) {\n  previousDispatcher.S(href, precedence, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && href) {\n    var styles = getResourcesFromRoot(ownerDocument).hoistableStyles,\n      key = getStyleKey(href);\n    precedence = precedence || \"default\";\n    var resource = styles.get(key);\n    if (!resource) {\n      var state = { loading: 0, preload: null };\n      if (\n        (resource = ownerDocument.querySelector(\n          getStylesheetSelectorFromKey(key)\n        ))\n      )\n        state.loading = 5;\n      else {\n        href = assign(\n          { rel: \"stylesheet\", href: href, \"data-precedence\": precedence },\n          options\n        );\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForStylesheet(href, options);\n        var link = (resource = ownerDocument.createElement(\"link\"));\n        markNodeAsHoistable(link);\n        setInitialProperties(link, \"link\", href);\n        link._p = new Promise(function (resolve, reject) {\n          link.onload = resolve;\n          link.onerror = reject;\n        });\n        link.addEventListener(\"load\", function () {\n          state.loading |= 1;\n        });\n        link.addEventListener(\"error\", function () {\n          state.loading |= 2;\n        });\n        state.loading |= 4;\n        insertStylesheet(resource, precedence, ownerDocument);\n      }\n      resource = {\n        type: \"stylesheet\",\n        instance: resource,\n        count: 1,\n        state: state\n      };\n      styles.set(key, resource);\n    }\n  }\n}\nfunction preinitScript(src, options) {\n  previousDispatcher.X(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0 }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction preinitModuleScript(src, options) {\n  previousDispatcher.M(src, options);\n  var ownerDocument = globalDocument;\n  if (ownerDocument && src) {\n    var scripts = getResourcesFromRoot(ownerDocument).hoistableScripts,\n      key = getScriptKey(src),\n      resource = scripts.get(key);\n    resource ||\n      ((resource = ownerDocument.querySelector(getScriptSelectorFromKey(key))),\n      resource ||\n        ((src = assign({ src: src, async: !0, type: \"module\" }, options)),\n        (options = preloadPropsMap.get(key)) &&\n          adoptPreloadPropsForScript(src, options),\n        (resource = ownerDocument.createElement(\"script\")),\n        markNodeAsHoistable(resource),\n        setInitialProperties(resource, \"link\", src),\n        ownerDocument.head.appendChild(resource)),\n      (resource = {\n        type: \"script\",\n        instance: resource,\n        count: 1,\n        state: null\n      }),\n      scripts.set(key, resource));\n  }\n}\nfunction getResource(type, currentProps, pendingProps, currentResource) {\n  var JSCompiler_inline_result = (JSCompiler_inline_result =\n    rootInstanceStackCursor.current)\n    ? getHoistableRoot(JSCompiler_inline_result)\n    : null;\n  if (!JSCompiler_inline_result) throw Error(formatProdErrorMessage(446));\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return null;\n    case \"style\":\n      return \"string\" === typeof pendingProps.precedence &&\n        \"string\" === typeof pendingProps.href\n        ? ((currentProps = getStyleKey(pendingProps.href)),\n          (pendingProps = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles),\n          (currentResource = pendingProps.get(currentProps)),\n          currentResource ||\n            ((currentResource = {\n              type: \"style\",\n              instance: null,\n              count: 0,\n              state: null\n            }),\n            pendingProps.set(currentProps, currentResource)),\n          currentResource)\n        : { type: \"void\", instance: null, count: 0, state: null };\n    case \"link\":\n      if (\n        \"stylesheet\" === pendingProps.rel &&\n        \"string\" === typeof pendingProps.href &&\n        \"string\" === typeof pendingProps.precedence\n      ) {\n        type = getStyleKey(pendingProps.href);\n        var styles$244 = getResourcesFromRoot(\n            JSCompiler_inline_result\n          ).hoistableStyles,\n          resource$245 = styles$244.get(type);\n        resource$245 ||\n          ((JSCompiler_inline_result =\n            JSCompiler_inline_result.ownerDocument || JSCompiler_inline_result),\n          (resource$245 = {\n            type: \"stylesheet\",\n            instance: null,\n            count: 0,\n            state: { loading: 0, preload: null }\n          }),\n          styles$244.set(type, resource$245),\n          (styles$244 = JSCompiler_inline_result.querySelector(\n            getStylesheetSelectorFromKey(type)\n          )) &&\n            !styles$244._p &&\n            ((resource$245.instance = styles$244),\n            (resource$245.state.loading = 5)),\n          preloadPropsMap.has(type) ||\n            ((pendingProps = {\n              rel: \"preload\",\n              as: \"style\",\n              href: pendingProps.href,\n              crossOrigin: pendingProps.crossOrigin,\n              integrity: pendingProps.integrity,\n              media: pendingProps.media,\n              hrefLang: pendingProps.hrefLang,\n              referrerPolicy: pendingProps.referrerPolicy\n            }),\n            preloadPropsMap.set(type, pendingProps),\n            styles$244 ||\n              preloadStylesheet(\n                JSCompiler_inline_result,\n                type,\n                pendingProps,\n                resource$245.state\n              )));\n        if (currentProps && null === currentResource)\n          throw Error(formatProdErrorMessage(528, \"\"));\n        return resource$245;\n      }\n      if (currentProps && null !== currentResource)\n        throw Error(formatProdErrorMessage(529, \"\"));\n      return null;\n    case \"script\":\n      return (\n        (currentProps = pendingProps.async),\n        (pendingProps = pendingProps.src),\n        \"string\" === typeof pendingProps &&\n        currentProps &&\n        \"function\" !== typeof currentProps &&\n        \"symbol\" !== typeof currentProps\n          ? ((currentProps = getScriptKey(pendingProps)),\n            (pendingProps = getResourcesFromRoot(\n              JSCompiler_inline_result\n            ).hoistableScripts),\n            (currentResource = pendingProps.get(currentProps)),\n            currentResource ||\n              ((currentResource = {\n                type: \"script\",\n                instance: null,\n                count: 0,\n                state: null\n              }),\n              pendingProps.set(currentProps, currentResource)),\n            currentResource)\n          : { type: \"void\", instance: null, count: 0, state: null }\n      );\n    default:\n      throw Error(formatProdErrorMessage(444, type));\n  }\n}\nfunction getStyleKey(href) {\n  return 'href=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(href) + '\"';\n}\nfunction getStylesheetSelectorFromKey(key) {\n  return 'link[rel=\"stylesheet\"][' + key + \"]\";\n}\nfunction stylesheetPropsFromRawProps(rawProps) {\n  return assign({}, rawProps, {\n    \"data-precedence\": rawProps.precedence,\n    precedence: null\n  });\n}\nfunction preloadStylesheet(ownerDocument, key, preloadProps, state) {\n  ownerDocument.querySelector('link[rel=\"preload\"][as=\"style\"][' + key + \"]\")\n    ? (state.loading = 1)\n    : ((key = ownerDocument.createElement(\"link\")),\n      (state.preload = key),\n      key.addEventListener(\"load\", function () {\n        return (state.loading |= 1);\n      }),\n      key.addEventListener(\"error\", function () {\n        return (state.loading |= 2);\n      }),\n      setInitialProperties(key, \"link\", preloadProps),\n      markNodeAsHoistable(key),\n      ownerDocument.head.appendChild(key));\n}\nfunction getScriptKey(src) {\n  return '[src=\"' + escapeSelectorAttributeValueInsideDoubleQuotes(src) + '\"]';\n}\nfunction getScriptSelectorFromKey(key) {\n  return \"script[async]\" + key;\n}\nfunction acquireResource(hoistableRoot, resource, props) {\n  resource.count++;\n  if (null === resource.instance)\n    switch (resource.type) {\n      case \"style\":\n        var instance = hoistableRoot.querySelector(\n          'style[data-href~=\"' +\n            escapeSelectorAttributeValueInsideDoubleQuotes(props.href) +\n            '\"]'\n        );\n        if (instance)\n          return (\n            (resource.instance = instance),\n            markNodeAsHoistable(instance),\n            instance\n          );\n        var styleProps = assign({}, props, {\n          \"data-href\": props.href,\n          \"data-precedence\": props.precedence,\n          href: null,\n          precedence: null\n        });\n        instance = (hoistableRoot.ownerDocument || hoistableRoot).createElement(\n          \"style\"\n        );\n        markNodeAsHoistable(instance);\n        setInitialProperties(instance, \"style\", styleProps);\n        insertStylesheet(instance, props.precedence, hoistableRoot);\n        return (resource.instance = instance);\n      case \"stylesheet\":\n        styleProps = getStyleKey(props.href);\n        var instance$250 = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(styleProps)\n        );\n        if (instance$250)\n          return (\n            (resource.state.loading |= 4),\n            (resource.instance = instance$250),\n            markNodeAsHoistable(instance$250),\n            instance$250\n          );\n        instance = stylesheetPropsFromRawProps(props);\n        (styleProps = preloadPropsMap.get(styleProps)) &&\n          adoptPreloadPropsForStylesheet(instance, styleProps);\n        instance$250 = (\n          hoistableRoot.ownerDocument || hoistableRoot\n        ).createElement(\"link\");\n        markNodeAsHoistable(instance$250);\n        var linkInstance = instance$250;\n        linkInstance._p = new Promise(function (resolve, reject) {\n          linkInstance.onload = resolve;\n          linkInstance.onerror = reject;\n        });\n        setInitialProperties(instance$250, \"link\", instance);\n        resource.state.loading |= 4;\n        insertStylesheet(instance$250, props.precedence, hoistableRoot);\n        return (resource.instance = instance$250);\n      case \"script\":\n        instance$250 = getScriptKey(props.src);\n        if (\n          (styleProps = hoistableRoot.querySelector(\n            getScriptSelectorFromKey(instance$250)\n          ))\n        )\n          return (\n            (resource.instance = styleProps),\n            markNodeAsHoistable(styleProps),\n            styleProps\n          );\n        instance = props;\n        if ((styleProps = preloadPropsMap.get(instance$250)))\n          (instance = assign({}, props)),\n            adoptPreloadPropsForScript(instance, styleProps);\n        hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n        styleProps = hoistableRoot.createElement(\"script\");\n        markNodeAsHoistable(styleProps);\n        setInitialProperties(styleProps, \"link\", instance);\n        hoistableRoot.head.appendChild(styleProps);\n        return (resource.instance = styleProps);\n      case \"void\":\n        return null;\n      default:\n        throw Error(formatProdErrorMessage(443, resource.type));\n    }\n  else\n    \"stylesheet\" === resource.type &&\n      0 === (resource.state.loading & 4) &&\n      ((instance = resource.instance),\n      (resource.state.loading |= 4),\n      insertStylesheet(instance, props.precedence, hoistableRoot));\n  return resource.instance;\n}\nfunction insertStylesheet(instance, precedence, root) {\n  for (\n    var nodes = root.querySelectorAll(\n        'link[rel=\"stylesheet\"][data-precedence],style[data-precedence]'\n      ),\n      last = nodes.length ? nodes[nodes.length - 1] : null,\n      prior = last,\n      i = 0;\n    i < nodes.length;\n    i++\n  ) {\n    var node = nodes[i];\n    if (node.dataset.precedence === precedence) prior = node;\n    else if (prior !== last) break;\n  }\n  prior\n    ? prior.parentNode.insertBefore(instance, prior.nextSibling)\n    : ((precedence = 9 === root.nodeType ? root.head : root),\n      precedence.insertBefore(instance, precedence.firstChild));\n}\nfunction adoptPreloadPropsForStylesheet(stylesheetProps, preloadProps) {\n  null == stylesheetProps.crossOrigin &&\n    (stylesheetProps.crossOrigin = preloadProps.crossOrigin);\n  null == stylesheetProps.referrerPolicy &&\n    (stylesheetProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == stylesheetProps.title && (stylesheetProps.title = preloadProps.title);\n}\nfunction adoptPreloadPropsForScript(scriptProps, preloadProps) {\n  null == scriptProps.crossOrigin &&\n    (scriptProps.crossOrigin = preloadProps.crossOrigin);\n  null == scriptProps.referrerPolicy &&\n    (scriptProps.referrerPolicy = preloadProps.referrerPolicy);\n  null == scriptProps.integrity &&\n    (scriptProps.integrity = preloadProps.integrity);\n}\nvar tagCaches = null;\nfunction getHydratableHoistableCache(type, keyAttribute, ownerDocument) {\n  if (null === tagCaches) {\n    var cache = new Map();\n    var caches = (tagCaches = new Map());\n    caches.set(ownerDocument, cache);\n  } else\n    (caches = tagCaches),\n      (cache = caches.get(ownerDocument)),\n      cache || ((cache = new Map()), caches.set(ownerDocument, cache));\n  if (cache.has(type)) return cache;\n  cache.set(type, null);\n  ownerDocument = ownerDocument.getElementsByTagName(type);\n  for (caches = 0; caches < ownerDocument.length; caches++) {\n    var node = ownerDocument[caches];\n    if (\n      !(\n        node[internalHoistableMarker] ||\n        node[internalInstanceKey] ||\n        (\"link\" === type && \"stylesheet\" === node.getAttribute(\"rel\"))\n      ) &&\n      \"http://www.w3.org/2000/svg\" !== node.namespaceURI\n    ) {\n      var nodeKey = node.getAttribute(keyAttribute) || \"\";\n      nodeKey = type + nodeKey;\n      var existing = cache.get(nodeKey);\n      existing ? existing.push(node) : cache.set(nodeKey, [node]);\n    }\n  }\n  return cache;\n}\nfunction mountHoistable(hoistableRoot, type, instance) {\n  hoistableRoot = hoistableRoot.ownerDocument || hoistableRoot;\n  hoistableRoot.head.insertBefore(\n    instance,\n    \"title\" === type ? hoistableRoot.querySelector(\"head > title\") : null\n  );\n}\nfunction isHostHoistableType(type, props, hostContext) {\n  if (1 === hostContext || null != props.itemProp) return !1;\n  switch (type) {\n    case \"meta\":\n    case \"title\":\n      return !0;\n    case \"style\":\n      if (\n        \"string\" !== typeof props.precedence ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href\n      )\n        break;\n      return !0;\n    case \"link\":\n      if (\n        \"string\" !== typeof props.rel ||\n        \"string\" !== typeof props.href ||\n        \"\" === props.href ||\n        props.onLoad ||\n        props.onError\n      )\n        break;\n      switch (props.rel) {\n        case \"stylesheet\":\n          return (\n            (type = props.disabled),\n            \"string\" === typeof props.precedence && null == type\n          );\n        default:\n          return !0;\n      }\n    case \"script\":\n      if (\n        props.async &&\n        \"function\" !== typeof props.async &&\n        \"symbol\" !== typeof props.async &&\n        !props.onLoad &&\n        !props.onError &&\n        props.src &&\n        \"string\" === typeof props.src\n      )\n        return !0;\n  }\n  return !1;\n}\nfunction preloadResource(resource) {\n  return \"stylesheet\" === resource.type && 0 === (resource.state.loading & 3)\n    ? !1\n    : !0;\n}\nvar suspendedState = null;\nfunction noop() {}\nfunction suspendResource(hoistableRoot, resource, props) {\n  if (null === suspendedState) throw Error(formatProdErrorMessage(475));\n  var state = suspendedState;\n  if (\n    \"stylesheet\" === resource.type &&\n    (\"string\" !== typeof props.media ||\n      !1 !== matchMedia(props.media).matches) &&\n    0 === (resource.state.loading & 4)\n  ) {\n    if (null === resource.instance) {\n      var key = getStyleKey(props.href),\n        instance = hoistableRoot.querySelector(\n          getStylesheetSelectorFromKey(key)\n        );\n      if (instance) {\n        hoistableRoot = instance._p;\n        null !== hoistableRoot &&\n          \"object\" === typeof hoistableRoot &&\n          \"function\" === typeof hoistableRoot.then &&\n          (state.count++,\n          (state = onUnsuspend.bind(state)),\n          hoistableRoot.then(state, state));\n        resource.state.loading |= 4;\n        resource.instance = instance;\n        markNodeAsHoistable(instance);\n        return;\n      }\n      instance = hoistableRoot.ownerDocument || hoistableRoot;\n      props = stylesheetPropsFromRawProps(props);\n      (key = preloadPropsMap.get(key)) &&\n        adoptPreloadPropsForStylesheet(props, key);\n      instance = instance.createElement(\"link\");\n      markNodeAsHoistable(instance);\n      var linkInstance = instance;\n      linkInstance._p = new Promise(function (resolve, reject) {\n        linkInstance.onload = resolve;\n        linkInstance.onerror = reject;\n      });\n      setInitialProperties(instance, \"link\", props);\n      resource.instance = instance;\n    }\n    null === state.stylesheets && (state.stylesheets = new Map());\n    state.stylesheets.set(resource, hoistableRoot);\n    (hoistableRoot = resource.state.preload) &&\n      0 === (resource.state.loading & 3) &&\n      (state.count++,\n      (resource = onUnsuspend.bind(state)),\n      hoistableRoot.addEventListener(\"load\", resource),\n      hoistableRoot.addEventListener(\"error\", resource));\n  }\n}\nfunction waitForCommitToBeReady() {\n  if (null === suspendedState) throw Error(formatProdErrorMessage(475));\n  var state = suspendedState;\n  state.stylesheets &&\n    0 === state.count &&\n    insertSuspendedStylesheets(state, state.stylesheets);\n  return 0 < state.count\n    ? function (commit) {\n        var stylesheetTimer = setTimeout(function () {\n          state.stylesheets &&\n            insertSuspendedStylesheets(state, state.stylesheets);\n          if (state.unsuspend) {\n            var unsuspend = state.unsuspend;\n            state.unsuspend = null;\n            unsuspend();\n          }\n        }, 6e4);\n        state.unsuspend = commit;\n        return function () {\n          state.unsuspend = null;\n          clearTimeout(stylesheetTimer);\n        };\n      }\n    : null;\n}\nfunction onUnsuspend() {\n  this.count--;\n  if (0 === this.count)\n    if (this.stylesheets) insertSuspendedStylesheets(this, this.stylesheets);\n    else if (this.unsuspend) {\n      var unsuspend = this.unsuspend;\n      this.unsuspend = null;\n      unsuspend();\n    }\n}\nvar precedencesByRoot = null;\nfunction insertSuspendedStylesheets(state, resources) {\n  state.stylesheets = null;\n  null !== state.unsuspend &&\n    (state.count++,\n    (precedencesByRoot = new Map()),\n    resources.forEach(insertStylesheetIntoRoot, state),\n    (precedencesByRoot = null),\n    onUnsuspend.call(state));\n}\nfunction insertStylesheetIntoRoot(root, resource) {\n  if (!(resource.state.loading & 4)) {\n    var precedences = precedencesByRoot.get(root);\n    if (precedences) var last = precedences.get(null);\n    else {\n      precedences = new Map();\n      precedencesByRoot.set(root, precedences);\n      for (\n        var nodes = root.querySelectorAll(\n            \"link[data-precedence],style[data-precedence]\"\n          ),\n          i = 0;\n        i < nodes.length;\n        i++\n      ) {\n        var node = nodes[i];\n        if (\n          \"LINK\" === node.nodeName ||\n          \"not all\" !== node.getAttribute(\"media\")\n        )\n          precedences.set(node.dataset.precedence, node), (last = node);\n      }\n      last && precedences.set(null, last);\n    }\n    nodes = resource.instance;\n    node = nodes.getAttribute(\"data-precedence\");\n    i = precedences.get(node) || last;\n    i === last && precedences.set(null, nodes);\n    precedences.set(node, nodes);\n    this.count++;\n    last = onUnsuspend.bind(this);\n    nodes.addEventListener(\"load\", last);\n    nodes.addEventListener(\"error\", last);\n    i\n      ? i.parentNode.insertBefore(nodes, i.nextSibling)\n      : ((root = 9 === root.nodeType ? root.head : root),\n        root.insertBefore(nodes, root.firstChild));\n    resource.state.loading |= 4;\n  }\n}\nvar HostTransitionContext = {\n  $$typeof: REACT_CONTEXT_TYPE,\n  Provider: null,\n  Consumer: null,\n  _currentValue: sharedNotPendingObject,\n  _currentValue2: sharedNotPendingObject,\n  _threadCount: 0\n};\nfunction FiberRootNode(\n  containerInfo,\n  tag,\n  hydrate,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  formState\n) {\n  this.tag = 1;\n  this.containerInfo = containerInfo;\n  this.pingCache = this.current = this.pendingChildren = null;\n  this.timeoutHandle = -1;\n  this.callbackNode =\n    this.next =\n    this.pendingContext =\n    this.context =\n    this.cancelPendingCommit =\n      null;\n  this.callbackPriority = 0;\n  this.expirationTimes = createLaneMap(-1);\n  this.entangledLanes =\n    this.shellSuspendCounter =\n    this.errorRecoveryDisabledLanes =\n    this.expiredLanes =\n    this.warmLanes =\n    this.pingedLanes =\n    this.suspendedLanes =\n    this.pendingLanes =\n      0;\n  this.entanglements = createLaneMap(0);\n  this.hiddenUpdates = createLaneMap(null);\n  this.identifierPrefix = identifierPrefix;\n  this.onUncaughtError = onUncaughtError;\n  this.onCaughtError = onCaughtError;\n  this.onRecoverableError = onRecoverableError;\n  this.pooledCache = null;\n  this.pooledCacheLanes = 0;\n  this.formState = formState;\n  this.incompleteTransitions = new Map();\n}\nfunction createFiberRoot(\n  containerInfo,\n  tag,\n  hydrate,\n  initialChildren,\n  hydrationCallbacks,\n  isStrictMode,\n  identifierPrefix,\n  onUncaughtError,\n  onCaughtError,\n  onRecoverableError,\n  transitionCallbacks,\n  formState\n) {\n  containerInfo = new FiberRootNode(\n    containerInfo,\n    tag,\n    hydrate,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    formState\n  );\n  tag = 1;\n  !0 === isStrictMode && (tag |= 24);\n  isStrictMode = createFiberImplClass(3, null, null, tag);\n  containerInfo.current = isStrictMode;\n  isStrictMode.stateNode = containerInfo;\n  tag = createCache();\n  tag.refCount++;\n  containerInfo.pooledCache = tag;\n  tag.refCount++;\n  isStrictMode.memoizedState = {\n    element: initialChildren,\n    isDehydrated: hydrate,\n    cache: tag\n  };\n  initializeUpdateQueue(isStrictMode);\n  return containerInfo;\n}\nfunction getContextForSubtree(parentComponent) {\n  if (!parentComponent) return emptyContextObject;\n  parentComponent = emptyContextObject;\n  return parentComponent;\n}\nfunction updateContainerImpl(\n  rootFiber,\n  lane,\n  element,\n  container,\n  parentComponent,\n  callback\n) {\n  parentComponent = getContextForSubtree(parentComponent);\n  null === container.context\n    ? (container.context = parentComponent)\n    : (container.pendingContext = parentComponent);\n  container = createUpdate(lane);\n  container.payload = { element: element };\n  callback = void 0 === callback ? null : callback;\n  null !== callback && (container.callback = callback);\n  element = enqueueUpdate(rootFiber, container, lane);\n  null !== element &&\n    (scheduleUpdateOnFiber(element, rootFiber, lane),\n    entangleTransitions(element, rootFiber, lane));\n}\nfunction markRetryLaneImpl(fiber, retryLane) {\n  fiber = fiber.memoizedState;\n  if (null !== fiber && null !== fiber.dehydrated) {\n    var a = fiber.retryLane;\n    fiber.retryLane = 0 !== a && a < retryLane ? a : retryLane;\n  }\n}\nfunction markRetryLaneIfNotHydrated(fiber, retryLane) {\n  markRetryLaneImpl(fiber, retryLane);\n  (fiber = fiber.alternate) && markRetryLaneImpl(fiber, retryLane);\n}\nfunction attemptContinuousHydration(fiber) {\n  if (13 === fiber.tag) {\n    var root = enqueueConcurrentRenderForLane(fiber, 67108864);\n    null !== root && scheduleUpdateOnFiber(root, fiber, 67108864);\n    markRetryLaneIfNotHydrated(fiber, 67108864);\n  }\n}\nvar _enabled = !0;\nfunction dispatchDiscreteEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 2),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchContinuousEvent(\n  domEventName,\n  eventSystemFlags,\n  container,\n  nativeEvent\n) {\n  var prevTransition = ReactSharedInternals.T;\n  ReactSharedInternals.T = null;\n  var previousPriority = ReactDOMSharedInternals.p;\n  try {\n    (ReactDOMSharedInternals.p = 8),\n      dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent);\n  } finally {\n    (ReactDOMSharedInternals.p = previousPriority),\n      (ReactSharedInternals.T = prevTransition);\n  }\n}\nfunction dispatchEvent(\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (_enabled) {\n    var blockedOn = findInstanceBlockingEvent(nativeEvent);\n    if (null === blockedOn)\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        return_targetInst,\n        targetContainer\n      ),\n        clearIfContinuousEvent(domEventName, nativeEvent);\n    else if (\n      queueIfContinuousEvent(\n        blockedOn,\n        domEventName,\n        eventSystemFlags,\n        targetContainer,\n        nativeEvent\n      )\n    )\n      nativeEvent.stopPropagation();\n    else if (\n      (clearIfContinuousEvent(domEventName, nativeEvent),\n      eventSystemFlags & 4 &&\n        -1 < discreteReplayableEvents.indexOf(domEventName))\n    ) {\n      for (; null !== blockedOn; ) {\n        var fiber = getInstanceFromNode(blockedOn);\n        if (null !== fiber)\n          switch (fiber.tag) {\n            case 3:\n              fiber = fiber.stateNode;\n              if (fiber.current.memoizedState.isDehydrated) {\n                var lanes = getHighestPriorityLanes(fiber.pendingLanes);\n                if (0 !== lanes) {\n                  var root = fiber;\n                  root.pendingLanes |= 2;\n                  for (root.entangledLanes |= 2; lanes; ) {\n                    var lane = 1 << (31 - clz32(lanes));\n                    root.entanglements[1] |= lane;\n                    lanes &= ~lane;\n                  }\n                  ensureRootIsScheduled(fiber);\n                  0 === (executionContext & 6) &&\n                    ((workInProgressRootRenderTargetTime = now() + 500),\n                    flushSyncWorkAcrossRoots_impl(0, !1));\n                }\n              }\n              break;\n            case 13:\n              (root = enqueueConcurrentRenderForLane(fiber, 2)),\n                null !== root && scheduleUpdateOnFiber(root, fiber, 2),\n                flushSyncWork$1(),\n                markRetryLaneIfNotHydrated(fiber, 2);\n          }\n        fiber = findInstanceBlockingEvent(nativeEvent);\n        null === fiber &&\n          dispatchEventForPluginEventSystem(\n            domEventName,\n            eventSystemFlags,\n            nativeEvent,\n            return_targetInst,\n            targetContainer\n          );\n        if (fiber === blockedOn) break;\n        blockedOn = fiber;\n      }\n      null !== blockedOn && nativeEvent.stopPropagation();\n    } else\n      dispatchEventForPluginEventSystem(\n        domEventName,\n        eventSystemFlags,\n        nativeEvent,\n        null,\n        targetContainer\n      );\n  }\n}\nfunction findInstanceBlockingEvent(nativeEvent) {\n  nativeEvent = getEventTarget(nativeEvent);\n  return findInstanceBlockingTarget(nativeEvent);\n}\nvar return_targetInst = null;\nfunction findInstanceBlockingTarget(targetNode) {\n  return_targetInst = null;\n  targetNode = getClosestInstanceFromNode(targetNode);\n  if (null !== targetNode) {\n    var nearestMounted = getNearestMountedFiber(targetNode);\n    if (null === nearestMounted) targetNode = null;\n    else {\n      var tag = nearestMounted.tag;\n      if (13 === tag) {\n        targetNode = getSuspenseInstanceFromFiber(nearestMounted);\n        if (null !== targetNode) return targetNode;\n        targetNode = null;\n      } else if (3 === tag) {\n        if (nearestMounted.stateNode.current.memoizedState.isDehydrated)\n          return 3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        targetNode = null;\n      } else nearestMounted !== targetNode && (targetNode = null);\n    }\n  }\n  return_targetInst = targetNode;\n  return null;\n}\nfunction getEventPriority(domEventName) {\n  switch (domEventName) {\n    case \"beforetoggle\":\n    case \"cancel\":\n    case \"click\":\n    case \"close\":\n    case \"contextmenu\":\n    case \"copy\":\n    case \"cut\":\n    case \"auxclick\":\n    case \"dblclick\":\n    case \"dragend\":\n    case \"dragstart\":\n    case \"drop\":\n    case \"focusin\":\n    case \"focusout\":\n    case \"input\":\n    case \"invalid\":\n    case \"keydown\":\n    case \"keypress\":\n    case \"keyup\":\n    case \"mousedown\":\n    case \"mouseup\":\n    case \"paste\":\n    case \"pause\":\n    case \"play\":\n    case \"pointercancel\":\n    case \"pointerdown\":\n    case \"pointerup\":\n    case \"ratechange\":\n    case \"reset\":\n    case \"resize\":\n    case \"seeked\":\n    case \"submit\":\n    case \"toggle\":\n    case \"touchcancel\":\n    case \"touchend\":\n    case \"touchstart\":\n    case \"volumechange\":\n    case \"change\":\n    case \"selectionchange\":\n    case \"textInput\":\n    case \"compositionstart\":\n    case \"compositionend\":\n    case \"compositionupdate\":\n    case \"beforeblur\":\n    case \"afterblur\":\n    case \"beforeinput\":\n    case \"blur\":\n    case \"fullscreenchange\":\n    case \"focus\":\n    case \"hashchange\":\n    case \"popstate\":\n    case \"select\":\n    case \"selectstart\":\n      return 2;\n    case \"drag\":\n    case \"dragenter\":\n    case \"dragexit\":\n    case \"dragleave\":\n    case \"dragover\":\n    case \"mousemove\":\n    case \"mouseout\":\n    case \"mouseover\":\n    case \"pointermove\":\n    case \"pointerout\":\n    case \"pointerover\":\n    case \"scroll\":\n    case \"touchmove\":\n    case \"wheel\":\n    case \"mouseenter\":\n    case \"mouseleave\":\n    case \"pointerenter\":\n    case \"pointerleave\":\n      return 8;\n    case \"message\":\n      switch (getCurrentPriorityLevel()) {\n        case ImmediatePriority:\n          return 2;\n        case UserBlockingPriority:\n          return 8;\n        case NormalPriority$1:\n        case LowPriority:\n          return 32;\n        case IdlePriority:\n          return 268435456;\n        default:\n          return 32;\n      }\n    default:\n      return 32;\n  }\n}\nvar hasScheduledReplayAttempt = !1,\n  queuedFocus = null,\n  queuedDrag = null,\n  queuedMouse = null,\n  queuedPointers = new Map(),\n  queuedPointerCaptures = new Map(),\n  queuedExplicitHydrationTargets = [],\n  discreteReplayableEvents =\n    \"mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset\".split(\n      \" \"\n    );\nfunction clearIfContinuousEvent(domEventName, nativeEvent) {\n  switch (domEventName) {\n    case \"focusin\":\n    case \"focusout\":\n      queuedFocus = null;\n      break;\n    case \"dragenter\":\n    case \"dragleave\":\n      queuedDrag = null;\n      break;\n    case \"mouseover\":\n    case \"mouseout\":\n      queuedMouse = null;\n      break;\n    case \"pointerover\":\n    case \"pointerout\":\n      queuedPointers.delete(nativeEvent.pointerId);\n      break;\n    case \"gotpointercapture\":\n    case \"lostpointercapture\":\n      queuedPointerCaptures.delete(nativeEvent.pointerId);\n  }\n}\nfunction accumulateOrCreateContinuousQueuedReplayableEvent(\n  existingQueuedEvent,\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  if (\n    null === existingQueuedEvent ||\n    existingQueuedEvent.nativeEvent !== nativeEvent\n  )\n    return (\n      (existingQueuedEvent = {\n        blockedOn: blockedOn,\n        domEventName: domEventName,\n        eventSystemFlags: eventSystemFlags,\n        nativeEvent: nativeEvent,\n        targetContainers: [targetContainer]\n      }),\n      null !== blockedOn &&\n        ((blockedOn = getInstanceFromNode(blockedOn)),\n        null !== blockedOn && attemptContinuousHydration(blockedOn)),\n      existingQueuedEvent\n    );\n  existingQueuedEvent.eventSystemFlags |= eventSystemFlags;\n  blockedOn = existingQueuedEvent.targetContainers;\n  null !== targetContainer &&\n    -1 === blockedOn.indexOf(targetContainer) &&\n    blockedOn.push(targetContainer);\n  return existingQueuedEvent;\n}\nfunction queueIfContinuousEvent(\n  blockedOn,\n  domEventName,\n  eventSystemFlags,\n  targetContainer,\n  nativeEvent\n) {\n  switch (domEventName) {\n    case \"focusin\":\n      return (\n        (queuedFocus = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedFocus,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"dragenter\":\n      return (\n        (queuedDrag = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedDrag,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"mouseover\":\n      return (\n        (queuedMouse = accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedMouse,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )),\n        !0\n      );\n    case \"pointerover\":\n      var pointerId = nativeEvent.pointerId;\n      queuedPointers.set(\n        pointerId,\n        accumulateOrCreateContinuousQueuedReplayableEvent(\n          queuedPointers.get(pointerId) || null,\n          blockedOn,\n          domEventName,\n          eventSystemFlags,\n          targetContainer,\n          nativeEvent\n        )\n      );\n      return !0;\n    case \"gotpointercapture\":\n      return (\n        (pointerId = nativeEvent.pointerId),\n        queuedPointerCaptures.set(\n          pointerId,\n          accumulateOrCreateContinuousQueuedReplayableEvent(\n            queuedPointerCaptures.get(pointerId) || null,\n            blockedOn,\n            domEventName,\n            eventSystemFlags,\n            targetContainer,\n            nativeEvent\n          )\n        ),\n        !0\n      );\n  }\n  return !1;\n}\nfunction attemptExplicitHydrationTarget(queuedTarget) {\n  var targetInst = getClosestInstanceFromNode(queuedTarget.target);\n  if (null !== targetInst) {\n    var nearestMounted = getNearestMountedFiber(targetInst);\n    if (null !== nearestMounted)\n      if (((targetInst = nearestMounted.tag), 13 === targetInst)) {\n        if (\n          ((targetInst = getSuspenseInstanceFromFiber(nearestMounted)),\n          null !== targetInst)\n        ) {\n          queuedTarget.blockedOn = targetInst;\n          runWithPriority(queuedTarget.priority, function () {\n            if (13 === nearestMounted.tag) {\n              var lane = requestUpdateLane();\n              lane = getBumpedLaneForHydrationByLane(lane);\n              var root = enqueueConcurrentRenderForLane(nearestMounted, lane);\n              null !== root &&\n                scheduleUpdateOnFiber(root, nearestMounted, lane);\n              markRetryLaneIfNotHydrated(nearestMounted, lane);\n            }\n          });\n          return;\n        }\n      } else if (\n        3 === targetInst &&\n        nearestMounted.stateNode.current.memoizedState.isDehydrated\n      ) {\n        queuedTarget.blockedOn =\n          3 === nearestMounted.tag\n            ? nearestMounted.stateNode.containerInfo\n            : null;\n        return;\n      }\n  }\n  queuedTarget.blockedOn = null;\n}\nfunction attemptReplayContinuousQueuedEvent(queuedEvent) {\n  if (null !== queuedEvent.blockedOn) return !1;\n  for (\n    var targetContainers = queuedEvent.targetContainers;\n    0 < targetContainers.length;\n\n  ) {\n    var nextBlockedOn = findInstanceBlockingEvent(queuedEvent.nativeEvent);\n    if (null === nextBlockedOn) {\n      nextBlockedOn = queuedEvent.nativeEvent;\n      var nativeEventClone = new nextBlockedOn.constructor(\n        nextBlockedOn.type,\n        nextBlockedOn\n      );\n      currentReplayingEvent = nativeEventClone;\n      nextBlockedOn.target.dispatchEvent(nativeEventClone);\n      currentReplayingEvent = null;\n    } else\n      return (\n        (targetContainers = getInstanceFromNode(nextBlockedOn)),\n        null !== targetContainers &&\n          attemptContinuousHydration(targetContainers),\n        (queuedEvent.blockedOn = nextBlockedOn),\n        !1\n      );\n    targetContainers.shift();\n  }\n  return !0;\n}\nfunction attemptReplayContinuousQueuedEventInMap(queuedEvent, key, map) {\n  attemptReplayContinuousQueuedEvent(queuedEvent) && map.delete(key);\n}\nfunction replayUnblockedEvents() {\n  hasScheduledReplayAttempt = !1;\n  null !== queuedFocus &&\n    attemptReplayContinuousQueuedEvent(queuedFocus) &&\n    (queuedFocus = null);\n  null !== queuedDrag &&\n    attemptReplayContinuousQueuedEvent(queuedDrag) &&\n    (queuedDrag = null);\n  null !== queuedMouse &&\n    attemptReplayContinuousQueuedEvent(queuedMouse) &&\n    (queuedMouse = null);\n  queuedPointers.forEach(attemptReplayContinuousQueuedEventInMap);\n  queuedPointerCaptures.forEach(attemptReplayContinuousQueuedEventInMap);\n}\nfunction scheduleCallbackIfUnblocked(queuedEvent, unblocked) {\n  queuedEvent.blockedOn === unblocked &&\n    ((queuedEvent.blockedOn = null),\n    hasScheduledReplayAttempt ||\n      ((hasScheduledReplayAttempt = !0),\n      Scheduler.unstable_scheduleCallback(\n        Scheduler.unstable_NormalPriority,\n        replayUnblockedEvents\n      )));\n}\nvar lastScheduledReplayQueue = null;\nfunction scheduleReplayQueueIfNeeded(formReplayingQueue) {\n  lastScheduledReplayQueue !== formReplayingQueue &&\n    ((lastScheduledReplayQueue = formReplayingQueue),\n    Scheduler.unstable_scheduleCallback(\n      Scheduler.unstable_NormalPriority,\n      function () {\n        lastScheduledReplayQueue === formReplayingQueue &&\n          (lastScheduledReplayQueue = null);\n        for (var i = 0; i < formReplayingQueue.length; i += 3) {\n          var form = formReplayingQueue[i],\n            submitterOrAction = formReplayingQueue[i + 1],\n            formData = formReplayingQueue[i + 2];\n          if (\"function\" !== typeof submitterOrAction)\n            if (null === findInstanceBlockingTarget(submitterOrAction || form))\n              continue;\n            else break;\n          var formInst = getInstanceFromNode(form);\n          null !== formInst &&\n            (formReplayingQueue.splice(i, 3),\n            (i -= 3),\n            startHostTransition(\n              formInst,\n              {\n                pending: !0,\n                data: formData,\n                method: form.method,\n                action: submitterOrAction\n              },\n              submitterOrAction,\n              formData\n            ));\n        }\n      }\n    ));\n}\nfunction retryIfBlockedOn(unblocked) {\n  function unblock(queuedEvent) {\n    return scheduleCallbackIfUnblocked(queuedEvent, unblocked);\n  }\n  null !== queuedFocus && scheduleCallbackIfUnblocked(queuedFocus, unblocked);\n  null !== queuedDrag && scheduleCallbackIfUnblocked(queuedDrag, unblocked);\n  null !== queuedMouse && scheduleCallbackIfUnblocked(queuedMouse, unblocked);\n  queuedPointers.forEach(unblock);\n  queuedPointerCaptures.forEach(unblock);\n  for (var i = 0; i < queuedExplicitHydrationTargets.length; i++) {\n    var queuedTarget = queuedExplicitHydrationTargets[i];\n    queuedTarget.blockedOn === unblocked && (queuedTarget.blockedOn = null);\n  }\n  for (\n    ;\n    0 < queuedExplicitHydrationTargets.length &&\n    ((i = queuedExplicitHydrationTargets[0]), null === i.blockedOn);\n\n  )\n    attemptExplicitHydrationTarget(i),\n      null === i.blockedOn && queuedExplicitHydrationTargets.shift();\n  i = (unblocked.ownerDocument || unblocked).$$reactFormReplay;\n  if (null != i)\n    for (queuedTarget = 0; queuedTarget < i.length; queuedTarget += 3) {\n      var form = i[queuedTarget],\n        submitterOrAction = i[queuedTarget + 1],\n        formProps = form[internalPropsKey] || null;\n      if (\"function\" === typeof submitterOrAction)\n        formProps || scheduleReplayQueueIfNeeded(i);\n      else if (formProps) {\n        var action = null;\n        if (submitterOrAction && submitterOrAction.hasAttribute(\"formAction\"))\n          if (\n            ((form = submitterOrAction),\n            (formProps = submitterOrAction[internalPropsKey] || null))\n          )\n            action = formProps.formAction;\n          else {\n            if (null !== findInstanceBlockingTarget(form)) continue;\n          }\n        else action = formProps.action;\n        \"function\" === typeof action\n          ? (i[queuedTarget + 1] = action)\n          : (i.splice(queuedTarget, 3), (queuedTarget -= 3));\n        scheduleReplayQueueIfNeeded(i);\n      }\n    }\n}\nfunction ReactDOMRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.render = ReactDOMRoot.prototype.render =\n  function (children) {\n    var root = this._internalRoot;\n    if (null === root) throw Error(formatProdErrorMessage(409));\n    var current = root.current,\n      lane = requestUpdateLane();\n    updateContainerImpl(current, lane, children, root, null, null);\n  };\nReactDOMHydrationRoot.prototype.unmount = ReactDOMRoot.prototype.unmount =\n  function () {\n    var root = this._internalRoot;\n    if (null !== root) {\n      this._internalRoot = null;\n      var container = root.containerInfo;\n      updateContainerImpl(root.current, 2, null, root, null, null);\n      flushSyncWork$1();\n      container[internalContainerInstanceKey] = null;\n    }\n  };\nfunction ReactDOMHydrationRoot(internalRoot) {\n  this._internalRoot = internalRoot;\n}\nReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {\n  if (target) {\n    var updatePriority = resolveUpdatePriority();\n    target = { blockedOn: null, target: target, priority: updatePriority };\n    for (\n      var i = 0;\n      i < queuedExplicitHydrationTargets.length &&\n      0 !== updatePriority &&\n      updatePriority < queuedExplicitHydrationTargets[i].priority;\n      i++\n    );\n    queuedExplicitHydrationTargets.splice(i, 0, target);\n    0 === i && attemptExplicitHydrationTarget(target);\n  }\n};\nvar isomorphicReactPackageVersion$jscomp$inline_1785 = React.version;\nif (\n  \"19.1.0\" !==\n  isomorphicReactPackageVersion$jscomp$inline_1785\n)\n  throw Error(\n    formatProdErrorMessage(\n      527,\n      isomorphicReactPackageVersion$jscomp$inline_1785,\n      \"19.1.0\"\n    )\n  );\nReactDOMSharedInternals.findDOMNode = function (componentOrElement) {\n  var fiber = componentOrElement._reactInternals;\n  if (void 0 === fiber) {\n    if (\"function\" === typeof componentOrElement.render)\n      throw Error(formatProdErrorMessage(188));\n    componentOrElement = Object.keys(componentOrElement).join(\",\");\n    throw Error(formatProdErrorMessage(268, componentOrElement));\n  }\n  componentOrElement = findCurrentFiberUsingSlowPath(fiber);\n  componentOrElement =\n    null !== componentOrElement\n      ? findCurrentHostFiberImpl(componentOrElement)\n      : null;\n  componentOrElement =\n    null === componentOrElement ? null : componentOrElement.stateNode;\n  return componentOrElement;\n};\nvar internals$jscomp$inline_2256 = {\n  bundleType: 0,\n  version: \"19.1.0\",\n  rendererPackageName: \"react-dom\",\n  currentDispatcherRef: ReactSharedInternals,\n  reconcilerVersion: \"19.1.0\"\n};\nif (\"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {\n  var hook$jscomp$inline_2257 = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n  if (\n    !hook$jscomp$inline_2257.isDisabled &&\n    hook$jscomp$inline_2257.supportsFiber\n  )\n    try {\n      (rendererID = hook$jscomp$inline_2257.inject(\n        internals$jscomp$inline_2256\n      )),\n        (injectedHook = hook$jscomp$inline_2257);\n    } catch (err) {}\n}\nexports.createRoot = function (container, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    transitionCallbacks = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.unstable_transitionCallbacks &&\n      (transitionCallbacks = options.unstable_transitionCallbacks));\n  options = createFiberRoot(\n    container,\n    1,\n    !1,\n    null,\n    null,\n    isStrictMode,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    transitionCallbacks,\n    null\n  );\n  container[internalContainerInstanceKey] = options.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMRoot(options);\n};\nexports.hydrateRoot = function (container, initialChildren, options) {\n  if (!isValidContainer(container)) throw Error(formatProdErrorMessage(299));\n  var isStrictMode = !1,\n    identifierPrefix = \"\",\n    onUncaughtError = defaultOnUncaughtError,\n    onCaughtError = defaultOnCaughtError,\n    onRecoverableError = defaultOnRecoverableError,\n    transitionCallbacks = null,\n    formState = null;\n  null !== options &&\n    void 0 !== options &&\n    (!0 === options.unstable_strictMode && (isStrictMode = !0),\n    void 0 !== options.identifierPrefix &&\n      (identifierPrefix = options.identifierPrefix),\n    void 0 !== options.onUncaughtError &&\n      (onUncaughtError = options.onUncaughtError),\n    void 0 !== options.onCaughtError && (onCaughtError = options.onCaughtError),\n    void 0 !== options.onRecoverableError &&\n      (onRecoverableError = options.onRecoverableError),\n    void 0 !== options.unstable_transitionCallbacks &&\n      (transitionCallbacks = options.unstable_transitionCallbacks),\n    void 0 !== options.formState && (formState = options.formState));\n  initialChildren = createFiberRoot(\n    container,\n    1,\n    !0,\n    initialChildren,\n    null != options ? options : null,\n    isStrictMode,\n    identifierPrefix,\n    onUncaughtError,\n    onCaughtError,\n    onRecoverableError,\n    transitionCallbacks,\n    formState\n  );\n  initialChildren.context = getContextForSubtree(null);\n  options = initialChildren.current;\n  isStrictMode = requestUpdateLane();\n  isStrictMode = getBumpedLaneForHydrationByLane(isStrictMode);\n  identifierPrefix = createUpdate(isStrictMode);\n  identifierPrefix.callback = null;\n  enqueueUpdate(options, identifierPrefix, isStrictMode);\n  options = isStrictMode;\n  initialChildren.current.lanes = options;\n  markRootUpdated$1(initialChildren, options);\n  ensureRootIsScheduled(initialChildren);\n  container[internalContainerInstanceKey] = initialChildren.current;\n  listenToAllSupportedEvents(container);\n  return new ReactDOMHydrationRoot(initialChildren);\n};\nexports.version = \"19.1.0\";\n","'use strict';\n\nfunction checkDCE() {\n  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */\n  if (\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||\n    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'\n  ) {\n    return;\n  }\n  if (process.env.NODE_ENV !== 'production') {\n    // This branch is unreachable because this function is only called\n    // in production, but the condition is true only in development.\n    // Therefore if the branch is still here, dead code elimination wasn't\n    // properly applied.\n    // Don't change the message. React DevTools relies on it. Also make sure\n    // this message doesn't occur elsewhere in this function, or it will cause\n    // a false positive.\n    throw new Error('^_^');\n  }\n  try {\n    // Verify that the code above has been dead code eliminated (DCE'd).\n    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);\n  } catch (err) {\n    // DevTools shouldn't crash React, no matter what.\n    // We should still report in case we break this code.\n    console.error(err);\n  }\n}\n\nif (process.env.NODE_ENV === 'production') {\n  // DCE check should happen before ReactDOM bundle executes so that\n  // DevTools can report bad minification during injection.\n  checkDCE();\n  module.exports = require('./cjs/react-dom-client.production.js');\n} else {\n  module.exports = require('./cjs/react-dom-client.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var e=require(\"react\");function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k=\"function\"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}\nfunction r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u=\"undefined\"===typeof window||\"undefined\"===typeof window.document||\"undefined\"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim.production.min.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var h=require(\"react\"),n=require(\"use-sync-external-store/shim\");function p(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var q=\"function\"===typeof Object.is?Object.is:p,r=n.useSyncExternalStore,t=h.useRef,u=h.useEffect,v=h.useMemo,w=h.useDebugValue;\nexports.useSyncExternalStoreWithSelector=function(a,b,e,l,g){var c=t(null);if(null===c.current){var f={hasValue:!1,value:null};c.current=f}else f=c.current;c=v(function(){function a(a){if(!c){c=!0;d=a;a=l(a);if(void 0!==g&&f.hasValue){var b=f.value;if(g(b,a))return k=b}return k=a}b=k;if(q(d,a))return b;var e=l(a);if(void 0!==g&&g(b,e))return b;d=a;return k=e}var c=!1,d,k,m=void 0===e?null:e;return[function(){return a(b())},null===m?void 0:function(){return a(m())}]},[b,e,l,g]);var d=r(a,c[0],c[1]);\nu(function(){f.hasValue=!0;f.value=d},[d]);w(d);return d};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.min.js');\n} else {\n  module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","// Default to a dummy \"batch\" implementation that just runs the callback\nfunction defaultNoopBatch(callback) {\n  callback();\n}\n\nlet batch = defaultNoopBatch; // Allow injecting another batching function later\n\nexport const setBatch = newBatch => batch = newBatch; // Supply a getter just to skip dealing with ESM bindings\n\nexport const getBatch = () => batch;","import * as React from 'react';\nconst ContextKey = Symbol.for(`react-redux-context`);\nconst gT = typeof globalThis !== \"undefined\" ? globalThis :\n/* fall back to a per-module scope (pre-8.1 behaviour) if `globalThis` is not available */\n{};\n\nfunction getContext() {\n  var _gT$ContextKey;\n\n  if (!React.createContext) return {};\n  const contextMap = (_gT$ContextKey = gT[ContextKey]) != null ? _gT$ContextKey : gT[ContextKey] = new Map();\n  let realContext = contextMap.get(React.createContext);\n\n  if (!realContext) {\n    realContext = React.createContext(null);\n\n    if (process.env.NODE_ENV !== 'production') {\n      realContext.displayName = 'ReactRedux';\n    }\n\n    contextMap.set(React.createContext, realContext);\n  }\n\n  return realContext;\n}\n\nexport const ReactReduxContext = /*#__PURE__*/getContext();\nexport default ReactReduxContext;","import { useContext } from 'react';\nimport { ReactReduxContext } from '../components/Context';\n\n/**\r\n * Hook factory, which creates a `useReduxContext` hook bound to a given context. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useReduxContext` hook bound to the specified context.\r\n */\nexport function createReduxContextHook(context = ReactReduxContext) {\n  return function useReduxContext() {\n    const contextValue = useContext(context);\n\n    if (process.env.NODE_ENV !== 'production' && !contextValue) {\n      throw new Error('could not find react-redux context value; please ensure the component is wrapped in a <Provider>');\n    }\n\n    return contextValue;\n  };\n}\n/**\r\n * A hook to access the value of the `ReactReduxContext`. This is a low-level\r\n * hook that you should usually not need to call directly.\r\n *\r\n * @returns {any} the value of the `ReactReduxContext`\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useReduxContext } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n *   const { store } = useReduxContext()\r\n *   return <div>{store.getState()}</div>\r\n * }\r\n */\n\nexport const useReduxContext = /*#__PURE__*/createReduxContextHook();","export const notInitialized = () => {\n  throw new Error('uSES not initialized!');\n};","import { useCallback, useDebugValue, useRef } from 'react';\nimport { createReduxContextHook, useReduxContext as useDefaultReduxContext } from './useReduxContext';\nimport { ReactReduxContext } from '../components/Context';\nimport { notInitialized } from '../utils/useSyncExternalStore';\nlet useSyncExternalStoreWithSelector = notInitialized;\nexport const initializeUseSelector = fn => {\n  useSyncExternalStoreWithSelector = fn;\n};\n\nconst refEquality = (a, b) => a === b;\n/**\r\n * Hook factory, which creates a `useSelector` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useSelector` hook bound to the specified context.\r\n */\n\n\nexport function createSelectorHook(context = ReactReduxContext) {\n  const useReduxContext = context === ReactReduxContext ? useDefaultReduxContext : createReduxContextHook(context);\n  return function useSelector(selector, equalityFnOrOptions = {}) {\n    const {\n      equalityFn = refEquality,\n      stabilityCheck = undefined,\n      noopCheck = undefined\n    } = typeof equalityFnOrOptions === 'function' ? {\n      equalityFn: equalityFnOrOptions\n    } : equalityFnOrOptions;\n\n    if (process.env.NODE_ENV !== 'production') {\n      if (!selector) {\n        throw new Error(`You must pass a selector to useSelector`);\n      }\n\n      if (typeof selector !== 'function') {\n        throw new Error(`You must pass a function as a selector to useSelector`);\n      }\n\n      if (typeof equalityFn !== 'function') {\n        throw new Error(`You must pass a function as an equality function to useSelector`);\n      }\n    }\n\n    const {\n      store,\n      subscription,\n      getServerState,\n      stabilityCheck: globalStabilityCheck,\n      noopCheck: globalNoopCheck\n    } = useReduxContext();\n    const firstRun = useRef(true);\n    const wrappedSelector = useCallback({\n      [selector.name](state) {\n        const selected = selector(state);\n\n        if (process.env.NODE_ENV !== 'production') {\n          const finalStabilityCheck = typeof stabilityCheck === 'undefined' ? globalStabilityCheck : stabilityCheck;\n\n          if (finalStabilityCheck === 'always' || finalStabilityCheck === 'once' && firstRun.current) {\n            const toCompare = selector(state);\n\n            if (!equalityFn(selected, toCompare)) {\n              let stack = undefined;\n\n              try {\n                throw new Error();\n              } catch (e) {\n                ;\n                ({\n                  stack\n                } = e);\n              }\n\n              console.warn('Selector ' + (selector.name || 'unknown') + ' returned a different result when called with the same parameters. This can lead to unnecessary rerenders.' + '\\nSelectors that return a new reference (such as an object or an array) should be memoized: https://redux.js.org/usage/deriving-data-selectors#optimizing-selectors-with-memoization', {\n                state,\n                selected,\n                selected2: toCompare,\n                stack\n              });\n            }\n          }\n\n          const finalNoopCheck = typeof noopCheck === 'undefined' ? globalNoopCheck : noopCheck;\n\n          if (finalNoopCheck === 'always' || finalNoopCheck === 'once' && firstRun.current) {\n            // @ts-ignore\n            if (selected === state) {\n              let stack = undefined;\n\n              try {\n                throw new Error();\n              } catch (e) {\n                ;\n                ({\n                  stack\n                } = e);\n              }\n\n              console.warn('Selector ' + (selector.name || 'unknown') + ' returned the root state when called. This can lead to unnecessary rerenders.' + '\\nSelectors that return the entire state are almost certainly a mistake, as they will cause a rerender whenever *anything* in state changes.', {\n                stack\n              });\n            }\n          }\n\n          if (firstRun.current) firstRun.current = false;\n        }\n\n        return selected;\n      }\n\n    }[selector.name], [selector, globalStabilityCheck, stabilityCheck]);\n    const selectedState = useSyncExternalStoreWithSelector(subscription.addNestedSub, store.getState, getServerState || store.getState, wrappedSelector, equalityFn);\n    useDebugValue(selectedState);\n    return selectedState;\n  };\n}\n/**\r\n * A hook to access the redux store's state. This hook takes a selector function\r\n * as an argument. The selector is called with the store state.\r\n *\r\n * This hook takes an optional equality comparison function as the second parameter\r\n * that allows you to customize the way the selected state is compared to determine\r\n * whether the component needs to be re-rendered.\r\n *\r\n * @param {Function} selector the selector function\r\n * @param {Function=} equalityFn the function that will be used to determine equality\r\n *\r\n * @returns {any} the selected state\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useSelector } from 'react-redux'\r\n *\r\n * export const CounterComponent = () => {\r\n *   const counter = useSelector(state => state.counter)\r\n *   return <div>{counter}</div>\r\n * }\r\n */\n\nexport const useSelector = /*#__PURE__*/createSelectorHook();","/** @license React v16.13.1\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';var b=\"function\"===typeof Symbol&&Symbol.for,c=b?Symbol.for(\"react.element\"):60103,d=b?Symbol.for(\"react.portal\"):60106,e=b?Symbol.for(\"react.fragment\"):60107,f=b?Symbol.for(\"react.strict_mode\"):60108,g=b?Symbol.for(\"react.profiler\"):60114,h=b?Symbol.for(\"react.provider\"):60109,k=b?Symbol.for(\"react.context\"):60110,l=b?Symbol.for(\"react.async_mode\"):60111,m=b?Symbol.for(\"react.concurrent_mode\"):60111,n=b?Symbol.for(\"react.forward_ref\"):60112,p=b?Symbol.for(\"react.suspense\"):60113,q=b?\nSymbol.for(\"react.suspense_list\"):60120,r=b?Symbol.for(\"react.memo\"):60115,t=b?Symbol.for(\"react.lazy\"):60116,v=b?Symbol.for(\"react.block\"):60121,w=b?Symbol.for(\"react.fundamental\"):60117,x=b?Symbol.for(\"react.responder\"):60118,y=b?Symbol.for(\"react.scope\"):60119;\nfunction z(a){if(\"object\"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;\nexports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};\nexports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||\"object\"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n  module.exports = require('./cjs/react-is.production.min.js');\n} else {\n  module.exports = require('./cjs/react-is.development.js');\n}\n","'use strict';\n\nvar reactIs = require('react-is');\n\n/**\n * Copyright 2015, Yahoo! Inc.\n * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.\n */\nvar REACT_STATICS = {\n  childContextTypes: true,\n  contextType: true,\n  contextTypes: true,\n  defaultProps: true,\n  displayName: true,\n  getDefaultProps: true,\n  getDerivedStateFromError: true,\n  getDerivedStateFromProps: true,\n  mixins: true,\n  propTypes: true,\n  type: true\n};\nvar KNOWN_STATICS = {\n  name: true,\n  length: true,\n  prototype: true,\n  caller: true,\n  callee: true,\n  arguments: true,\n  arity: true\n};\nvar FORWARD_REF_STATICS = {\n  '$$typeof': true,\n  render: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true\n};\nvar MEMO_STATICS = {\n  '$$typeof': true,\n  compare: true,\n  defaultProps: true,\n  displayName: true,\n  propTypes: true,\n  type: true\n};\nvar TYPE_STATICS = {};\nTYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;\nTYPE_STATICS[reactIs.Memo] = MEMO_STATICS;\n\nfunction getStatics(component) {\n  // React v16.11 and below\n  if (reactIs.isMemo(component)) {\n    return MEMO_STATICS;\n  } // React v16.12 and above\n\n\n  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;\n}\n\nvar defineProperty = Object.defineProperty;\nvar getOwnPropertyNames = Object.getOwnPropertyNames;\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\nvar getPrototypeOf = Object.getPrototypeOf;\nvar objectPrototype = Object.prototype;\nfunction hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {\n  if (typeof sourceComponent !== 'string') {\n    // don't hoist over string (html) components\n    if (objectPrototype) {\n      var inheritedComponent = getPrototypeOf(sourceComponent);\n\n      if (inheritedComponent && inheritedComponent !== objectPrototype) {\n        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);\n      }\n    }\n\n    var keys = getOwnPropertyNames(sourceComponent);\n\n    if (getOwnPropertySymbols) {\n      keys = keys.concat(getOwnPropertySymbols(sourceComponent));\n    }\n\n    var targetStatics = getStatics(targetComponent);\n    var sourceStatics = getStatics(sourceComponent);\n\n    for (var i = 0; i < keys.length; ++i) {\n      var key = keys[i];\n\n      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {\n        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);\n\n        try {\n          // Avoid failures from read-only properties\n          defineProperty(targetComponent, key, descriptor);\n        } catch (e) {}\n      }\n    }\n  }\n\n  return targetComponent;\n}\n\nmodule.exports = hoistNonReactStatics;\n","/**\n * @license React\n * react-is.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var b=Symbol.for(\"react.element\"),c=Symbol.for(\"react.portal\"),d=Symbol.for(\"react.fragment\"),e=Symbol.for(\"react.strict_mode\"),f=Symbol.for(\"react.profiler\"),g=Symbol.for(\"react.provider\"),h=Symbol.for(\"react.context\"),k=Symbol.for(\"react.server_context\"),l=Symbol.for(\"react.forward_ref\"),m=Symbol.for(\"react.suspense\"),n=Symbol.for(\"react.suspense_list\"),p=Symbol.for(\"react.memo\"),q=Symbol.for(\"react.lazy\"),t=Symbol.for(\"react.offscreen\"),u;u=Symbol.for(\"react.module.reference\");\nfunction v(a){if(\"object\"===typeof a&&null!==a){var r=a.$$typeof;switch(r){case b:switch(a=a.type,a){case d:case f:case e:case m:case n:return a;default:switch(a=a&&a.$$typeof,a){case k:case h:case l:case q:case p:case g:return a;default:return r}}case c:return r}}}exports.ContextConsumer=h;exports.ContextProvider=g;exports.Element=b;exports.ForwardRef=l;exports.Fragment=d;exports.Lazy=q;exports.Memo=p;exports.Portal=c;exports.Profiler=f;exports.StrictMode=e;exports.Suspense=m;\nexports.SuspenseList=n;exports.isAsyncMode=function(){return!1};exports.isConcurrentMode=function(){return!1};exports.isContextConsumer=function(a){return v(a)===h};exports.isContextProvider=function(a){return v(a)===g};exports.isElement=function(a){return\"object\"===typeof a&&null!==a&&a.$$typeof===b};exports.isForwardRef=function(a){return v(a)===l};exports.isFragment=function(a){return v(a)===d};exports.isLazy=function(a){return v(a)===q};exports.isMemo=function(a){return v(a)===p};\nexports.isPortal=function(a){return v(a)===c};exports.isProfiler=function(a){return v(a)===f};exports.isStrictMode=function(a){return v(a)===e};exports.isSuspense=function(a){return v(a)===m};exports.isSuspenseList=function(a){return v(a)===n};\nexports.isValidElementType=function(a){return\"string\"===typeof a||\"function\"===typeof a||a===d||a===f||a===e||a===m||a===n||a===t||\"object\"===typeof a&&null!==a&&(a.$$typeof===q||a.$$typeof===p||a.$$typeof===g||a.$$typeof===h||a.$$typeof===l||a.$$typeof===u||void 0!==a.getModuleId)?!0:!1};exports.typeOf=v;\n","import { getBatch } from './batch'; // encapsulates the subscription logic for connecting a component to the redux store, as\n// well as nesting subscriptions of descendant components, so that we can ensure the\n// ancestor components re-render before descendants\n\nfunction createListenerCollection() {\n  const batch = getBatch();\n  let first = null;\n  let last = null;\n  return {\n    clear() {\n      first = null;\n      last = null;\n    },\n\n    notify() {\n      batch(() => {\n        let listener = first;\n\n        while (listener) {\n          listener.callback();\n          listener = listener.next;\n        }\n      });\n    },\n\n    get() {\n      let listeners = [];\n      let listener = first;\n\n      while (listener) {\n        listeners.push(listener);\n        listener = listener.next;\n      }\n\n      return listeners;\n    },\n\n    subscribe(callback) {\n      let isSubscribed = true;\n      let listener = last = {\n        callback,\n        next: null,\n        prev: last\n      };\n\n      if (listener.prev) {\n        listener.prev.next = listener;\n      } else {\n        first = listener;\n      }\n\n      return function unsubscribe() {\n        if (!isSubscribed || first === null) return;\n        isSubscribed = false;\n\n        if (listener.next) {\n          listener.next.prev = listener.prev;\n        } else {\n          last = listener.prev;\n        }\n\n        if (listener.prev) {\n          listener.prev.next = listener.next;\n        } else {\n          first = listener.next;\n        }\n      };\n    }\n\n  };\n}\n\nconst nullListeners = {\n  notify() {},\n\n  get: () => []\n};\nexport function createSubscription(store, parentSub) {\n  let unsubscribe;\n  let listeners = nullListeners; // Reasons to keep the subscription active\n\n  let subscriptionsAmount = 0; // Is this specific subscription subscribed (or only nested ones?)\n\n  let selfSubscribed = false;\n\n  function addNestedSub(listener) {\n    trySubscribe();\n    const cleanupListener = listeners.subscribe(listener); // cleanup nested sub\n\n    let removed = false;\n    return () => {\n      if (!removed) {\n        removed = true;\n        cleanupListener();\n        tryUnsubscribe();\n      }\n    };\n  }\n\n  function notifyNestedSubs() {\n    listeners.notify();\n  }\n\n  function handleChangeWrapper() {\n    if (subscription.onStateChange) {\n      subscription.onStateChange();\n    }\n  }\n\n  function isSubscribed() {\n    return selfSubscribed;\n  }\n\n  function trySubscribe() {\n    subscriptionsAmount++;\n\n    if (!unsubscribe) {\n      unsubscribe = parentSub ? parentSub.addNestedSub(handleChangeWrapper) : store.subscribe(handleChangeWrapper);\n      listeners = createListenerCollection();\n    }\n  }\n\n  function tryUnsubscribe() {\n    subscriptionsAmount--;\n\n    if (unsubscribe && subscriptionsAmount === 0) {\n      unsubscribe();\n      unsubscribe = undefined;\n      listeners.clear();\n      listeners = nullListeners;\n    }\n  }\n\n  function trySubscribeSelf() {\n    if (!selfSubscribed) {\n      selfSubscribed = true;\n      trySubscribe();\n    }\n  }\n\n  function tryUnsubscribeSelf() {\n    if (selfSubscribed) {\n      selfSubscribed = false;\n      tryUnsubscribe();\n    }\n  }\n\n  const subscription = {\n    addNestedSub,\n    notifyNestedSubs,\n    handleChangeWrapper,\n    isSubscribed,\n    trySubscribe: trySubscribeSelf,\n    tryUnsubscribe: tryUnsubscribeSelf,\n    getListeners: () => listeners\n  };\n  return subscription;\n}","import * as React from 'react'; // React currently throws a warning when using useLayoutEffect on the server.\n// To get around it, we can conditionally useEffect on the server (no-op) and\n// useLayoutEffect in the browser. We need useLayoutEffect to ensure the store\n// subscription callback always has the selector from the latest render commit\n// available, otherwise a store update may happen between render and the effect,\n// which may cause missed updates; we also must ensure the store subscription\n// is created synchronously, otherwise a store update may occur before the\n// subscription is created and an inconsistent state may be observed\n// Matches logic in React's `shared/ExecutionEnvironment` file\n\nexport const canUseDOM = !!(typeof window !== 'undefined' && typeof window.document !== 'undefined' && typeof window.document.createElement !== 'undefined');\nexport const useIsomorphicLayoutEffect = canUseDOM ? React.useLayoutEffect : React.useEffect;","import * as React from 'react';\nimport { ReactReduxContext } from './Context';\nimport { createSubscription } from '../utils/Subscription';\nimport { useIsomorphicLayoutEffect } from '../utils/useIsomorphicLayoutEffect';\n\nfunction Provider({\n  store,\n  context,\n  children,\n  serverState,\n  stabilityCheck = 'once',\n  noopCheck = 'once'\n}) {\n  const contextValue = React.useMemo(() => {\n    const subscription = createSubscription(store);\n    return {\n      store,\n      subscription,\n      getServerState: serverState ? () => serverState : undefined,\n      stabilityCheck,\n      noopCheck\n    };\n  }, [store, serverState, stabilityCheck, noopCheck]);\n  const previousState = React.useMemo(() => store.getState(), [store]);\n  useIsomorphicLayoutEffect(() => {\n    const {\n      subscription\n    } = contextValue;\n    subscription.onStateChange = subscription.notifyNestedSubs;\n    subscription.trySubscribe();\n\n    if (previousState !== store.getState()) {\n      subscription.notifyNestedSubs();\n    }\n\n    return () => {\n      subscription.tryUnsubscribe();\n      subscription.onStateChange = undefined;\n    };\n  }, [contextValue, previousState]);\n  const Context = context || ReactReduxContext; // @ts-ignore 'AnyAction' is assignable to the constraint of type 'A', but 'A' could be instantiated with a different subtype\n\n  return /*#__PURE__*/React.createElement(Context.Provider, {\n    value: contextValue\n  }, children);\n}\n\nexport default Provider;","import { ReactReduxContext } from '../components/Context';\nimport { useReduxContext as useDefaultReduxContext, createReduxContextHook } from './useReduxContext';\n/**\r\n * Hook factory, which creates a `useStore` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useStore` hook bound to the specified context.\r\n */\n\nexport function createStoreHook(context = ReactReduxContext) {\n  const useReduxContext = // @ts-ignore\n  context === ReactReduxContext ? useDefaultReduxContext : // @ts-ignore\n  createReduxContextHook(context);\n  return function useStore() {\n    const {\n      store\n    } = useReduxContext(); // @ts-ignore\n\n    return store;\n  };\n}\n/**\r\n * A hook to access the redux store.\r\n *\r\n * @returns {any} the redux store\r\n *\r\n * @example\r\n *\r\n * import React from 'react'\r\n * import { useStore } from 'react-redux'\r\n *\r\n * export const ExampleComponent = () => {\r\n *   const store = useStore()\r\n *   return <div>{store.getState()}</div>\r\n * }\r\n */\n\nexport const useStore = /*#__PURE__*/createStoreHook();","import { ReactReduxContext } from '../components/Context';\nimport { useStore as useDefaultStore, createStoreHook } from './useStore';\n/**\r\n * Hook factory, which creates a `useDispatch` hook bound to a given context.\r\n *\r\n * @param {React.Context} [context=ReactReduxContext] Context passed to your `<Provider>`.\r\n * @returns {Function} A `useDispatch` hook bound to the specified context.\r\n */\n\nexport function createDispatchHook(context = ReactReduxContext) {\n  const useStore = // @ts-ignore\n  context === ReactReduxContext ? useDefaultStore : createStoreHook(context);\n  return function useDispatch() {\n    const store = useStore(); // @ts-ignore\n\n    return store.dispatch;\n  };\n}\n/**\r\n * A hook to access the redux `dispatch` function.\r\n *\r\n * @returns {any|function} redux store's `dispatch` function\r\n *\r\n * @example\r\n *\r\n * import React, { useCallback } from 'react'\r\n * import { useDispatch } from 'react-redux'\r\n *\r\n * export const CounterComponent = ({ value }) => {\r\n *   const dispatch = useDispatch()\r\n *   const increaseCounter = useCallback(() => dispatch({ type: 'increase-counter' }), [])\r\n *   return (\r\n *     <div>\r\n *       <span>{value}</span>\r\n *       <button onClick={increaseCounter}>Increase counter</button>\r\n *     </div>\r\n *   )\r\n * }\r\n */\n\nexport const useDispatch = /*#__PURE__*/createDispatchHook();","// src/utils/formatProdErrorMessage.ts\nfunction formatProdErrorMessage(code) {\n  return `Minified Redux error #${code}; visit https://redux.js.org/Errors?code=${code} for the full message or use the non-minified dev environment for full errors. `;\n}\n\n// src/utils/symbol-observable.ts\nvar $$observable = /* @__PURE__ */ (() => typeof Symbol === \"function\" && Symbol.observable || \"@@observable\")();\nvar symbol_observable_default = $$observable;\n\n// src/utils/actionTypes.ts\nvar randomString = () => Math.random().toString(36).substring(7).split(\"\").join(\".\");\nvar ActionTypes = {\n  INIT: `@@redux/INIT${/* @__PURE__ */ randomString()}`,\n  REPLACE: `@@redux/REPLACE${/* @__PURE__ */ randomString()}`,\n  PROBE_UNKNOWN_ACTION: () => `@@redux/PROBE_UNKNOWN_ACTION${randomString()}`\n};\nvar actionTypes_default = ActionTypes;\n\n// src/utils/isPlainObject.ts\nfunction isPlainObject(obj) {\n  if (typeof obj !== \"object\" || obj === null)\n    return false;\n  let proto = obj;\n  while (Object.getPrototypeOf(proto) !== null) {\n    proto = Object.getPrototypeOf(proto);\n  }\n  return Object.getPrototypeOf(obj) === proto || Object.getPrototypeOf(obj) === null;\n}\n\n// src/utils/kindOf.ts\nfunction miniKindOf(val) {\n  if (val === void 0)\n    return \"undefined\";\n  if (val === null)\n    return \"null\";\n  const type = typeof val;\n  switch (type) {\n    case \"boolean\":\n    case \"string\":\n    case \"number\":\n    case \"symbol\":\n    case \"function\": {\n      return type;\n    }\n  }\n  if (Array.isArray(val))\n    return \"array\";\n  if (isDate(val))\n    return \"date\";\n  if (isError(val))\n    return \"error\";\n  const constructorName = ctorName(val);\n  switch (constructorName) {\n    case \"Symbol\":\n    case \"Promise\":\n    case \"WeakMap\":\n    case \"WeakSet\":\n    case \"Map\":\n    case \"Set\":\n      return constructorName;\n  }\n  return Object.prototype.toString.call(val).slice(8, -1).toLowerCase().replace(/\\s/g, \"\");\n}\nfunction ctorName(val) {\n  return typeof val.constructor === \"function\" ? val.constructor.name : null;\n}\nfunction isError(val) {\n  return val instanceof Error || typeof val.message === \"string\" && val.constructor && typeof val.constructor.stackTraceLimit === \"number\";\n}\nfunction isDate(val) {\n  if (val instanceof Date)\n    return true;\n  return typeof val.toDateString === \"function\" && typeof val.getDate === \"function\" && typeof val.setDate === \"function\";\n}\nfunction kindOf(val) {\n  let typeOfVal = typeof val;\n  if (process.env.NODE_ENV !== \"production\") {\n    typeOfVal = miniKindOf(val);\n  }\n  return typeOfVal;\n}\n\n// src/createStore.ts\nfunction createStore(reducer, preloadedState, enhancer) {\n  if (typeof reducer !== \"function\") {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(2) : `Expected the root reducer to be a function. Instead, received: '${kindOf(reducer)}'`);\n  }\n  if (typeof preloadedState === \"function\" && typeof enhancer === \"function\" || typeof enhancer === \"function\" && typeof arguments[3] === \"function\") {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(0) : \"It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function. See https://redux.js.org/tutorials/fundamentals/part-4-store#creating-a-store-with-enhancers for an example.\");\n  }\n  if (typeof preloadedState === \"function\" && typeof enhancer === \"undefined\") {\n    enhancer = preloadedState;\n    preloadedState = void 0;\n  }\n  if (typeof enhancer !== \"undefined\") {\n    if (typeof enhancer !== \"function\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(1) : `Expected the enhancer to be a function. Instead, received: '${kindOf(enhancer)}'`);\n    }\n    return enhancer(createStore)(reducer, preloadedState);\n  }\n  let currentReducer = reducer;\n  let currentState = preloadedState;\n  let currentListeners = /* @__PURE__ */ new Map();\n  let nextListeners = currentListeners;\n  let listenerIdCounter = 0;\n  let isDispatching = false;\n  function ensureCanMutateNextListeners() {\n    if (nextListeners === currentListeners) {\n      nextListeners = /* @__PURE__ */ new Map();\n      currentListeners.forEach((listener, key) => {\n        nextListeners.set(key, listener);\n      });\n    }\n  }\n  function getState() {\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(3) : \"You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.\");\n    }\n    return currentState;\n  }\n  function subscribe(listener) {\n    if (typeof listener !== \"function\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(4) : `Expected the listener to be a function. Instead, received: '${kindOf(listener)}'`);\n    }\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(5) : \"You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api/store#subscribelistener for more details.\");\n    }\n    let isSubscribed = true;\n    ensureCanMutateNextListeners();\n    const listenerId = listenerIdCounter++;\n    nextListeners.set(listenerId, listener);\n    return function unsubscribe() {\n      if (!isSubscribed) {\n        return;\n      }\n      if (isDispatching) {\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(6) : \"You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api/store#subscribelistener for more details.\");\n      }\n      isSubscribed = false;\n      ensureCanMutateNextListeners();\n      nextListeners.delete(listenerId);\n      currentListeners = null;\n    };\n  }\n  function dispatch(action) {\n    if (!isPlainObject(action)) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(7) : `Actions must be plain objects. Instead, the actual type was: '${kindOf(action)}'. You may need to add middleware to your store setup to handle dispatching other values, such as 'redux-thunk' to handle dispatching functions. See https://redux.js.org/tutorials/fundamentals/part-4-store#middleware and https://redux.js.org/tutorials/fundamentals/part-6-async-logic#using-the-redux-thunk-middleware for examples.`);\n    }\n    if (typeof action.type === \"undefined\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(8) : 'Actions may not have an undefined \"type\" property. You may have misspelled an action type string constant.');\n    }\n    if (typeof action.type !== \"string\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(17) : `Action \"type\" property must be a string. Instead, the actual type was: '${kindOf(action.type)}'. Value was: '${action.type}' (stringified)`);\n    }\n    if (isDispatching) {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(9) : \"Reducers may not dispatch actions.\");\n    }\n    try {\n      isDispatching = true;\n      currentState = currentReducer(currentState, action);\n    } finally {\n      isDispatching = false;\n    }\n    const listeners = currentListeners = nextListeners;\n    listeners.forEach((listener) => {\n      listener();\n    });\n    return action;\n  }\n  function replaceReducer(nextReducer) {\n    if (typeof nextReducer !== \"function\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(10) : `Expected the nextReducer to be a function. Instead, received: '${kindOf(nextReducer)}`);\n    }\n    currentReducer = nextReducer;\n    dispatch({\n      type: actionTypes_default.REPLACE\n    });\n  }\n  function observable() {\n    const outerSubscribe = subscribe;\n    return {\n      /**\n       * The minimal observable subscription method.\n       * @param observer Any object that can be used as an observer.\n       * The observer object should have a `next` method.\n       * @returns An object with an `unsubscribe` method that can\n       * be used to unsubscribe the observable from the store, and prevent further\n       * emission of values from the observable.\n       */\n      subscribe(observer) {\n        if (typeof observer !== \"object\" || observer === null) {\n          throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(11) : `Expected the observer to be an object. Instead, received: '${kindOf(observer)}'`);\n        }\n        function observeState() {\n          const observerAsObserver = observer;\n          if (observerAsObserver.next) {\n            observerAsObserver.next(getState());\n          }\n        }\n        observeState();\n        const unsubscribe = outerSubscribe(observeState);\n        return {\n          unsubscribe\n        };\n      },\n      [symbol_observable_default]() {\n        return this;\n      }\n    };\n  }\n  dispatch({\n    type: actionTypes_default.INIT\n  });\n  const store = {\n    dispatch,\n    subscribe,\n    getState,\n    replaceReducer,\n    [symbol_observable_default]: observable\n  };\n  return store;\n}\nfunction legacy_createStore(reducer, preloadedState, enhancer) {\n  return createStore(reducer, preloadedState, enhancer);\n}\n\n// src/utils/warning.ts\nfunction warning(message) {\n  if (typeof console !== \"undefined\" && typeof console.error === \"function\") {\n    console.error(message);\n  }\n  try {\n    throw new Error(message);\n  } catch (e) {\n  }\n}\n\n// src/combineReducers.ts\nfunction getUnexpectedStateShapeWarningMessage(inputState, reducers, action, unexpectedKeyCache) {\n  const reducerKeys = Object.keys(reducers);\n  const argumentName = action && action.type === actionTypes_default.INIT ? \"preloadedState argument passed to createStore\" : \"previous state received by the reducer\";\n  if (reducerKeys.length === 0) {\n    return \"Store does not have a valid reducer. Make sure the argument passed to combineReducers is an object whose values are reducers.\";\n  }\n  if (!isPlainObject(inputState)) {\n    return `The ${argumentName} has unexpected type of \"${kindOf(inputState)}\". Expected argument to be an object with the following keys: \"${reducerKeys.join('\", \"')}\"`;\n  }\n  const unexpectedKeys = Object.keys(inputState).filter((key) => !reducers.hasOwnProperty(key) && !unexpectedKeyCache[key]);\n  unexpectedKeys.forEach((key) => {\n    unexpectedKeyCache[key] = true;\n  });\n  if (action && action.type === actionTypes_default.REPLACE)\n    return;\n  if (unexpectedKeys.length > 0) {\n    return `Unexpected ${unexpectedKeys.length > 1 ? \"keys\" : \"key\"} \"${unexpectedKeys.join('\", \"')}\" found in ${argumentName}. Expected to find one of the known reducer keys instead: \"${reducerKeys.join('\", \"')}\". Unexpected keys will be ignored.`;\n  }\n}\nfunction assertReducerShape(reducers) {\n  Object.keys(reducers).forEach((key) => {\n    const reducer = reducers[key];\n    const initialState = reducer(void 0, {\n      type: actionTypes_default.INIT\n    });\n    if (typeof initialState === \"undefined\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(12) : `The slice reducer for key \"${key}\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don't want to set a value for this reducer, you can use null instead of undefined.`);\n    }\n    if (typeof reducer(void 0, {\n      type: actionTypes_default.PROBE_UNKNOWN_ACTION()\n    }) === \"undefined\") {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(13) : `The slice reducer for key \"${key}\" returned undefined when probed with a random type. Don't try to handle '${actionTypes_default.INIT}' or other actions in \"redux/*\" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.`);\n    }\n  });\n}\nfunction combineReducers(reducers) {\n  const reducerKeys = Object.keys(reducers);\n  const finalReducers = {};\n  for (let i = 0; i < reducerKeys.length; i++) {\n    const key = reducerKeys[i];\n    if (process.env.NODE_ENV !== \"production\") {\n      if (typeof reducers[key] === \"undefined\") {\n        warning(`No reducer provided for key \"${key}\"`);\n      }\n    }\n    if (typeof reducers[key] === \"function\") {\n      finalReducers[key] = reducers[key];\n    }\n  }\n  const finalReducerKeys = Object.keys(finalReducers);\n  let unexpectedKeyCache;\n  if (process.env.NODE_ENV !== \"production\") {\n    unexpectedKeyCache = {};\n  }\n  let shapeAssertionError;\n  try {\n    assertReducerShape(finalReducers);\n  } catch (e) {\n    shapeAssertionError = e;\n  }\n  return function combination(state = {}, action) {\n    if (shapeAssertionError) {\n      throw shapeAssertionError;\n    }\n    if (process.env.NODE_ENV !== \"production\") {\n      const warningMessage = getUnexpectedStateShapeWarningMessage(state, finalReducers, action, unexpectedKeyCache);\n      if (warningMessage) {\n        warning(warningMessage);\n      }\n    }\n    let hasChanged = false;\n    const nextState = {};\n    for (let i = 0; i < finalReducerKeys.length; i++) {\n      const key = finalReducerKeys[i];\n      const reducer = finalReducers[key];\n      const previousStateForKey = state[key];\n      const nextStateForKey = reducer(previousStateForKey, action);\n      if (typeof nextStateForKey === \"undefined\") {\n        const actionType = action && action.type;\n        throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(14) : `When called with an action of type ${actionType ? `\"${String(actionType)}\"` : \"(unknown type)\"}, the slice reducer for key \"${key}\" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.`);\n      }\n      nextState[key] = nextStateForKey;\n      hasChanged = hasChanged || nextStateForKey !== previousStateForKey;\n    }\n    hasChanged = hasChanged || finalReducerKeys.length !== Object.keys(state).length;\n    return hasChanged ? nextState : state;\n  };\n}\n\n// src/bindActionCreators.ts\nfunction bindActionCreator(actionCreator, dispatch) {\n  return function(...args) {\n    return dispatch(actionCreator.apply(this, args));\n  };\n}\nfunction bindActionCreators(actionCreators, dispatch) {\n  if (typeof actionCreators === \"function\") {\n    return bindActionCreator(actionCreators, dispatch);\n  }\n  if (typeof actionCreators !== \"object\" || actionCreators === null) {\n    throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(16) : `bindActionCreators expected an object or a function, but instead received: '${kindOf(actionCreators)}'. Did you write \"import ActionCreators from\" instead of \"import * as ActionCreators from\"?`);\n  }\n  const boundActionCreators = {};\n  for (const key in actionCreators) {\n    const actionCreator = actionCreators[key];\n    if (typeof actionCreator === \"function\") {\n      boundActionCreators[key] = bindActionCreator(actionCreator, dispatch);\n    }\n  }\n  return boundActionCreators;\n}\n\n// src/compose.ts\nfunction compose(...funcs) {\n  if (funcs.length === 0) {\n    return (arg) => arg;\n  }\n  if (funcs.length === 1) {\n    return funcs[0];\n  }\n  return funcs.reduce((a, b) => (...args) => a(b(...args)));\n}\n\n// src/applyMiddleware.ts\nfunction applyMiddleware(...middlewares) {\n  return (createStore2) => (reducer, preloadedState) => {\n    const store = createStore2(reducer, preloadedState);\n    let dispatch = () => {\n      throw new Error(process.env.NODE_ENV === \"production\" ? formatProdErrorMessage(15) : \"Dispatching while constructing your middleware is not allowed. Other middleware would not be applied to this dispatch.\");\n    };\n    const middlewareAPI = {\n      getState: store.getState,\n      dispatch: (action, ...args) => dispatch(action, ...args)\n    };\n    const chain = middlewares.map((middleware) => middleware(middlewareAPI));\n    dispatch = compose(...chain)(store.dispatch);\n    return {\n      ...store,\n      dispatch\n    };\n  };\n}\n\n// src/utils/isAction.ts\nfunction isAction(action) {\n  return isPlainObject(action) && \"type\" in action && typeof action.type === \"string\";\n}\nexport {\n  actionTypes_default as __DO_NOT_USE__ActionTypes,\n  applyMiddleware,\n  bindActionCreators,\n  combineReducers,\n  compose,\n  createStore,\n  isAction,\n  isPlainObject,\n  legacy_createStore\n};\n//# sourceMappingURL=redux.mjs.map","// The primary entry point assumes we're working with standard ReactDOM/RN, but\n// older versions that do not include `useSyncExternalStore` (React 16.9 - 17.x).\n// Because of that, the useSyncExternalStore compat shim is needed.\nimport { useSyncExternalStore } from 'use-sync-external-store/shim';\nimport { useSyncExternalStoreWithSelector } from 'use-sync-external-store/shim/with-selector';\nimport { unstable_batchedUpdates as batch } from './utils/reactBatchedUpdates';\nimport { setBatch } from './utils/batch';\nimport { initializeUseSelector } from './hooks/useSelector';\nimport { initializeConnect } from './components/connect';\ninitializeUseSelector(useSyncExternalStoreWithSelector);\ninitializeConnect(useSyncExternalStore); // Enable batched updates in our subscriptions for use\n// with standard React renderers (ReactDOM, React Native)\n\nsetBatch(batch);\nexport { batch };\nexport * from './exports';","/** A function that accepts a potential \"extra argument\" value to be injected later,\r\n * and returns an instance of the thunk middleware that uses that value\r\n */\nfunction createThunkMiddleware(extraArgument) {\n  // Standard Redux middleware definition pattern:\n  // See: https://redux.js.org/tutorials/fundamentals/part-4-store#writing-custom-middleware\n  var middleware = function middleware(_ref) {\n    var dispatch = _ref.dispatch,\n        getState = _ref.getState;\n    return function (next) {\n      return function (action) {\n        // The thunk middleware looks for any functions that were passed to `store.dispatch`.\n        // If this \"action\" is really a function, call it and return the result.\n        if (typeof action === 'function') {\n          // Inject the store's `dispatch` and `getState` methods, as well as any \"extra arg\"\n          return action(dispatch, getState, extraArgument);\n        } // Otherwise, pass the action down the middleware chain as usual\n\n\n        return next(action);\n      };\n    };\n  };\n\n  return middleware;\n}\n\nvar thunk = createThunkMiddleware(); // Attach the factory function so users can create a customized version\n// with whatever \"extra arg\" they want to inject into their thunks\n\nthunk.withExtraArgument = createThunkMiddleware;\nexport default thunk;","'use strict';\n\nvar compose = require('redux').compose;\n\nexports.__esModule = true;\nexports.composeWithDevTools =\n  typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n    ? window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__\n    : function () {\n        if (arguments.length === 0) return undefined;\n        if (typeof arguments[0] === 'object') return compose;\n        return compose.apply(null, arguments);\n      };\n\nexports.devToolsEnhancer =\n  typeof window !== 'undefined' && window.__REDUX_DEVTOOLS_EXTENSION__\n    ? window.__REDUX_DEVTOOLS_EXTENSION__\n    : function () {\n        return function (noop) {\n          return noop;\n        };\n      };\n","export const ADD_TRACK_FROM_URL = \"ADD_TRACK_FROM_URL\";\nexport const CLOSE_WINAMP = \"CLOSE_WINAMP\";\nexport const OPEN_WINAMP = \"OPEN_WINAMP\";\nexport const MINIMIZE_WINAMP = \"MINIMIZE_WINAMP\";\nexport const IS_PLAYING = \"IS_PLAYING\";\nexport const IS_STOPPED = \"IS_STOPPED\";\nexport const PAUSE = \"PAUSE\";\nexport const PLAY = \"PLAY\";\nexport const SEEK_TO_PERCENT_COMPLETE = \"SEEK_TO_PERCENT_COMPLETE\";\nexport const SET_BALANCE = \"SET_BALANCE\";\nexport const SET_BAND_VALUE = \"SET_BAND_VALUE\";\nexport const SET_FOCUS = \"SET_FOCUS\";\nexport const SET_BAND_FOCUS = \"SET_BAND_FOCUS\";\nexport const SET_FOCUSED_WINDOW = \"SET_FOCUSED_WINDOW\";\nexport const SET_MEDIA = \"SET_MEDIA\";\nexport const SET_SCRUB_POSITION = \"SET_SCRUB_POSITION\";\nexport const SET_SKIN_DATA = \"SET_SKIN_DATA\";\nexport const SET_VOLUME = \"SET_VOLUME\";\nexport const START_WORKING = \"START_WORKING\";\nexport const STEP_MARQUEE = \"STEP_MARQUEE\";\nexport const STOP = \"STOP\";\nexport const STOP_WORKING = \"STOP_WORKING\";\nexport const TOGGLE_DOUBLESIZE_MODE = \"TOGGLE_DOUBLESIZE_MODE\";\nexport const SET_EQ_AUTO = \"SET_EQ_AUTO\";\nexport const SET_EQ_ON = \"SET_EQ_ON\";\nexport const SET_EQ_OFF = \"SET_EQ_OFF\";\nexport const TOGGLE_LLAMA_MODE = \"TOGGLE_LLAMA_MODE\";\nexport const TOGGLE_REPEAT = \"TOGGLE_REPEAT\";\nexport const TOGGLE_SHUFFLE = \"TOGGLE_SHUFFLE\";\nexport const TOGGLE_TIME_MODE = \"TOGGLE_TIME_MODE\";\nexport const TOGGLE_VISUALIZER_STYLE = \"TOGGLE_VISUALIZER_STYLE\";\nexport const UNSET_FOCUS = \"UNSET_FOCUS\";\nexport const UPDATE_TIME_ELAPSED = \"UPDATE_TIME_ELAPSED\";\nexport const SET_USER_MESSAGE = \"SET_USER_MESSAGE\";\nexport const UNSET_USER_MESSAGE = \"UNSET_USER_MESSAGE\";\nexport const SET_PLAYLIST_SCROLL_POSITION = \"SET_PLAYLIST_SCROLL_POSITION\";\nexport const CLICKED_TRACK = \"CLICKED_TRACK\";\nexport const CTRL_CLICKED_TRACK = \"CTRL_CLICKED_TRACK\";\nexport const SHIFT_CLICKED_TRACK = \"SHIFT_CLICKED_TRACK\";\nexport const SELECT_ALL = \"SELECT_ALL\";\nexport const SELECT_ZERO = \"SELECT_ZERO\";\nexport const INVERT_SELECTION = \"INVERT_SELECTION\";\nexport const REMOVE_ALL_TRACKS = \"REMOVE_ALL_TRACKS\";\nexport const CROP_TRACKS = \"CROP_TRACKS\";\nexport const FILE_INFO = \"FILE_INFO\";\nexport const REMOVE_TRACKS = \"REMOVE_TRACKS\";\nexport const SET_AVAILABLE_SKINS = \"SET_AVAILABLE_SKINS\";\nexport const REVERSE_LIST = \"REVERSE_LIST\";\nexport const RANDOMIZE_LIST = \"RANDOMIZE_LIST\";\nexport const SET_TRACK_ORDER = \"SET_TRACK_ORDER\";\nexport const PLAY_TRACK = \"PLAY_TRACK\";\nexport const BUFFER_TRACK = \"BUFFER_TRACK\";\nexport const DRAG_SELECTED = \"DRAG_SELECTED\";\nexport const SET_MEDIA_TAGS = \"SET_MEDIA_TAGS\";\nexport const SET_MEDIA_DURATION = \"SET_MEDIA_DURATION\";\nexport const TOGGLE_WINDOW = \"TOGGLE_WINDOW\";\nexport const CLOSE_WINDOW = \"CLOSE_WINDOW\";\nexport const MEDIA_TAG_REQUEST_INITIALIZED = \"MEDIA_TAG_REQUEST_INITIALIZED\";\nexport const MEDIA_TAG_REQUEST_FAILED = \"MEDIA_TAG_REQUEST_FAILED\";\nexport const NETWORK_CONNECTED = \"NETWORK_CONNECTED\";\nexport const NETWORK_DISCONNECTED = \"NETWORK_DISCONNECTED\";\nexport const UPDATE_WINDOW_POSITIONS = \"UPDATE_WINDOW_POSITIONS\";\nexport const WINDOW_SIZE_CHANGED = \"WINDOW_SIZE_CHANGED\";\nexport const TOGGLE_WINDOW_SHADE_MODE = \"TOGGLE_WINDOW_SHADE_MODE\";\nexport const LOADED = \"LOADED\";\nexport const SET_Z_INDEX = \"SET_Z_INDEX\";\nexport const DISABLE_MARQUEE = \"DISABLE_MARQUEE\";\nexport const SET_DUMMY_VIZ_DATA = \"SET_DUMMY_VIZ_DATA\";\nexport const LOADING = \"LOADING\";\nexport const CLOSE_REQUESTED = \"CLOSE_REQUESTED\";\nexport const LOAD_SERIALIZED_STATE = \"LOAD_SERIALIZED_STATE\";\nexport const RESET_WINDOW_SIZES = \"RESET_WINDOW_SIZES\";\nexport const BROWSER_WINDOW_SIZE_CHANGED = \"BROWSER_WINDOW_SIZE_CHANGED\";\nexport const LOAD_DEFAULT_SKIN = \"LOAD_DEFAULT_SKIN\";\nexport const ENABLE_MILKDROP = \"ENABLE_MILKDROP\";\nexport const SET_MILKDROP_DESKTOP = \"SET_MILKDROP_DESKTOP\";\nexport const SET_VISUALIZER_STYLE = \"SET_VISUALIZER_STYLE\";\nexport const GOT_BUTTERCHURN_PRESETS = \"GOT_BUTTERCHURN_PRESETS\";\nexport const GOT_BUTTERCHURN = \"GOT_BUTTERCHURN\";\nexport const RESOLVE_PRESET_AT_INDEX = \"RESOLVE_PRESET_AT_INDEX\";\nexport const SELECT_PRESET_AT_INDEX = \"SELECT_PRESET_AT_INDEX\";\nexport const TOGGLE_PRESET_OVERLAY = \"TOGGLE_PRESET_OVERLAY\";\nexport const PRESET_REQUESTED = \"PRESET_REQUESTED\";\nexport const TOGGLE_RANDOMIZE_PRESETS = \"TOGGLE_RANDOMIZE_PRESETS\";\nexport const TOGGLE_PRESET_CYCLING = \"TOGGLE_PRESET_CYCLING\";\nexport const SCHEDULE_MILKDROP_MESSAGE = \"SCHEDULE_MILKDROP_MESSAGE\";\nexport const SET_MILKDROP_FULLSCREEN = \"SET_MILKDROP_FULLSCREEN\";\n","import {\n  Band,\n  MediaTagRequestStatus,\n  MediaStatus,\n  LoadStyle,\n  TimeMode,\n  WindowId,\n} from \"./types\";\nimport baseSkin from \"./baseSkin.json\";\nexport const BANDS: Band[] = [\n  60, 170, 310, 600, 1000, 3000, 6000, 12000, 14000, 16000,\n];\n\nexport const WINDOWS: { [key: string]: WindowId } = {\n  MAIN: \"main\",\n  PLAYLIST: \"playlist\",\n  EQUALIZER: \"equalizer\",\n  MILKDROP: \"milkdrop\",\n};\n\nexport const LOAD_STYLE: Record<LoadStyle, LoadStyle> = {\n  BUFFER: \"BUFFER\",\n  PLAY: \"PLAY\",\n  NONE: \"NONE\",\n};\n\n// TODO: Make this an enum?\nexport const MEDIA_TAG_REQUEST_STATUS: Record<\n  MediaTagRequestStatus,\n  MediaTagRequestStatus\n> = {\n  INITIALIZED: \"INITIALIZED\",\n  FAILED: \"FAILED\",\n  COMPLETE: \"COMPLETE\",\n  NOT_REQUESTED: \"NOT_REQUESTED\",\n};\n\nexport const UTF8_ELLIPSIS = \"\\u2026\";\nexport const CHARACTER_WIDTH = 5;\nexport const WINDOW_RESIZE_SEGMENT_WIDTH = 25;\nexport const WINDOW_RESIZE_SEGMENT_HEIGHT = 29;\nexport const WINDOW_HEIGHT = 116;\nexport const WINDOW_WIDTH = 275;\nexport const TRACK_HEIGHT = 13;\nexport const LETTERS = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\".split(\"\");\n\nexport const DEFAULT_SKIN = baseSkin;\n\nexport const VISUALIZERS = {\n  OSCILLOSCOPE: \"OSCILLOSCOPE\",\n  BAR: \"BAR\",\n  NONE: \"NONE\",\n  MILKDROP: \"MILKDROP\",\n};\n\nexport const VISUALIZER_ORDER = [\n  VISUALIZERS.BAR,\n  VISUALIZERS.OSCILLOSCOPE, // Order is correct\n  VISUALIZERS.NONE,\n];\n\nexport const TIME_MODE: Record<TimeMode, TimeMode> = {\n  ELAPSED: \"ELAPSED\",\n  REMAINING: \"REMAINING\",\n};\n\n// TODO: Convert to enum once we are fully Typescript\nexport const MEDIA_STATUS: Record<MediaStatus, MediaStatus> = {\n  PLAYING: \"PLAYING\",\n  STOPPED: \"STOPPED\",\n  PAUSED: \"PAUSED\",\n};\n","import { DEFAULT_SKIN } from \"./constants\";\nimport { WindowInfo } from \"./types\";\n\ninterface Time {\n  minutesFirstDigit: string;\n  minutesSecondDigit: string;\n  secondsFirstDigit: string;\n  secondsSecondDigit: string;\n}\n\ninterface IniData {\n  [section: string]: {\n    [key: string]: string;\n  };\n}\n\nexport function imgFromUrl(url: string): Promise<HTMLImageElement> {\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n    img.onload = () => {\n      resolve(img);\n    };\n    img.onerror = reject;\n    img.src = url;\n  });\n}\n\nexport const getTimeObj = (time: number | null): Time => {\n  if (time == null) {\n    // If we clean up `<MiniTime />` we don't need to do this any more.\n    return {\n      minutesFirstDigit: \" \",\n      minutesSecondDigit: \" \",\n      secondsFirstDigit: \" \",\n      secondsSecondDigit: \" \",\n    };\n  }\n  const minutes = Math.floor(time / 60);\n  const seconds = time % 60;\n\n  const digits =\n    time == null\n      ? [\" \", \" \", \" \", \" \"]\n      : [\n          String(Math.floor(minutes / 10)),\n          String(Math.floor(minutes % 10)),\n          String(Math.floor(seconds / 10)),\n          String(Math.floor(seconds % 10)),\n        ];\n\n  const [\n    minutesFirstDigit,\n    minutesSecondDigit,\n    secondsFirstDigit,\n    secondsSecondDigit,\n  ] = digits;\n\n  return {\n    minutesFirstDigit,\n    minutesSecondDigit,\n    secondsFirstDigit,\n    secondsSecondDigit,\n  };\n};\n\nexport const getTimeStr = (\n  time: number | null,\n  truncate: boolean = true\n): string => {\n  if (time == null) {\n    return \"\";\n  }\n  const {\n    minutesFirstDigit,\n    minutesSecondDigit,\n    secondsFirstDigit,\n    secondsSecondDigit,\n  } = getTimeObj(time);\n\n  return [\n    truncate && minutesFirstDigit === \"0\" ? \"\" : minutesFirstDigit,\n    minutesSecondDigit,\n    \":\",\n    secondsFirstDigit,\n    secondsSecondDigit,\n  ].join(\"\");\n};\n\nexport const parseViscolors = (text: string): string[] => {\n  const entries = text.split(\"\\n\");\n  const regex = /^\\s*(\\d+)\\s*,?\\s*(\\d+)\\s*,?\\s*(\\d+)/;\n  const colors = [...DEFAULT_SKIN.colors];\n  entries\n    .map((line) => regex.exec(line))\n    .filter(Boolean)\n    .map((matches) => (matches as RegExpExecArray).slice(1, 4).join(\",\"))\n    .map((rgb, i) => {\n      colors[i] = `rgb(${rgb})`;\n    });\n  return colors;\n};\n\nconst SECTION_REGEX = /^\\s*\\[(.+?)\\]\\s*$/;\nconst PROPERTY_REGEX = /^\\s*([^;][^=]*)\\s*=\\s*(.*)\\s*$/;\n\nexport const parseIni = (text: string): IniData => {\n  let section: string, match;\n  return text.split(/[\\r\\n]+/g).reduce((data: IniData, line) => {\n    if ((match = line.match(PROPERTY_REGEX)) && section != null) {\n      const key = match[1].trim().toLowerCase();\n      const value = match[2]\n        // Ignore anything after a second `=`\n        // TODO: What if this is inside quotes or escaped?\n        .replace(/\\=.*$/g, \"\")\n        .trim()\n        // Strip quotes\n        // TODO: What about escaped quotes?\n        // TODO: What about unbalanced quotes?\n        .replace(/(^\")|(\"$)|(^')|('$)/g, \"\");\n      data[section][key] = value;\n    } else if ((match = line.match(SECTION_REGEX))) {\n      section = match[1].trim().toLowerCase();\n      data[section] = {};\n    }\n    return data;\n  }, {});\n};\n\nexport const clamp = (value: number, min: number, max: number): number =>\n  Math.min(Math.max(value, min), max);\n\nexport const sum = (values: number[]): number =>\n  values.reduce((total, value) => total + value, 0);\n\nexport function base64FromDataArray(dataArray: Uint8Array): string {\n  return window.btoa(\n    Array.from(dataArray)\n      .map((byte) => String.fromCharCode(byte))\n      .join(\"\")\n  );\n}\n\nexport const base64FromArrayBuffer = (arrayBuffer: ArrayBuffer): string => {\n  return base64FromDataArray(new Uint8Array(arrayBuffer));\n};\n\n// https://stackoverflow.com/a/15832662/1263117\nexport function downloadURI(uri: string, name: string): void {\n  const link = document.createElement(\"a\");\n  link.download = name;\n  link.href = uri;\n  window.document.body.appendChild(link);\n  link.click();\n  window.document.body.removeChild(link);\n}\n\nexport const toPercent = (min: number, max: number, value: number): number =>\n  (value - min) / (max - min);\n\nexport const percentToRange = (percent: number, min: number, max: number) =>\n  min + Math.round(percent * (max - min));\n\nexport const percentToIndex = (percent: number, length: number): number =>\n  percentToRange(percent, 0, length - 1);\n\nconst rebound =\n  (oldMin: number, oldMax: number, newMin: number, newMax: number) =>\n  (oldValue: number): number =>\n    percentToRange(toPercent(oldMin, oldMax, oldValue), newMin, newMax);\n\n// Convert an .eqf value to a 0-100\nexport const normalizeEqBand = rebound(1, 64, 0, 100);\n\n// Convert a 0-100 to an .eqf value\nexport const denormalizeEqBand = rebound(0, 100, 1, 64);\n\n// Merge a `source` object to a `target` recursively\n// TODO: The typing here is a bit of a disaster.\nexport function merge<T extends object, S extends object>(\n  target: T,\n  source: S\n): T & S {\n  const s = source as any;\n  const t = target as any;\n  // Iterate through `source` properties and if an `Object` set property to merge of `target` and `source` properties\n  for (const key of Object.keys(s as any)) {\n    if (s[key] instanceof Object) Object.assign(s[key], merge(t[key], s[key]));\n  }\n\n  // Join `target` and modified `source`\n  Object.assign(target || {}, source);\n  return target as any;\n}\n\n// Maps a value in a range (defined my min/max) to a value in an array (options).\nexport function segment<V>(\n  min: number,\n  max: number,\n  value: number,\n  newValues: V[]\n): V {\n  const ratio = toPercent(min, max, value);\n  /*\n  | 0 | 1 | 2 |\n  0   1   2   3\n  */\n  return newValues[percentToIndex(ratio, newValues.length)];\n}\n\n// https://bost.ocks.org/mike/shuffle/\n// Shuffle an array in O(n)\nexport function shuffle<T>(array: T[]): T[] {\n  const sorted = [...array];\n  let m = sorted.length;\n\n  // While there remain elements to shuffle…\n  while (m) {\n    // Pick a remaining element…\n    const i = Math.floor(Math.random() * m--);\n\n    // And swap it with the current element.\n    const val = sorted[m];\n    sorted[m] = sorted[i];\n    sorted[i] = val;\n  }\n\n  return sorted;\n}\n\nexport function sort<T>(\n  array: T[],\n  iteratee: (value: T) => number | string\n): T[] {\n  return [...array].sort((a, b) => {\n    const aKey = iteratee(a);\n    const bKey = iteratee(b);\n    if (aKey < bKey) {\n      return -1;\n    } else if (aKey > bKey) {\n      return 1;\n    }\n    return 0;\n  });\n}\n\nexport function moveSelected<V>(\n  arr: V[],\n  isSelected: (index: number) => boolean,\n  offset: number\n): V[] {\n  const newArr = new Array(arr.length);\n  let next = 0;\n  for (let i = 0; i < newArr.length; i++) {\n    const from = i - offset;\n    // Is a value supposed to move here?\n    if (from >= 0 && from < arr.length && isSelected(from)) {\n      newArr[i] = arr[from];\n    } else {\n      while (next < arr.length && isSelected(next)) {\n        next++;\n      }\n      newArr[i] = arr[next];\n      next++;\n    }\n  }\n  return newArr;\n}\n\nexport function spliceIn<T>(original: T[], start: number, newValues: T[]): T[] {\n  const newArr = [...original];\n  newArr.splice(start, 0, ...newValues);\n  return newArr;\n}\n\nexport function replaceAtIndex<T>(arr: T[], index: number, newValue: T): T[] {\n  return [...arr.slice(0, index), newValue, ...arr.slice(index + 1)];\n}\n\nexport function debounce(func: Function, delay: number): Function {\n  let timeout: number;\n  let callbackArgs: any[] = [];\n\n  return function (context: Object, ...args: any[]): void {\n    callbackArgs = args;\n\n    if (timeout != null) {\n      clearTimeout(timeout);\n    }\n    timeout = window.setTimeout(() => {\n      func.apply(context, callbackArgs);\n    }, delay);\n  };\n}\n\n// Trailing edge only throttle\nexport function throttle(func: Function, delay: number): Function {\n  let timeout: number | null = null;\n  let callbackArgs: any[] = [];\n\n  return function (context: Object, ...args: any[]): void {\n    callbackArgs = args;\n\n    if (!timeout) {\n      timeout = window.setTimeout(() => {\n        func.apply(context, callbackArgs);\n        timeout = null;\n      }, delay);\n    }\n  };\n}\n\nlet counter = 0;\nexport function uniqueId() {\n  return counter++;\n}\n\nexport function objectForEach<V>(\n  obj: { [key: string]: V },\n  cb: (value: V, key: string) => void\n): void {\n  Object.keys(obj).forEach((key) => cb(obj[key], key));\n}\n\nexport function objectMap<V, N>(\n  obj: { [key: string]: V },\n  cb: (value: V, key: string) => N\n): { [key: string]: N } {\n  const modified: { [key: string]: N } = {};\n  Object.keys(obj).forEach((key) => (modified[key] = cb(obj[key], key)));\n  return modified;\n}\n\nexport function objectFilter<V>(\n  obj: { [key: string]: V },\n  predicate: (value: V, key: string) => boolean\n): { [key: string]: V } {\n  // TODO: Could return the original reference if no values change\n  return Object.keys(obj).reduce((newObj: { [key: string]: V }, key) => {\n    if (predicate(obj[key], key)) {\n      newObj[key] = obj[key];\n    }\n    return newObj;\n  }, {});\n}\n\nexport const calculateBoundingBox = (windows: WindowInfo[]) => {\n  if (windows.length === 0) {\n    return null;\n  }\n  const windowSizes = windows.map((w) => ({\n    left: w.x,\n    top: w.y,\n    bottom: w.y + w.height,\n    right: w.x + w.width,\n  }));\n  return windowSizes.reduce((b, w) => ({\n    left: Math.min(b.left, w.left),\n    top: Math.min(b.top, w.top),\n    bottom: Math.max(b.bottom, w.bottom),\n    right: Math.max(b.right, w.right),\n  }));\n};\n\nexport function findLastIndex<T>(arr: T[], cb: (val: T) => boolean) {\n  for (let i = arr.length - 1; i >= 0; i--) {\n    if (cb(arr[i])) {\n      return i;\n    }\n  }\n  return -1;\n}\n\nexport function getWindowSize(): { width: number; height: number } {\n  // Aparently this is crazy across browsers.\n  return {\n    width: Math.max(\n      document.body.scrollWidth,\n      document.documentElement!.scrollWidth,\n      document.body.offsetWidth,\n      document.documentElement!.offsetWidth,\n      document.body.clientWidth,\n      document.documentElement!.clientWidth\n    ),\n    height: Math.max(\n      document.body.scrollHeight,\n      document.documentElement!.scrollHeight,\n      document.body.offsetHeight,\n      document.documentElement!.offsetHeight,\n      document.body.clientHeight,\n      document.documentElement!.clientHeight\n    ),\n  };\n}\n\nexport function getScreenSize(): { width: number; height: number } {\n  return {\n    width: window.screen.width,\n    height: window.screen.height,\n  };\n}\n\ntype PosEvent =\n  | MouseEvent\n  | TouchEvent\n  | React.MouseEvent<HTMLElement>\n  | React.TouchEvent<HTMLElement>;\n\nfunction getPos(e: PosEvent): { clientX: number; clientY: number } {\n  switch (e.type) {\n    case \"touchstart\":\n    case \"touchmove\": {\n      const touch =\n        (e as TouchEvent).targetTouches[0] ?? (e as TouchEvent).touches[0];\n      if (touch == null) {\n        // Investigating https://github.com/captbaritone/webamp/issues/1105\n        throw new Error(\"Unexpected touch event with zero touch targets.\");\n      }\n      return touch;\n    }\n    case \"mousedown\":\n    case \"mousemove\": {\n      return e as MouseEvent;\n    }\n    default:\n      throw new Error(`Unexpected event type: ${e.type}`);\n  }\n}\n\nexport function getX(e: PosEvent) {\n  return getPos(e).clientX;\n}\n\nexport function getY(e: PosEvent) {\n  return getPos(e).clientY;\n}\n\nexport function weakMapMemoize<T extends object, R>(\n  func: (value: T) => R\n): (value: T) => R {\n  const cache = new WeakMap();\n  return (value: T) => {\n    if (!cache.has(value)) {\n      cache.set(value, func(value));\n    }\n    return cache.get(value);\n  };\n}\n","import { Action } from \"../types\";\nimport {\n  CLICKED_TRACK,\n  CTRL_CLICKED_TRACK,\n  SHIFT_CLICKED_TRACK,\n  SELECT_ALL,\n  SELECT_ZERO,\n  INVERT_SELECTION,\n  REMOVE_ALL_TRACKS,\n  REMOVE_TRACKS,\n  ADD_TRACK_FROM_URL,\n  REVERSE_LIST,\n  RANDOMIZE_LIST,\n  SET_TRACK_ORDER,\n  PLAY_TRACK,\n  BUFFER_TRACK,\n  DRAG_SELECTED,\n} from \"../actionTypes\";\nimport { shuffle, moveSelected } from \"../utils\";\n\nexport interface PlaylistState {\n  trackOrder: number[];\n  lastSelectedIndex: number | null;\n  currentTrack: number | null;\n  selectedTracks: Set<number>;\n}\n\nconst defaultPlaylistState: PlaylistState = {\n  trackOrder: [],\n  currentTrack: null,\n  lastSelectedIndex: null,\n  selectedTracks: new Set(),\n};\n\nfunction toggleSetMembership<T>(set: Set<T>, value: T): void {\n  if (set.has(value)) {\n    set.delete(value);\n  } else {\n    set.add(value);\n  }\n}\n\nconst playlist = (\n  state: PlaylistState = defaultPlaylistState,\n  action: Action\n): PlaylistState => {\n  switch (action.type) {\n    case CLICKED_TRACK:\n      return {\n        ...state,\n        selectedTracks: new Set([state.trackOrder[action.index]]),\n        lastSelectedIndex: action.index,\n      };\n    case CTRL_CLICKED_TRACK: {\n      const id = state.trackOrder[action.index];\n      const newSelectedTracks = new Set(state.selectedTracks);\n      toggleSetMembership(newSelectedTracks, id);\n      return {\n        ...state,\n        selectedTracks: newSelectedTracks,\n        // Using this as the lastClickedIndex is kinda funny, since you\n        // may have just _un_selected the track. However, this is what\n        // Winamp 2 does, so we'll copy it.\n        lastSelectedIndex: action.index,\n      };\n    }\n    case SHIFT_CLICKED_TRACK:\n      if (state.lastSelectedIndex == null) {\n        return state;\n      }\n      const clickedIndex = action.index;\n      const start = Math.min(clickedIndex, state.lastSelectedIndex);\n      const end = Math.max(clickedIndex, state.lastSelectedIndex);\n      const selectedTracks = new Set(state.trackOrder.slice(start, end + 1));\n      return {\n        ...state,\n        selectedTracks,\n      };\n    case SELECT_ALL:\n      return {\n        ...state,\n        selectedTracks: new Set(state.trackOrder),\n      };\n    case SELECT_ZERO:\n      return {\n        ...state,\n        selectedTracks: new Set(),\n      };\n    case INVERT_SELECTION:\n      return {\n        ...state,\n        selectedTracks: new Set(\n          state.trackOrder.filter((id) => !state.selectedTracks.has(id))\n        ),\n      };\n    case REMOVE_ALL_TRACKS:\n      // TODO: Consider disposing of ObjectUrls\n      return {\n        ...state,\n        trackOrder: [],\n        currentTrack: null,\n        selectedTracks: new Set(),\n        lastSelectedIndex: null,\n      };\n    case REMOVE_TRACKS:\n      // TODO: Consider disposing of ObjectUrls\n      const actionIds = new Set(action.ids.map(Number));\n      const { currentTrack } = state;\n      return {\n        ...state,\n        trackOrder: state.trackOrder.filter(\n          (trackId) => !actionIds.has(trackId)\n        ),\n        currentTrack: actionIds.has(Number(currentTrack)) ? null : currentTrack,\n        selectedTracks: new Set(\n          Array.from(state.selectedTracks).filter((id) => actionIds.has(id))\n        ),\n        // TODO: This could probably be made to work, but we clear it just to be safe.\n        lastSelectedIndex: null,\n      };\n    case REVERSE_LIST:\n      return {\n        ...state,\n        trackOrder: [...state.trackOrder].reverse(),\n        // TODO: This could probably be made to work, but we clear it just to be safe.\n        lastSelectedIndex: null,\n      };\n    case RANDOMIZE_LIST:\n      return {\n        ...state,\n        trackOrder: shuffle(state.trackOrder),\n      };\n    case SET_TRACK_ORDER:\n      const { trackOrder } = action;\n      return { ...state, trackOrder };\n    case ADD_TRACK_FROM_URL:\n      const atIndex =\n        action.atIndex == null ? state.trackOrder.length : action.atIndex;\n      return {\n        ...state,\n        trackOrder: [\n          ...state.trackOrder.slice(0, atIndex),\n          Number(action.id),\n          ...state.trackOrder.slice(atIndex),\n        ],\n        // TODO: This could probably be made to work, but we clear it just to be safe.\n        lastSelectedIndex: null,\n      };\n    case PLAY_TRACK:\n    case BUFFER_TRACK:\n      return {\n        ...state,\n        currentTrack: action.id,\n      };\n    case DRAG_SELECTED:\n      return {\n        ...state,\n        trackOrder: moveSelected(\n          state.trackOrder,\n          (i) => state.selectedTracks.has(state.trackOrder[i]),\n          action.offset\n        ),\n        // TODO: This could probably be made to work, but we clear it just to be safe.\n        lastSelectedIndex: null,\n      };\n    default:\n      return state;\n  }\n};\n\nexport default playlist;\n","import { Action, WindowId, Box, Point } from \"../types\";\nimport { WINDOWS } from \"../constants\";\nimport {\n  SET_FOCUSED_WINDOW,\n  TOGGLE_WINDOW,\n  CLOSE_WINDOW,\n  UPDATE_WINDOW_POSITIONS,\n  WINDOW_SIZE_CHANGED,\n  TOGGLE_WINDOW_SHADE_MODE,\n  LOAD_SERIALIZED_STATE,\n  BROWSER_WINDOW_SIZE_CHANGED,\n  RESET_WINDOW_SIZES,\n  ENABLE_MILKDROP,\n} from \"../actionTypes\";\nimport * as Utils from \"../utils\";\nimport { WindowsSerializedStateV1 } from \"../serializedStates/v1Types\";\n\nexport type WindowPositions = {\n  [windowId: string]: Point;\n};\n\nexport interface WebampWindow {\n  title: string;\n  size: [number, number];\n  open: boolean;\n  shade?: boolean;\n  canResize: boolean;\n  canShade: boolean;\n  canDouble: boolean;\n  hotkey?: string;\n  position: Point;\n}\n\nexport interface WindowInfo extends Box {\n  key: WindowId;\n}\nexport interface WindowsState {\n  focused: WindowId | null;\n  genWindows: { [name: string]: WebampWindow };\n  browserWindowSize: { height: number; width: number };\n  positionsAreRelative: boolean;\n  windowOrder: WindowId[];\n}\n\nconst defaultWindowsState: WindowsState = {\n  focused: WINDOWS.MAIN,\n  positionsAreRelative: true,\n  genWindows: {\n    // TODO: Remove static capabilities and derive them from ids/generic\n    [WINDOWS.MAIN]: {\n      title: \"Main Window\",\n      size: [0, 0],\n      open: true,\n      shade: false,\n      canResize: false,\n      canShade: true,\n      canDouble: true,\n      hotkey: \"Alt+W\",\n      position: { x: 0, y: 0 },\n    },\n    [WINDOWS.EQUALIZER]: {\n      title: \"Equalizer\",\n      size: [0, 0],\n      open: true,\n      shade: false,\n      canResize: false,\n      canShade: true,\n      canDouble: true,\n      hotkey: \"Alt+G\",\n      position: { x: 0, y: 0 },\n    },\n    [WINDOWS.PLAYLIST]: {\n      title: \"Playlist Editor\",\n      size: [0, 0],\n      open: true,\n      shade: false,\n      canResize: true,\n      canShade: true,\n      canDouble: false,\n      hotkey: \"Alt+E\",\n      position: { x: 0, y: 0 },\n    },\n    [WINDOWS.MILKDROP]: {\n      title: \"Milkdrop\",\n      size: [0, 0],\n      open: false,\n      shade: false,\n      canResize: true,\n      canShade: false,\n      canDouble: false,\n      position: { x: 0, y: 0 },\n    },\n  },\n  browserWindowSize: { width: 0, height: 0 },\n  windowOrder: [\n    WINDOWS.PLAYLIST,\n    WINDOWS.EQUALIZER,\n    WINDOWS.MILKDROP,\n    WINDOWS.MAIN,\n  ],\n};\n\nconst windows = (\n  state: WindowsState = defaultWindowsState,\n  action: Action\n): WindowsState => {\n  switch (action.type) {\n    case ENABLE_MILKDROP:\n      return {\n        ...state,\n        genWindows: {\n          ...state.genWindows,\n          [WINDOWS.MILKDROP]: {\n            ...state.genWindows[WINDOWS.MILKDROP],\n            open: action.open,\n          },\n        },\n      };\n    case SET_FOCUSED_WINDOW:\n      let windowOrder = state.windowOrder;\n      if (action.window != null) {\n        windowOrder = [\n          ...state.windowOrder.filter((windowId) => windowId !== action.window),\n          action.window,\n        ];\n      }\n      return { ...state, focused: action.window, windowOrder };\n    case TOGGLE_WINDOW_SHADE_MODE:\n      const { canShade } = state.genWindows[action.windowId];\n      if (!canShade) {\n        throw new Error(\n          `Tried to shade/unshade a window that cannot be shaded: ${action.windowId}`\n        );\n      }\n      return {\n        ...state,\n        genWindows: {\n          ...state.genWindows,\n          [action.windowId]: {\n            ...state.genWindows[action.windowId],\n            shade: !state.genWindows[action.windowId].shade,\n          },\n        },\n      };\n    case TOGGLE_WINDOW:\n      const windowState = state.genWindows[action.windowId];\n      return {\n        ...state,\n        genWindows: {\n          ...state.genWindows,\n          [action.windowId]: {\n            ...windowState,\n            open: !windowState.open,\n          },\n        },\n      };\n    case CLOSE_WINDOW:\n      return {\n        ...state,\n        genWindows: {\n          ...state.genWindows,\n          [action.windowId]: {\n            ...state.genWindows[action.windowId],\n            open: false,\n          },\n        },\n      };\n    case WINDOW_SIZE_CHANGED:\n      const { canResize } = state.genWindows[action.windowId];\n      if (!canResize) {\n        throw new Error(\n          `Tried to resize a window that cannot be resized: ${action.windowId}`\n        );\n      }\n      return {\n        ...state,\n        genWindows: {\n          ...state.genWindows,\n          [action.windowId]: {\n            ...state.genWindows[action.windowId],\n            size: action.size,\n          },\n        },\n      };\n    case UPDATE_WINDOW_POSITIONS:\n      return {\n        ...state,\n        positionsAreRelative:\n          action.absolute === true ? false : state.positionsAreRelative,\n        genWindows: Utils.objectMap(state.genWindows, (w, windowId) => {\n          const newPosition = action.positions[windowId];\n          if (newPosition == null) {\n            return w;\n          }\n          return { ...w, position: newPosition };\n        }),\n      };\n    case RESET_WINDOW_SIZES:\n      return {\n        ...state,\n        genWindows: Utils.objectMap(state.genWindows, (w) => ({\n          ...w,\n          // Not sure why TypeScript can't figure this out for itself.\n          size: [0, 0] as [number, number],\n        })),\n      };\n    case LOAD_SERIALIZED_STATE: {\n      const { genWindows, focused, positionsAreRelative } =\n        action.serializedState.windows;\n      return {\n        ...state,\n        positionsAreRelative,\n        genWindows: Utils.objectMap(state.genWindows, (w, windowId) => {\n          const serializedW = genWindows[windowId];\n          if (serializedW == null) {\n            return w;\n          }\n          // Pull out `hidden` since it's been removed from our state.\n          const { hidden, ...rest } = serializedW;\n          return { ...w, ...rest };\n        }),\n        focused,\n      };\n    }\n    case BROWSER_WINDOW_SIZE_CHANGED:\n      return {\n        ...state,\n        browserWindowSize: { height: action.height, width: action.width },\n      };\n\n    default:\n      return state;\n  }\n};\n\nexport function getSerializedState(\n  state: WindowsState\n): WindowsSerializedStateV1 {\n  return {\n    positionsAreRelative: state.positionsAreRelative,\n    genWindows: Utils.objectMap(state.genWindows, (w) => {\n      return {\n        size: w.size,\n        open: w.open,\n        hidden: false, // Not used any more\n        shade: w.shade || false,\n        position: w.position,\n      };\n    }),\n    focused: state.focused,\n  };\n}\n\nexport default windows;\n","import { Action, MediaStatus, TimeMode } from \"../types\";\nimport {\n  PLAY,\n  STOP,\n  PAUSE,\n  IS_STOPPED,\n  IS_PLAYING,\n  SET_VOLUME,\n  SET_BALANCE,\n  SET_MEDIA,\n  TOGGLE_REPEAT,\n  TOGGLE_SHUFFLE,\n  TOGGLE_TIME_MODE,\n  UPDATE_TIME_ELAPSED,\n  LOAD_SERIALIZED_STATE,\n} from \"../actionTypes\";\nimport { TIME_MODE, MEDIA_STATUS } from \"../constants\";\nimport { MediaSerializedStateV1 } from \"../serializedStates/v1Types\";\n\nexport interface MediaState {\n  timeMode: TimeMode; // TODO: Convert this to an enum\n  timeElapsed: number;\n  volume: number;\n  balance: number;\n  shuffle: boolean;\n  repeat: boolean;\n  status: MediaStatus;\n}\n\nconst defaultState = {\n  timeMode: TIME_MODE.ELAPSED,\n  timeElapsed: 0,\n\n  // The winamp ini file declares the default volume as \"200\".\n  // The UI seems to show a default volume near 78, which would\n  // math with the default value being 200 out of 255.\n  volume: Math.round((200 / 255) * 100),\n  balance: 0,\n  shuffle: false,\n  repeat: false,\n  // TODO: Enforce possible values\n  status: MEDIA_STATUS.STOPPED,\n};\n\nconst media = (\n  state: MediaState = defaultState,\n  action: Action\n): MediaState => {\n  switch (action.type) {\n    // TODO: Make these constants\n    case PLAY:\n    case IS_PLAYING:\n      return { ...state, status: MEDIA_STATUS.PLAYING };\n    case PAUSE:\n      return { ...state, status: MEDIA_STATUS.PAUSED };\n    case STOP:\n    case IS_STOPPED:\n      return { ...state, status: MEDIA_STATUS.STOPPED };\n    case TOGGLE_TIME_MODE:\n      const newMode =\n        state.timeMode === TIME_MODE.REMAINING\n          ? TIME_MODE.ELAPSED\n          : TIME_MODE.REMAINING;\n      return { ...state, timeMode: newMode };\n    case UPDATE_TIME_ELAPSED:\n      return { ...state, timeElapsed: action.elapsed };\n    case SET_MEDIA:\n      return {\n        ...state,\n      };\n    case SET_VOLUME:\n      return { ...state, volume: action.volume };\n    case SET_BALANCE:\n      return { ...state, balance: action.balance };\n    case TOGGLE_REPEAT:\n      return { ...state, repeat: !state.repeat };\n    case TOGGLE_SHUFFLE:\n      return { ...state, shuffle: !state.shuffle };\n    case LOAD_SERIALIZED_STATE:\n      return { ...state, ...action.serializedState.media };\n    default:\n      return state;\n  }\n};\n\nexport function getSerializedState(state: MediaState): MediaSerializedStateV1 {\n  const { volume, balance, shuffle, repeat } = state;\n  return { volume, balance, shuffle, repeat };\n}\n\nexport default media;\n","'use strict';\n\nexports.__esModule = true;\nexports.defaultMemoize = defaultMemoize;\nexports.createSelectorCreator = createSelectorCreator;\nexports.createStructuredSelector = createStructuredSelector;\nfunction defaultEqualityCheck(a, b) {\n  return a === b;\n}\n\nfunction areArgumentsShallowlyEqual(equalityCheck, prev, next) {\n  if (prev === null || next === null || prev.length !== next.length) {\n    return false;\n  }\n\n  // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n  var length = prev.length;\n  for (var i = 0; i < length; i++) {\n    if (!equalityCheck(prev[i], next[i])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nfunction defaultMemoize(func) {\n  var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck;\n\n  var lastArgs = null;\n  var lastResult = null;\n  // we reference arguments instead of spreading them for performance reasons\n  return function () {\n    if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {\n      // apply arguments instead of spreading for performance.\n      lastResult = func.apply(null, arguments);\n    }\n\n    lastArgs = arguments;\n    return lastResult;\n  };\n}\n\nfunction getDependencies(funcs) {\n  var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs;\n\n  if (!dependencies.every(function (dep) {\n    return typeof dep === 'function';\n  })) {\n    var dependencyTypes = dependencies.map(function (dep) {\n      return typeof dep;\n    }).join(', ');\n    throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']'));\n  }\n\n  return dependencies;\n}\n\nfunction createSelectorCreator(memoize) {\n  for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n    memoizeOptions[_key - 1] = arguments[_key];\n  }\n\n  return function () {\n    for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      funcs[_key2] = arguments[_key2];\n    }\n\n    var recomputations = 0;\n    var resultFunc = funcs.pop();\n    var dependencies = getDependencies(funcs);\n\n    var memoizedResultFunc = memoize.apply(undefined, [function () {\n      recomputations++;\n      // apply arguments instead of spreading for performance.\n      return resultFunc.apply(null, arguments);\n    }].concat(memoizeOptions));\n\n    // If a selector is called with the exact same arguments we don't need to traverse our dependencies again.\n    var selector = defaultMemoize(function () {\n      var params = [];\n      var length = dependencies.length;\n\n      for (var i = 0; i < length; i++) {\n        // apply arguments instead of spreading and mutate a local list of params for performance.\n        params.push(dependencies[i].apply(null, arguments));\n      }\n\n      // apply arguments instead of spreading for performance.\n      return memoizedResultFunc.apply(null, params);\n    });\n\n    selector.resultFunc = resultFunc;\n    selector.recomputations = function () {\n      return recomputations;\n    };\n    selector.resetRecomputations = function () {\n      return recomputations = 0;\n    };\n    return selector;\n  };\n}\n\nvar createSelector = exports.createSelector = createSelectorCreator(defaultMemoize);\n\nfunction createStructuredSelector(selectors) {\n  var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector;\n\n  if (typeof selectors !== 'object') {\n    throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors));\n  }\n  var objectKeys = Object.keys(selectors);\n  return selectorCreator(objectKeys.map(function (key) {\n    return selectors[key];\n  }), function () {\n    for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      values[_key3] = arguments[_key3];\n    }\n\n    return values.reduce(function (composition, value, index) {\n      composition[objectKeys[index]] = value;\n      return composition;\n    }, {});\n  });\n}","import {\n  Action,\n  SkinImages,\n  Cursors,\n  SkinRegion,\n  GenLetterWidths,\n  PlaylistStyle,\n  SkinGenExColors,\n  DummyVizData,\n} from \"../types\";\nimport * as Utils from \"../utils\";\nimport { createSelector } from \"reselect\";\n\nimport {\n  CLOSE_WINAMP,\n  OPEN_WINAMP,\n  SET_SKIN_DATA,\n  START_WORKING,\n  STEP_MARQUEE,\n  STOP_WORKING,\n  TOGGLE_DOUBLESIZE_MODE,\n  TOGGLE_LLAMA_MODE,\n  TOGGLE_VISUALIZER_STYLE,\n  SET_PLAYLIST_SCROLL_POSITION,\n  LOADED,\n  SET_Z_INDEX,\n  DISABLE_MARQUEE,\n  SET_DUMMY_VIZ_DATA,\n  LOADING,\n  LOAD_SERIALIZED_STATE,\n  LOAD_DEFAULT_SKIN,\n} from \"../actionTypes\";\nimport { DEFAULT_SKIN, VISUALIZER_ORDER } from \"../constants\";\nimport { DisplaySerializedStateV1 } from \"../serializedStates/v1Types\";\n\nexport interface DisplayState {\n  visualizerStyle: number;\n  doubled: boolean;\n  llama: boolean;\n  disableMarquee: boolean;\n  marqueeStep: number;\n  skinImages: SkinImages;\n  skinCursors: Cursors | null;\n  skinRegion: SkinRegion;\n  skinGenLetterWidths: GenLetterWidths | null;\n  skinColors: string[]; // Theoretically this could be a tuple of a specific length\n  skinPlaylistStyle: PlaylistStyle | null;\n  skinGenExColors: SkinGenExColors;\n  working: boolean;\n  closed: boolean;\n  loading: boolean;\n  playlistScrollPosition: number;\n  zIndex: number;\n  dummyVizData: DummyVizData | null;\n}\n\nconst defaultSkinGenExColors = {\n  itemBackground: \"rgb(0,0,0)\",\n  itemForeground: \"rgb(0,255,0)\",\n  windowBackground: \"rgb(56,55,87)\",\n  buttonText: \"rgb(57,57,66)\",\n  windowText: \"rgb(255,255,255)\",\n  divider: \"rgb(117,116,139)\",\n  playlistSelection: \"rgb(0,0,198)\",\n  listHeaderBackground: \"rgb(72,72,120)\",\n  listHeaderText: \"rgb(255,255,255)\",\n  listHeaderFrameTopAndLeft: \"rgb(108,108,180)\",\n  listHeaderFrameBottomAndRight: \"rgb(36,36,60)\",\n  listHeaderFramePressed: \"rgb(18,18,30)\",\n  listHeaderDeadArea: \"rgb(36,36,60)\",\n  scrollbarOne: \"rgb(36,36,60)\",\n  scrollbarTwo: \"rgb(36,36,60)\",\n  pressedScrollbarOne: \"rgb(121,130,150)\",\n  pressedScrollbarTwo: \"rgb(78,88,110)\",\n  scrollbarDeadArea: \"rgb(36,36,60)\",\n  listTextHighlighted: \"rgb(0,198,255)\",\n  listTextHighlightedBackground: \"rgb(0,198,255)\",\n  listTextSelected: \"rgb(0,198,255)\",\n  listTextSelectedBackground: \"rgb(0,198,255)\",\n};\n\nconst defaultDisplayState = {\n  doubled: false,\n  marqueeStep: 0,\n  disableMarquee: false,\n  loading: true,\n  llama: false,\n  closed: false,\n  working: false,\n  skinImages: DEFAULT_SKIN.images,\n  skinColors: DEFAULT_SKIN.colors,\n  skinCursors: null,\n  skinPlaylistStyle: null,\n  skinRegion: {},\n  visualizerStyle: 0, // Index into VISUALIZER_ORDER\n  dummyVizData: null,\n  playlistScrollPosition: 0,\n  skinGenLetterWidths: null, // TODO: Get the default value for this?\n  skinGenExColors: defaultSkinGenExColors,\n  additionalVisualizers: [],\n  zIndex: 0,\n};\n\nconst display = (\n  state: DisplayState = defaultDisplayState,\n  action: Action\n): DisplayState => {\n  switch (action.type) {\n    case LOAD_DEFAULT_SKIN: {\n      const {\n        skinImages,\n        skinColors,\n        skinCursors,\n        skinPlaylistStyle,\n        skinRegion,\n        skinGenLetterWidths,\n        skinGenExColors,\n      } = defaultDisplayState;\n      return {\n        ...state,\n        skinImages,\n        skinColors,\n        skinCursors,\n        skinPlaylistStyle,\n        skinRegion,\n        skinGenLetterWidths,\n        skinGenExColors,\n      };\n    }\n    case TOGGLE_DOUBLESIZE_MODE:\n      return { ...state, doubled: !state.doubled };\n    case TOGGLE_LLAMA_MODE:\n      return { ...state, llama: !state.llama };\n    case STEP_MARQUEE:\n      return state.disableMarquee\n        ? state\n        : { ...state, marqueeStep: state.marqueeStep + 1 };\n    case DISABLE_MARQUEE:\n      return { ...state, disableMarquee: true };\n    case STOP_WORKING:\n      return { ...state, working: false };\n    case START_WORKING:\n      return { ...state, working: true };\n    case CLOSE_WINAMP:\n      return { ...state, closed: true };\n    case OPEN_WINAMP:\n      return { ...state, closed: false };\n    case LOADING:\n      return { ...state, loading: true };\n    case LOADED:\n      return { ...state, loading: false };\n    case SET_SKIN_DATA:\n      const { data } = action;\n      return {\n        ...state,\n        loading: false,\n        skinImages: data.skinImages,\n        skinColors: data.skinColors,\n        skinPlaylistStyle: data.skinPlaylistStyle,\n        skinCursors: data.skinCursors,\n        skinRegion: data.skinRegion,\n        skinGenLetterWidths: data.skinGenLetterWidths,\n        skinGenExColors: data.skinGenExColors || defaultSkinGenExColors,\n      };\n    case TOGGLE_VISUALIZER_STYLE:\n      return {\n        ...state,\n        visualizerStyle: (state.visualizerStyle + 1) % VISUALIZER_ORDER.length,\n      };\n    case SET_PLAYLIST_SCROLL_POSITION:\n      return { ...state, playlistScrollPosition: action.position };\n    case SET_Z_INDEX:\n      return { ...state, zIndex: action.zIndex };\n    case SET_DUMMY_VIZ_DATA:\n      return { ...state, dummyVizData: action.data };\n    case LOAD_SERIALIZED_STATE: {\n      const { skinCursors, ...rest } = action.serializedState.display;\n      const upgrade = (url: string) => ({ type: \"cur\", url } as const);\n      const newSkinCursors =\n        skinCursors == null ? null : Utils.objectMap(skinCursors, upgrade);\n      return { ...state, skinCursors: newSkinCursors, ...rest };\n    }\n    default:\n      return state;\n  }\n};\nexport default display;\n\nexport const getSerializedState = (\n  state: DisplayState\n): DisplaySerializedStateV1 => {\n  // My kingdom for a type-safe `_.pick`.\n  const {\n    visualizerStyle,\n    doubled,\n    llama,\n    marqueeStep,\n    skinImages,\n    skinCursors,\n    skinRegion,\n    skinGenLetterWidths,\n    skinColors,\n    skinPlaylistStyle,\n  } = state;\n\n  let newCursors: { [cursor: string]: string } | null = null;\n  if (skinCursors != null) {\n    // @ts-ignore Typescript does not like that we can have `undefined` as\n    // values here. Since this is going to get serialized to JSON (which will\n    // drop undefined) it's fine.\n    // This code is geting removed soon anyway.\n    newCursors = Utils.objectMap(skinCursors, (cursor) => {\n      return cursor.type === \"cur\" ? cursor.url : undefined;\n    });\n  }\n  return {\n    visualizerStyle,\n    doubled,\n    llama,\n    marqueeStep,\n    skinImages,\n    skinCursors: newCursors,\n    skinRegion,\n    skinGenLetterWidths,\n    skinColors,\n    skinPlaylistStyle,\n  };\n};\n\nexport const getVisualizerStyle = createSelector(\n  (state: DisplayState) => state.visualizerStyle,\n  (visualizationStyle): string => {\n    return VISUALIZER_ORDER[visualizationStyle];\n  }\n);\n","import { Action, Slider } from \"../types\";\nimport {\n  SET_FOCUS,\n  SET_BAND_FOCUS,\n  SET_SCRUB_POSITION,\n  UNSET_FOCUS,\n  SET_USER_MESSAGE,\n  UNSET_USER_MESSAGE,\n} from \"../actionTypes\";\n\nexport interface UserInputState {\n  focus: string | null; // TODO: Convert this to an enum?\n  bandFocused: Slider | null;\n  scrubPosition: number;\n  userMessage: string | null;\n}\n\nconst defaultUserInput = {\n  focus: null,\n  bandFocused: null,\n  scrubPosition: 0,\n  userMessage: null,\n};\n\nexport const userInput = (\n  state: UserInputState = defaultUserInput,\n  action: Action\n): UserInputState => {\n  switch (action.type) {\n    case SET_FOCUS:\n      return { ...state, focus: action.input, bandFocused: null };\n    case SET_BAND_FOCUS:\n      return { ...state, focus: action.input, bandFocused: action.bandFocused };\n    case UNSET_FOCUS:\n      return { ...state, focus: null, bandFocused: null };\n    case SET_SCRUB_POSITION:\n      return { ...state, scrubPosition: action.position };\n    case SET_USER_MESSAGE:\n      return { ...state, userMessage: action.message };\n    case UNSET_USER_MESSAGE:\n      return { ...state, userMessage: null };\n    default:\n      return state;\n  }\n};\n\nexport default userInput;\n","import { Slider, Action } from \"./../types\";\n\nimport {\n  SET_BAND_VALUE,\n  SET_EQ_AUTO,\n  SET_EQ_ON,\n  SET_EQ_OFF,\n  LOAD_SERIALIZED_STATE,\n} from \"../actionTypes\";\nimport { EqualizerSerializedStateV1 } from \"../serializedStates/v1Types\";\n\nexport interface EqualizerState {\n  on: boolean;\n  auto: boolean;\n  sliders: Record<Slider, number>;\n}\n\nconst defaultState = {\n  on: true,\n  auto: false,\n  sliders: {\n    preamp: 50,\n    60: 50,\n    170: 50,\n    310: 50,\n    600: 50,\n    1000: 50,\n    3000: 50,\n    6000: 50,\n    12000: 50,\n    14000: 50,\n    16000: 50,\n  },\n};\n\nconst equalizer = (\n  state: EqualizerState = defaultState,\n  action: Action\n): EqualizerState => {\n  switch (action.type) {\n    case SET_BAND_VALUE:\n      const newSliders = { ...state.sliders, [action.band]: action.value };\n      return { ...state, sliders: newSliders };\n    case SET_EQ_ON:\n      return { ...state, on: true };\n    case SET_EQ_OFF:\n      return { ...state, on: false };\n    case SET_EQ_AUTO:\n      return { ...state, auto: action.value };\n    case LOAD_SERIALIZED_STATE:\n      return action.serializedState.equalizer || state;\n    default:\n      return state;\n  }\n};\n\nexport function getSerializedState(\n  state: EqualizerState\n): EqualizerSerializedStateV1 {\n  return state;\n}\n\nexport default equalizer;\n","import { Action } from \"../types\";\nimport { NETWORK_CONNECTED, NETWORK_DISCONNECTED } from \"../actionTypes\";\n\nexport interface NetworkState {\n  connected: boolean;\n}\n\nconst network = (\n  state: NetworkState = { connected: true },\n  action: Action\n): NetworkState => {\n  switch (action.type) {\n    case NETWORK_CONNECTED:\n      return { ...state, connected: true };\n    case NETWORK_DISCONNECTED:\n      return { ...state, connected: false };\n    default:\n      return state;\n  }\n};\n\nexport default network;\n","import { Action, Skin } from \"../types\";\nimport { SET_AVAILABLE_SKINS } from \"../actionTypes\";\n\nexport interface SettingsState {\n  availableSkins: Array<Skin>;\n}\n\nconst defaultSettingsState = {\n  availableSkins: [],\n};\n\nconst settings = (\n  state: SettingsState = defaultSettingsState,\n  action: Action\n): SettingsState => {\n  switch (action.type) {\n    case SET_AVAILABLE_SKINS:\n      return { ...state, availableSkins: action.skins };\n    default:\n      return state;\n  }\n};\n\nexport default settings;\n","/**\n * Copyright (c) 2013-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n'use strict';\n\n/**\n * Use invariant() to assert state which your program assumes to be true.\n *\n * Provide sprintf-style format (only %s is supported) and arguments\n * to provide information about what broke and what you were\n * expecting.\n *\n * The invariant message will be stripped in production, but the invariant\n * will remain to ensure logic does not differ in production.\n */\n\nvar NODE_ENV = process.env.NODE_ENV;\n\nvar invariant = function(condition, format, a, b, c, d, e, f) {\n  if (NODE_ENV !== 'production') {\n    if (format === undefined) {\n      throw new Error('invariant requires an error message argument');\n    }\n  }\n\n  if (!condition) {\n    var error;\n    if (format === undefined) {\n      error = new Error(\n        'Minified exception occurred; use the non-minified dev environment ' +\n        'for the full error message and additional helpful warnings.'\n      );\n    } else {\n      var args = [a, b, c, d, e, f];\n      var argIndex = 0;\n      error = new Error(\n        format.replace(/%s/g, function() { return args[argIndex++]; })\n      );\n      error.name = 'Invariant Violation';\n    }\n\n    error.framesToPop = 1; // we don't care about invariant's own frame\n    throw error;\n  }\n};\n\nmodule.exports = invariant;\n","import invariant from \"invariant\";\nimport { IMusicMetadataBrowserApi } from \"./types\";\nimport { IAudioMetadata } from \"music-metadata-browser\"; // Import music-metadata type definitions\nimport * as Utils from \"./utils\";\n\ntype MediaDataType = string | ArrayBuffer | Blob;\n\nexport function genMediaTags(\n  file: MediaDataType,\n  musicMetadata: IMusicMetadataBrowserApi\n): Promise<IAudioMetadata> {\n  invariant(\n    file != null,\n    \"Attempted to get the tags of media file without passing a file\"\n  );\n\n  const options = {\n    duration: true,\n    skipPostHeaders: true, // avoid unnecessary data to be read\n  };\n\n  if (typeof file === \"string\") {\n    return musicMetadata.fetchFromUrl(file, options);\n  }\n  // Assume Blob\n  return musicMetadata.parseBlob(file as Blob, options);\n}\n\nexport function genMediaDuration(url: string): Promise<number> {\n  invariant(\n    typeof url === \"string\",\n    \"Attempted to get the duration of media file without passing a url\"\n  );\n  return new Promise((resolve, reject) => {\n    // TODO: Does this actually stop downloading the file once it's\n    // got the duration?\n    const audio = document.createElement(\"audio\");\n    audio.crossOrigin = \"anonymous\";\n    const durationChange = () => {\n      resolve(audio.duration);\n      audio.removeEventListener(\"durationchange\", durationChange);\n      audio.src = \"\";\n      // TODO: Not sure if this really gets cleaned up.\n    };\n    audio.addEventListener(\"durationchange\", durationChange);\n    audio.addEventListener(\"error\", (e) => {\n      reject(e);\n    });\n    audio.src = url;\n  });\n}\n\nexport async function genArrayBufferFromFileReference(\n  fileReference: File\n): Promise<any> {\n  invariant(\n    fileReference != null,\n    \"Attempt to get an ArrayBuffer without assigning a fileReference\"\n  );\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onload = () => {\n      resolve(reader.result as ArrayBuffer);\n    };\n    reader.onerror = reject;\n    reader.readAsArrayBuffer(fileReference);\n  });\n}\n\nexport async function genStringFromFileReference(\n  fileReference: File\n): Promise<string> {\n  return new Promise((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onload = () => {\n      resolve(reader.result as string);\n    };\n    reader.onerror = reject;\n    reader.readAsText(fileReference);\n  });\n}\n\ninterface PromptForFileReferenceOptions {\n  accept?: string | null;\n  directory?: boolean;\n}\n\nexport async function promptForFileReferences(\n  { accept, directory = false }: PromptForFileReferenceOptions = {\n    accept: null,\n    directory: false,\n  }\n): Promise<FileList> {\n  return new Promise<FileList>((resolve) => {\n    // Does this represent a memory leak somehow?\n    // Can this fail? Do we ever reject?\n    const fileInput = document.createElement(\"input\");\n    if (accept) fileInput.setAttribute(\"accept\", accept);\n    fileInput.type = \"file\";\n    fileInput.multiple = true;\n    // @ts-ignore Non-standard\n    fileInput.webkitdirectory = directory;\n    // @ts-ignore Non-standard\n    fileInput.directory = directory;\n    // @ts-ignore Non-standard\n    fileInput.mozdirectory = directory;\n    // Not entirely sure why this is needed, since the input\n    // was just created, but somehow this helps prevent change\n    // events from getting swallowed.\n    // https://stackoverflow.com/a/12102992/1263117\n\n    // @ts-ignore Technically you can't set this to null, it has to be a string.\n    // But I don't feel like retesting it, so I'll leave it as null\n    fileInput.value = null;\n    fileInput.addEventListener(\"change\", (e: Event) => {\n      const files = (<HTMLInputElement>e.target).files;\n      resolve(files as FileList);\n    });\n    fileInput.click();\n  });\n}\n\nfunction urlIsBlobUrl(url: string): boolean {\n  return /^blob:/.test(url);\n}\n\nexport function curUrlFromByteArray(arr: Uint8Array) {\n  const base64 = Utils.base64FromDataArray(arr);\n  return `data:image/x-win-bitmap;base64,${base64}`;\n}\n\n// This is not perfect, but... meh: https://stackoverflow.com/a/36756650/1263117\nexport function filenameFromUrl(url: string): string | null {\n  if (urlIsBlobUrl(url)) {\n    return null;\n  }\n\n  const lastSegment = url.split(\"/\").pop();\n  if (lastSegment == null) {\n    return null;\n  }\n  return lastSegment.split(\"#\")[0].split(\"?\")[0];\n}\n","import { PlaylistTrack } from \"./types\";\nimport * as Utils from \"./utils\";\nimport * as FileUtils from \"./fileUtils\";\n\nexport const trackName = Utils.weakMapMemoize(\n  (track: PlaylistTrack): string => {\n    const { artist, title, defaultName, url } = track;\n    if (artist && title) {\n      return `${artist} - ${title}`;\n    } else if (title) {\n      return title;\n    } else if (defaultName) {\n      return defaultName;\n    } else if (url) {\n      const filename = FileUtils.filenameFromUrl(url);\n      if (filename) {\n        return filename;\n      }\n    }\n    return \"???\";\n  }\n);\n\nexport const trackFilename = Utils.weakMapMemoize(\n  (track: PlaylistTrack): string => {\n    if (track.url) {\n      const urlFilename = FileUtils.filenameFromUrl(track.url);\n      if (urlFilename != null) {\n        return urlFilename;\n      }\n    }\n    if (track.defaultName) {\n      return track.defaultName;\n    }\n    return \"???\";\n  }\n);\n","import { PlaylistTrack, Action } from \"../types\";\nimport {\n  SET_MEDIA,\n  SET_MEDIA_TAGS,\n  SET_MEDIA_DURATION,\n  MEDIA_TAG_REQUEST_INITIALIZED,\n  MEDIA_TAG_REQUEST_FAILED,\n  ADD_TRACK_FROM_URL,\n} from \"../actionTypes\";\nimport { MEDIA_TAG_REQUEST_STATUS } from \"../constants\";\nimport * as TrackUtils from \"../trackUtils\";\n\nexport interface TracksState {\n  [id: string]: PlaylistTrack;\n}\n\nconst defaultPlaylistState: TracksState = {};\n\nconst tracks = (\n  state: TracksState = defaultPlaylistState,\n  action: Action\n): TracksState => {\n  switch (action.type) {\n    case ADD_TRACK_FROM_URL:\n      return {\n        ...state,\n        [action.id]: {\n          id: action.id,\n          defaultName: action.defaultName || null,\n          duration: action.duration ?? null,\n          url: action.url,\n          mediaTagsRequestStatus: MEDIA_TAG_REQUEST_STATUS.INITIALIZED,\n        },\n      };\n    case SET_MEDIA: {\n      const newTrack = {\n        ...state[action.id],\n        duration: action.length,\n      };\n      return {\n        ...state,\n        [action.id]: newTrack,\n      };\n    }\n    case MEDIA_TAG_REQUEST_INITIALIZED:\n      return {\n        ...state,\n        [action.id]: {\n          ...state[action.id],\n          mediaTagsRequestStatus: MEDIA_TAG_REQUEST_STATUS.INITIALIZED,\n        },\n      };\n    case MEDIA_TAG_REQUEST_FAILED:\n      return {\n        ...state,\n        [action.id]: {\n          ...state[action.id],\n          mediaTagsRequestStatus: MEDIA_TAG_REQUEST_STATUS.FAILED,\n        },\n      };\n    case SET_MEDIA_DURATION: {\n      return {\n        ...state,\n        [action.id]: {\n          ...state[action.id],\n          duration: action.duration,\n        },\n      };\n    }\n    case SET_MEDIA_TAGS:\n      const track = state[action.id];\n      const {\n        sampleRate,\n        bitrate,\n        numberOfChannels,\n        title,\n        artist,\n        album,\n        albumArtUrl,\n      } = action;\n      const { kbps, khz, channels } = track;\n      return {\n        ...state,\n        [action.id]: {\n          ...track,\n          mediaTagsRequestStatus: MEDIA_TAG_REQUEST_STATUS.COMPLETE,\n          title,\n          artist,\n          album,\n          albumArtUrl,\n          kbps: bitrate != null ? String(Math.round(bitrate / 1000)) : kbps,\n          khz: sampleRate != null ? String(Math.round(sampleRate / 1000)) : khz,\n          channels: numberOfChannels != null ? numberOfChannels : channels,\n        },\n      };\n    default:\n      return state;\n  }\n};\n\nexport default tracks;\n\nexport const getTrackDisplayName = (\n  state: TracksState,\n  id: number | null = null\n): string | null => {\n  if (id == null) {\n    return null;\n  }\n  const track = state[id];\n  if (track == null) {\n    return null;\n  }\n\n  return TrackUtils.trackName(track);\n};\n","import { PlaylistState } from \"./reducers/playlist\";\nimport { SettingsState } from \"./reducers/settings\";\nimport { UserInputState } from \"./reducers/userInput\";\nimport { MediaState } from \"./reducers/media\";\nimport { ThunkDispatch, ThunkAction } from \"redux-thunk\";\nimport { DisplayState } from \"./reducers/display\";\nimport {\n  WindowsState,\n  WindowPositions as _WindowPositions,\n  WebampWindow as _WebampWindow,\n  WindowInfo as _WindowInfo,\n} from \"./reducers/windows\";\nimport { EqualizerState } from \"./reducers/equalizer\";\nimport { NetworkState } from \"./reducers/network\";\nimport { MilkdropState } from \"./reducers/milkdrop\";\nimport { SerializedStateV1 } from \"./serializedStates/v1Types\";\nimport { TracksState } from \"./reducers/tracks\";\nimport { IAudioMetadata, IOptions } from \"music-metadata-browser\";\nimport { Store as ReduxStore } from \"redux\";\n\n// Avoid warnings from Webpack: https://github.com/webpack/webpack/issues/7378\nexport type WebampWindow = _WebampWindow;\nexport type WindowInfo = _WindowInfo;\nexport type WindowPositions = _WindowPositions;\n\nexport interface Point {\n  x: number;\n  y: number;\n}\n\nexport interface Diff {\n  x?: number;\n  y?: number;\n}\n\nexport interface BoundingBox {\n  width: number;\n  height: number;\n}\n\nexport interface Box extends Point {\n  width: number;\n  height: number;\n}\n\nexport interface FilePicker {\n  contextMenuName: string;\n  filePicker: () => Promise<Track[]>;\n  requiresNetwork: boolean;\n}\n\nexport type Skin = {\n  url: string;\n  name: string;\n};\n\nexport interface MilkdropMessage {\n  text: string;\n  time: number;\n}\n\nexport type Band =\n  | 60\n  | 170\n  | 310\n  | 600\n  | 1000\n  | 3000\n  | 6000\n  | 12000\n  | 14000\n  | 16000;\n\nexport type Slider = Band | \"preamp\";\n\nexport type CursorImage =\n  | {\n      type: \"cur\";\n      url: string;\n    }\n  | {\n      type: \"ani\";\n      aniData: Uint8Array;\n    };\n\n// TODO: Use a type to ensure these keys mirror the CURSORS constant in\n// skinParser.js\nexport type Cursors = { [cursor: string]: CursorImage };\n\nexport type GenLetterWidths = { [letter: string]: number };\n\nexport interface PlaylistStyle {\n  normal: string;\n  current: string;\n  normalbg: string;\n  selectedbg: string;\n  font: string;\n}\n\n// TODO: Type these keys.\nexport type SkinImages = { [sprite: string]: string };\n\n// TODO: type these keys\nexport type SkinRegion = { [windowName: string]: string[] };\n\nexport type DummyVizData = {\n  0: 11.75;\n  8: 11.0625;\n  16: 8.5;\n  24: 7.3125;\n  32: 6.75;\n  40: 6.4375;\n  48: 6.25;\n  56: 5.875;\n  64: 5.625;\n  72: 5.25;\n  80: 5.125;\n  88: 4.875;\n  96: 4.8125;\n  104: 4.375;\n  112: 3.625;\n  120: 1.5625;\n};\n\nexport interface SkinGenExColors {\n  itemBackground: string;\n  itemForeground: string;\n  windowBackground: string;\n  buttonText: string;\n  windowText: string;\n  divider: string;\n  playlistSelection: string;\n  listHeaderBackground: string;\n  listHeaderText: string;\n  listHeaderFrameTopAndLeft: string;\n  listHeaderFrameBottomAndRight: string;\n  listHeaderFramePressed: string;\n  listHeaderDeadArea: string;\n  scrollbarOne: string;\n  scrollbarTwo: string;\n  pressedScrollbarOne: string;\n  pressedScrollbarTwo: string;\n  scrollbarDeadArea: string;\n  listTextHighlighted: string;\n  listTextHighlightedBackground: string;\n  listTextSelected: string;\n  listTextSelectedBackground: string;\n}\n\nexport type WindowId = \"main\" | \"playlist\" | \"equalizer\" | \"milkdrop\";\n\n// TODO: Fill these out once we actually use them.\nexport type SkinData = {\n  skinImages: SkinImages;\n  skinColors: string[];\n  skinPlaylistStyle: PlaylistStyle;\n  skinCursors: Cursors;\n  skinRegion: SkinRegion;\n  skinGenLetterWidths: GenLetterWidths;\n  skinGenExColors: SkinGenExColors | null;\n};\n\n// This is what we actually pass to butterchurn\nexport type ButterchurnPresetJson = {\n  name: string;\n  butterchurnPresetObject: Object;\n};\n\n// A URL that points to a Butterchurn preset\nexport interface ButterchurnPresetUrl {\n  name: string;\n  butterchurnPresetUrl: string;\n}\n\nexport type LazyButterchurnPresetJson = {\n  name: string;\n  getButterchrunPresetObject: () => Promise<Object>;\n};\n\nexport type Preset =\n  | ButterchurnPresetJson\n  | ButterchurnPresetUrl\n  | LazyButterchurnPresetJson;\n\nexport type StatePreset =\n  | { type: \"RESOLVED\"; name: string; preset: Object }\n  | { type: \"UNRESOLVED\"; name: string; getPreset: () => Promise<Object> };\n\nexport interface ButterchurnOptions {\n  getPresets(): Promise<Preset[]>;\n  importButterchurn(): Promise<any>;\n  importConvertPreset?: () => Promise<{\n    convertPreset(file: string, endpoint: string): Promise<Object>;\n  }>;\n  presetConverterEndpoint?: string;\n  butterchurnOpen: boolean;\n}\n\nexport interface EqfPreset {\n  name: string;\n  hz60: number;\n  hz170: number;\n  hz310: number;\n  hz600: number;\n  hz1000: number;\n  hz3000: number;\n  hz12000: number;\n  hz14000: number;\n  hz16000: number;\n  hz6000: number;\n  preamp: number;\n}\n\nexport enum TransitionType {\n  IMMEDIATE,\n  DEFAULT,\n  USER_PRESET,\n}\n\nexport interface Size {\n  width: number;\n  height: number;\n}\n\nexport type Action =\n  | {\n      type: \"@@init\";\n    }\n  | {\n      type: \"NETWORK_CONNECTED\";\n    }\n  | {\n      type: \"NETWORK_DISCONNECTED\";\n    }\n  | {\n      type: \"SET_AVAILABLE_SKINS\";\n      skins: Array<Skin>;\n    }\n  | {\n      type: \"PLAY\";\n    }\n  | {\n      type: \"IS_PLAYING\";\n    }\n  | {\n      type: \"PAUSE\";\n    }\n  | {\n      type: \"STOP\";\n    }\n  | {\n      type: \"IS_STOPPED\";\n    }\n  | {\n      type: \"TOGGLE_TIME_MODE\";\n    }\n  | {\n      type: \"UPDATE_TIME_ELAPSED\";\n      elapsed: number;\n    }\n  | {\n      type: \"ADD_TRACK_FROM_URL\";\n      atIndex: number | null;\n      id: number;\n      defaultName?: string;\n      duration?: number;\n      url: string;\n    }\n  | {\n      type: \"SET_MEDIA\";\n      id: number;\n      length: number;\n      kbps: string;\n      khz: string;\n      channels: number;\n    }\n  | {\n      type: \"SET_VOLUME\";\n      volume: number;\n    }\n  | {\n      type: \"SET_BALANCE\";\n      balance: number;\n    }\n  | {\n      type: \"TOGGLE_REPEAT\";\n    }\n  | {\n      type: \"TOGGLE_SHUFFLE\";\n    }\n  | {\n      type: \"SET_FOCUS\";\n      input: string;\n    }\n  | {\n      type: \"SET_BAND_FOCUS\";\n      input: string;\n      bandFocused: Slider;\n    }\n  | {\n      type: \"UNSET_FOCUS\";\n    }\n  | {\n      type: \"SET_SCRUB_POSITION\";\n      position: number;\n    }\n  | {\n      type: \"SET_USER_MESSAGE\";\n      message: string;\n    }\n  | {\n      type: \"UNSET_USER_MESSAGE\";\n    }\n  | {\n      type: \"TOGGLE_DOUBLESIZE_MODE\";\n    }\n  | {\n      type: \"TOGGLE_LLAMA_MODE\";\n    }\n  | {\n      type: \"STEP_MARQUEE\";\n    }\n  | {\n      type: \"DISABLE_MARQUEE\";\n    }\n  | {\n      type: \"STOP_WORKING\";\n    }\n  | {\n      type: \"START_WORKING\";\n    }\n  | {\n      type: \"CLOSE_WINAMP\";\n    }\n  | {\n      type: \"OPEN_WINAMP\";\n    }\n  | {\n      type: \"LOADING\";\n    }\n  | {\n      type: \"LOADED\";\n    }\n  | {\n      type: \"SET_SKIN_DATA\";\n      data: SkinData;\n    }\n  | {\n      type: \"TOGGLE_VISUALIZER_STYLE\";\n    }\n  | {\n      type: \"SET_PLAYLIST_SCROLL_POSITION\";\n      position: number;\n    }\n  | {\n      type: \"SET_Z_INDEX\";\n      zIndex: number;\n    }\n  | {\n      type: \"SET_DUMMY_VIZ_DATA\";\n      data: DummyVizData;\n    }\n  | {\n      type: \"SET_BAND_VALUE\";\n      band: Slider;\n      value: number;\n    }\n  | {\n      type: \"SET_EQ_ON\";\n    }\n  | {\n      type: \"SET_EQ_OFF\";\n    }\n  | {\n      type: \"SET_EQ_AUTO\";\n      value: boolean;\n    }\n  | {\n      type: \"SET_FOCUSED_WINDOW\";\n      window: WindowId | null;\n    }\n  | {\n      type: \"TOGGLE_WINDOW_SHADE_MODE\";\n      windowId: WindowId;\n    }\n  | {\n      type: \"TOGGLE_WINDOW\";\n      windowId: WindowId;\n    }\n  | {\n      type: \"CLOSE_WINDOW\";\n      windowId: WindowId;\n    }\n  | {\n      type: \"SET_WINDOW_VISIBILITY\";\n      windowId: WindowId;\n      hidden: boolean;\n    }\n  | {\n      type: \"ADD_GEN_WINDOW\";\n      windowId: WindowId;\n      title: string;\n      open: boolean;\n    }\n  | {\n      type: \"WINDOW_SIZE_CHANGED\";\n      windowId: WindowId;\n      size: [number, number];\n    }\n  | {\n      type: \"UPDATE_WINDOW_POSITIONS\";\n      positions: WindowPositions;\n      absolute?: boolean;\n    }\n  | {\n      type: \"CLICKED_TRACK\";\n      index: number;\n    }\n  | {\n      type: \"CTRL_CLICKED_TRACK\";\n      index: number;\n    }\n  | {\n      type: \"SHIFT_CLICKED_TRACK\";\n      index: number;\n    }\n  | {\n      type: \"SELECT_ALL\";\n    }\n  | {\n      type: \"SELECT_ZERO\";\n    }\n  | {\n      type: \"INVERT_SELECTION\";\n    }\n  | {\n      type: \"REMOVE_ALL_TRACKS\";\n    }\n  | {\n      type: \"REMOVE_TRACKS\";\n      ids: number[];\n    }\n  | {\n      type: \"REVERSE_LIST\";\n    }\n  | {\n      type: \"RANDOMIZE_LIST\";\n    }\n  | {\n      type: \"SET_TRACK_ORDER\";\n      trackOrder: number[];\n    }\n  | {\n      type: \"SET_MEDIA_TAGS\";\n      id: number;\n      title: string;\n      artist: string;\n      album?: string;\n      albumArtUrl?: string | null;\n      numberOfChannels?: number;\n      bitrate?: number;\n      sampleRate?: number;\n    }\n  | {\n      type: \"MEDIA_TAG_REQUEST_INITIALIZED\";\n      id: number;\n    }\n  | {\n      type: \"MEDIA_TAG_REQUEST_FAILED\";\n      id: number;\n    }\n  | {\n      type: \"SET_MEDIA_DURATION\";\n      id: number;\n      duration: number;\n    }\n  | {\n      type: \"PLAY_TRACK\";\n      id: number;\n    }\n  | {\n      type: \"BUFFER_TRACK\";\n      id: number;\n    }\n  | {\n      type: \"DRAG_SELECTED\";\n      offset: number;\n    }\n  | {\n      type: \"PLAY\";\n    }\n  | {\n      type: \"PAUSE\";\n    }\n  | {\n      type: \"SEEK_TO_PERCENT_COMPLETE\";\n      percent: number;\n    }\n  | {\n      type: \"MINIMIZE_WINAMP\";\n    }\n  | {\n      type: \"CLOSE_REQUESTED\";\n      cancel: () => void;\n    }\n  | {\n      type: \"LOAD_SERIALIZED_STATE\";\n      serializedState: SerializedStateV1;\n    }\n  | { type: \"RESET_WINDOW_SIZES\" }\n  | { type: \"BROWSER_WINDOW_SIZE_CHANGED\"; height: number; width: number }\n  | { type: \"LOAD_DEFAULT_SKIN\" }\n  | { type: \"ENABLE_MILKDROP\"; open: boolean }\n  | { type: \"SCHEDULE_MILKDROP_MESSAGE\"; message: string }\n  | {\n      type: \"SET_MILKDROP_DESKTOP\";\n      enabled: boolean;\n    }\n  | {\n      type: \"SET_MILKDROP_FULLSCREEN\";\n      enabled: boolean;\n    }\n  | { type: \"PRESET_REQUESTED\"; index: number; addToHistory: boolean }\n  | {\n      type: \"GOT_BUTTERCHURN_PRESETS\";\n      presets: StatePreset[];\n    }\n  | {\n      type: \"GOT_BUTTERCHURN\";\n      butterchurn: any;\n    }\n  | {\n      type: \"TOGGLE_RANDOMIZE_PRESETS\";\n    }\n  | { type: \"TOGGLE_PRESET_CYCLING\" }\n  | {\n      type: \"RESOLVE_PRESET_AT_INDEX\";\n      index: number;\n      json: Object;\n    }\n  | {\n      type: \"SELECT_PRESET_AT_INDEX\";\n      index: number;\n      transitionType: TransitionType;\n    }\n  | { type: \"TOGGLE_PRESET_OVERLAY\" }\n  | { type: \"MAIN_CONTEXT_MENU_OPENED\" }\n  | {\n      type: \"DROPPED_FILES\";\n      count: number;\n      firstFileName: string | null;\n      windowId: WindowId;\n    }\n  | {\n      type: \"OPENED_FILES\";\n      expectedType: \"SKIN\" | \"MEDIA\" | \"EQ\";\n      count: number;\n      firstFileName: string | null;\n    };\n\nexport type MediaTagRequestStatus =\n  | \"INITIALIZED\"\n  | \"FAILED\"\n  | \"COMPLETE\"\n  | \"NOT_REQUESTED\";\n\nexport type MediaStatus = \"PLAYING\" | \"STOPPED\" | \"PAUSED\";\n\nexport type LoadStyle = \"BUFFER\" | \"PLAY\" | \"NONE\";\n\nexport type TimeMode = \"ELAPSED\" | \"REMAINING\";\n\ninterface TrackInfo {\n  /**\n   * Name to be used until ID3 tags can be resolved.\n   *\n   * If the track has a `url`, and this property is not given,\n   * the filename will be used instead.\n   *\n   * Example: `'My Song'`\n   */\n  defaultName?: string;\n\n  /**\n   * Data to be used _instead_ of trying to fetch ID3 tags.\n   *\n   * Example: `{ artist: 'Jordan Eldredge', title: \"Jordan's Song\" }`\n   */\n  metaData?: {\n    artist: string;\n    title: string;\n    album?: string;\n    albumArtUrl?: string;\n  };\n\n  /**\n   * Duration (in seconds) to be used instead of fetching enough of the file to measure its length.\n   *\n   * Example: 95\n   */\n  duration?: number;\n}\n\nexport interface URLTrack extends TrackInfo {\n  /**\n   * Source URL of the track\n   *\n   * Note: This URL must be served the with correct CORs headers.\n   *\n   * Example: `'https://example.com/song.mp3'`\n   */\n  url: string;\n}\n\nexport interface BlobTrack extends TrackInfo {\n  /**\n   * Blob source of the track\n   */\n  blob: Blob;\n}\n\nexport interface LoadedURLTrack {\n  url: string;\n  metaData: {\n    artist: string | null;\n    title: string | null;\n    album: string | null;\n    albumArtUrl: string | null;\n  };\n}\n\nexport interface Options {\n  /**\n   * An object representing the initial skin to use.\n   *\n   * If omitted, the default skin, included in the bundle, will be used.\n   * Note: This URL must be served the with correct CORs headers.\n   *\n   * Example: `{ url: './path/to/skin.wsz' }`\n   */\n  initialSkin?: {\n    url: string;\n  };\n\n  /**\n   * An array of `Track`s to prepopulate the playlist with.\n   */\n  initialTracks?: Track[];\n\n  /**\n   * An array of objects representing available skins.\n   *\n   * These will appear in the \"Options\" menu under \"Skins\".\n   * Note: These URLs must be served with the correct CORs headers.\n   *\n   * Example: `[ { url: \"./green.wsz\", name: \"Green Dimension V2\" } ]`\n   */\n  availableSkins?: { url: string; name: string }[];\n\n  /**\n   * Configure how the Winamp windows should be laid out on initial render.\n   */\n  windowLayout?: WindowLayout;\n\n  /**\n   * Controls if \"double size mode\", where the fixed sized windows are rendered\n   * at 2x, should be enabled\n   *\n   *  **Note:** In keeping with the original Winamp, double size mode does not\n   *  apply to resizable windows like the equalizer or Milkdrop.\n   *\n   * Default: `false`\n   */\n  enableDoubleSizeMode?: boolean;\n\n  /**\n   * Should global hotkeys be enabled?\n   *\n   * Default: `false`\n   */\n  enableHotkeys?: boolean;\n\n  /**\n   * An array of additional file pickers.\n   *\n   * These will appear in the \"Options\" menu under \"Play\".\n   *\n   * For example, this option can be used to provide a \"Dropbox\" file picker.\n   */\n  filePickers?: [\n    {\n      /**\n       * The name that will appear in the context menu.\n       *\n       * Example: `\"My File Picker...\"`\n       */\n      contextMenuName: string;\n\n      /**\n       * A function which returns a Promise that resolves to an array of `Track`s\n       *\n       * Example: `() => Promise.resolve([{ url: './rick_roll.mp3' }])`\n       */\n      filePicker: () => Promise<Track[]>;\n\n      /**\n       * Indicates if this options should be made available when the user is offline.\n       */\n      requiresNetwork: boolean;\n    }\n  ];\n  zIndex?: number;\n  handleTrackDropEvent?: (\n    e: React.DragEvent<HTMLDivElement>\n  ) => Track[] | null | Promise<Track[] | null>;\n  handleAddUrlEvent?: () => Track[] | null | Promise<Track[] | null>;\n  handleLoadListEvent?: () => Track[] | null | Promise<Track[] | null>;\n  handleSaveListEvent?: (tracks: Track[]) => null | Promise<null>;\n}\n\n/**\n * Specifies the initial position and size of a the Winamp windows.\n *\n * Positions are specified in pixels from the top left corner of an imaginary\n * box. On initial render, the collection of visible windows will be centered\n * within the HTML element passed to `Webamp.renderWhenReady(element)`. In other\n * words, the positions given here will determine the _relative_ position of the\n * windows. The absolute position will be determined by the HTML element in\n * which Webamp is centered.\n *\n * Enabling \"shade mode\" for a window that supports it, will cause it to be\n * rendered minimized. Be default windows are not in shade mode.\n *\n * Windows which support resizing can have their size specified. If omitted,\n * they default to their small base size.\n *\n * Windows that are omitted will start closed. Enabling \"closed\" for a window\n * that supports it, will cause it to start closed.\n */\nexport type WindowLayout = {\n  main?: {\n    position: WindowPosition;\n    shadeMode?: boolean;\n    closed?: boolean;\n  };\n  equalizer?: {\n    position: WindowPosition;\n    shadeMode?: boolean;\n    closed?: boolean;\n  };\n  playlist?: {\n    position: WindowPosition;\n    shadeMode?: boolean;\n    size?: WindowSize | null;\n    closed?: boolean;\n  };\n  milkdrop?: {\n    position: WindowPosition;\n    size?: WindowSize | null;\n    closed?: boolean;\n  };\n};\n\n/**\n * Offset from the top left corner of an imaginary box.\n */\nexport type WindowPosition = { top: number; left: number };\n\n/**\n * Resizable windows in Winamp have a base size and can be expanded in\n * increments based on the size of the skin sprite.\n *\n * To specify a window being larger than its base size, use `extraHeight` to\n * specify how many sprite increments to expand the window's height by, and\n * `extraWidth` to specify how many sprite increments to expand the window's\n * width by.\n */\nexport type WindowSize = {\n  extraHeight: number;\n  extraWidth: number;\n};\n\n/**\n * Many methods on the webamp instance deal with track.\n *\n * Either `url` or `blob` must be specified\n */\nexport type Track = URLTrack | BlobTrack;\n\nexport interface PlaylistTrack {\n  id: number;\n  artist?: string;\n  title?: string;\n  album?: string;\n  url: string;\n  defaultName: string | null;\n  albumArtUrl?: string | null;\n  mediaTagsRequestStatus: MediaTagRequestStatus;\n  duration: number | null;\n  kbps?: string;\n  khz: string;\n  channels?: number;\n}\n\nexport interface AppState {\n  userInput: UserInputState;\n  windows: WindowsState;\n  display: DisplayState;\n  settings: SettingsState;\n  equalizer: EqualizerState;\n  playlist: PlaylistState;\n  media: MediaState;\n  network: NetworkState;\n  tracks: TracksState;\n  milkdrop: MilkdropState;\n}\n\nexport type PartialState = any;\n\n/**\n * Type definition of the music-metadata-browser module.\n * Ref: https://github.com/Borewit/music-metadata-browser/blob/master/src/index.ts\n */\nexport interface IMusicMetadataBrowserApi {\n  /**\n   * Parse Web API File\n   * @param {Blob} blob\n   * @param {IOptions} options Parsing options\n   * @returns {Promise<IAudioMetadata>}\n   */\n  parseBlob(blob: Blob, options?: IOptions): Promise<IAudioMetadata>;\n\n  /**\n   * Parse fetched file, using the Web Fetch API\n   * @param {string} audioTrackUrl URL to download the audio track from\n   * @param {IOptions} options Parsing options\n   * @returns {Promise<IAudioMetadata>}\n   */\n  fetchFromUrl(\n    audioTrackUrl: string,\n    options?: IOptions\n  ): Promise<IAudioMetadata>;\n\n  /**\n   * Parse audio from Node Buffer\n   * @param {Stream.Readable} stream Audio input stream\n   * @param {string} mimeType <string> Content specification MIME-type, e.g.: 'audio/mpeg'\n   * @param {IOptions} options Parsing options\n   * @returns {Promise<IAudioMetadata>}\n   */\n  parseBuffer(\n    buf: Buffer,\n    mimeType?: string,\n    options?: IOptions\n  ): Promise<IAudioMetadata>;\n}\n\nexport interface Extras {\n  requireJSZip(): Promise<any>;\n  requireMusicMetadata(): Promise<IMusicMetadataBrowserApi>;\n  convertPreset: ((file: File) => Promise<Object>) | null;\n  handleTrackDropEvent?: (\n    e: React.DragEvent<HTMLDivElement>\n  ) => Track[] | null | Promise<Track[] | null>;\n  handleAddUrlEvent?: () => Track[] | null | Promise<Track[] | null>;\n  handleLoadListEvent?: () => Track[] | null | Promise<Track[] | null>;\n  handleSaveListEvent?: (tracks: Track[]) => null | Promise<null>;\n}\n\nexport type GetState = () => AppState;\n\nexport type Thunk = ThunkAction<void, AppState, Extras, Action>;\n\nexport type Dispatch = ThunkDispatch<AppState, Extras, Action>;\n\nexport type Reducer = (state: AppState, action: Action) => AppState;\n\nexport type Middleware = (\n  store: MiddlewareStore\n) => (next: Dispatch) => (action: Action) => any;\n\nexport interface Store extends ReduxStore {\n  subscribe(cb: () => void): () => void;\n  dispatch: Dispatch;\n  getState: GetState;\n}\n\nexport interface MiddlewareStore {\n  dispatch: Dispatch;\n  getState: GetState;\n}\n","import { Action, StatePreset, TransitionType, MilkdropMessage } from \"../types\";\nimport {\n  SET_MILKDROP_DESKTOP,\n  SET_MILKDROP_FULLSCREEN,\n  GOT_BUTTERCHURN_PRESETS,\n  GOT_BUTTERCHURN,\n  RESOLVE_PRESET_AT_INDEX,\n  SELECT_PRESET_AT_INDEX,\n  TOGGLE_PRESET_OVERLAY,\n  PRESET_REQUESTED,\n  TOGGLE_RANDOMIZE_PRESETS,\n  TOGGLE_PRESET_CYCLING,\n  SCHEDULE_MILKDROP_MESSAGE,\n} from \"../actionTypes\";\nimport * as Utils from \"../utils\";\n\nexport interface MilkdropState {\n  display: \"WINDOW\" | \"DESKTOP\" | \"FULLSCREEN\";\n  overlay: boolean;\n  presetHistory: number[];\n  presets: StatePreset[];\n  currentPresetIndex: number | null;\n  butterchurn: any;\n  transitionType: TransitionType;\n  randomize: boolean;\n  cycling: boolean;\n  // TODO: This could probably be simplified to just a date and we could assume\n  // the song title is the message.\n  message: MilkdropMessage | null;\n}\n\nconst defaultMilkdropState: MilkdropState = {\n  display: \"WINDOW\",\n  overlay: false,\n  presetHistory: [],\n  presets: [],\n  currentPresetIndex: null,\n  butterchurn: null,\n  transitionType: TransitionType.DEFAULT,\n  randomize: true,\n  cycling: true,\n  message: null,\n};\n\nexport const milkdrop = (\n  state: MilkdropState = defaultMilkdropState,\n  action: Action\n): MilkdropState => {\n  switch (action.type) {\n    case SET_MILKDROP_DESKTOP:\n      return { ...state, display: action.enabled ? \"DESKTOP\" : \"WINDOW\" };\n    case SET_MILKDROP_FULLSCREEN:\n      return { ...state, display: action.enabled ? \"FULLSCREEN\" : \"WINDOW\" };\n    case GOT_BUTTERCHURN:\n      return { ...state, butterchurn: action.butterchurn };\n    case GOT_BUTTERCHURN_PRESETS:\n      return {\n        ...state,\n        presets: state.presets.concat(action.presets),\n      };\n    case PRESET_REQUESTED:\n      if (action.addToHistory) {\n        return {\n          ...state,\n          presetHistory: [...state.presetHistory, action.index],\n        };\n      }\n      return {\n        ...state,\n        presetHistory: state.presetHistory.slice(0, -1),\n      };\n    case RESOLVE_PRESET_AT_INDEX:\n      const preset = state.presets[action.index];\n      return {\n        ...state,\n        presets: Utils.replaceAtIndex(state.presets, action.index, {\n          type: \"RESOLVED\",\n          name: preset.name,\n          preset: action.json,\n        }),\n      };\n    case SELECT_PRESET_AT_INDEX:\n      return {\n        ...state,\n        currentPresetIndex: action.index,\n        transitionType: action.transitionType,\n      };\n    case TOGGLE_PRESET_OVERLAY:\n      return { ...state, overlay: !state.overlay };\n    case TOGGLE_RANDOMIZE_PRESETS:\n      return { ...state, randomize: !state.randomize };\n    case TOGGLE_PRESET_CYCLING:\n      return { ...state, cycling: !state.cycling };\n    case SCHEDULE_MILKDROP_MESSAGE:\n      return {\n        ...state,\n        message: {\n          text: action.message,\n          time: Date.now(),\n        },\n      };\n    default:\n      return state;\n  }\n};\n\nexport default milkdrop;\n","import { AppState, Action } from \"../types\";\nimport { Reducer, combineReducers } from \"redux\";\n\nimport playlist from \"./playlist\";\nimport windows from \"./windows\";\nimport media from \"./media\";\nimport display from \"./display\";\nimport userInput from \"./userInput\";\nimport equalizer from \"./equalizer\";\nimport network from \"./network\";\nimport settings from \"./settings\";\nimport tracks from \"./tracks\";\nimport milkdrop from \"./milkdrop\";\n\nconst reducer: Reducer<AppState, Action, never> = combineReducers({\n  userInput,\n  windows,\n  display,\n  settings,\n  equalizer,\n  playlist,\n  media,\n  network,\n  tracks,\n  milkdrop,\n});\n\nexport default reducer;\n","import { createRoot } from \"react-dom/client\";\nimport { flushSync } from \"react-dom\";\n\ninterface Props {\n  averageTrackLength: string;\n  numberOfTracks: number;\n  playlistLengthSeconds: number;\n  playlistLengthMinutes: number;\n  tracks: string[];\n}\n\nexport const getAsDataURI = (text: string): string =>\n  `data:text/html;base64,${window.btoa(text)}`;\n\n// Replaces deprecated \"noshade\" attribute\nconst noshadeStyle = {\n  height: \"2px\",\n  borderWidth: 0,\n  color: \"gray\",\n  backgroundColor: \"gray\",\n};\n\n// We use all kinds of non-standard attributes and tags. So we create these fake\n// components to trick Typescript.\nconst Body = (props: any) => {\n  // @ts-ignore\n  return <body {...props} />;\n};\n\nconst Font = (props: any) => {\n  // @ts-ignore\n  return <font {...props} />;\n};\n\nconst Hr = (props: any) => {\n  // @ts-ignore\n  return <hr {...props} />;\n};\n\nconst Div = (props: any) => {\n  // @ts-ignore\n  return <div {...props} />;\n};\n\nconst Table = (props: any) => {\n  // @ts-ignore\n  return <table {...props} />;\n};\n\n// TODO: Move <html> tag out to the string creation step in order\n// to avoid the warning.\nconst Playlist = (props: Props) => (\n  <>\n    <Div align=\"center\">\n      <Div className=\"para2\" align=\"center\">\n        <p>WINAMP</p>\n      </Div>\n      <Div className=\"para1\" align=\"center\">\n        <p>playlist</p>\n      </Div>\n    </Div>\n    <Hr\n      align=\"left\"\n      width=\"90%\"\n      size=\"1\"\n      color=\"#FFBF00\"\n      style={noshadeStyle}\n    />\n    <Div align=\"right\">\n      <Table border=\"0\" cellSpacing=\"0\" cellPadding=\"0\" width=\"98%\">\n        {/* Added <tbody> tag */}\n        <tbody>\n          <tr>\n            <td>\n              <small>\n                <small>\n                  <Font face=\"Arial\" color=\"#FFBF00\">\n                    {props.numberOfTracks}\n                  </Font>\n                  <Font color=\"#409FFF\" face=\"Arial\">\n                    {\" track in playlist, average track length: \"}\n                  </Font>\n                  <Font face=\"Arial\" color=\"#FFBF00\">\n                    {props.averageTrackLength}\n                  </Font>\n                </small>\n              </small>\n              <br />\n              <small>\n                <small>\n                  <Font color=\"#409FFF\" face=\"Arial\">\n                    {\"Playlist length: \"}\n                  </Font>\n                  <Font face=\"Arial\" color=\"#FFBF00\">\n                    {props.playlistLengthMinutes}\n                  </Font>\n                  <Font color=\"#409FFF\" face=\"Arial\">\n                    {\" minutes \"}\n                  </Font>\n                  <Font face=\"Arial\" color=\"#FFBF00\">\n                    {props.playlistLengthSeconds}\n                  </Font>\n                  <Font color=\"#409FFF\" face=\"Arial\">\n                    {\" second \"}\n                  </Font>\n                  <br />\n                  <Font color=\"#409FFF\" face=\"Arial\">\n                    Right-click <a href=\"./\">here</a> to save this HTML file.\n                  </Font>\n                </small>\n              </small>\n            </td>\n          </tr>\n        </tbody>\n      </Table>\n    </Div>\n    <blockquote>\n      <p>\n        <Font color=\"#FFBF00\" face=\"Arial\">\n          <big>Playlist files:</big>\n        </Font>\n        {/* Added closing tag here */}\n      </p>\n      <ul>\n        <Font face=\"Arial\" color=\"#FFFFFF\">\n          <small>\n            {props.tracks.map((track) => (\n              <span key={track}>\n                {track}\n                <br />\n              </span>\n            ))}\n            {/* Added closing tag here */}\n          </small>\n        </Font>\n      </ul>\n    </blockquote>\n    <Hr\n      align=\"left\"\n      width=\"90%\"\n      size=\"1\"\n      color=\"#FFBF00\"\n      style={noshadeStyle}\n    />\n  </>\n);\n\nconst createPlaylistHTML = (props: Props): string => {\n  const node = document.createElement(\"div\");\n  const root = createRoot(node);\n  flushSync(() => {\n    root.render(<Playlist {...props} />);\n  });\n  return `\n  <html>\n      <head>\n      <link rel=\"stylesheet\" href=\"null\" />\n      <style type=\"text/css\">\n        body { background: #000040; }\n        .para1 { margin-top: -42px; margin-left: 145px; margin-right: 10px; font-family: \"font2, Arial\"; font-size: 30px; line-height: 35px; text-align: left; color: #E1E1E1; }\n        .para2 { margin-top: 15px; margin-left: 15px; margin-right: 50px; font-family: \"font1, Arial Black\"; font-size: 50px; line-height: 40px; text-align: left; color: #004080; }\n      </style>\n      <title>Winamp Generated PlayList</title>\n    </head>\n     <body bgcolor=\"#000080\" topmargin=\"0\" leftmargin=\"0\" text=\"#FFFFFF\">\n    ${node.innerHTML}\n    </body\n  </html>`;\n};\n\nexport const createPlaylistURL = (props: Props): string =>\n  getAsDataURI(createPlaylistHTML(props));\n","import { Slider } from \"./types\";\n\nimport * as Utils from \"./utils\";\n\nexport const getBalanceText = (balance: number): string => {\n  if (balance === 0) {\n    return \"Balance: Center\";\n  }\n  const direction = balance > 0 ? \"Right\" : \"Left\";\n  return `Balance: ${Math.abs(balance)}% ${direction}`;\n};\n\nexport const getVolumeText = (volume: number): string => `Volume: ${volume}%`;\n\nexport const getPositionText = (\n  duration: number,\n  seekToPercent: number\n): string => {\n  const newElapsedStr = Utils.getTimeStr(\n    (duration * seekToPercent) / 100,\n    false\n  );\n  const durationStr = Utils.getTimeStr(duration, false);\n  return `Seek to: ${newElapsedStr}/${durationStr} (${seekToPercent}%)`;\n};\n\nexport const getDoubleSizeModeText = (enabled: boolean): string =>\n  `${enabled ? \"Disable\" : \"Enable\"} doublesize mode`;\n\nconst formatHz = (hz: number): string =>\n  hz < 1000 ? `${hz}HZ` : `${hz / 1000}KHZ`;\n\n// Format a number as a string, ensuring it has a + or - sign\nconst ensureSign = (num: number): string =>\n  num > 0 ? `+${num}` : num.toString();\n\n// Round to 1 and exactly 1 decimal point\nconst roundToTenths = (num: number): string =>\n  (Math.round(num * 10) / 10).toFixed(1);\n\nexport const getEqText = (band: Slider, level: number): string => {\n  const db = roundToTenths(((level - 50) / 50) * 12);\n  const label = band === \"preamp\" ? \"Preamp\" : formatHz(band);\n  return `EQ: ${label} ${ensureSign(Number(db))} DB`;\n};\n","import { WindowInfo, WindowId } from \"./types\";\n\ninterface NewGraph {\n  [key: string]: {\n    above: string[];\n    left: string[];\n  };\n}\n\ninterface PositionDiff {\n  [key: string]: {\n    x: number;\n    y: number;\n  };\n}\n\nexport interface SizeDiff {\n  [key: string]: {\n    width: number;\n    height: number;\n  };\n}\n\nexport function getPositionDiff(\n  graph: Graph,\n  sizeDiff: SizeDiff\n): PositionDiff {\n  const newGraph: NewGraph = {};\n  const positionDiff: PositionDiff = {};\n  for (const key of Object.keys(graph)) {\n    newGraph[key] = { above: [], left: [] };\n    positionDiff[key] = { x: 0, y: 0 };\n  }\n\n  // Construct an inverted graph\n  for (const [key, neighbors] of Object.entries(graph)) {\n    const { below, right } = neighbors;\n    if (right != null) {\n      newGraph[right].left.push(key);\n    }\n    if (below != null) {\n      newGraph[below].above.push(key);\n    }\n  }\n\n  function walkRight(key: string) {\n    const node = newGraph[key];\n    const nodeSizeDiff = sizeDiff[key];\n    node.left.forEach((left) => {\n      positionDiff[left].x += nodeSizeDiff.width + positionDiff[key].x;\n      walkRight(left);\n    });\n  }\n\n  function walkDown(key: string) {\n    const node = newGraph[key];\n    const nodeSizeDiff = sizeDiff[key];\n    node.above.forEach((above) => {\n      positionDiff[above].y += nodeSizeDiff.height + positionDiff[key].y;\n      walkDown(above);\n    });\n  }\n\n  // Find disconnected nodes, and walk\n  for (const [key, neighbors] of Object.entries(graph)) {\n    if (neighbors.below == null) {\n      walkDown(key);\n    }\n    if (neighbors.right == null) {\n      walkRight(key);\n    }\n  }\n\n  return positionDiff;\n}\n\ninterface Edges {\n  below?: string;\n  right?: string;\n}\n\nexport interface Graph {\n  // TODO: Ensure this is a WindowId\n  [id: string]: Edges;\n}\n\nexport function generateGraph(windows: WindowInfo[]): Graph {\n  const bottoms: { [offset: number]: WindowInfo[] } = {};\n  const rights: { [offset: number]: WindowInfo[] } = {};\n  for (const w of windows) {\n    const bottom = w.y + w.height;\n    if (bottoms[bottom]) {\n      bottoms[bottom].push(w);\n    } else {\n      bottoms[bottom] = [w];\n    }\n\n    const right = w.x + w.width;\n    if (rights[right]) {\n      rights[right].push(w);\n    } else {\n      rights[right] = [w];\n    }\n  }\n\n  const graph: Graph = {};\n  for (const w of windows) {\n    const edges: Edges = {};\n    const top = w.y;\n    const left = w.x;\n\n    const tops = bottoms[top];\n    const lefts = rights[left];\n    if (tops) {\n      for (const below of tops) {\n        const isToTheLeft = below.x + below.width < w.x;\n        const isToTheRight = below.x > w.x + w.width;\n\n        const overlapsInX = !(isToTheLeft || isToTheRight);\n        if (overlapsInX) {\n          edges.below = below.key;\n          break;\n        }\n      }\n    }\n    if (lefts) {\n      for (const right of lefts) {\n        const isAbove = right.y + right.height < w.y;\n        const isBelow = right.y > w.y + w.height;\n        const overlapsInY = !(isAbove || isBelow);\n        if (overlapsInY) {\n          edges.right = right.key;\n          break;\n        }\n      }\n    }\n\n    graph[w.key] = edges;\n  }\n  return graph;\n}\n","import {\n  AppState,\n  PlaylistTrack,\n  WebampWindow,\n  WindowId,\n  WindowInfo,\n  LoadedURLTrack,\n  WindowPositions,\n  PlaylistStyle,\n  TransitionType,\n  MediaStatus,\n  TimeMode,\n  SkinImages,\n  Cursors,\n  SkinRegion,\n  GenLetterWidths,\n  MilkdropMessage,\n  DummyVizData,\n} from \"./types\";\nimport { createSelector, defaultMemoize } from \"reselect\";\nimport * as Utils from \"./utils\";\nimport {\n  BANDS,\n  TRACK_HEIGHT,\n  WINDOW_RESIZE_SEGMENT_WIDTH,\n  WINDOW_RESIZE_SEGMENT_HEIGHT,\n  WINDOW_WIDTH,\n  MEDIA_STATUS,\n  MEDIA_TAG_REQUEST_STATUS,\n  WINDOWS,\n  VISUALIZERS,\n} from \"./constants\";\nimport { createPlaylistURL } from \"./playlistHtml\";\nimport * as fromTracks from \"./reducers/tracks\";\nimport * as fromDisplay from \"./reducers/display\";\nimport * as fromEqualizer from \"./reducers/equalizer\";\nimport * as fromMedia from \"./reducers/media\";\nimport * as fromWindows from \"./reducers/windows\";\nimport * as MarqueeUtils from \"./marqueeUtils\";\nimport { generateGraph } from \"./resizeUtils\";\nimport { SerializedStateV1 } from \"./serializedStates/v1Types\";\n\nexport const getSliders = (state: AppState) => state.equalizer.sliders;\n\nexport const getEqfData = createSelector(getSliders, (sliders) => {\n  const preset: { [key: string]: number | string } = {\n    name: \"Entry1\",\n    preamp: Utils.denormalizeEqBand(sliders.preamp),\n  };\n  BANDS.forEach((band) => {\n    preset[`hz${band}`] = Utils.denormalizeEqBand(sliders[band]);\n  });\n  const eqfData = {\n    presets: [preset],\n    type: \"Winamp EQ library file v1.1\",\n  };\n  return eqfData;\n});\n\nexport const getTracks = (state: AppState) => state.tracks;\nexport const getTrackUrl = (state: AppState) => {\n  return (id: number): string | null => {\n    return state.tracks[id]?.url;\n  };\n};\nexport const getTrackOrder = (state: AppState) => state.playlist.trackOrder;\n\nexport const getTrackCount = createSelector(\n  getTrackOrder,\n  (trackOrder) => trackOrder.length\n);\n\nexport const getOrderedTracks = createSelector(\n  getTracks,\n  getTrackOrder,\n  (tracks, trackOrder) => trackOrder.filter((id) => tracks[id])\n);\n\nexport const getPlaylistTracks = createSelector(\n  getTracks,\n  getTrackOrder,\n  (tracks, trackOrder) => trackOrder.map((id) => tracks[id]).filter(Boolean)\n);\n\nexport const getUserTracks = createSelector(\n  getTracks,\n  getTrackOrder,\n  (tracks, trackOrder) =>\n    trackOrder.map((id) => {\n      const track = tracks[id];\n\n      return {\n        url: track.url,\n        metaData: {\n          artist: track.artist || \"\",\n          title: track.title || \"\",\n          album: track.album,\n          albumArtUrl: track.albumArtUrl || \"\",\n        },\n      };\n    })\n);\n\nconst getOrderedTrackObjects = createSelector(\n  getTracks,\n  getOrderedTracks,\n  (tracks, trackOrder): PlaylistTrack[] => trackOrder.map((id) => tracks[id])\n);\n\nexport const getSelectedTrackIds = (state: AppState): Set<number> => {\n  return state.playlist.selectedTracks;\n};\n\nexport const getSelectedTrackObjects = createSelector(\n  getOrderedTrackObjects,\n  getSelectedTrackIds,\n  (tracks, selectedIds) => tracks.filter((track) => selectedIds.has(track.id))\n);\n\n// If a duration is `null`, it counts as zero, which seems fine enough.\nconst runningTimeFromTracks = (tracks: PlaylistTrack[]) =>\n  tracks.reduce((time, track) => time + Number(track.duration), 0);\n\nconst getTotalRunningTime = createSelector(\n  getOrderedTrackObjects,\n  runningTimeFromTracks\n);\n\nconst getSelectedRunningTime = createSelector(\n  getSelectedTrackObjects,\n  runningTimeFromTracks\n);\n\n// Note: We should append \"+\" to these values if some of the tracks are of unknown time.\nexport const getRunningTimeMessage = createSelector(\n  getTotalRunningTime,\n  getSelectedRunningTime,\n  (totalRunningTime, selectedRunningTime) =>\n    `${Utils.getTimeStr(selectedRunningTime)}/${Utils.getTimeStr(\n      totalRunningTime\n    )}`\n);\n\n// TODO: use selectors to get memoization\nexport const getCurrentTrackIndex = (state: AppState): number => {\n  const { playlist } = state;\n  if (playlist.currentTrack == null) {\n    return -1;\n  }\n  return playlist.trackOrder.indexOf(playlist.currentTrack);\n};\n\nexport const getCurrentTrackNumber = createSelector(\n  getCurrentTrackIndex,\n  (currentTrackIndex) => currentTrackIndex + 1\n);\n\nexport const getCurrentTrackId = (state: AppState) =>\n  state.playlist.currentTrack;\n\n// TODO: Sigh... Technically, we should detect if we are looping only repeat if we are.\n// I think this would require pre-computing the \"random\" order of a playlist.\nexport const getRandomTrackId = (state: AppState): number | null => {\n  const {\n    playlist: { trackOrder, currentTrack },\n  } = state;\n  if (trackOrder.length === 0) {\n    return null;\n  }\n  let nextId;\n  do {\n    nextId = trackOrder[Math.floor(trackOrder.length * Math.random())];\n  } while (nextId === currentTrack && trackOrder.length > 1);\n  return nextId;\n};\n\nexport const getNextTrackId = (state: AppState, n = 1) => {\n  const {\n    playlist: { trackOrder },\n    media: { repeat, shuffle },\n  } = state;\n  if (shuffle) {\n    return getRandomTrackId(state);\n  }\n  const trackCount = getTrackCount(state);\n  if (trackCount === 0) {\n    return null;\n  }\n\n  const currentIndex = getCurrentTrackIndex(state);\n\n  let nextIndex = currentIndex + n;\n  if (repeat) {\n    nextIndex = nextIndex % trackCount;\n    if (nextIndex < 0) {\n      // Handle wrapping around backwards\n      nextIndex += trackCount;\n    }\n    return trackOrder[nextIndex];\n  }\n\n  if (currentIndex === trackCount - 1 && n > 0) {\n    return null;\n  } else if (currentIndex === 0 && n < 0) {\n    return null;\n  }\n\n  nextIndex = Utils.clamp(nextIndex, 0, trackCount - 1);\n  return trackOrder[nextIndex];\n};\n\nexport const getGenWindows = (\n  state: AppState\n): { [name: string]: WebampWindow } => {\n  return state.windows.genWindows;\n};\n\nexport const getWindowOpen = createSelector(getGenWindows, (genWindows) => {\n  return (windowId: WindowId) => genWindows[windowId].open;\n});\n\nexport const getWindowHidden = createSelector(\n  getMilkdropWindowEnabled,\n  (milkdropWindowEnabled) => {\n    return (windowId: WindowId) => {\n      return windowId === WINDOWS.MILKDROP && !milkdropWindowEnabled;\n    };\n  }\n);\n\nexport const getWindowShade = createSelector(getGenWindows, (genWindows) => {\n  return (windowId: WindowId) => genWindows[windowId].shade;\n});\n\nexport const getWindowSize = createSelector(getGenWindows, (genWindows) => {\n  return (windowId: WindowId) => genWindows[windowId].size;\n});\n\nexport const getWindowPositions = createSelector(\n  getGenWindows,\n  (windows): WindowPositions => Utils.objectMap(windows, (w) => w.position)\n);\n\nconst BASE_WINDOW_HEIGHT = 58;\nexport const getNumberOfVisibleTracks = createSelector(\n  getWindowSize,\n  (getWindowSize_) => {\n    const playlistSize = getWindowSize_(\"playlist\");\n    return Math.floor(\n      (BASE_WINDOW_HEIGHT + WINDOW_RESIZE_SEGMENT_HEIGHT * playlistSize[1]) /\n        TRACK_HEIGHT\n    );\n  }\n);\n\nexport const getOverflowTrackCount = createSelector(\n  getTrackCount,\n  getNumberOfVisibleTracks,\n  (trackCount, numberOfVisibleTracks) =>\n    Math.max(0, trackCount - numberOfVisibleTracks)\n);\n\nconst _getPlaylistScrollPosition = (state: AppState) =>\n  state.display.playlistScrollPosition;\n\nexport const getPlaylistScrollPosition = createSelector(\n  getOverflowTrackCount,\n  _getPlaylistScrollPosition,\n  (overflowTrackCount, playlistScrollPosition) => {\n    if (overflowTrackCount === 0) {\n      return 0;\n    }\n    return Math.round(\n      (Math.round((overflowTrackCount * playlistScrollPosition) / 100) /\n        overflowTrackCount) *\n        100\n    );\n  }\n);\n\nexport const getScrollOffset = createSelector(\n  _getPlaylistScrollPosition,\n  getTrackCount,\n  getNumberOfVisibleTracks,\n  (playlistScrollPosition, trackCount, numberOfVisibleTracks) => {\n    const overflow = Math.max(0, trackCount - numberOfVisibleTracks);\n    return Utils.percentToIndex(playlistScrollPosition / 100, overflow + 1);\n  }\n);\n\nexport const getVisibleTrackIds = createSelector(\n  getScrollOffset,\n  getTrackOrder,\n  getNumberOfVisibleTracks,\n  (offset, trackOrder, numberOfVisibleTracks) =>\n    trackOrder.slice(offset, offset + numberOfVisibleTracks)\n);\n\nexport function getAllTracksAreVisible(state: AppState): boolean {\n  return getVisibleTrackIds(state).length === state.playlist.trackOrder.length;\n}\n\nexport const getTrackIsVisibleFunction = createSelector(\n  getVisibleTrackIds,\n  (visibleTrackIds) => {\n    return (id: number) => visibleTrackIds.includes(id);\n  }\n);\n\nexport const getVisibleTracks = createSelector(\n  getVisibleTrackIds,\n  getTracks,\n  (visibleTrackIds, tracks) => visibleTrackIds.map((id) => tracks[id])\n);\n\nexport const getPlaylist = (state: AppState) => state.playlist;\n\nexport const getDuration = (state: AppState): number | null => {\n  const { playlist, tracks } = state;\n  if (playlist.currentTrack == null) {\n    return null;\n  }\n  const currentTrack = tracks[playlist.currentTrack];\n  return currentTrack && currentTrack.duration;\n};\n\nexport const getTrackDisplayName = createSelector(getTracks, (tracks) => {\n  return defaultMemoize((trackId: number | null) =>\n    fromTracks.getTrackDisplayName(tracks, trackId)\n  );\n});\n\nexport const getCurrentTrackDisplayName = createSelector(\n  getCurrentTrackId,\n  getTrackDisplayName,\n  (id, getName) => {\n    return getName(id);\n  }\n);\n\nexport const getMediaStatus = (state: AppState): MediaStatus => {\n  return state.media.status;\n};\n\nexport const getMediaIsPlaying = (state: AppState) =>\n  state.media.status === MEDIA_STATUS.PLAYING;\n\nexport const getCurrentTrack = createSelector(\n  getCurrentTrackId,\n  getTracks,\n  (trackId, tracks): PlaylistTrack | null => {\n    return trackId == null ? null : tracks[trackId];\n  }\n);\nexport const getCurrentlyPlayingTrackIdIfLoaded = createSelector(\n  getMediaIsPlaying,\n  getCurrentTrack,\n  (mediaIsPlaying, currentTrack) => {\n    if (\n      !mediaIsPlaying ||\n      !currentTrack ||\n      currentTrack.mediaTagsRequestStatus ===\n        MEDIA_TAG_REQUEST_STATUS.INITIALIZED\n    ) {\n      return null;\n    }\n    return currentTrack.id;\n  }\n);\n\nexport const getCurrentTrackInfo = createSelector(\n  getCurrentTrack,\n  (track: PlaylistTrack | null): LoadedURLTrack | null => {\n    if (track == null) {\n      return null;\n    }\n    return {\n      url: track.url,\n      metaData: {\n        title: track.title || null,\n        artist: track.artist || null,\n        album: track.album || null,\n        albumArtUrl: track.albumArtUrl || null,\n      },\n    };\n  }\n);\n\nexport const getMinimalMediaText = createSelector(\n  getCurrentTrackNumber,\n  getCurrentTrackDisplayName,\n  (trackNumber, name) => (name == null ? null : `${trackNumber}. ${name}`)\n);\n\nexport const getMediaText = createSelector(\n  getMinimalMediaText,\n  getDuration,\n  (minimalMediaText, duration) =>\n    minimalMediaText == null\n      ? null\n      : `${minimalMediaText} (${Utils.getTimeStr(duration)})`\n);\n\nexport const getNumberOfTracks = (state: AppState) =>\n  getTrackOrder(state).length;\nconst getPlaylistDuration = createSelector(getTracks, (tracks) =>\n  Object.values(tracks).reduce(\n    (total, track) => total + (track.duration || 0),\n    0\n  )\n);\n\nexport const getPlaylistURL = createSelector(\n  getNumberOfTracks,\n  getPlaylistDuration,\n  getTrackOrder,\n  getTracks,\n  getTrackDisplayName,\n  (numberOfTracks, playlistDuration, trackOrder, tracks, getDisplayName) =>\n    createPlaylistURL({\n      numberOfTracks,\n      averageTrackLength: Utils.getTimeStr(playlistDuration / numberOfTracks),\n      // TODO: Handle hours\n      playlistLengthMinutes: Math.floor(playlistDuration / 60),\n      playlistLengthSeconds: Math.floor(playlistDuration % 60),\n      tracks: trackOrder.map(\n        (id, i) =>\n          `${i + 1}. ${getDisplayName(id)} (${Utils.getTimeStr(\n            tracks[id].duration\n          )})`\n      ),\n    })\n);\n\nconst WINDOW_HEIGHT = 116;\nconst SHADE_WINDOW_HEIGHT = 14;\n\nfunction getWPixelSize(w: WebampWindow, doubled: boolean) {\n  const [width, height] = w.size;\n  const doubledMultiplier = doubled && w.canDouble ? 2 : 1;\n  const pix = {\n    height: WINDOW_HEIGHT + height * WINDOW_RESIZE_SEGMENT_HEIGHT,\n    width: WINDOW_WIDTH + width * WINDOW_RESIZE_SEGMENT_WIDTH,\n  };\n  return {\n    height: (w.shade ? SHADE_WINDOW_HEIGHT : pix.height) * doubledMultiplier,\n    width: pix.width * doubledMultiplier,\n  };\n}\n\nexport function getFocusedWindow(state: AppState): WindowId | null {\n  return state.windows.focused;\n}\n\nexport function getWindowPosition(state: AppState) {\n  return (windowId: WindowId) => state.windows.genWindows[windowId].position;\n}\n\nexport function getPositionsAreRelative(state: AppState) {\n  return state.windows.positionsAreRelative;\n}\n\nexport function getDoubled(state: AppState) {\n  return state.display.doubled;\n}\n\nexport function getLlamaMode(state: AppState) {\n  return state.display.llama;\n}\n\nexport function getZIndex(state: AppState): number {\n  return state.display.zIndex;\n}\n\n// TODO: This is poorly memoized. It invalidates when a window moves.\nexport const getWindowSizes = createSelector(\n  getGenWindows,\n  getDoubled,\n  (windows, doubled) => {\n    return Utils.objectMap(windows, (w) => getWPixelSize(w, doubled));\n  }\n);\n\nexport const getWindowPixelSize = createSelector(getWindowSizes, (sizes) => {\n  return (windowId: WindowId) => sizes[windowId];\n});\n\nconst getWindowOrder = (state: AppState): WindowId[] =>\n  state.windows.windowOrder;\n\nexport const getNormalizedWindowOrder = createSelector(\n  getWindowOrder,\n  getGenWindows,\n  (windowOrder, genWindows): WindowId[] => {\n    return [\n      WINDOWS.MAIN,\n      ...windowOrder.filter(\n        (windowId) => windowId !== WINDOWS.MAIN && genWindows[windowId] != null\n      ),\n    ];\n  }\n);\n\n// TODO: Now that both size and position are stored on genWindows this seems a bit silly.\nexport const getWindowsInfo = createSelector(\n  getWindowSizes,\n  getWindowPositions,\n  getNormalizedWindowOrder,\n  (sizes, positions, windowOrder): WindowInfo[] => {\n    return windowOrder.map((key) => ({\n      key,\n      ...sizes[key],\n      ...positions[key],\n    }));\n  }\n);\n\nexport const getWindowGraph = createSelector(getWindowsInfo, generateGraph);\n\nconst defaultPlaylistStyle = {\n  normal: \"#00FF00\",\n  current: \"#FFFFFF\",\n  normalbg: \"#000000\",\n  selectedbg: \"#0000C6\",\n  font: \"Arial\",\n};\n\nexport function getSkinColors(state: AppState): string[] {\n  return state.display.skinColors;\n}\n\nexport const getSkinPlaylistStyle = (state: AppState): PlaylistStyle => {\n  return state.display.skinPlaylistStyle || defaultPlaylistStyle;\n};\n\nexport const getVisualizerStyle = (state: AppState): string => {\n  const milkdrop = state.windows.genWindows[WINDOWS.MILKDROP];\n  if (milkdrop != null && milkdrop.open) {\n    return VISUALIZERS.MILKDROP;\n  }\n  return fromDisplay.getVisualizerStyle(state.display);\n};\n\nexport const getVolume = (state: AppState) => state.media.volume;\nexport const getBalance = (state: AppState) => state.media.balance;\nexport const getShuffle = (state: AppState) => state.media.shuffle;\nexport const getRepeat = (state: AppState) => state.media.repeat;\n\nexport const getChannels = createSelector(\n  getCurrentTrack,\n  (track: PlaylistTrack | null): number | null => {\n    return track != null ? track.channels || null : null;\n  }\n);\n\nexport const getTimeElapsed = (state: AppState): number => {\n  return state.media.timeElapsed;\n};\n\nexport function getSerlializedState(state: AppState): SerializedStateV1 {\n  return {\n    version: 1,\n    media: fromMedia.getSerializedState(state.media),\n    equalizer: fromEqualizer.getSerializedState(state.equalizer),\n    display: fromDisplay.getSerializedState(state.display),\n    windows: fromWindows.getSerializedState(state.windows),\n  };\n}\n\nexport function getEqualizerEnabled(state: AppState): boolean {\n  return state.equalizer.on;\n}\n\nexport function getEqualizerAuto(state: AppState): boolean {\n  return state.equalizer.auto;\n}\n\nexport function getBrowserWindowSize(state: AppState): {\n  height: number;\n  width: number;\n} {\n  return state.windows.browserWindowSize;\n}\n\nexport const getOpenWindows = createSelector(getGenWindows, (genWindows) =>\n  Utils.objectFilter(genWindows, (w) => w.open)\n);\n\nexport const getStackedLayoutPositions = createSelector(\n  getOpenWindows,\n  getDoubled,\n  (openWindows, doubled): WindowPositions => {\n    let offset = 0;\n    return Utils.objectMap(openWindows, (w) => {\n      const position = { x: 0, y: offset };\n      offset += getWPixelSize(w, doubled).height;\n      return position;\n    });\n  }\n);\n\nexport const getUserInputFocus = (state: AppState): string | null => {\n  return state.userInput.focus;\n};\n\nexport const getUserInputScrubPosition = (state: AppState): number => {\n  return state.userInput.scrubPosition;\n};\n// TODO: Make this a reselect selector\nexport const getMarqueeText = (state: AppState): string => {\n  const defaultText = \"Winamp 2.91\";\n  if (state.userInput.userMessage != null) {\n    return state.userInput.userMessage;\n  }\n  switch (getUserInputFocus(state)) {\n    case \"balance\":\n      return MarqueeUtils.getBalanceText(state.media.balance);\n    case \"volume\":\n      return MarqueeUtils.getVolumeText(state.media.volume);\n    case \"position\":\n      const duration = getDuration(state);\n      if (duration == null) {\n        // This probably can't ever happen.\n        return defaultText;\n      }\n      return MarqueeUtils.getPositionText(\n        duration,\n        getUserInputScrubPosition(state)\n      );\n    case \"double\":\n      return MarqueeUtils.getDoubleSizeModeText(state.display.doubled);\n    case \"eq\":\n      const band = state.userInput.bandFocused;\n      if (band == null) {\n        // This probably can't ever happen.\n        return defaultText;\n      }\n      return MarqueeUtils.getEqText(band, state.equalizer.sliders[band]);\n    default:\n      break;\n  }\n  if (state.playlist.currentTrack != null) {\n    const mediaText = getMediaText(state);\n    if (mediaText == null) {\n      // This probably can't ever happen.\n      return defaultText;\n    }\n    return mediaText;\n  }\n  return defaultText;\n};\n\nexport const getKbps = createSelector(\n  getCurrentTrack,\n  (track: PlaylistTrack | null): string | null => {\n    return track != null ? track.kbps || null : null;\n  }\n);\n\nexport const getKhz = createSelector(\n  getCurrentTrack,\n  (track: PlaylistTrack | null): string | null => {\n    return track != null ? track.khz || null : null;\n  }\n);\n\nexport function getMilkdropMessage(state: AppState): MilkdropMessage | null {\n  return state.milkdrop.message;\n}\n\nexport function getMilkdropWindowEnabled(state: AppState): boolean {\n  return state.milkdrop.display === \"WINDOW\";\n}\n\nexport function getMilkdropDesktopEnabled(state: AppState): boolean {\n  return state.milkdrop.display === \"DESKTOP\";\n}\n\nexport function getMilkdropFullscreenEnabled(state: AppState): boolean {\n  return state.milkdrop.display === \"FULLSCREEN\";\n}\n\nexport function getPresets(state: AppState): any {\n  return state.milkdrop.presets;\n}\n\nexport function getButterchurn(state: AppState): any {\n  return state.milkdrop.butterchurn;\n}\n\nexport function getPresetTransitionType(state: AppState): TransitionType {\n  return state.milkdrop.transitionType;\n}\n\nexport function getCurrentPresetIndex(state: AppState): number | null {\n  return state.milkdrop.currentPresetIndex;\n}\nexport function getCurrentPreset(state: AppState): any | null {\n  const index = getCurrentPresetIndex(state);\n  if (index == null) {\n    return null;\n  }\n  const preset = state.milkdrop.presets[index];\n  if (preset == null || preset.type === \"UNRESOLVED\") {\n    return null;\n  }\n  return preset.preset;\n}\n\nexport function getPresetNames(state: AppState): string[] {\n  return state.milkdrop.presets.map((preset) => preset.name);\n}\n\nexport function getPresetOverlayOpen(state: AppState): boolean {\n  return state.milkdrop.overlay;\n}\n\nexport function getPresetsAreCycling(state: AppState): boolean {\n  return state.milkdrop.cycling;\n}\n\nexport function getRandomizePresets(state: AppState): boolean {\n  return state.milkdrop.randomize;\n}\n\nexport function getClosed(state: AppState): boolean {\n  return state.display.closed;\n}\n\nexport function getSkinImages(state: AppState): SkinImages {\n  return state.display.skinImages;\n}\n\nexport function getSkinCursors(state: AppState): Cursors | null {\n  return state.display.skinCursors;\n}\n\nexport function getSkinRegion(state: AppState): SkinRegion {\n  return state.display.skinRegion;\n}\n\nexport function getSkinLetterWidths(state: AppState): GenLetterWidths | null {\n  return state.display.skinGenLetterWidths;\n}\n\nexport function getPreampLineUrl(state: AppState): string | null {\n  return state.display.skinImages.EQ_PREAMP_LINE;\n}\n\nexport function getLineColorsUrl(state: AppState): string | null {\n  return state.display.skinImages.EQ_GRAPH_LINE_COLORS;\n}\n\nexport const getPreampLineImage = createSelector(\n  getPreampLineUrl,\n  async (url): Promise<HTMLImageElement | null> => {\n    if (url == null) {\n      return null;\n    }\n    return Utils.imgFromUrl(url);\n  }\n);\n\nexport const getLineColorsImage = createSelector(\n  getLineColorsUrl,\n  async (url): Promise<HTMLImageElement | null> => {\n    if (url == null) {\n      return null;\n    }\n    return Utils.imgFromUrl(url);\n  }\n);\n\nexport function getDummyVizData(state: AppState): DummyVizData | null {\n  return state.display.dummyVizData;\n}\n\nexport function getMarqueeStep(state: AppState): number {\n  return state.display.marqueeStep;\n}\n\nexport function getNetworkConnected(state: AppState): boolean {\n  return state.network.connected;\n}\n\nexport function getTimeMode(state: AppState): TimeMode {\n  return state.media.timeMode;\n}\n\nexport function getLoading(state: AppState): boolean {\n  return state.display.loading;\n}\n\nexport function getWorking(state: AppState): boolean {\n  return state.display.working;\n}\n\nexport function getAvaliableSkins(state: AppState) {\n  return state.settings.availableSkins;\n}\n","import { Box, Point, Diff, BoundingBox } from \"./types\";\n\nexport const SNAP_DISTANCE = 15;\n\nexport const top = (box: Box) => box.y;\nexport const bottom = (box: Box) => box.y + box.height;\nexport const left = (box: Box) => box.x;\nexport const right = (box: Box) => box.x + box.width;\n\nexport const near = (a: number, b: number) => Math.abs(a - b) < SNAP_DISTANCE;\n\n// http://stackoverflow.com/a/3269471/1263117\nexport const overlapX = (a: Box, b: Box) =>\n  left(a) <= right(b) + SNAP_DISTANCE && left(b) <= right(a) + SNAP_DISTANCE;\nexport const overlapY = (a: Box, b: Box) =>\n  top(a) <= bottom(b) + SNAP_DISTANCE && top(b) <= bottom(a) + SNAP_DISTANCE;\n\n// Give a new position for `boxA` that snaps it to `boxB` if neede.\nexport const snap = (boxA: Box, boxB: Box) => {\n  let x, y;\n\n  // TODO: Refactor/simplify this code\n  if (overlapY(boxA, boxB)) {\n    if (near(left(boxA), right(boxB))) {\n      x = right(boxB);\n    } else if (near(right(boxA), left(boxB))) {\n      x = left(boxB) - boxA.width;\n    } else if (near(left(boxA), left(boxB))) {\n      x = left(boxB);\n    } else if (near(right(boxA), right(boxB))) {\n      x = right(boxB) - boxA.width;\n    }\n  }\n\n  if (overlapX(boxA, boxB)) {\n    if (near(top(boxA), bottom(boxB))) {\n      y = bottom(boxB);\n    } else if (near(bottom(boxA), top(boxB))) {\n      y = top(boxB) - boxA.height;\n    } else if (near(top(boxA), top(boxB))) {\n      y = top(boxB);\n    } else if (near(bottom(boxA), bottom(boxB))) {\n      y = bottom(boxB) - boxA.height;\n    }\n  }\n  return { x, y };\n};\n\nexport const snapDiff = (a: Box, b: Box): Point => {\n  const newPos = snap(a, b);\n  return {\n    x: newPos.x === undefined ? 0 : newPos.x - a.x,\n    y: newPos.y === undefined ? 0 : newPos.y - a.y,\n  };\n};\n\n// TODO: Use the first x and y combo\nexport const snapDiffManyToMany = (as: Box[], bs: Box[]): Point => {\n  let x: number | undefined = 0;\n  let y: number | undefined = 0;\n  for (const a of as) {\n    for (const b of bs) {\n      const diff = snapDiff(a, b);\n      x = x || diff.x;\n      y = y || diff.y;\n      if (x !== undefined && x > 0 && y !== undefined && y > 0) {\n        break;\n      }\n    }\n  }\n  return { x, y };\n};\n\nexport const snapToMany = (boxA: Box, otherBoxes: Box[]): Diff => {\n  let x: number | undefined;\n  let y: number | undefined;\n\n  otherBoxes.forEach((boxB) => {\n    const newPos = snap(boxA, boxB);\n    x = newPos.x || x;\n    y = newPos.y || y;\n  });\n\n  return { x, y };\n};\n\nexport const snapWithin = (boxA: Box, boundingBox: BoundingBox): Diff => {\n  let x, y;\n\n  if (boxA.x - SNAP_DISTANCE < 0) {\n    x = 0;\n  } else if (boxA.x + boxA.width + SNAP_DISTANCE > boundingBox.width) {\n    x = boundingBox.width - boxA.width;\n  }\n\n  if (boxA.y - SNAP_DISTANCE < 0) {\n    y = 0;\n  } else if (boxA.y + boxA.height + SNAP_DISTANCE > boundingBox.height) {\n    y = boundingBox.height - boxA.height;\n  }\n\n  return { x, y };\n};\n\nexport const snapWithinDiff = (a: Box, b: BoundingBox) => {\n  const newPos = snapWithin(a, b);\n  return {\n    x: newPos.x === undefined ? 0 : newPos.x - a.x,\n    y: newPos.y === undefined ? 0 : newPos.y - a.y,\n  };\n};\n\nexport const applySnap = (original: Point, ...snaps: Diff[]) =>\n  snaps.reduce(\n    (previous, snapped) => ({\n      ...previous,\n      x: typeof snapped.x !== \"undefined\" ? snapped.x : previous.x,\n      y: typeof snapped.y !== \"undefined\" ? snapped.y : previous.y,\n    }),\n    original\n  );\n\nexport const boundingBox = (nodes: Box[]): Box => {\n  const boxes = nodes.slice();\n  const firstNode = boxes.pop();\n  if (firstNode == null) {\n    throw new Error(\"boundingBox must be called with at least one node\");\n  }\n  const bounding = {\n    top: top(firstNode),\n    right: right(firstNode),\n    bottom: bottom(firstNode),\n    left: left(firstNode),\n  };\n\n  boxes.forEach((node) => {\n    bounding.top = Math.min(bounding.top, top(node));\n    bounding.right = Math.max(bounding.right, right(node));\n    bounding.bottom = Math.max(bounding.bottom, bottom(node));\n    bounding.left = Math.min(bounding.left, left(node));\n  });\n\n  return {\n    x: bounding.left,\n    y: bounding.top,\n    width: bounding.right - bounding.left,\n    height: bounding.bottom - bounding.top,\n  };\n};\n\nexport function traceConnection<B extends Box>(\n  areConnected: (candidate: Box, n: Box) => boolean\n) {\n  return (candidates: B[], node: B): Set<B> => {\n    const connected = new Set<B>();\n    const checkNode = (n: B) => {\n      for (const candidate of candidates) {\n        if (!connected.has(candidate) && areConnected(candidate, n)) {\n          connected.add(candidate);\n          checkNode(candidate);\n        }\n      }\n    };\n    checkNode(node);\n    return connected;\n  };\n}\n\nexport const applyDiff = (a: Point, b: Point) => ({\n  x: a.x + b.x,\n  y: a.y + b.y,\n});\n\n// TODO: This should not\nexport const applyMultipleDiffs = (initial: Point, ...diffs: Point[]) => {\n  const metaDiff = diffs.reduce((m, diff) => ({\n    // Use the smallest non-zero diff for each axis.\n    // TODO: Min should be the absolute value\n    x: m.x === 0 || diff.x === 0 ? m.x + diff.x : Math.min(m.x, diff.x),\n    y: m.y === 0 || diff.y === 0 ? m.y + diff.y : Math.min(m.y, diff.y),\n  }));\n  return applyDiff(initial, metaDiff);\n};\n","import * as Selectors from \"../selectors\";\n\nimport * as Utils from \"../utils\";\nimport {\n  UPDATE_WINDOW_POSITIONS,\n  TOGGLE_DOUBLESIZE_MODE,\n  WINDOW_SIZE_CHANGED,\n  TOGGLE_WINDOW,\n  CLOSE_WINDOW,\n  TOGGLE_WINDOW_SHADE_MODE,\n  BROWSER_WINDOW_SIZE_CHANGED,\n  RESET_WINDOW_SIZES,\n  TOGGLE_LLAMA_MODE,\n  SET_FOCUSED_WINDOW,\n} from \"../actionTypes\";\n\nimport { getPositionDiff, SizeDiff } from \"../resizeUtils\";\nimport { applyDiff } from \"../snapUtils\";\nimport {\n  Action,\n  Thunk,\n  WindowId,\n  WindowPositions,\n  Dispatch,\n  WindowLayout,\n} from \"../types\";\n\n// Dispatch an action and, if needed rearrange the windows to preserve\n// the existing edge relationship.\n//\n// Works by checking the edges before the action is dispatched. Then,\n// after dispatching, calculating what position change would be required\n// to restore those relationships.\nfunction withWindowGraphIntegrity(action: Action): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const graph = Selectors.getWindowGraph(state);\n    const originalSizes = Selectors.getWindowSizes(state);\n\n    dispatch(action);\n\n    const newSizes = Selectors.getWindowSizes(getState());\n    const sizeDiff: SizeDiff = {};\n    for (const window of Object.keys(newSizes)) {\n      const original = originalSizes[window];\n      const current = newSizes[window];\n      sizeDiff[window] = {\n        height: current.height - original.height,\n        width: current.width - original.width,\n      };\n    }\n\n    const positionDiff = getPositionDiff(graph, sizeDiff);\n    const windowPositions = Selectors.getWindowPositions(state);\n\n    const newPositions = Utils.objectMap(windowPositions, (position, key) =>\n      applyDiff(position, positionDiff[key])\n    );\n\n    dispatch(updateWindowPositions(newPositions));\n  };\n}\n\nexport function toggleDoubleSizeMode(): Thunk {\n  return withWindowGraphIntegrity({ type: TOGGLE_DOUBLESIZE_MODE });\n}\n\nexport function toggleLlamaMode(): Action {\n  return { type: TOGGLE_LLAMA_MODE };\n}\n\nexport function toggleEqualizerShadeMode(): Thunk {\n  return withWindowGraphIntegrity({\n    type: TOGGLE_WINDOW_SHADE_MODE,\n    windowId: \"equalizer\",\n  });\n}\n\nexport function toggleMainWindowShadeMode(): Thunk {\n  return withWindowGraphIntegrity({\n    type: TOGGLE_WINDOW_SHADE_MODE,\n    windowId: \"main\",\n  });\n}\n\nexport function togglePlaylistShadeMode(): Thunk {\n  return withWindowGraphIntegrity({\n    type: TOGGLE_WINDOW_SHADE_MODE,\n    windowId: \"playlist\",\n  });\n}\n\nexport function closeWindow(windowId: WindowId): Action {\n  return { type: CLOSE_WINDOW, windowId };\n}\n\nexport function setFocusedWindow(window: WindowId | null): Action {\n  return { type: SET_FOCUSED_WINDOW, window };\n}\n\nexport function setWindowSize(\n  windowId: WindowId,\n  size: [number, number]\n): Action {\n  return { type: WINDOW_SIZE_CHANGED, windowId, size };\n}\n\nexport function toggleWindow(windowId: WindowId): Action {\n  return { type: TOGGLE_WINDOW, windowId };\n}\n\nexport function updateWindowPositions(\n  positions: WindowPositions,\n  absolute?: boolean\n): Action {\n  return { type: UPDATE_WINDOW_POSITIONS, positions, absolute };\n}\n\nexport function centerWindowsInContainer(container: HTMLElement): Thunk {\n  return (dispatch, getState) => {\n    if (!Selectors.getPositionsAreRelative(getState())) {\n      return;\n    }\n    const { left, top } = container.getBoundingClientRect();\n    const { scrollWidth: width, scrollHeight: height } = container;\n    dispatch(centerWindows({ left, top, width, height }));\n  };\n}\n\nexport function centerWindowsInView(): Thunk {\n  return centerWindows({\n    left: window.scrollX,\n    top: window.scrollY,\n    width: window.innerWidth,\n    height: window.innerHeight,\n  });\n}\n\nexport function centerWindows(box: {\n  left: number;\n  top: number;\n  width: number;\n  height: number;\n}): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const windowsInfo = Selectors.getWindowsInfo(state);\n    const getOpen = Selectors.getWindowOpen(state);\n    const { top, left, width, height } = box;\n\n    const offsetLeft = left + window.scrollX;\n    const offsetTop = top + window.scrollY;\n\n    // A layout has been supplied. We will compute the bounding box and\n    // center the given layout.\n    const bounding = Utils.calculateBoundingBox(\n      windowsInfo.filter((w) => getOpen(w.key))\n    );\n\n    if (bounding == null) {\n      // There are no windows to center\n      return;\n    }\n\n    const boxHeight = bounding.bottom - bounding.top;\n    const boxWidth = bounding.right - bounding.left;\n\n    const move = {\n      x: Math.ceil(offsetLeft - bounding.left + (width - boxWidth) / 2),\n      y: Math.ceil(offsetTop - bounding.top + (height - boxHeight) / 2),\n    };\n\n    const newPositions = windowsInfo.reduce(\n      (pos, w) => ({\n        ...pos,\n        [w.key]: { x: move.x + w.x, y: move.y + w.y },\n      }),\n      {}\n    );\n\n    dispatch(updateWindowPositions(newPositions, true));\n  };\n}\n\nexport function browserWindowSizeChanged(size: {\n  height: number;\n  width: number;\n}): Thunk {\n  return (dispatch: Dispatch) => {\n    dispatch({ type: BROWSER_WINDOW_SIZE_CHANGED, ...size });\n    dispatch(ensureWindowsAreOnScreen());\n  };\n}\n\nexport function resetWindowSizes(): Action {\n  return { type: RESET_WINDOW_SIZES };\n}\n\nexport function stackWindows(): Thunk {\n  return (dispatch, getState) => {\n    dispatch(\n      updateWindowPositions(Selectors.getStackedLayoutPositions(getState()))\n    );\n  };\n}\n\nexport function setWindowLayout(layout?: WindowLayout): Thunk {\n  return (dispatch) => {\n    if (layout == null) {\n      dispatch(stackWindows());\n      return;\n    }\n    for (const id of [\"playlist\", \"milkdrop\"] as const) {\n      const w = layout[id];\n      if (w != null && w.size != null) {\n        const { extraHeight: plusHeight, extraWidth: plusWidth } = w.size;\n        dispatch(setWindowSize(id, [plusWidth, plusHeight]));\n      }\n    }\n    for (const id of [\"main\", \"playlist\", \"equalizer\", \"milkdrop\"] as const) {\n      const w = layout[id];\n      if (w == null || w.closed) {\n        dispatch(closeWindow(id));\n      }\n    }\n    for (const id of [\"main\", \"playlist\", \"equalizer\"] as const) {\n      if (layout[id]?.shadeMode) {\n        dispatch({\n          type: TOGGLE_WINDOW_SHADE_MODE,\n          windowId: id,\n        });\n      }\n    }\n    dispatch(\n      updateWindowPositions(\n        Utils.objectMap(layout, (w) => {\n          // For some reason TypeScript cli thinks this\n          // is nullable, but in VSCode it does not...\n          if (w == null) throw new Error(\"w is null\");\n          return {\n            x: w.position.left,\n            y: w.position.top,\n          };\n        }),\n        false\n      )\n    );\n  };\n}\n\nexport function ensureWindowsAreOnScreen(): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n\n    const windowsInfo = Selectors.getWindowsInfo(state);\n    const getOpen = Selectors.getWindowOpen(state);\n    const { height, width } = Utils.getWindowSize();\n    const bounding = Utils.calculateBoundingBox(\n      windowsInfo.filter((w) => getOpen(w.key))\n    );\n    if (bounding == null) {\n      // There are no windows visible, so there's no work to do.\n      return;\n    }\n    const positions = Selectors.getWindowPositions(state);\n\n    // Are we good?\n    if (\n      bounding.left >= 0 &&\n      bounding.top >= 0 &&\n      bounding.right <= width &&\n      bounding.bottom <= height\n    ) {\n      // My work here is done.\n      return;\n    }\n\n    const boundingHeight = bounding.bottom - bounding.top;\n    const boundingWidth = bounding.right - bounding.left;\n\n    // Could we simply shift all the windows by a constant offset?\n    if (boundingWidth <= width && boundingHeight <= height) {\n      let moveY = 0;\n      let moveX = 0;\n      if (bounding.top <= 0) {\n        moveY = bounding.top;\n      } else if (bounding.bottom > height) {\n        moveY = bounding.bottom - height;\n      }\n\n      if (bounding.left <= 0) {\n        moveX = bounding.left;\n      } else if (bounding.right > width) {\n        moveX = bounding.right - width;\n      }\n\n      const newPositions = Utils.objectMap(positions, (position) => ({\n        x: position.x - moveX,\n        y: position.y - moveY,\n      }));\n\n      dispatch(updateWindowPositions(newPositions));\n      return;\n    }\n\n    // TODO: Try moving the individual groups to try to fit them in\n\n    // I give up. Just reset everything.\n    dispatch(resetWindowSizes());\n    dispatch(stackWindows());\n    dispatch(centerWindowsInView());\n  };\n}\n","import { clamp } from \"../utils\";\nimport {\n  SEEK_TO_PERCENT_COMPLETE,\n  SET_BALANCE,\n  SET_VOLUME,\n  STOP,\n  TOGGLE_REPEAT,\n  TOGGLE_SHUFFLE,\n  PLAY,\n  PAUSE,\n  PLAY_TRACK,\n  TOGGLE_TIME_MODE,\n  BUFFER_TRACK,\n  IS_STOPPED,\n} from \"../actionTypes\";\n\nimport { MEDIA_STATUS } from \"../constants\";\nimport { openMediaFileDialog } from \"./\";\nimport { GetState, Dispatch, Thunk, Action } from \"../types\";\nimport * as Selectors from \"../selectors\";\n\nexport function playTrack(id: number): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const isStopped = Selectors.getMediaStatus(state) === MEDIA_STATUS.STOPPED;\n    if (isStopped) {\n      dispatch({ type: BUFFER_TRACK, id });\n    } else {\n      dispatch({ type: PLAY_TRACK, id });\n    }\n  };\n}\n\nexport function playTrackNow(id: number): Action {\n  return { type: PLAY_TRACK, id };\n}\n\nexport function play(): Thunk {\n  return (dispatch: Dispatch, getState: GetState) => {\n    const state = getState();\n    if (\n      state.media.status === MEDIA_STATUS.STOPPED &&\n      state.playlist.currentTrack == null &&\n      state.playlist.trackOrder.length === 0\n    ) {\n      dispatch(openMediaFileDialog());\n    } else {\n      dispatch({ type: PLAY });\n    }\n  };\n}\n\nexport function pause(): Thunk {\n  return (dispatch, getState) => {\n    const { status } = getState().media;\n    if (status === MEDIA_STATUS.PLAYING) {\n      dispatch({ type: PAUSE });\n    } else {\n      dispatch({ type: PLAY });\n    }\n  };\n}\n\nexport function stop(): Action {\n  return { type: STOP };\n}\n\nexport function nextN(n: number): Thunk {\n  return (dispatch, getState) => {\n    const nextTrackId = Selectors.getNextTrackId(getState(), n);\n    if (nextTrackId == null) {\n      dispatch({ type: IS_STOPPED });\n      return;\n    }\n    dispatch(playTrack(nextTrackId));\n  };\n}\n\nexport function next(): Thunk {\n  return nextN(1);\n}\n\nexport function previous(): Thunk {\n  return nextN(-1);\n}\n\nexport function seekToTime(seconds: number): Thunk {\n  return function (dispatch, getState) {\n    const state = getState();\n    const duration = Selectors.getDuration(state);\n    if (duration == null) {\n      return;\n    }\n    dispatch({\n      type: SEEK_TO_PERCENT_COMPLETE,\n      percent: (seconds / duration) * 100,\n    });\n  };\n}\nexport function seekForward(seconds: number): Thunk {\n  return function (dispatch, getState) {\n    const timeElapsed = Selectors.getTimeElapsed(getState());\n    dispatch(seekToTime(timeElapsed + seconds));\n  };\n}\n\nexport function seekBackward(seconds: number): Thunk {\n  return seekForward(-seconds);\n}\n\nexport function setVolume(volume: number): Action {\n  return {\n    type: SET_VOLUME,\n    volume: clamp(volume, 0, 100),\n  };\n}\n\nexport function adjustVolume(volumeDiff: number): Thunk {\n  return (dispatch, getState) => {\n    const currentVolume = getState().media.volume;\n    return dispatch(setVolume(currentVolume + volumeDiff));\n  };\n}\n\nexport function scrollVolume(e: React.WheelEvent<HTMLDivElement>): Thunk {\n  e.preventDefault();\n  return (dispatch, getState) => {\n    const currentVolume = getState().media.volume;\n    // Using pixels as percentage difference here is a bit arbirary, but... oh well.\n    return dispatch(setVolume(currentVolume + e.deltaY));\n  };\n}\n\nexport function setBalance(balance: number): Action {\n  balance = clamp(balance, -100, 100);\n  // The balance clips to the center\n  if (Math.abs(balance) < 25) {\n    balance = 0;\n  }\n  return {\n    type: SET_BALANCE,\n    balance,\n  };\n}\n\nexport function toggleRepeat(): Action {\n  return { type: TOGGLE_REPEAT };\n}\n\nexport function toggleShuffle(): Action {\n  return { type: TOGGLE_SHUFFLE };\n}\n\nexport function toggleTimeMode(): Action {\n  return { type: TOGGLE_TIME_MODE };\n}\n","import { BANDS } from \"../constants\";\n\nimport {\n  SET_EQ_ON,\n  SET_EQ_OFF,\n  SET_BAND_VALUE,\n  SET_EQ_AUTO,\n} from \"../actionTypes\";\nimport { Band, Thunk, Action } from \"../types\";\n\nconst BAND_SNAP_DISTANCE = 5;\nconst BAND_MID_POINT_VALUE = 50;\n\nfunction _snapBandValue(value: number): number {\n  if (\n    value < BAND_MID_POINT_VALUE + BAND_SNAP_DISTANCE &&\n    value > BAND_MID_POINT_VALUE - BAND_SNAP_DISTANCE\n  ) {\n    return BAND_MID_POINT_VALUE;\n  }\n  return value;\n}\n\nexport function setEqBand(band: Band, value: number): Action {\n  return { type: SET_BAND_VALUE, band, value: _snapBandValue(value) };\n}\n\nfunction _setEqTo(value: number): Thunk {\n  return (dispatch) => {\n    Object.values(BANDS).forEach((band) => {\n      dispatch({\n        type: SET_BAND_VALUE,\n        value,\n        band: band,\n      });\n    });\n  };\n}\n\nexport function setEqToMax(): Thunk {\n  return _setEqTo(100);\n}\n\nexport function setEqToMid(): Thunk {\n  return _setEqTo(50);\n}\n\nexport function setEqToMin(): Thunk {\n  return _setEqTo(0);\n}\n\nexport function setPreamp(value: number): Action {\n  return { type: SET_BAND_VALUE, band: \"preamp\", value: _snapBandValue(value) };\n}\n\nexport function toggleEq(): Thunk {\n  return (dispatch, getState) => {\n    if (getState().equalizer.on) {\n      dispatch({ type: SET_EQ_OFF });\n    } else {\n      dispatch({ type: SET_EQ_ON });\n    }\n  };\n}\n\nexport function toggleEqAuto(): Thunk {\n  return (dispatch) => {\n    // We don't actually support this feature yet so don't let the user ever turn it on.\n    // dispatch({ type: SET_EQ_AUTO, value: !getState().equalizer.auto });\n    dispatch({ type: SET_EQ_AUTO, value: false });\n  };\n}\n","var PRESET_VALUES = [\n  \"hz60\",\n  \"hz170\",\n  \"hz310\",\n  \"hz600\",\n  \"hz1000\",\n  \"hz3000\",\n  \"hz6000\",\n  \"hz12000\",\n  \"hz14000\",\n  \"hz16000\",\n  \"preamp\",\n];\n\nvar HEADER = \"Winamp EQ library file v1.1\";\n\nmodule.exports = {\n  PRESET_VALUES: PRESET_VALUES,\n  HEADER: HEADER,\n};\n","var CONSTANTS = require(\"./constants\");\n\nfunction parser(arrayBuffer) {\n  var data = {};\n  var i = 0;\n  var arr = new Int8Array(arrayBuffer);\n  // Parse header\n  data.type = String.fromCharCode.apply(\n    null,\n    arr.slice(i, CONSTANTS.HEADER.length)\n  );\n  if (data.type !== CONSTANTS.HEADER) {\n    throw new Error(\"Invalid .eqf file.\");\n  }\n  i += CONSTANTS.HEADER.length;\n  // Skip \"<ctrl-z>!--\"\n  i += 4;\n  // Get the presets\n  data.presets = [];\n  while (i < arr.length) {\n    var preset = {};\n    // Get the name\n    var nameStart = i;\n    var nameEnd = nameStart + 257; // Str is fixed length\n    // Str is null terminated\n    while (arr[i] !== 0 && i <= nameEnd) {\n      i++;\n    }\n    preset.name = String.fromCharCode.apply(null, arr.slice(nameStart, i));\n    i = nameEnd; // Skip over any unused bytes\n\n    // Get the levels\n    CONSTANTS.PRESET_VALUES.forEach(function (valueName) {\n      preset[valueName] = 64 - arr[i++]; // Adjust for inverse values\n    });\n    data.presets.push(preset);\n  }\n  return data;\n}\n\nmodule.exports = parser;\n","var CONSTANTS = require(\"./constants\");\n\nvar FILL_SIZE = 4;\nvar PRESET_LENGTH = 257;\n\nfunction creator(data) {\n  var buffer = [];\n  for (var i = 0; i < CONSTANTS.HEADER.length; i++) {\n    buffer.push(CONSTANTS.HEADER.charCodeAt(i));\n  }\n  buffer.push(26); // <ctrl-z>\n  var ending = \"!--\";\n  for (var i = 0; i < ending.length; i++) {\n    buffer.push(ending.charCodeAt(i));\n  }\n  if (!data.presets) {\n    throw new Error(\"Eqf data is missing presets\");\n  }\n  data.presets.forEach(function (preset) {\n    var k = 0;\n    for (; k < preset.name.length; k++) {\n      buffer.push(preset.name.charCodeAt(k));\n    }\n    for (; k < PRESET_LENGTH; k++) {\n      buffer.push(0);\n    }\n\n    CONSTANTS.PRESET_VALUES.forEach(function (valueName) {\n      buffer.push(64 - preset[valueName]); // Adjust for inverse values\n    });\n  });\n  return new Uint8Array(buffer).buffer;\n}\n\nmodule.exports = creator;\n","var parser = require(\"./parser\");\nvar creator = require(\"./creator\");\n\nmodule.exports = {\n  parser: parser,\n  creator: creator,\n};\n","import { UTF8_ELLIPSIS } from \"./constants\";\n\nexport type SpriteName = string;\n\nexport interface Sprite {\n  name: SpriteName;\n  x: number;\n  y: number;\n  width: number;\n  height: number;\n}\n\n/* TODO: There are too many \" \" and \"_\" characters */\nexport const FONT_LOOKUP: { [letter: string]: [number, number] } = {\n  a: [0, 0],\n  b: [0, 1],\n  c: [0, 2],\n  d: [0, 3],\n  e: [0, 4],\n  f: [0, 5],\n  g: [0, 6],\n  h: [0, 7],\n  i: [0, 8],\n  j: [0, 9],\n  k: [0, 10],\n  l: [0, 11],\n  m: [0, 12],\n  n: [0, 13],\n  o: [0, 14],\n  p: [0, 15],\n  q: [0, 16],\n  r: [0, 17],\n  s: [0, 18],\n  t: [0, 19],\n  u: [0, 20],\n  v: [0, 21],\n  w: [0, 22],\n  x: [0, 23],\n  y: [0, 24],\n  z: [0, 25],\n  '\"': [0, 26],\n  \"@\": [0, 27],\n  \" \": [0, 30],\n  \"0\": [1, 0],\n  \"1\": [1, 1],\n  \"2\": [1, 2],\n  \"3\": [1, 3],\n  \"4\": [1, 4],\n  \"5\": [1, 5],\n  \"6\": [1, 6],\n  \"7\": [1, 7],\n  \"8\": [1, 8],\n  \"9\": [1, 9],\n  [UTF8_ELLIPSIS]: [1, 10],\n  \".\": [1, 11],\n  \":\": [1, 12],\n  \"(\": [1, 13],\n  \")\": [1, 14],\n  \"-\": [1, 15],\n  \"'\": [1, 16],\n  \"!\": [1, 17],\n  _: [1, 18],\n  \"+\": [1, 19],\n  \"\\\\\": [1, 20],\n  \"/\": [1, 21],\n  \"[\": [1, 22],\n  \"]\": [1, 23],\n  \"^\": [1, 24],\n  \"&\": [1, 25],\n  \"%\": [1, 26],\n  \",\": [1, 27],\n  \"=\": [1, 28],\n  $: [1, 29],\n  \"#\": [1, 30],\n  Å: [2, 0],\n  Ö: [2, 1],\n  Ä: [2, 2],\n  \"?\": [2, 3],\n  \"*\": [2, 4],\n  \"<\": [1, 22],\n  \">\": [1, 23],\n  \"{\": [1, 22],\n  \"}\": [1, 23],\n};\n\nexport const imageConstFromChar = (char: string) =>\n  `CHARACTER_${char.charCodeAt(0)}`;\n\nconst CHAR_X = 5;\nconst CHAR_Y = 6;\n\nconst characterSprites = [];\nfor (const key in FONT_LOOKUP) {\n  if (FONT_LOOKUP.hasOwnProperty(key)) {\n    const position = FONT_LOOKUP[key];\n    characterSprites.push({\n      name: imageConstFromChar(key),\n      y: position[0] * CHAR_Y,\n      x: position[1] * CHAR_X,\n      width: CHAR_X,\n      height: CHAR_Y,\n    });\n  }\n}\n\ninterface SpriteMap {\n  [sheet: string]: Sprite[];\n}\n\nconst sprites: SpriteMap = {\n  BALANCE: [\n    { name: \"MAIN_BALANCE_BACKGROUND\", x: 9, y: 0, width: 38, height: 420 },\n    { name: \"MAIN_BALANCE_THUMB\", x: 15, y: 422, width: 14, height: 11 },\n    { name: \"MAIN_BALANCE_THUMB_ACTIVE\", x: 0, y: 422, width: 14, height: 11 },\n  ],\n  CBUTTONS: [\n    { name: \"MAIN_PREVIOUS_BUTTON\", x: 0, y: 0, width: 23, height: 18 },\n    {\n      name: \"MAIN_PREVIOUS_BUTTON_ACTIVE\",\n      x: 0,\n      y: 18,\n      width: 23,\n      height: 18,\n    },\n    { name: \"MAIN_PLAY_BUTTON\", x: 23, y: 0, width: 23, height: 18 },\n    { name: \"MAIN_PLAY_BUTTON_ACTIVE\", x: 23, y: 18, width: 23, height: 18 },\n    { name: \"MAIN_PAUSE_BUTTON\", x: 46, y: 0, width: 23, height: 18 },\n    { name: \"MAIN_PAUSE_BUTTON_ACTIVE\", x: 46, y: 18, width: 23, height: 18 },\n    { name: \"MAIN_STOP_BUTTON\", x: 69, y: 0, width: 23, height: 18 },\n    { name: \"MAIN_STOP_BUTTON_ACTIVE\", x: 69, y: 18, width: 23, height: 18 },\n    { name: \"MAIN_NEXT_BUTTON\", x: 92, y: 0, width: 23, height: 18 },\n    { name: \"MAIN_NEXT_BUTTON_ACTIVE\", x: 92, y: 18, width: 22, height: 18 },\n    { name: \"MAIN_EJECT_BUTTON\", x: 114, y: 0, width: 22, height: 16 },\n    { name: \"MAIN_EJECT_BUTTON_ACTIVE\", x: 114, y: 16, width: 22, height: 16 },\n  ],\n  MAIN: [\n    { name: \"MAIN_WINDOW_BACKGROUND\", x: 0, y: 0, width: 275, height: 116 },\n  ],\n  MONOSTER: [\n    { name: \"MAIN_STEREO\", x: 0, y: 12, width: 29, height: 12 },\n    { name: \"MAIN_STEREO_SELECTED\", x: 0, y: 0, width: 29, height: 12 },\n    { name: \"MAIN_MONO\", x: 29, y: 12, width: 27, height: 12 },\n    { name: \"MAIN_MONO_SELECTED\", x: 29, y: 0, width: 27, height: 12 },\n  ],\n  NUMBERS: [\n    { name: \"NO_MINUS_SIGN\", x: 9, y: 6, width: 5, height: 1 },\n    { name: \"MINUS_SIGN\", x: 20, y: 6, width: 5, height: 1 },\n    { name: \"DIGIT_0\", x: 0, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_1\", x: 9, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_2\", x: 18, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_3\", x: 27, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_4\", x: 36, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_5\", x: 45, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_6\", x: 54, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_7\", x: 63, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_8\", x: 72, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_9\", x: 81, y: 0, width: 9, height: 13 },\n  ],\n  NUMS_EX: [\n    { name: \"NO_MINUS_SIGN_EX\", x: 90, y: 0, width: 9, height: 13 },\n    { name: \"MINUS_SIGN_EX\", x: 99, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_0_EX\", x: 0, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_1_EX\", x: 9, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_2_EX\", x: 18, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_3_EX\", x: 27, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_4_EX\", x: 36, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_5_EX\", x: 45, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_6_EX\", x: 54, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_7_EX\", x: 63, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_8_EX\", x: 72, y: 0, width: 9, height: 13 },\n    { name: \"DIGIT_9_EX\", x: 81, y: 0, width: 9, height: 13 },\n  ],\n  PLAYPAUS: [\n    { name: \"MAIN_PLAYING_INDICATOR\", x: 0, y: 0, width: 9, height: 9 },\n    { name: \"MAIN_PAUSED_INDICATOR\", x: 9, y: 0, width: 9, height: 9 },\n    { name: \"MAIN_STOPPED_INDICATOR\", x: 18, y: 0, width: 9, height: 9 },\n    { name: \"MAIN_NOT_WORKING_INDICATOR\", x: 36, y: 0, width: 9, height: 9 },\n    { name: \"MAIN_WORKING_INDICATOR\", x: 39, y: 0, width: 9, height: 9 },\n  ],\n  PLEDIT: [\n    { name: \"PLAYLIST_TOP_TILE\", x: 127, y: 21, width: 25, height: 20 },\n    { name: \"PLAYLIST_TOP_LEFT_CORNER\", x: 0, y: 21, width: 25, height: 20 },\n    { name: \"PLAYLIST_TITLE_BAR\", x: 26, y: 21, width: 100, height: 20 },\n    {\n      name: \"PLAYLIST_TOP_RIGHT_CORNER\",\n      x: 153,\n      y: 21,\n      width: 25,\n      height: 20,\n    },\n    {\n      name: \"PLAYLIST_TOP_TILE_SELECTED\",\n      x: 127,\n      y: 0,\n      width: 25,\n      height: 20,\n    },\n    { name: \"PLAYLIST_TOP_LEFT_SELECTED\", x: 0, y: 0, width: 25, height: 20 },\n    {\n      name: \"PLAYLIST_TITLE_BAR_SELECTED\",\n      x: 26,\n      y: 0,\n      width: 100,\n      height: 20,\n    },\n    {\n      name: \"PLAYLIST_TOP_RIGHT_CORNER_SELECTED\",\n      x: 153,\n      y: 0,\n      width: 25,\n      height: 20,\n    },\n    { name: \"PLAYLIST_LEFT_TILE\", x: 0, y: 42, width: 12, height: 29 },\n    { name: \"PLAYLIST_RIGHT_TILE\", x: 31, y: 42, width: 20, height: 29 },\n    { name: \"PLAYLIST_BOTTOM_TILE\", x: 179, y: 0, width: 25, height: 38 },\n    {\n      name: \"PLAYLIST_BOTTOM_LEFT_CORNER\",\n      x: 0,\n      y: 72,\n      width: 125,\n      height: 38,\n    },\n    {\n      name: \"PLAYLIST_BOTTOM_RIGHT_CORNER\",\n      x: 126,\n      y: 72,\n      width: 150,\n      height: 38,\n    },\n    {\n      name: \"PLAYLIST_VISUALIZER_BACKGROUND\",\n      x: 205,\n      y: 0,\n      width: 75,\n      height: 38,\n    },\n    { name: \"PLAYLIST_SHADE_BACKGROUND\", x: 72, y: 57, width: 25, height: 14 },\n    {\n      name: \"PLAYLIST_SHADE_BACKGROUND_LEFT\",\n      x: 72,\n      y: 42,\n      width: 25,\n      height: 14,\n    },\n    {\n      name: \"PLAYLIST_SHADE_BACKGROUND_RIGHT\",\n      x: 99,\n      y: 57,\n      width: 50,\n      height: 14,\n    },\n    {\n      name: \"PLAYLIST_SHADE_BACKGROUND_RIGHT_SELECTED\",\n      x: 99,\n      y: 42,\n      width: 50,\n      height: 14,\n    },\n    {\n      name: \"PLAYLIST_SCROLL_HANDLE_SELECTED\",\n      x: 61,\n      y: 53,\n      width: 8,\n      height: 18,\n    },\n    { name: \"PLAYLIST_SCROLL_HANDLE\", x: 52, y: 53, width: 8, height: 18 },\n    { name: \"PLAYLIST_ADD_URL\", x: 0, y: 111, width: 22, height: 18 },\n    { name: \"PLAYLIST_ADD_URL_SELECTED\", x: 23, y: 111, width: 22, height: 18 },\n    { name: \"PLAYLIST_ADD_DIR\", x: 0, y: 130, width: 22, height: 18 },\n    { name: \"PLAYLIST_ADD_DIR_SELECTED\", x: 23, y: 130, width: 22, height: 18 },\n    { name: \"PLAYLIST_ADD_FILE\", x: 0, y: 149, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_ADD_FILE_SELECTED\",\n      x: 23,\n      y: 149,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_REMOVE_ALL\", x: 54, y: 111, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_REMOVE_ALL_SELECTED\",\n      x: 77,\n      y: 111,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_CROP\", x: 54, y: 130, width: 22, height: 18 },\n    { name: \"PLAYLIST_CROP_SELECTED\", x: 77, y: 130, width: 22, height: 18 },\n    { name: \"PLAYLIST_REMOVE_SELECTED\", x: 54, y: 149, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_REMOVE_SELECTED_SELECTED\",\n      x: 77,\n      y: 149,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_REMOVE_MISC\", x: 54, y: 168, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_REMOVE_MISC_SELECTED\",\n      x: 77,\n      y: 168,\n      width: 22,\n      height: 18,\n    },\n    {\n      name: \"PLAYLIST_INVERT_SELECTION\",\n      x: 104,\n      y: 111,\n      width: 22,\n      height: 18,\n    },\n    {\n      name: \"PLAYLIST_INVERT_SELECTION_SELECTED\",\n      x: 127,\n      y: 111,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_SELECT_ZERO\", x: 104, y: 130, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_SELECT_ZERO_SELECTED\",\n      x: 127,\n      y: 130,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_SELECT_ALL\", x: 104, y: 149, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_SELECT_ALL_SELECTED\",\n      x: 127,\n      y: 149,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_SORT_LIST\", x: 154, y: 111, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_SORT_LIST_SELECTED\",\n      x: 177,\n      y: 111,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_FILE_INFO\", x: 154, y: 130, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_FILE_INFO_SELECTED\",\n      x: 177,\n      y: 130,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_MISC_OPTIONS\", x: 154, y: 149, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_MISC_OPTIONS_SELECTED\",\n      x: 177,\n      y: 149,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_NEW_LIST\", x: 204, y: 111, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_NEW_LIST_SELECTED\",\n      x: 227,\n      y: 111,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_SAVE_LIST\", x: 204, y: 130, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_SAVE_LIST_SELECTED\",\n      x: 227,\n      y: 130,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_LOAD_LIST\", x: 204, y: 149, width: 22, height: 18 },\n    {\n      name: \"PLAYLIST_LOAD_LIST_SELECTED\",\n      x: 227,\n      y: 149,\n      width: 22,\n      height: 18,\n    },\n    { name: \"PLAYLIST_ADD_MENU_BAR\", x: 48, y: 111, width: 3, height: 54 },\n    { name: \"PLAYLIST_REMOVE_MENU_BAR\", x: 100, y: 111, width: 3, height: 72 },\n    { name: \"PLAYLIST_SELECT_MENU_BAR\", x: 150, y: 111, width: 3, height: 54 },\n    { name: \"PLAYLIST_MISC_MENU_BAR\", x: 200, y: 111, width: 3, height: 54 },\n    { name: \"PLAYLIST_LIST_BAR\", x: 250, y: 111, width: 3, height: 54 },\n    { name: \"PLAYLIST_CLOSE_SELECTED\", x: 52, y: 42, width: 9, height: 9 },\n    { name: \"PLAYLIST_COLLAPSE_SELECTED\", x: 62, y: 42, width: 9, height: 9 },\n    { name: \"PLAYLIST_EXPAND_SELECTED\", x: 150, y: 42, width: 9, height: 9 },\n  ],\n  EQ_EX: [\n    {\n      name: \"EQ_SHADE_BACKGROUND_SELECTED\",\n      x: 0,\n      y: 0,\n      width: 275,\n      height: 14,\n    },\n    { name: \"EQ_SHADE_BACKGROUND\", x: 0, y: 15, width: 275, height: 14 },\n    { name: \"EQ_SHADE_VOLUME_SLIDER_LEFT\", x: 1, y: 30, width: 3, height: 7 },\n    { name: \"EQ_SHADE_VOLUME_SLIDER_CENTER\", x: 4, y: 30, width: 3, height: 7 },\n    { name: \"EQ_SHADE_VOLUME_SLIDER_RIGHT\", x: 7, y: 30, width: 3, height: 7 },\n    { name: \"EQ_SHADE_BALANCE_SLIDER_LEFT\", x: 11, y: 30, width: 3, height: 7 },\n    {\n      name: \"EQ_SHADE_BALANCE_SLIDER_CENTER\",\n      x: 14,\n      y: 30,\n      width: 3,\n      height: 7,\n    },\n    {\n      name: \"EQ_SHADE_BALANCE_SLIDER_RIGHT\",\n      x: 17,\n      y: 30,\n      width: 3,\n      height: 7,\n    },\n    { name: \"EQ_MAXIMIZE_BUTTON_ACTIVE\", x: 1, y: 38, width: 9, height: 9 },\n    { name: \"EQ_MINIMIZE_BUTTON_ACTIVE\", x: 1, y: 47, width: 9, height: 9 },\n    { name: \"EQ_SHADE_CLOSE_BUTTON\", x: 11, y: 38, width: 9, height: 9 },\n    { name: \"EQ_SHADE_CLOSE_BUTTON_ACTIVE\", x: 11, y: 47, width: 9, height: 9 },\n  ],\n  EQMAIN: [\n    { name: \"EQ_WINDOW_BACKGROUND\", x: 0, y: 0, width: 275, height: 116 },\n    { name: \"EQ_TITLE_BAR\", x: 0, y: 149, width: 275, height: 14 },\n    { name: \"EQ_TITLE_BAR_SELECTED\", x: 0, y: 134, width: 275, height: 14 },\n    { name: \"EQ_SLIDER_BACKGROUND\", x: 13, y: 164, width: 209, height: 129 },\n    { name: \"EQ_SLIDER_THUMB\", x: 0, y: 164, width: 11, height: 11 },\n    { name: \"EQ_SLIDER_THUMB_SELECTED\", x: 0, y: 176, width: 11, height: 11 },\n    { name: \"EQ_CLOSE_BUTTON\", x: 0, y: 116, width: 9, height: 9 },\n    { name: \"EQ_CLOSE_BUTTON_ACTIVE\", x: 0, y: 125, width: 9, height: 9 },\n    // This is technically not a sprite, it's just part of the background.\n    // However, we extract it to use it as a fallback for\n    // `EQ_MAXIMIZE_BUTTON_ACTIVE`. Without this, skins that don't implement\n    // `eq_ex.bmp` would show the default skin's `EQ_MAXIMIZE_BUTTON_ACTIVE`\n    // instead of showing no sprite aka, just showing through to this portion of\n    // the title bar image.\n    {\n      name: \"EQ_MAXIMIZE_BUTTON_ACTIVE_FALLBACK\",\n      x: 254,\n      y: 152,\n      width: 9,\n      height: 9,\n    },\n    { name: \"EQ_ON_BUTTON\", x: 10, y: 119, width: 26, height: 12 },\n    { name: \"EQ_ON_BUTTON_DEPRESSED\", x: 128, y: 119, width: 26, height: 12 },\n    { name: \"EQ_ON_BUTTON_SELECTED\", x: 69, y: 119, width: 26, height: 12 },\n    {\n      name: \"EQ_ON_BUTTON_SELECTED_DEPRESSED\",\n      x: 187,\n      y: 119,\n      width: 26,\n      height: 12,\n    },\n    { name: \"EQ_AUTO_BUTTON\", x: 36, y: 119, width: 32, height: 12 },\n    {\n      name: \"EQ_AUTO_BUTTON_DEPRESSED\",\n      x: 154,\n      y: 119,\n      width: 32,\n      height: 12,\n    },\n    { name: \"EQ_AUTO_BUTTON_SELECTED\", x: 95, y: 119, width: 32, height: 12 },\n    {\n      name: \"EQ_AUTO_BUTTON_SELECTED_DEPRESSED\",\n      x: 213,\n      y: 119,\n      width: 32,\n      height: 12,\n    },\n    { name: \"EQ_GRAPH_BACKGROUND\", x: 0, y: 294, width: 113, height: 19 },\n    { name: \"EQ_GRAPH_LINE_COLORS\", x: 115, y: 294, width: 1, height: 19 },\n    { name: \"EQ_PRESETS_BUTTON\", x: 224, y: 164, width: 44, height: 12 },\n    {\n      name: \"EQ_PRESETS_BUTTON_SELECTED\",\n      x: 224,\n      y: 176,\n      width: 44,\n      height: 12,\n    },\n    { name: \"EQ_PREAMP_LINE\", x: 0, y: 314, width: 113, height: 1 },\n  ],\n  POSBAR: [\n    {\n      name: \"MAIN_POSITION_SLIDER_BACKGROUND\",\n      x: 0,\n      y: 0,\n      width: 248,\n      height: 10,\n    },\n    {\n      name: \"MAIN_POSITION_SLIDER_THUMB\",\n      x: 248,\n      y: 0,\n      width: 29,\n      height: 10,\n    },\n    {\n      name: \"MAIN_POSITION_SLIDER_THUMB_SELECTED\",\n      x: 278,\n      y: 0,\n      width: 29,\n      height: 10,\n    },\n  ],\n  SHUFREP: [\n    { name: \"MAIN_SHUFFLE_BUTTON\", x: 28, y: 0, width: 47, height: 15 },\n    {\n      name: \"MAIN_SHUFFLE_BUTTON_DEPRESSED\",\n      x: 28,\n      y: 15,\n      width: 47,\n      height: 15,\n    },\n    {\n      name: \"MAIN_SHUFFLE_BUTTON_SELECTED\",\n      x: 28,\n      y: 30,\n      width: 47,\n      height: 15,\n    },\n    {\n      name: \"MAIN_SHUFFLE_BUTTON_SELECTED_DEPRESSED\",\n      x: 28,\n      y: 45,\n      width: 47,\n      height: 15,\n    },\n    { name: \"MAIN_REPEAT_BUTTON\", x: 0, y: 0, width: 28, height: 15 },\n    {\n      name: \"MAIN_REPEAT_BUTTON_DEPRESSED\",\n      x: 0,\n      y: 15,\n      width: 28,\n      height: 15,\n    },\n    {\n      name: \"MAIN_REPEAT_BUTTON_SELECTED\",\n      x: 0,\n      y: 30,\n      width: 28,\n      height: 15,\n    },\n    {\n      name: \"MAIN_REPEAT_BUTTON_SELECTED_DEPRESSED\",\n      x: 0,\n      y: 45,\n      width: 28,\n      height: 15,\n    },\n    { name: \"MAIN_EQ_BUTTON\", x: 0, y: 61, width: 23, height: 12 },\n    { name: \"MAIN_EQ_BUTTON_SELECTED\", x: 0, y: 73, width: 23, height: 12 },\n    { name: \"MAIN_EQ_BUTTON_DEPRESSED\", x: 46, y: 61, width: 23, height: 12 },\n    {\n      name: \"MAIN_EQ_BUTTON_DEPRESSED_SELECTED\",\n      x: 46,\n      y: 73,\n      width: 23,\n      height: 12,\n    },\n    { name: \"MAIN_PLAYLIST_BUTTON\", x: 23, y: 61, width: 23, height: 12 },\n    {\n      name: \"MAIN_PLAYLIST_BUTTON_SELECTED\",\n      x: 23,\n      y: 73,\n      width: 23,\n      height: 12,\n    },\n    {\n      name: \"MAIN_PLAYLIST_BUTTON_DEPRESSED\",\n      x: 69,\n      y: 61,\n      width: 23,\n      height: 12,\n    },\n    {\n      name: \"MAIN_PLAYLIST_BUTTON_DEPRESSED_SELECTED\",\n      x: 69,\n      y: 73,\n      width: 23,\n      height: 12,\n    },\n  ],\n  TEXT: characterSprites,\n  TITLEBAR: [\n    { name: \"MAIN_TITLE_BAR\", x: 27, y: 15, width: 275, height: 14 },\n    { name: \"MAIN_TITLE_BAR_SELECTED\", x: 27, y: 0, width: 275, height: 14 },\n    {\n      name: \"MAIN_EASTER_EGG_TITLE_BAR\",\n      x: 27,\n      y: 72,\n      width: 275,\n      height: 14,\n    },\n    {\n      name: \"MAIN_EASTER_EGG_TITLE_BAR_SELECTED\",\n      x: 27,\n      y: 57,\n      width: 275,\n      height: 14,\n    },\n    { name: \"MAIN_OPTIONS_BUTTON\", x: 0, y: 0, width: 9, height: 9 },\n    {\n      name: \"MAIN_OPTIONS_BUTTON_DEPRESSED\",\n      x: 0,\n      y: 9,\n      width: 9,\n      height: 9,\n    },\n    { name: \"MAIN_MINIMIZE_BUTTON\", x: 9, y: 0, width: 9, height: 9 },\n    {\n      name: \"MAIN_MINIMIZE_BUTTON_DEPRESSED\",\n      x: 9,\n      y: 9,\n      width: 9,\n      height: 9,\n    },\n    { name: \"MAIN_SHADE_BUTTON\", x: 0, y: 18, width: 9, height: 9 },\n    { name: \"MAIN_SHADE_BUTTON_DEPRESSED\", x: 9, y: 18, width: 9, height: 9 },\n    { name: \"MAIN_CLOSE_BUTTON\", x: 18, y: 0, width: 9, height: 9 },\n    { name: \"MAIN_CLOSE_BUTTON_DEPRESSED\", x: 18, y: 9, width: 9, height: 9 },\n    {\n      name: \"MAIN_CLUTTER_BAR_BACKGROUND\",\n      x: 304,\n      y: 0,\n      width: 8,\n      height: 43,\n    },\n    {\n      name: \"MAIN_CLUTTER_BAR_BACKGROUND_DISABLED\",\n      x: 312,\n      y: 0,\n      width: 8,\n      height: 43,\n    },\n    {\n      name: \"MAIN_CLUTTER_BAR_BUTTON_O_SELECTED\",\n      x: 304,\n      y: 47,\n      width: 8,\n      height: 8,\n    },\n    {\n      name: \"MAIN_CLUTTER_BAR_BUTTON_A_SELECTED\",\n      x: 312,\n      y: 55,\n      width: 8,\n      height: 7,\n    },\n    {\n      name: \"MAIN_CLUTTER_BAR_BUTTON_I_SELECTED\",\n      x: 320,\n      y: 62,\n      width: 8,\n      height: 7,\n    },\n    {\n      name: \"MAIN_CLUTTER_BAR_BUTTON_D_SELECTED\",\n      x: 328,\n      y: 69,\n      width: 8,\n      height: 8,\n    },\n    {\n      name: \"MAIN_CLUTTER_BAR_BUTTON_V_SELECTED\",\n      x: 336,\n      y: 77,\n      width: 8,\n      height: 7,\n    },\n    { name: \"MAIN_SHADE_BACKGROUND\", x: 27, y: 42, width: 275, height: 14 },\n    {\n      name: \"MAIN_SHADE_BACKGROUND_SELECTED\",\n      x: 27,\n      y: 29,\n      width: 275,\n      height: 14,\n    },\n    { name: \"MAIN_SHADE_BUTTON_SELECTED\", x: 0, y: 27, width: 9, height: 9 },\n    {\n      name: \"MAIN_SHADE_BUTTON_SELECTED_DEPRESSED\",\n      x: 9,\n      y: 27,\n      width: 9,\n      height: 9,\n    },\n    {\n      name: \"MAIN_SHADE_POSITION_BACKGROUND\",\n      x: 0,\n      y: 36,\n      width: 17,\n      height: 7,\n    },\n    { name: \"MAIN_SHADE_POSITION_THUMB\", x: 20, y: 36, width: 3, height: 7 },\n    {\n      name: \"MAIN_SHADE_POSITION_THUMB_LEFT\",\n      x: 17,\n      y: 36,\n      width: 3,\n      height: 7,\n    },\n    {\n      name: \"MAIN_SHADE_POSITION_THUMB_RIGHT\",\n      x: 23,\n      y: 36,\n      width: 3,\n      height: 7,\n    },\n  ],\n  VOLUME: [\n    { name: \"MAIN_VOLUME_BACKGROUND\", x: 0, y: 0, width: 68, height: 420 },\n    { name: \"MAIN_VOLUME_THUMB\", x: 15, y: 422, width: 14, height: 11 },\n    {\n      name: \"MAIN_VOLUME_THUMB_SELECTED\",\n      x: 0,\n      y: 422,\n      width: 14,\n      height: 11,\n    },\n  ],\n  GEN: [\n    { name: \"GEN_TOP_LEFT_SELECTED\", x: 0, y: 0, width: 25, height: 20 },\n    { name: \"GEN_TOP_LEFT_END_SELECTED\", x: 26, y: 0, width: 25, height: 20 },\n    {\n      name: \"GEN_TOP_CENTER_FILL_SELECTED\",\n      x: 52,\n      y: 0,\n      width: 25,\n      height: 20,\n    },\n    { name: \"GEN_TOP_RIGHT_END_SELECTED\", x: 78, y: 0, width: 25, height: 20 },\n    {\n      name: \"GEN_TOP_LEFT_RIGHT_FILL_SELECTED\",\n      x: 104,\n      y: 0,\n      width: 25,\n      height: 20,\n    },\n    { name: \"GEN_TOP_RIGHT_SELECTED\", x: 130, y: 0, width: 25, height: 20 },\n\n    { name: \"GEN_TOP_LEFT\", x: 0, y: 21, width: 25, height: 20 },\n    { name: \"GEN_TOP_LEFT_END\", x: 26, y: 21, width: 25, height: 20 },\n    { name: \"GEN_TOP_CENTER_FILL\", x: 52, y: 21, width: 25, height: 20 },\n    { name: \"GEN_TOP_RIGHT_END\", x: 78, y: 21, width: 25, height: 20 },\n    { name: \"GEN_TOP_LEFT_RIGHT_FILL\", x: 104, y: 21, width: 25, height: 20 },\n    { name: \"GEN_TOP_RIGHT\", x: 130, y: 21, width: 25, height: 20 },\n    { name: \"GEN_BOTTOM_LEFT\", x: 0, y: 42, width: 125, height: 14 },\n    { name: \"GEN_BOTTOM_RIGHT\", x: 0, y: 57, width: 125, height: 14 },\n    { name: \"GEN_BOTTOM_FILL\", x: 127, y: 72, width: 25, height: 14 },\n    { name: \"GEN_MIDDLE_LEFT\", x: 127, y: 42, width: 11, height: 29 },\n    { name: \"GEN_MIDDLE_LEFT_BOTTOM\", x: 158, y: 42, width: 11, height: 24 },\n    { name: \"GEN_MIDDLE_RIGHT\", x: 139, y: 42, width: 8, height: 29 },\n    { name: \"GEN_MIDDLE_RIGHT_BOTTOM\", x: 170, y: 42, width: 8, height: 24 },\n    { name: \"GEN_CLOSE_SELECTED\", x: 148, y: 42, width: 9, height: 9 },\n  ],\n  /*\n\n  We don't currently support the Media Library, so there are disabled\n  GENEX: [\n    {\n      name: \"GENEX_BUTTON_BACKGROUND_LEFT_UNPRESSED\",\n      x: 0,\n      y: 0,\n      height: 15,\n      width: 4,\n    },\n    {\n      name: \"GENEX_BUTTON_BACKGROUND_CENTER_UNPRESSED\",\n      x: 4,\n      y: 0,\n      height: 15,\n      width: 39,\n    },\n    {\n      name: \"GENEX_BUTTON_BACKGROUND_RIGHT_UNPRESSED\",\n      x: 43,\n      y: 0,\n      height: 15,\n      width: 4,\n    },\n    {\n      name: \"GENEX_BUTTON_BACKGROUND_PRESSED\",\n      x: 0,\n      y: 1,\n      height: 15,\n      width: 47,\n    },\n    { name: \"GENEX_SCROLL_UP_UNPRESSED\", x: 0, y: 31, height: 14, width: 14 },\n    {\n      name: \"GENEX_SCROLL_DOWN_UNPRESSED\",\n      x: 14,\n      y: 31,\n      height: 14,\n      width: 14,\n    },\n    { name: \"GENEX_SCROLL_UP_PRESSED\", x: 28, y: 31, height: 14, width: 14 },\n    { name: \"GENEX_SCROLL_DOWN_PRESSED\", x: 42, y: 31, height: 14, width: 14 },\n    { name: \"GENEX_SCROLL_LEFT_UNPRESSED\", x: 0, y: 45, height: 14, width: 14 },\n    {\n      name: \"GENEX_SCROLL_RIGHT_UNPRESSED\",\n      x: 14,\n      y: 45,\n      height: 14,\n      width: 14,\n    },\n    { name: \"GENEX_SCROLL_LEFT_PRESSED\", x: 28, y: 45, height: 14, width: 14 },\n    { name: \"GENEX_SCROLL_RIGHT_PRESSED\", x: 42, y: 45, height: 14, width: 14 },\n    {\n      name: \"GENEX_VERTICAL_SCROLL_HANDLE_UNPRESSED\",\n      x: 56,\n      y: 31,\n      height: 28,\n      width: 14,\n    },\n    {\n      name: \"GENEX_VERTICAL_SCROLL_HANDLE_PRESSED\",\n      x: 70,\n      y: 31,\n      height: 28,\n      width: 14,\n    },\n    {\n      name: \"GENEX_HORIZONTAL_SCROLL_HANDLE_UNPRESSED\",\n      x: 84,\n      y: 31,\n      height: 14,\n      width: 28,\n    },\n    {\n      name: \"GENEX_HORIZONTAL_SCROLL_HANDLE_PRESSED\",\n      x: 84,\n      y: 45,\n      height: 14,\n      width: 28,\n    },\n  ],\n  */\n};\n\nexport default sprites;\n","import { parseIni } from \"./utils\";\n\nexport function pointPairs(arr: string[]) {\n  const pairedValues = [];\n  for (let i = 0; i < arr.length; i += 2) {\n    pairedValues.push(`${arr[i]},${arr[i + 1]}`);\n  }\n  return pairedValues;\n}\n\ntype RegionData = { [section: string]: string[] };\n\nexport default function regionParser(regionStr: string): RegionData {\n  const iniData = parseIni(regionStr);\n  const data: RegionData = {};\n  Object.keys(iniData).forEach((section) => {\n    const { numpoints, pointlist } = iniData[section];\n    if (!numpoints || !pointlist) {\n      return;\n    }\n    const pointCounts = numpoints.split(/\\s*,\\s*/).filter((val) => val !== \"\");\n    const points = pointPairs(\n      // points can be separated by spaces, or by commas\n      pointlist.split(/\\s*[, ]\\s*/).filter((val) => val !== \"\")\n    );\n    let pointIndex = 0;\n    const polygons = pointCounts.map((numStr) => {\n      const num = Number(numStr);\n      if (num < 3) {\n        // What use is a polygon with less than three sides?\n        pointIndex += num;\n        return null;\n      }\n      const polygon = points.slice(pointIndex, pointIndex + num).join(\" \");\n      if (!polygon.length) {\n        // It's possible that the skin author specified more polygons than provided points.\n        return null;\n      }\n      pointIndex += num;\n      return polygon;\n    });\n    const validPolygons = polygons.filter(\n      (polygon) => polygon != null\n    ) as string[];\n    if (validPolygons.length) {\n      data[section] = validPolygons;\n    }\n  });\n\n  return data;\n}\n","import JSZip from \"jszip\";\nimport { PlaylistStyle, SkinGenExColors, CursorImage } from \"./types\";\nimport SKIN_SPRITES, { Sprite } from \"./skinSprites\";\nimport { DEFAULT_SKIN } from \"./constants\";\nimport * as Utils from \"./utils\";\nimport * as FileUtils from \"./fileUtils\";\n\nexport const getFileExtension = (fileName: string): string | null => {\n  const matches = /\\.([a-z]{3,4})$/i.exec(fileName);\n  return matches ? matches[1].toLowerCase() : null;\n};\n\nfunction getFilenameRegex(base: string, ext: string): RegExp {\n  // Note: The four slashes: \\\\\\\\ ultimately represent a single escaped slash in\n  // the regex (\"\\\\\"), however each itself needs to be escaped so that\n  // JavaScript does not interperate it as an escape character in the string\n  // literal. Wonderful.\n  return new RegExp(`^(.*[/\\\\\\\\])?${base}.(${ext})$`, \"i\");\n}\n\nexport async function getFileFromZip(\n  zip: JSZip,\n  fileName: string,\n  ext: string,\n  mode: \"blob\" | \"text\" | \"base64\" | \"uint8array\"\n) {\n  const files = zip.file(getFilenameRegex(fileName, ext));\n  if (!files.length) {\n    return null;\n  }\n\n  // Windows file system is case insensitve, but zip files are not.\n  // This means that it's possible for a zip to contain both `main.bmp` _and_\n  // `main.BMP` but in Winamp only one will be materialized onto disk when\n  // decompressing. I suspect that in this case later files in the archive\n  // overwrite earlier ones. To mimic that behavior we use the last matching\n  // file.\n  //\n  // This works because `JSZip.file` filters the files by iterating the\n  // underlying `files` object under the hood:\n  // https://github.com/Stuk/jszip/blob/25d401e104926fef8528d670ecfe53f14e77a297/lib/object.js#L182\n  // Since JavaScript objects are iterable in the order that the keys were\n  // added this _should_ mean that by taking the last file here we will get\n  // the last file that JSZip extracted.\n  const lastFile = files[files.length - 1];\n\n  try {\n    const contents = await lastFile.async(mode);\n    return { contents, name: lastFile.name };\n  } catch (e) {\n    console.warn(\n      `Failed to extract \"${fileName}.${ext}\" from the skin archive.`\n    );\n    return null;\n  }\n}\n\nfunction fallbackGetImgFromBlob(blob: Blob): Promise<HTMLImageElement> {\n  return Utils.imgFromUrl(URL.createObjectURL(blob));\n}\n\nexport async function getImgFromBlob(\n  blob: Blob\n): Promise<ImageBitmap | HTMLImageElement | null> {\n  try {\n    // Use this faster native browser API if available.\n    // NOTE: In some browsers `window.createImageBitmap` may not exist so this will throw.\n    return await window.createImageBitmap(blob);\n  } catch (e) {\n    try {\n      return await fallbackGetImgFromBlob(blob);\n    } catch (ee) {\n      // Like Winamp we will silently fail on images that don't parse.\n      return null;\n    }\n  }\n}\n\nexport function getSpriteUrisFromImg(\n  img: HTMLImageElement | ImageBitmap,\n  sprites: Sprite[]\n): { [spriteName: string]: string } {\n  const canvas = document.createElement(\"canvas\");\n  const context = canvas.getContext(\"2d\", { willReadFrequently: true });\n  if (context == null) {\n    throw new Error(\"Failed to get canvas context\");\n  }\n  const images: { [spriteName: string]: string } = {};\n  sprites.forEach((sprite) => {\n    canvas.height = sprite.height;\n    canvas.width = sprite.width;\n\n    context.drawImage(img, -sprite.x, -sprite.y);\n    const image = canvas.toDataURL();\n    images[sprite.name] = image;\n  });\n  return images;\n}\n\nexport async function getImgFromFilename(\n  zip: JSZip,\n  fileName: string\n): Promise<HTMLImageElement | ImageBitmap | null> {\n  // Winamp only supports .bmp images, but WACUP set a precidence of supporting\n  // .png as well to reduce size. Since we care about size as well, we follow\n  // suit. Our default skin uses .png to save 14kb.\n  const file = await getFileFromZip(zip, fileName, \"(png|bmp)\", \"blob\");\n  if (!file) {\n    return null;\n  }\n\n  const mimeType = `image/${getFileExtension(file.name) || \"*\"}`;\n  // The spec for createImageBitmap() says the browser should try to sniff the\n  // mime type, but it looks like Firefox does not. So we specify it here\n  // explicitly.\n  const typedBlob = new Blob([file.contents], { type: mimeType });\n  return getImgFromBlob(typedBlob);\n}\n\nexport async function getSpriteUrisFromFilename(\n  zip: JSZip,\n  fileName: string\n): Promise<{ [spriteName: string]: string }> {\n  const img = await getImgFromFilename(zip, fileName);\n  if (img == null) {\n    return {};\n  }\n  return getSpriteUrisFromImg(img, SKIN_SPRITES[fileName]);\n}\n\n// https://docs.microsoft.com/en-us/windows/win32/xaudio2/resource-interchange-file-format--riff-\nconst RIFF_MAGIC = \"RIFF\".split(\"\").map((c) => c.charCodeAt(0));\n\nfunction arrayStartsWith(arr: Uint8Array, matcher: number[]): boolean {\n  return matcher.every((item, i) => arr[i] === item);\n}\n\nexport async function getCursorFromFilename(\n  zip: JSZip,\n  fileName: string\n): Promise<CursorImage | null> {\n  const file = await getFileFromZip(zip, fileName, \"CUR\", \"uint8array\");\n  if (file == null) {\n    return null;\n  }\n  const contents = file.contents as Uint8Array;\n  if (arrayStartsWith(contents, RIFF_MAGIC)) {\n    return { type: \"ani\", aniData: contents };\n  }\n\n  return { type: \"cur\", url: FileUtils.curUrlFromByteArray(contents) };\n}\n\nexport async function getPlaylistStyle(zip: JSZip): Promise<PlaylistStyle> {\n  const files = zip.file(getFilenameRegex(\"PLEDIT\", \"txt\"));\n  const file = files[0];\n  if (file == null) {\n    return DEFAULT_SKIN.playlistStyle;\n  }\n  const ini = await file.async(\"text\");\n  if (ini == null) {\n    return DEFAULT_SKIN.playlistStyle;\n  }\n  const data = ini && Utils.parseIni(ini).text;\n  if (!data) {\n    // Corrupt or missing PLEDIT.txt file.\n    return DEFAULT_SKIN.playlistStyle;\n  }\n\n  // Winamp seems to permit colors that contain too many characters.\n  // For compatibility with existing skins, we normalize them here.\n  [\"normal\", \"current\", \"normalbg\", \"selectedbg\", \"mbFG\", \"mbBG\"].forEach(\n    (colorKey) => {\n      let color = data[colorKey];\n      if (!color) {\n        return;\n      }\n      if (color[0] !== \"#\") {\n        color = `#${color}`;\n      }\n      data[colorKey] = color.slice(0, 7);\n    }\n  );\n\n  return { ...DEFAULT_SKIN.playlistStyle, ...data };\n}\n\nexport async function getGenExColors(\n  zip: JSZip\n): Promise<null | SkinGenExColors> {\n  const img = await getImgFromFilename(zip, \"GENEX\");\n  if (img == null) {\n    return null;\n  }\n\n  const canvas = document.createElement(\"canvas\");\n  const context = canvas.getContext(\"2d\", { willReadFrequently: true });\n  if (context == null) {\n    return null;\n  }\n  canvas.width = img.width;\n  canvas.height = img.height;\n  context.drawImage(img, 0, 0);\n\n  const getColorAt = (x: number): string =>\n    `rgb(${context\n      .getImageData(x, 0, 1, 1)\n      // Discard the alpha channel\n      .data.slice(0, 3)\n      .join(\",\")})`;\n\n  // Ideally we would just have a map from key to the x value and map over\n  // that with getColorAt, but I don't know a great way to make that type\n  // safe. So, we'll just do this for now, where we explicitly call getColorAt\n  // for each key.\n  return {\n    // (1) x=48: item background (background to edits, listviews, etc.)\n    itemBackground: getColorAt(48),\n    // (2) x=50: item foreground (text colour of edits, listviews, etc.)\n    itemForeground: getColorAt(50),\n    // (3) x=52: window background (used to set the bg color for the dialog)\n    windowBackground: getColorAt(52),\n    // (4) x=54: button text colour\n    buttonText: getColorAt(54),\n    // (5) x=56: window text colour\n    windowText: getColorAt(56),\n    // (6) x=58: colour of dividers and sunken borders\n    divider: getColorAt(58),\n    // (7) x=60: selection colour for entries inside playlists (nothing else yet)\n    playlistSelection: getColorAt(60),\n    // (8) x=62: listview header background colour\n    listHeaderBackground: getColorAt(62),\n    // (9) x=64: listview header text colour\n    listHeaderText: getColorAt(64),\n    // (10) x=66: listview header frame top and left colour\n    listHeaderFrameTopAndLeft: getColorAt(66),\n    // (11) x=68: listview header frame bottom and right colour\n    listHeaderFrameBottomAndRight: getColorAt(68),\n    // (12) x=70: listview header frame colour, when pressed\n    listHeaderFramePressed: getColorAt(70),\n    // (13) x=72: listview header dead area colour\n    listHeaderDeadArea: getColorAt(72),\n    // (14) x=74: scrollbar colour #1\n    scrollbarOne: getColorAt(74),\n    // (15) x=76: scrollbar colour #2\n    scrollbarTwo: getColorAt(76),\n    // (16) x=78: pressed scrollbar colour #1\n    pressedScrollbarOne: getColorAt(78),\n    // (17) x=80: pressed scrollbar colour #2\n    pressedScrollbarTwo: getColorAt(80),\n    // (18) x=82: scrollbar dead area colour\n    scrollbarDeadArea: getColorAt(82),\n    // (19) x=84 List view text colour highlighted\n    listTextHighlighted: getColorAt(84),\n    // (20) x=86 List view background colour highlighted\n    listTextHighlightedBackground: getColorAt(86),\n    // (21) x=88 List view text colour selected\n    listTextSelected: getColorAt(88),\n    // (22) x=90 List view background colour selected\n    listTextSelectedBackground: getColorAt(90),\n  };\n}\n","import SKIN_SPRITES from \"./skinSprites\";\nimport regionParser from \"./regionParser\";\nimport { LETTERS, DEFAULT_SKIN } from \"./constants\";\nimport { parseViscolors } from \"./utils\";\nimport * as SkinParserUtils from \"./skinParserUtils\";\n\nconst shallowMerge = (objs) =>\n  objs.reduce((prev, img) => Object.assign(prev, img), {});\n\nconst CURSORS = [\n  \"CLOSE\",\n  \"EQCLOSE\",\n  \"EQNORMAL\",\n  \"EQSLID\",\n  \"EQTITLE\",\n  \"MAINMENU\",\n  \"MMENU\",\n  \"MIN\",\n  \"NORMAL\",\n  \"PCLOSE\",\n  \"PNORMAL\",\n  \"POSBAR\",\n  \"PSIZE\",\n  \"PTBAR\",\n  \"PVSCROLL\",\n  \"PWINBUT\",\n  \"PWSNORM\",\n  \"PWSSIZE\",\n  \"SONGNAME\",\n  \"TITLEBAR\",\n  \"VOLBAL\",\n  \"WINBUT\",\n  \"WSNORMAL\",\n  \"WSPOSBAR\",\n  /*\n   * > There are usually 4 more cursors in the skins: volbar.cur, wsclose.cur,\n   * > wswinbut.cur, wsmin.cur, but they are never used, at least in the last\n   * > versions of winamp, so there's no need of including them. The cursors\n   * > shown when the mouse is over the app-buttons are the same in normal and\n   * > winshade mode, except for the main menu button. You can make animated\n   * > cursors, but you have to name them with the extension .cur (animated\n   * > cursors are usually .ani files).\n   *\n   * -- Skinners Atlas\n   *\n   * \"VOLBAR\",\n   * \"WSCLOSE\",\n   * \"WSWINBUT\",\n   * \"WSMIN\",\n   *\n   */\n];\n\nasync function genVizColors(zip) {\n  const viscolor = await SkinParserUtils.getFileFromZip(\n    zip,\n    \"VISCOLOR\",\n    \"txt\",\n    \"text\"\n  );\n  return viscolor ? parseViscolors(viscolor.contents) : DEFAULT_SKIN.colors;\n}\n\nasync function genImages(zip) {\n  const imageObjs = await Promise.all(\n    Object.keys(SKIN_SPRITES).map((fileName) =>\n      SkinParserUtils.getSpriteUrisFromFilename(zip, fileName)\n    )\n  );\n  // Merge all the objects into a single object. Tests assert that sprite keys are unique.\n  return shallowMerge(imageObjs);\n}\nasync function genCursors(zip) {\n  const cursorObjs = await Promise.all(\n    CURSORS.map(async (cursorName) => ({\n      [cursorName]: await SkinParserUtils.getCursorFromFilename(\n        zip,\n        cursorName\n      ),\n    }))\n  );\n  return shallowMerge(cursorObjs);\n}\n\nasync function genRegion(zip) {\n  const region = await SkinParserUtils.getFileFromZip(\n    zip,\n    \"REGION\",\n    \"txt\",\n    \"text\"\n  );\n  return region ? regionParser(region.contents) : {};\n}\n\nasync function genGenTextSprites(zip) {\n  const img = await SkinParserUtils.getImgFromFilename(zip, \"GEN\");\n  if (img == null) {\n    return null;\n  }\n\n  const canvas = document.createElement(\"canvas\");\n  const context = canvas.getContext(\"2d\", { willReadFrequently: true });\n  canvas.width = img.width;\n  canvas.height = img.height;\n  context.drawImage(img, 0, 0);\n\n  const getLetters = (y, prefix) => {\n    const getColorAt = (x) => context.getImageData(x, y, 1, 1).data.join(\",\");\n\n    let x = 1;\n    const backgroundColor = getColorAt(0);\n\n    const height = 7;\n    return LETTERS.map((letter) => {\n      let nextBackground = x;\n      while (\n        getColorAt(nextBackground) !== backgroundColor &&\n        nextBackground < canvas.width\n      ) {\n        nextBackground++;\n      }\n      const width = nextBackground - x;\n      const name = `${prefix}_${letter}`;\n      const sprite = { x, y, height, width, name };\n      x = nextBackground + 1;\n      return sprite;\n    });\n  };\n\n  const letterWidths = {};\n  const sprites = [\n    ...getLetters(88, \"GEN_TEXT_SELECTED\"),\n    ...getLetters(96, \"GEN_TEXT\"),\n  ];\n  sprites.forEach((sprite) => {\n    letterWidths[sprite.name] = sprite.width;\n  });\n  return [letterWidths, SkinParserUtils.getSpriteUrisFromImg(img, sprites)];\n}\n\n// A promise that, given an array buffer returns a skin style object\nasync function skinParser(zipFileBuffer, JSZip) {\n  const zip = await JSZip.loadAsync(zipFileBuffer);\n\n  const [\n    colors,\n    playlistStyle,\n    images,\n    cursors,\n    region,\n    genTextSprites,\n    genExColors,\n  ] = await Promise.all([\n    genVizColors(zip),\n    SkinParserUtils.getPlaylistStyle(zip),\n    genImages(zip),\n    genCursors(zip),\n    genRegion(zip),\n    genGenTextSprites(zip),\n    SkinParserUtils.getGenExColors(zip),\n  ]);\n\n  const [genLetterWidths, genTextImages] = genTextSprites || [null, {}];\n\n  return {\n    colors,\n    playlistStyle,\n    images: { ...images, ...genTextImages },\n    genLetterWidths,\n    cursors,\n    region,\n    genExColors,\n  };\n}\n\nexport default skinParser;\n","'use strict';\n\nmodule.exports = TinyQueue;\nmodule.exports.default = TinyQueue;\n\nfunction TinyQueue(data, compare) {\n    if (!(this instanceof TinyQueue)) return new TinyQueue(data, compare);\n\n    this.data = data || [];\n    this.length = this.data.length;\n    this.compare = compare || defaultCompare;\n\n    if (this.length > 0) {\n        for (var i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\n    }\n}\n\nfunction defaultCompare(a, b) {\n    return a < b ? -1 : a > b ? 1 : 0;\n}\n\nTinyQueue.prototype = {\n\n    push: function (item) {\n        this.data.push(item);\n        this.length++;\n        this._up(this.length - 1);\n    },\n\n    pop: function () {\n        if (this.length === 0) return undefined;\n\n        var top = this.data[0];\n        this.length--;\n\n        if (this.length > 0) {\n            this.data[0] = this.data[this.length];\n            this._down(0);\n        }\n        this.data.pop();\n\n        return top;\n    },\n\n    peek: function () {\n        return this.data[0];\n    },\n\n    _up: function (pos) {\n        var data = this.data;\n        var compare = this.compare;\n        var item = data[pos];\n\n        while (pos > 0) {\n            var parent = (pos - 1) >> 1;\n            var current = data[parent];\n            if (compare(item, current) >= 0) break;\n            data[pos] = current;\n            pos = parent;\n        }\n\n        data[pos] = item;\n    },\n\n    _down: function (pos) {\n        var data = this.data;\n        var compare = this.compare;\n        var halfLength = this.length >> 1;\n        var item = data[pos];\n\n        while (pos < halfLength) {\n            var left = (pos << 1) + 1;\n            var right = left + 1;\n            var best = data[left];\n\n            if (right < this.length && compare(data[right], best) < 0) {\n                left = right;\n                best = data[right];\n            }\n            if (compare(best, item) >= 0) break;\n\n            data[pos] = best;\n            pos = left;\n        }\n\n        data[pos] = item;\n    }\n};\n","import invariant from \"invariant\";\nimport TinyQueue from \"tinyqueue\";\n\n// Push promises onto a queue with a priority.\n// Run a given number of jobs in parallel\n// Useful for prioritizing network requests\nexport default class LoadQueue {\n  constructor({ threads }) {\n    // TODO: Consider not running items with zero priority\n    // Priority is a function so that items can change their priority between\n    // when their priority is evaluated.\n    // For example, we might add a track to the playlist and then scroll to/away\n    // from it before it gets processed.\n    this._queue = new TinyQueue([], (a, b) => a.priority() - b.priority());\n    this._availableThreads = threads;\n  }\n\n  push(task, priority) {\n    const t = { task, priority };\n    this._queue.push(t);\n    // Wait until the next event loop to pick a task to run. This way, we can\n    // enqueue multiple items in an event loop, and be sure they will be run in\n    // priority order.\n    setTimeout(() => {\n      this._run();\n    }, 0);\n    return () => {\n      // TODO: Could return a boolean representing if the task has already been\n      // kicked off.\n      this._queue = this._queue.filter((t1) => t1 !== t);\n    };\n  }\n\n  _run() {\n    while (this._availableThreads > 0) {\n      if (this._queue.length === 0) {\n        return;\n      }\n      this._availableThreads--;\n      const t = this._queue.pop();\n      const promise = t.task();\n      invariant(\n        typeof promise.then === \"function\",\n        `LoadQueue only supports loading Promises. Got ${promise}`\n      );\n      promise.then(() => {\n        this._availableThreads++;\n        this._run();\n      });\n    }\n  }\n}\n","import { TRACK_HEIGHT } from \"../constants\";\nimport * as Selectors from \"../selectors\";\n\nimport { clamp, sort, findLastIndex } from \"../utils\";\nimport {\n  STOP,\n  REMOVE_TRACKS,\n  REMOVE_ALL_TRACKS,\n  REVERSE_LIST,\n  RANDOMIZE_LIST,\n  SET_TRACK_ORDER,\n  SET_PLAYLIST_SCROLL_POSITION,\n  DRAG_SELECTED,\n  SELECT_ALL,\n  SELECT_ZERO,\n  INVERT_SELECTION,\n} from \"../actionTypes\";\nimport { Thunk, Action } from \"../types\";\n\nexport function cropPlaylist(): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    if (Selectors.getSelectedTrackObjects(state).length === 0) {\n      return;\n    }\n    const selectedTrackIds = Selectors.getSelectedTrackIds(state);\n    const {\n      playlist: { trackOrder },\n    } = state;\n    dispatch({\n      type: REMOVE_TRACKS,\n      // @ts-ignore The keys are numbers, but TypeScript does not trust us.\n      // https://github.com/Microsoft/TypeScript/pull/12253#issuecomment-263132208\n      ids: trackOrder.filter((id) => !selectedTrackIds.has(id)),\n    });\n  };\n}\n\nexport function removeSelectedTracks(): Thunk {\n  return (dispatch, getState) => {\n    dispatch({\n      type: REMOVE_TRACKS,\n      // @ts-ignore The keys are numbers, but TypeScript does not trust us.\n      // https://github.com/Microsoft/TypeScript/pull/12253#issuecomment-263132208\n      ids: Array.from(Selectors.getSelectedTrackIds(getState())),\n    });\n  };\n}\n\nexport function removeAllTracks(): Thunk {\n  return (dispatch) => {\n    // It's a bit funky that we need to do both of these.\n    dispatch({ type: STOP });\n    dispatch({ type: REMOVE_ALL_TRACKS });\n  };\n}\n\nexport function reverseList(): Action {\n  return { type: REVERSE_LIST };\n}\n\nexport function randomizeList(): Action {\n  return { type: RANDOMIZE_LIST };\n}\n\nexport function sortListByTitle(): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const tracks = Selectors.getTracks(state);\n    const trackOrder = sort(Selectors.getTrackOrder(state), (i) =>\n      `${tracks[i].title}`.toLowerCase()\n    );\n    return dispatch({ type: SET_TRACK_ORDER, trackOrder });\n  };\n}\n\nexport function setPlaylistScrollPosition(position: number): Action {\n  return { type: SET_PLAYLIST_SCROLL_POSITION, position };\n}\n\nexport function scrollNTracks(n: number): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const overflow = Selectors.getOverflowTrackCount(state);\n    const currentOffset = Selectors.getScrollOffset(state);\n    const position = overflow ? clamp((currentOffset + n) / overflow, 0, 1) : 0;\n    return dispatch({\n      type: SET_PLAYLIST_SCROLL_POSITION,\n      position: position * 100,\n    });\n  };\n}\n\nexport function scrollPlaylistByDelta(e: WheelEvent): Thunk {\n  e.preventDefault();\n  return (dispatch, getState) => {\n    const state = getState();\n    if (Selectors.getOverflowTrackCount(state)) {\n      e.stopPropagation();\n    }\n    const totalPixelHeight = state.playlist.trackOrder.length * TRACK_HEIGHT;\n    const percentDelta = (e.deltaY / totalPixelHeight) * 100;\n    dispatch({\n      type: SET_PLAYLIST_SCROLL_POSITION,\n      position: clamp(\n        state.display.playlistScrollPosition + percentDelta,\n        0,\n        100\n      ),\n    });\n  };\n}\n\nexport function scrollUpFourTracks(): Thunk {\n  return scrollNTracks(-4);\n}\n\nexport function scrollDownFourTracks(): Thunk {\n  return scrollNTracks(4);\n}\n\nexport function dragSelected(offset: number): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const tracks = Selectors.getTracks(state);\n    const trackOrder = Selectors.getTrackOrder(state);\n    const selectedIds = Selectors.getSelectedTrackIds(state);\n    const firstSelected = trackOrder.findIndex(\n      (trackId) => tracks[trackId] && selectedIds.has(trackId)\n    );\n    if (firstSelected === -1) {\n      return;\n    }\n    const lastSelected = findLastIndex(\n      trackOrder,\n      (trackId) => tracks[trackId] && selectedIds.has(trackId)\n    );\n    if (lastSelected === -1) {\n      throw new Error(\"We found a first selected, but not a last selected.\");\n    }\n    // Ensure we don't try to drag off either end.\n    const min = -firstSelected;\n    const max = trackOrder.length - 1 - lastSelected;\n    const normalizedOffset = clamp(offset, min, max);\n    if (normalizedOffset !== 0) {\n      dispatch({ type: DRAG_SELECTED, offset: normalizedOffset });\n    }\n  };\n}\n\nexport function invertSelection(): Action {\n  return { type: INVERT_SELECTION };\n}\nexport function selectZero(): Action {\n  return { type: SELECT_ZERO };\n}\n\nexport function selectAll(): Action {\n  return { type: SELECT_ALL };\n}\n","import { parser, creator } from \"winamp-eqf\";\nimport { BANDS, LOAD_STYLE } from \"../constants\";\n\nimport * as Utils from \"../utils\";\n\nimport {\n  promptForFileReferences,\n  genArrayBufferFromFileReference,\n  genMediaDuration,\n  genMediaTags,\n} from \"../fileUtils\";\nimport skinParser from \"../skinParser\";\nimport {\n  getTracks,\n  getUserTracks,\n  getTrackIsVisibleFunction,\n  getEqfData,\n  getPlaylistURL,\n} from \"../selectors\";\n\nimport {\n  ADD_TRACK_FROM_URL,\n  PLAY_TRACK,\n  BUFFER_TRACK,\n  SET_MEDIA_TAGS,\n  SET_MEDIA_DURATION,\n  MEDIA_TAG_REQUEST_INITIALIZED,\n  MEDIA_TAG_REQUEST_FAILED,\n  SET_SKIN_DATA,\n  LOADED,\n  LOADING,\n} from \"../actionTypes\";\nimport LoadQueue from \"../loadQueue\";\n\nimport { removeAllTracks } from \"./playlist\";\nimport { setPreamp, setEqBand } from \"./equalizer\";\nimport {\n  LoadStyle,\n  Thunk,\n  Track,\n  EqfPreset,\n  SkinData,\n  WindowId,\n} from \"../types\";\n\n// Lower is better\nconst DURATION_VISIBLE_PRIORITY = 5;\nconst META_DATA_VISIBLE_PRIORITY = 10;\nconst DURATION_PRIORITY = 15;\nconst META_DATA_PRIORITY = 20;\n\nconst loadQueue = new LoadQueue({ threads: 4 });\n\nexport function addTracksFromReferences(\n  fileReferences: FileList,\n  loadStyle: LoadStyle,\n  atIndex: number | undefined\n): Thunk {\n  const tracks: Track[] = Array.from(fileReferences).map((file) => ({\n    blob: file,\n    defaultName: file.name,\n  }));\n  return loadMediaFiles(tracks, loadStyle, atIndex);\n}\n\nconst SKIN_FILENAME_MATCHER = new RegExp(\"(wsz|zip)$\", \"i\");\nconst EQF_FILENAME_MATCHER = new RegExp(\"eqf$\", \"i\");\nexport function loadFilesFromReferences(\n  fileReferences: FileList,\n  loadStyle: LoadStyle = LOAD_STYLE.PLAY,\n  atIndex: number | undefined = undefined\n): Thunk {\n  return (dispatch) => {\n    if (fileReferences.length < 1) {\n      return;\n    } else if (fileReferences.length === 1) {\n      const fileReference = fileReferences[0];\n      if (SKIN_FILENAME_MATCHER.test(fileReference.name)) {\n        dispatch(setSkinFromBlob(fileReference));\n        return;\n      } else if (EQF_FILENAME_MATCHER.test(fileReference.name)) {\n        dispatch(setEqFromFileReference(fileReference));\n        return;\n      }\n    }\n    dispatch(addTracksFromReferences(fileReferences, loadStyle, atIndex));\n  };\n}\n\nexport function setSkinFromBlob(blob: Blob | Promise<Blob>): Thunk {\n  return async (dispatch, getState, { requireJSZip }) => {\n    if (!requireJSZip) {\n      alert(\"Webamp has not been configured to support custom skins.\");\n      return;\n    }\n    dispatch({ type: LOADING });\n    let JSZip;\n    try {\n      JSZip = await requireJSZip();\n    } catch (e) {\n      console.error(e);\n      dispatch({ type: LOADED });\n      alert(\"Failed to load the skin parser.\");\n      return;\n    }\n    try {\n      const skinData = await skinParser(blob, JSZip);\n      dispatch({\n        type: SET_SKIN_DATA,\n        data: {\n          skinImages: skinData.images,\n          skinColors: skinData.colors,\n          skinPlaylistStyle: skinData.playlistStyle,\n          skinCursors: skinData.cursors,\n          skinRegion: skinData.region,\n          skinGenLetterWidths: skinData.genLetterWidths,\n          skinGenExColors: skinData.genExColors,\n        } as SkinData,\n      });\n    } catch (e) {\n      console.error(e);\n      dispatch({ type: LOADED });\n      alert(`Failed to parse skin`);\n    }\n  };\n}\n\nexport function setSkinFromUrl(url: string): Thunk {\n  return async (dispatch) => {\n    dispatch({ type: LOADING });\n    try {\n      const response = await fetch(url);\n      if (!response.ok) {\n        throw new Error(response.statusText);\n      }\n      dispatch(setSkinFromBlob(response.blob()));\n    } catch (e) {\n      console.error(e);\n      dispatch({ type: LOADED });\n      alert(`Failed to download skin from ${url}`);\n    }\n  };\n}\n\n// This function is private, since Winamp consumers can provide means for\n// opening files via other methods. Only use the file type specific\n// versions below, since they can defer to the user-defined behavior.\nfunction _openFileDialog(\n  accept: string | null,\n  expectedType: \"SKIN\" | \"MEDIA\" | \"EQ\"\n): Thunk {\n  return async (dispatch) => {\n    const fileReferences = await promptForFileReferences({ accept });\n    dispatch({\n      type: \"OPENED_FILES\",\n      expectedType,\n      count: fileReferences.length,\n      firstFileName: fileReferences[0]?.name,\n    });\n    dispatch(loadFilesFromReferences(fileReferences));\n  };\n}\n\nexport function openEqfFileDialog(): Thunk {\n  return _openFileDialog(\".eqf\", \"EQ\");\n}\n\nexport function openMediaFileDialog(): Thunk {\n  return _openFileDialog(null, \"MEDIA\");\n}\n\nexport function openSkinFileDialog() {\n  return _openFileDialog(\".zip, .wsz\", \"SKIN\");\n}\n\nexport function fetchMediaDuration(url: string, id: number): Thunk {\n  return (dispatch, getState) => {\n    loadQueue.push(\n      async () => {\n        try {\n          const duration = await genMediaDuration(url);\n          dispatch({ type: SET_MEDIA_DURATION, duration, id });\n        } catch (e) {\n          // TODO: Should we update the state to indicate that we don't know the length?\n        }\n      },\n\n      () => {\n        const trackIsVisible = getTrackIsVisibleFunction(getState());\n        return trackIsVisible(id)\n          ? DURATION_VISIBLE_PRIORITY\n          : DURATION_PRIORITY;\n      }\n    );\n  };\n}\n\nexport function loadMedia(\n  e: React.DragEvent<HTMLDivElement>,\n  loadStyle: LoadStyle = LOAD_STYLE.NONE,\n  atIndex = 0\n): Thunk {\n  const { files } = e.dataTransfer;\n  return async (dispatch, getState, { handleTrackDropEvent }) => {\n    if (handleTrackDropEvent) {\n      const tracks = await handleTrackDropEvent(e);\n\n      if (tracks != null) {\n        dispatch(loadMediaFiles(tracks, loadStyle, atIndex));\n        return;\n      }\n    }\n    dispatch(loadFilesFromReferences(files, loadStyle, atIndex));\n  };\n}\n\nexport function loadMediaFiles(\n  tracks: Track[],\n  loadStyle: LoadStyle = LOAD_STYLE.NONE,\n  atIndex = 0\n): Thunk {\n  return (dispatch) => {\n    if (loadStyle === LOAD_STYLE.PLAY) {\n      // I'm the worst. It just so happens that in every case that we autoPlay,\n      // we should also clear all tracks.\n      dispatch(removeAllTracks());\n    }\n    tracks.forEach((track, i) => {\n      const priority = i === 0 ? loadStyle : LOAD_STYLE.NONE;\n      dispatch(loadMediaFile(track, priority, atIndex + i));\n    });\n  };\n}\n\nexport function loadMediaFile(\n  track: Track,\n  priority: LoadStyle = LOAD_STYLE.NONE,\n  atIndex = 0\n): Thunk {\n  return (dispatch) => {\n    const id = Utils.uniqueId();\n    const { defaultName, metaData, duration } = track;\n    let canonicalUrl: string;\n    if (\"url\" in track) {\n      canonicalUrl = track.url.toString();\n    } else if (\"blob\" in track) {\n      canonicalUrl = URL.createObjectURL(track.blob);\n    } else {\n      throw new Error(\"Expected track to have either a blob or a url\");\n    }\n\n    dispatch({\n      type: ADD_TRACK_FROM_URL,\n      url: canonicalUrl,\n      duration: track.duration,\n      defaultName,\n      id,\n      atIndex,\n    });\n    switch (priority) {\n      case LOAD_STYLE.BUFFER:\n        dispatch({ type: BUFFER_TRACK, id });\n        break;\n      case LOAD_STYLE.PLAY:\n        dispatch({ type: PLAY_TRACK, id });\n        break;\n      case LOAD_STYLE.NONE:\n      default:\n        // If we're not going to load this right away,\n        // we should set duration on our own\n        if (duration != null) {\n          dispatch({ type: SET_MEDIA_DURATION, duration, id });\n        } else {\n          dispatch(fetchMediaDuration(canonicalUrl, id));\n        }\n    }\n\n    if (metaData != null) {\n      const { artist, title, album } = metaData;\n      dispatch({\n        type: SET_MEDIA_TAGS,\n        artist,\n        title,\n        album,\n        // For now, we lie about these next three things.\n        // TODO: Ideally we would leave these as null and force a media data\n        // fetch when the user starts playing.\n        sampleRate: 44000,\n        bitrate: 192000,\n        numberOfChannels: 2,\n        id,\n      });\n    } else if (\"blob\" in track) {\n      // Blobs can be loaded quickly\n      dispatch(fetchMediaTags(track.blob, id));\n    } else {\n      dispatch(queueFetchingMediaTags(id));\n    }\n  };\n}\n\nfunction queueFetchingMediaTags(id: number): Thunk {\n  return (dispatch, getState) => {\n    const track = getTracks(getState())[id];\n    loadQueue.push(\n      () => dispatch(fetchMediaTags(track.url, id)),\n      () => {\n        const trackIsVisible = getTrackIsVisibleFunction(getState());\n        return trackIsVisible(id)\n          ? META_DATA_VISIBLE_PRIORITY\n          : META_DATA_PRIORITY;\n      }\n    );\n  };\n}\n\nexport function fetchMediaTags(file: string | Blob, id: number): Thunk {\n  return async (dispatch, getState, { requireMusicMetadata }) => {\n    dispatch({ type: MEDIA_TAG_REQUEST_INITIALIZED, id });\n\n    try {\n      const metadata = await genMediaTags(file, await requireMusicMetadata());\n      // There's more data here, but we don't have a use for it yet:\n      const { artist, title, album, picture } = metadata.common;\n      const { numberOfChannels, bitrate, sampleRate } = metadata.format;\n      let albumArtUrl = null;\n      if (picture && picture.length >= 1) {\n        const byteArray = new Uint8Array(picture[0].data);\n        const blob = new Blob([byteArray], { type: picture[0].format });\n        albumArtUrl = URL.createObjectURL(blob);\n      }\n      dispatch({\n        type: SET_MEDIA_TAGS,\n        artist: artist ? artist : \"\",\n        title: title ? title : \"\",\n        album,\n        albumArtUrl,\n        numberOfChannels,\n        bitrate,\n        sampleRate,\n        id,\n      });\n    } catch (e) {\n      dispatch({ type: MEDIA_TAG_REQUEST_FAILED, id });\n    }\n  };\n}\n\nexport function setEqFromFileReference(fileReference: File): Thunk {\n  return async (dispatch) => {\n    const arrayBuffer = await genArrayBufferFromFileReference(fileReference);\n    const eqf = parser(arrayBuffer);\n    const preset: EqfPreset = eqf.presets[0];\n    dispatch(setEqFromObject(preset));\n  };\n}\n\nexport function setEqFromObject(preset: EqfPreset): Thunk {\n  return (dispatch) => {\n    dispatch(setPreamp(Utils.normalizeEqBand(preset.preamp)));\n    BANDS.forEach((band) => {\n      // @ts-ignore band and EqfPreset align\n      dispatch(setEqBand(band, Utils.normalizeEqBand(preset[`hz${band}`])));\n    });\n  };\n}\n\nexport function downloadPreset(): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const data = getEqfData(state);\n    const arrayBuffer = creator(data);\n    const base64 = Utils.base64FromArrayBuffer(arrayBuffer);\n    const dataURI = `data:application/zip;base64,${base64}`;\n    Utils.downloadURI(dataURI, \"entry.eqf\");\n  };\n}\n\nexport function downloadHtmlPlaylist(): Thunk {\n  return (dispatch, getState) => {\n    const uri = getPlaylistURL(getState());\n    Utils.downloadURI(uri, \"Winamp Playlist.html\");\n  };\n}\n\nlet el: HTMLInputElement | null = document.createElement(\"input\");\nel.type = \"file\";\n// @ts-ingore\nconst DIR_SUPPORT =\n  // @ts-ignore\n  typeof el.webkitdirectory !== \"undefined\" ||\n  // @ts-ignore\n  typeof el.mozdirectory !== \"undefined\" ||\n  // @ts-ignore\n  typeof el.directory !== \"undefined\";\n// Release our reference\nel = null;\n\nexport function addFilesAtIndex(nextIndex: number): Thunk {\n  return async (dispatch) => {\n    const fileReferences = await promptForFileReferences();\n    dispatch(\n      addTracksFromReferences(fileReferences, LOAD_STYLE.NONE, nextIndex)\n    );\n  };\n}\n\nexport function addDirAtIndex(nextIndex: number): Thunk {\n  return async (dispatch) => {\n    if (!DIR_SUPPORT) {\n      alert(\"Not supported in your browser\");\n      return;\n    }\n    const fileReferences = await promptForFileReferences({ directory: true });\n    dispatch(\n      addTracksFromReferences(fileReferences, LOAD_STYLE.NONE, nextIndex)\n    );\n  };\n}\n\nexport function addFilesFromUrl(atIndex = 0): Thunk {\n  return async (dispatch, getState, { handleAddUrlEvent }) => {\n    if (handleAddUrlEvent) {\n      const tracks = await handleAddUrlEvent();\n\n      if (tracks != null) {\n        dispatch(loadMediaFiles(tracks, LOAD_STYLE.NONE, atIndex));\n        return;\n      }\n    } else {\n      alert(\"Not supported in Webamp\");\n    }\n  };\n}\n\nexport function addFilesFromList(): Thunk {\n  return async (dispatch, getState, { handleLoadListEvent }) => {\n    if (handleLoadListEvent) {\n      const tracks = await handleLoadListEvent();\n\n      if (tracks != null) {\n        dispatch(removeAllTracks());\n\n        dispatch(loadMediaFiles(tracks, LOAD_STYLE.NONE, 0));\n        return;\n      }\n    } else {\n      alert(\"Not supported in Webamp\");\n    }\n  };\n}\n\nexport function saveFilesToList(): Thunk {\n  return (dispatch, getState, { handleSaveListEvent }) => {\n    if (handleSaveListEvent) {\n      handleSaveListEvent(getUserTracks(getState()));\n    } else {\n      alert(\"Not supported in Webamp\");\n    }\n  };\n}\n\nexport function droppedFiles(e: React.DragEvent, windowId: WindowId): Thunk {\n  return (dispatch) =>\n    dispatch({\n      type: \"DROPPED_FILES\",\n      count: e.dataTransfer.files.length,\n      firstFileName: e.dataTransfer.files[0]?.name,\n      windowId,\n    });\n}\n","import {\n  GOT_BUTTERCHURN_PRESETS,\n  GOT_BUTTERCHURN,\n  SELECT_PRESET_AT_INDEX,\n  RESOLVE_PRESET_AT_INDEX,\n  PRESET_REQUESTED,\n  TOGGLE_RANDOMIZE_PRESETS,\n  TOGGLE_PRESET_CYCLING,\n  SCHEDULE_MILKDROP_MESSAGE,\n} from \"../actionTypes\";\nimport * as Selectors from \"../selectors\";\nimport {\n  TransitionType,\n  Preset,\n  ButterchurnOptions,\n  StatePreset,\n  Thunk,\n  Action,\n} from \"../types\";\nimport * as FileUtils from \"../fileUtils\";\n\nfunction normalizePresetTypes(preset: Preset): StatePreset {\n  const { name } = preset;\n  if (\"butterchurnPresetObject\" in preset) {\n    return {\n      type: \"RESOLVED\",\n      name,\n      preset: preset.butterchurnPresetObject,\n    };\n  } else if (\"getButterchrunPresetObject\" in preset) {\n    return {\n      type: \"UNRESOLVED\",\n      name,\n      getPreset: preset.getButterchrunPresetObject,\n    };\n  } else if (\"butterchurnPresetUrl\" in preset) {\n    return {\n      type: \"UNRESOLVED\",\n      name,\n      getPreset: async () => {\n        const resp = await fetch(preset.butterchurnPresetUrl);\n        return resp.json();\n      },\n    };\n  }\n  throw new Error(\"Invalid preset object\");\n}\n\nexport function initializePresets(presetOptions: ButterchurnOptions): Thunk {\n  return async (dispatch) => {\n    const { getPresets, importButterchurn } = presetOptions;\n    importButterchurn().then((butterchurn) => {\n      dispatch({ type: GOT_BUTTERCHURN, butterchurn: butterchurn.default });\n    });\n\n    const presets = await getPresets();\n    const normalizePresets = presets.map(normalizePresetTypes);\n    dispatch(loadPresets(normalizePresets));\n  };\n}\n\nexport function loadPresets(presets: StatePreset[]): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const presetsLength = state.milkdrop.presets.length;\n    dispatch({ type: GOT_BUTTERCHURN_PRESETS, presets });\n    if (presetsLength === 0 && Selectors.getRandomizePresets(state)) {\n      dispatch(selectRandomPreset());\n    } else {\n      dispatch(\n        requestPresetAtIndex(presetsLength, TransitionType.IMMEDIATE, true)\n      );\n    }\n  };\n}\n\nexport function appendPresetFileList(fileList: FileList): Thunk {\n  return async (dispatch, getState, { convertPreset }) => {\n    const presets: StatePreset[] = Array.from(fileList)\n      .map((file) => {\n        const JSON_EXT = \".json\";\n        const MILK_EXT = \".milk\";\n        const filename = file.name.toLowerCase();\n        if (filename.endsWith(MILK_EXT)) {\n          if (convertPreset == null) {\n            throw new Error(\"Invalid type\");\n          }\n          return {\n            type: \"UNRESOLVED\",\n            name: file.name.slice(0, file.name.length - MILK_EXT.length),\n            getPreset: () => convertPreset(file),\n          } as StatePreset;\n        } else if (filename.endsWith(JSON_EXT)) {\n          return {\n            type: \"UNRESOLVED\",\n            name: file.name.slice(0, file.name.length - JSON_EXT.length),\n            getPreset: async () => {\n              const str = await FileUtils.genStringFromFileReference(file);\n              // TODO: How should we handle the case where json parsing fails?\n              return JSON.parse(str);\n            },\n          } as StatePreset;\n        }\n        console.error(\"Invalid type preset when loading directory\");\n\n        return null as never;\n      })\n      .filter(Boolean);\n    dispatch(loadPresets(presets));\n  };\n}\n\nexport function selectNextPreset(\n  transitionType: TransitionType = TransitionType.DEFAULT\n): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    if (Selectors.getRandomizePresets(state)) {\n      return dispatch(selectRandomPreset(transitionType));\n    }\n    const currentPresetIndex = Selectors.getCurrentPresetIndex(state);\n    if (currentPresetIndex == null) {\n      return;\n    }\n    const nextPresetIndex = currentPresetIndex + 1;\n    dispatch(requestPresetAtIndex(nextPresetIndex, transitionType, true));\n  };\n}\n\nexport function selectPreviousPreset(\n  transitionType: TransitionType = TransitionType.DEFAULT\n): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    const { presetHistory } = state.milkdrop;\n    if (presetHistory.length < 1) {\n      return;\n    }\n    // Awkward. We do -2 becuase the the last track is the current track.\n    const lastPresetIndex = presetHistory[presetHistory.length - 2];\n\n    dispatch(requestPresetAtIndex(lastPresetIndex, transitionType, false));\n  };\n}\n\nexport function selectRandomPreset(\n  transitionType: TransitionType = TransitionType.DEFAULT\n): Thunk {\n  return (dispatch, getState) => {\n    const state = getState();\n    // TODO: Make this a selector.\n    const randomIndex = Math.floor(\n      Math.random() * state.milkdrop.presets.length\n    );\n    dispatch(requestPresetAtIndex(randomIndex, transitionType, true));\n  };\n}\n\n// TODO: Technically there's a race here. If you request two presets in a row, the\n// first one may resolve before the second.\nexport function requestPresetAtIndex(\n  index: number,\n  transitionType: TransitionType,\n  addToHistory: boolean\n): Thunk {\n  return async (dispatch, getState) => {\n    const state = getState();\n    const preset = state.milkdrop.presets[index];\n    if (preset == null) {\n      // Index might be out of range.\n      return;\n    }\n    dispatch({ type: PRESET_REQUESTED, index, addToHistory });\n    switch (preset.type) {\n      case \"RESOLVED\":\n        dispatch({ type: SELECT_PRESET_AT_INDEX, index, transitionType });\n        return;\n      case \"UNRESOLVED\":\n        const json = await preset.getPreset();\n        // TODO: Ensure that this works correctly even if requests resolve out of order\n        dispatch({ type: RESOLVE_PRESET_AT_INDEX, index, json });\n        dispatch({ type: SELECT_PRESET_AT_INDEX, index, transitionType });\n        return;\n    }\n  };\n}\n\nexport function handlePresetDrop(e: React.DragEvent): Thunk {\n  return appendPresetFileList(e.dataTransfer.files);\n}\n\nexport function toggleRandomizePresets(): Action {\n  return { type: TOGGLE_RANDOMIZE_PRESETS };\n}\n\nexport function togglePresetCycling(): Action {\n  return { type: TOGGLE_PRESET_CYCLING };\n}\n\nexport function scheduleMilkdropMessage(message: string): Action {\n  return { type: SCHEDULE_MILKDROP_MESSAGE, message };\n}\n","import {\n  CLOSE_WINAMP,\n  OPEN_WINAMP,\n  STOP,\n  TOGGLE_VISUALIZER_STYLE,\n  CLOSE_REQUESTED,\n  MINIMIZE_WINAMP,\n  SET_FOCUS,\n  UNSET_FOCUS,\n  LOAD_SERIALIZED_STATE,\n  LOAD_DEFAULT_SKIN,\n  SET_MILKDROP_DESKTOP,\n  SET_MILKDROP_FULLSCREEN,\n  TOGGLE_PRESET_OVERLAY,\n  STEP_MARQUEE,\n  SET_BAND_FOCUS,\n} from \"../actionTypes\";\nimport { WINDOWS } from \"../constants\";\nimport { Thunk, Action, Slider } from \"../types\";\nimport { SerializedStateV1 } from \"../serializedStates/v1Types\";\nimport * as Selectors from \"../selectors\";\nimport { ensureWindowsAreOnScreen, setFocusedWindow } from \"./windows\";\n\nexport {\n  toggleDoubleSizeMode,\n  toggleEqualizerShadeMode,\n  togglePlaylistShadeMode,\n  closeWindow,\n  setWindowSize,\n  toggleWindow,\n  updateWindowPositions,\n  toggleMainWindowShadeMode,\n  centerWindowsInContainer,\n  centerWindowsInView,\n  resetWindowSizes,\n  browserWindowSizeChanged,\n  ensureWindowsAreOnScreen,\n  stackWindows,\n  toggleLlamaMode,\n  setFocusedWindow,\n  setWindowLayout,\n} from \"./windows\";\nexport {\n  play,\n  pause,\n  stop,\n  nextN,\n  next,\n  previous,\n  seekToTime,\n  seekForward,\n  seekBackward,\n  setVolume,\n  playTrack,\n  playTrackNow,\n  adjustVolume,\n  scrollVolume,\n  setBalance,\n  toggleRepeat,\n  toggleShuffle,\n  toggleTimeMode,\n} from \"./media\";\nexport {\n  setEqBand,\n  setEqToMax,\n  setEqToMid,\n  setEqToMin,\n  setPreamp,\n  toggleEq,\n  toggleEqAuto,\n} from \"./equalizer\";\nexport {\n  addTracksFromReferences,\n  loadFilesFromReferences,\n  setSkinFromUrl,\n  openEqfFileDialog,\n  openMediaFileDialog,\n  openSkinFileDialog,\n  fetchMediaDuration,\n  loadMedia,\n  loadMediaFiles,\n  loadMediaFile,\n  fetchMediaTags,\n  setEqFromFileReference,\n  downloadPreset,\n  setEqFromObject,\n  downloadHtmlPlaylist,\n  addDirAtIndex,\n  addFilesAtIndex,\n  addFilesFromUrl,\n  addFilesFromList,\n  saveFilesToList,\n  droppedFiles,\n} from \"./files\";\nexport {\n  cropPlaylist,\n  removeSelectedTracks,\n  removeAllTracks,\n  reverseList,\n  randomizeList,\n  sortListByTitle,\n  setPlaylistScrollPosition,\n  scrollNTracks,\n  scrollPlaylistByDelta,\n  scrollUpFourTracks,\n  scrollDownFourTracks,\n  dragSelected,\n  selectAll,\n  selectZero,\n  invertSelection,\n} from \"./playlist\";\nexport {\n  initializePresets,\n  requestPresetAtIndex,\n  selectRandomPreset,\n  selectNextPreset,\n  selectPreviousPreset,\n  appendPresetFileList,\n  handlePresetDrop,\n  loadPresets,\n  toggleRandomizePresets,\n  togglePresetCycling,\n  scheduleMilkdropMessage,\n} from \"./milkdrop\";\n\nexport function close(): Thunk {\n  return (dispatch) => {\n    // TODO: This could probably be improved by adding a \"PREVENT_CLOSE\" action\n    // or something, but this works okay for now.\n    let defaultPrevented = false;\n    const cancel = () => {\n      defaultPrevented = true;\n    };\n    dispatch({ type: CLOSE_REQUESTED, cancel });\n    if (!defaultPrevented) {\n      dispatch({ type: STOP });\n      dispatch({ type: CLOSE_WINAMP });\n    }\n  };\n}\n\nexport function open(): Action {\n  return { type: OPEN_WINAMP };\n}\n\nexport function toggleVisualizerStyle(): Action {\n  return { type: TOGGLE_VISUALIZER_STYLE };\n}\n\nexport function minimize(): Action {\n  return { type: MINIMIZE_WINAMP };\n}\n\nexport function setFocus(input: string): Action {\n  return { type: SET_FOCUS, input };\n}\n\nexport function unsetFocus(): Action {\n  return { type: UNSET_FOCUS };\n}\n\nexport function focusBand(band: Slider): Action {\n  return { type: SET_BAND_FOCUS, input: \"eq\", bandFocused: band };\n}\n\nexport function loadSerializedState(\n  // In the future this type should be the union of all versioned types.\n  serializedState: SerializedStateV1\n): Thunk {\n  return (dispatch) => {\n    dispatch({ type: LOAD_SERIALIZED_STATE, serializedState });\n    dispatch(ensureWindowsAreOnScreen());\n  };\n}\n\nexport function loadDefaultSkin(): Action {\n  return { type: LOAD_DEFAULT_SKIN };\n}\n\nexport function toggleMilkdropDesktop(): Thunk {\n  return (dispatch, getState) => {\n    if (Selectors.getMilkdropDesktopEnabled(getState())) {\n      dispatch({ type: SET_MILKDROP_DESKTOP, enabled: false });\n    } else {\n      dispatch({ type: SET_MILKDROP_DESKTOP, enabled: true });\n    }\n  };\n}\n\nexport function setMilkdropFullscreen(enabled: boolean): Action {\n  return { type: SET_MILKDROP_FULLSCREEN, enabled };\n}\nexport function toggleMilkdropFullscreen(): Thunk {\n  return (dispatch, getState) => {\n    dispatch(\n      setMilkdropFullscreen(!Selectors.getMilkdropFullscreenEnabled(getState()))\n    );\n  };\n}\n\nexport function togglePresetOverlay(): Thunk {\n  return (dispatch, getState) => {\n    if (Selectors.getPresetOverlayOpen(getState())) {\n      dispatch(setFocusedWindow(WINDOWS.MILKDROP));\n    }\n\n    dispatch({ type: TOGGLE_PRESET_OVERLAY });\n  };\n}\n\nexport function stepMarquee(): Action {\n  return { type: STEP_MARQUEE };\n}\n","import { IMedia } from \"./media\";\nimport {\n  IS_PLAYING,\n  PAUSE,\n  PLAY,\n  SEEK_TO_PERCENT_COMPLETE,\n  SET_BAND_VALUE,\n  SET_BALANCE,\n  SET_MEDIA,\n  SET_VOLUME,\n  START_WORKING,\n  STOP,\n  STOP_WORKING,\n  UPDATE_TIME_ELAPSED,\n  SET_EQ_OFF,\n  SET_EQ_ON,\n  PLAY_TRACK,\n  BUFFER_TRACK,\n  LOAD_SERIALIZED_STATE,\n} from \"./actionTypes\";\nimport { next as nextTrack } from \"./actionCreators\";\nimport * as Selectors from \"./selectors\";\nimport { MiddlewareStore, Action, Dispatch } from \"./types\";\nimport { objectForEach } from \"./utils\";\n\nexport default (media: IMedia) => (store: MiddlewareStore) => {\n  const {\n    media: { volume, balance },\n    equalizer: { sliders },\n  } = store.getState();\n\n  // Ensure the default state is the canonical value.\n  media.setVolume(volume);\n  media.setBalance(balance);\n  media.setPreamp(sliders.preamp);\n  // TODO: Ensure other values like bands are in sync\n\n  media.on(\"timeupdate\", () => {\n    store.dispatch({\n      type: UPDATE_TIME_ELAPSED,\n      elapsed: media.timeElapsed(),\n    });\n  });\n\n  media.on(\"ended\", () => {\n    store.dispatch(nextTrack());\n  });\n\n  media.on(\"playing\", () => {\n    store.dispatch({ type: IS_PLAYING });\n  });\n\n  media.on(\"waiting\", () => {\n    store.dispatch({ type: START_WORKING });\n  });\n\n  media.on(\"stopWaiting\", () => {\n    store.dispatch({ type: STOP_WORKING });\n  });\n\n  media.on(\"fileLoaded\", () => {\n    const id = Selectors.getCurrentTrackId(store.getState());\n    if (id == null) {\n      // Attempted to set the metadata for a track that was already removed.\n      // Really, the media should have been stopped when the track was removed.\n      return;\n    }\n    store.dispatch({\n      id,\n      type: SET_MEDIA,\n      kbps: \"128\",\n      khz: \"44\",\n      channels: 2,\n      length: media.duration(),\n    });\n  });\n\n  return (next: Dispatch) => (action: Action) => {\n    const returnValue = next(action);\n    const state = store.getState();\n    switch (action.type) {\n      case PLAY:\n        media.play();\n        break;\n      case PAUSE:\n        media.pause();\n        break;\n      case STOP:\n        media.stop();\n        break;\n      case SET_VOLUME:\n        media.setVolume(Selectors.getVolume(state));\n        break;\n      case SET_BALANCE:\n        media.setBalance(Selectors.getBalance(state));\n        break;\n      case SEEK_TO_PERCENT_COMPLETE:\n        media.seekToPercentComplete(action.percent);\n        break;\n      case PLAY_TRACK: {\n        const url = Selectors.getTrackUrl(store.getState())(action.id);\n        if (url != null) {\n          media.loadFromUrl(url, true);\n        }\n        break;\n      }\n      case BUFFER_TRACK: {\n        const url = Selectors.getTrackUrl(store.getState())(action.id);\n        if (url != null) {\n          media.loadFromUrl(url, false);\n        }\n        break;\n      }\n      case SET_BAND_VALUE:\n        if (action.band === \"preamp\") {\n          media.setPreamp(action.value);\n        } else {\n          media.setEqBand(action.band, action.value);\n        }\n        break;\n      case SET_EQ_OFF:\n        media.disableEq();\n        break;\n      case SET_EQ_ON:\n        media.enableEq();\n        break;\n      case LOAD_SERIALIZED_STATE: {\n        // Set ALL THE THINGS!\n        if (Selectors.getEqualizerEnabled(state)) {\n          media.enableEq();\n        } else {\n          media.disableEq();\n        }\n        media.setVolume(Selectors.getVolume(state));\n        media.setBalance(Selectors.getBalance(state));\n        objectForEach(state.equalizer.sliders, (value, slider) => {\n          if (slider === \"preamp\") {\n            media.setPreamp(value);\n          } else {\n            // @ts-ignore I don't know how to teach TypeScript about objects\n            // that use Slider as keys\n            media.setEqBand(slider, value);\n          }\n        });\n        break;\n      }\n    }\n    return returnValue;\n  };\n};\n","import {\n  legacy_createStore as createStore,\n  applyMiddleware,\n  Middleware as ReduxMiddleware,\n} from \"redux\";\nimport thunk from \"redux-thunk\";\nimport { composeWithDevTools } from \"redux-devtools-extension\";\nimport reducer from \"./reducers\";\nimport mediaMiddleware from \"./mediaMiddleware\";\nimport { merge } from \"./utils\";\nimport { UPDATE_TIME_ELAPSED, STEP_MARQUEE } from \"./actionTypes\";\nimport { IMedia } from \"./media\";\nimport Emitter from \"./emitter\";\nimport {\n  Extras,\n  Dispatch,\n  Action,\n  PartialState,\n  Middleware,\n  Store,\n} from \"./types\";\n\n// TODO: Move to demo\nconst compose = composeWithDevTools({\n  actionsBlacklist: [UPDATE_TIME_ELAPSED, STEP_MARQUEE],\n});\n\nexport default function createWebampStore(\n  media: IMedia,\n  actionEmitter: Emitter,\n  customMiddlewares: Middleware[] = [],\n  stateOverrides: PartialState | undefined,\n  extras: Extras\n): Store {\n  let initialState;\n  if (stateOverrides) {\n    initialState = merge(\n      reducer(undefined, { type: \"@@init\" }),\n      stateOverrides\n    );\n  }\n\n  const emitterMiddleware = () => (next: Dispatch) => (action: Action) => {\n    actionEmitter.trigger(action.type, action);\n    return next(action);\n  };\n\n  const middlewares: Middleware[] = [\n    thunk.withExtraArgument(extras),\n    mediaMiddleware(media),\n    emitterMiddleware,\n    ...customMiddlewares,\n  ];\n\n  // @ts-expect-error Typing of these is too hard to get right, so we cheat\n  const coercedMiddlewares: ReduxMiddleware[] = middlewares;\n\n  const enhancer = compose(applyMiddleware(...coercedMiddlewares));\n\n  return createStore(reducer, initialState, enhancer);\n}\n","var key = {\r\n    fullscreenEnabled: 0,\r\n    fullscreenElement: 1,\r\n    requestFullscreen: 2,\r\n    exitFullscreen: 3,\r\n    fullscreenchange: 4,\r\n    fullscreenerror: 5,\r\n    fullscreen: 6\r\n};\r\nvar webkit = [\r\n    'webkitFullscreenEnabled',\r\n    'webkitFullscreenElement',\r\n    'webkitRequestFullscreen',\r\n    'webkitExitFullscreen',\r\n    'webkitfullscreenchange',\r\n    'webkitfullscreenerror',\r\n    '-webkit-full-screen',\r\n];\r\nvar moz = [\r\n    'mozFullScreenEnabled',\r\n    'mozFullScreenElement',\r\n    'mozRequestFullScreen',\r\n    'mozCancelFullScreen',\r\n    'mozfullscreenchange',\r\n    'mozfullscreenerror',\r\n    '-moz-full-screen',\r\n];\r\nvar ms = [\r\n    'msFullscreenEnabled',\r\n    'msFullscreenElement',\r\n    'msRequestFullscreen',\r\n    'msExitFullscreen',\r\n    'MSFullscreenChange',\r\n    'MSFullscreenError',\r\n    '-ms-fullscreen',\r\n];\r\n// so it doesn't throw if no window or document\r\nvar document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {};\r\nvar vendor = (('fullscreenEnabled' in document && Object.keys(key)) ||\r\n    (webkit[0] in document && webkit) ||\r\n    (moz[0] in document && moz) ||\r\n    (ms[0] in document && ms) ||\r\n    []);\r\nvar fscreen = {\r\n    requestFullscreen: function (element) { return element[vendor[key.requestFullscreen]](); },\r\n    requestFullscreenFunction: function (element) { return element[vendor[key.requestFullscreen]]; },\r\n    get exitFullscreen() { return document[vendor[key.exitFullscreen]].bind(document); },\r\n    get fullscreenPseudoClass() { return \":\" + vendor[key.fullscreen]; },\r\n    addEventListener: function (type, handler, options) { return document.addEventListener(vendor[key[type]], handler, options); },\r\n    removeEventListener: function (type, handler, options) { return document.removeEventListener(vendor[key[type]], handler, options); },\r\n    get fullscreenEnabled() { return Boolean(document[vendor[key.fullscreenEnabled]]); },\r\n    set fullscreenEnabled(val) { },\r\n    get fullscreenElement() { return document[vendor[key.fullscreenElement]]; },\r\n    set fullscreenElement(val) { },\r\n    get onfullscreenchange() { return document[(\"on\" + vendor[key.fullscreenchange]).toLowerCase()]; },\r\n    set onfullscreenchange(handler) { return document[(\"on\" + vendor[key.fullscreenchange]).toLowerCase()] = handler; },\r\n    get onfullscreenerror() { return document[(\"on\" + vendor[key.fullscreenerror]).toLowerCase()]; },\r\n    set onfullscreenerror(handler) { return document[(\"on\" + vendor[key.fullscreenerror]).toLowerCase()] = handler; },\r\n};\n\nexport default fscreen;\n//# sourceMappingURL=fscreen.esm.js.map\n","// Adapted from https://github.com/snakesilk/react-fullscreen\nimport { ReactNode, useRef, useLayoutEffect, useEffect } from \"react\";\nimport fscreen from \"fscreen\";\n\ninterface Props {\n  enabled: boolean;\n  children: ReactNode;\n  onChange(fullscreen: boolean): void;\n}\n\nfunction leaveFullScreen() {\n  if (fscreen.fullscreenEnabled) {\n    fscreen.exitFullscreen();\n  }\n}\n\nfunction enterFullScreen(node: HTMLDivElement) {\n  if (fscreen.fullscreenEnabled) {\n    fscreen.requestFullscreen(node);\n  }\n}\n\nfunction FullScreen(props: Props) {\n  const { onChange, enabled } = props;\n  const ref = useRef<HTMLDivElement | null>(null);\n\n  useEffect(() => {\n    function detectFullScreen() {\n      if (onChange) {\n        onChange(fscreen.fullscreenElement === ref.current);\n      }\n    }\n    fscreen.addEventListener(\"fullscreenchange\", detectFullScreen);\n    return () => {\n      fscreen.removeEventListener(\"fullscreenchange\", detectFullScreen);\n    };\n  }, [onChange]);\n\n  // This must run in response to a click event, so we'll use useLayoutEffect just in case.\n  useLayoutEffect(() => {\n    const isEnabled = fscreen.fullscreenElement === ref.current;\n    if (isEnabled && !enabled) {\n      leaveFullScreen();\n    } else if (!isEnabled && enabled && ref.current != null) {\n      enterFullScreen(ref.current);\n    }\n  }, [enabled]);\n\n  return (\n    <div\n      ref={ref}\n      style={props.enabled ? { height: \"100%\", width: \"100%\" } : undefined}\n    >\n      {props.children}\n    </div>\n  );\n}\n\nexport default FullScreen;\n","import {\n  useState,\n  useEffect,\n  useCallback,\n  useLayoutEffect,\n  useRef,\n} from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport * as Utils from \"./utils\";\nimport { Action, Thunk, AppState } from \"./types\";\n\ninterface Size {\n  width: number;\n  height: number;\n}\n\nexport function useUnmountedRef(): { current: boolean } {\n  const unmountedRef = useRef(false);\n  useEffect(() => {\n    return () => {\n      unmountedRef.current = true;\n    };\n  }, []);\n  return unmountedRef;\n}\n\nexport function usePromiseValueOrNull<T>(propValue: Promise<T>): T | null {\n  const [value, setValue] = useState<T | null>(null);\n  useEffect(() => {\n    let disposed = false;\n    propValue.then((resolvedValue) => {\n      if (disposed) {\n        return;\n      }\n      setValue(resolvedValue);\n    });\n\n    return () => {\n      disposed = true;\n    };\n  }, [propValue]);\n\n  return value;\n}\n\nexport function useScreenSize() {\n  const [size] = useState<Size>(Utils.getScreenSize());\n  // TODO: We could subscribe to screen size changes.\n  return size;\n}\n\nexport function useWindowSize() {\n  const [size, setSize] = useState<Size>(Utils.getWindowSize());\n  const handler = useCallback(() => {\n    Utils.throttle(() => {\n      setSize(Utils.getWindowSize());\n    }, 100) as () => void;\n  }, []);\n  useEffect(() => {\n    window.addEventListener(\"resize\", handler);\n    return () => {\n      window.removeEventListener(\"resize\", handler);\n    };\n  }, [handler]);\n  return size;\n}\n\nconst cursorPositionRef = { current: { pageX: 0, pageY: 0 } };\nwindow.document.addEventListener(\"mousemove\", ({ pageX, pageY }) => {\n  cursorPositionRef.current = { pageX, pageY };\n});\n\n// We use a single global event listener because there is no way to get the\n// mouse position aside from an event. Ideally we could create/clean up the\n// event listener in the hook, but in the case where we want to check the cursor\n// position on mount, that we wouldn't have had time to capture an event.\nfunction useCursorPositionRef() {\n  return cursorPositionRef;\n}\n\n// CSS hover state is not respected if the cursor is already over the node when\n// it is added to the DOM. This hook allows your component to know its hover\n// state on mount without waiting for the mouse to move.\n// https://stackoverflow.com/a/13259049/1263117\nexport function useIsHovered() {\n  const cursorRef = useCursorPositionRef();\n  const [hover, setHover] = useState(false);\n  const [node, setNode] = useState<HTMLElement | null>(null);\n\n  useLayoutEffect(() => {\n    if (node == null) {\n      setHover(false);\n      return;\n    }\n    const domRect = node.getBoundingClientRect();\n    const { pageX, pageY } = cursorRef.current;\n    setHover(\n      pageX >= domRect.left &&\n        pageX <= domRect.right &&\n        pageY >= domRect.top &&\n        pageY <= domRect.bottom\n    );\n\n    const enter = () => setHover(true);\n    const leave = () => setHover(false);\n    node.addEventListener(\"mouseenter\", enter);\n    node.addEventListener(\"mouseleave\", leave);\n\n    return () => {\n      node.removeEventListener(\"mouseenter\", enter);\n      node.removeEventListener(\"mouseleave\", leave);\n    };\n  }, [node, cursorRef]);\n\n  return { ref: setNode, hover };\n}\n\nexport function useOnClickAway(\n  ref: Element | null,\n  callback: null | (() => void)\n) {\n  useEffect(() => {\n    if (ref == null || callback == null) {\n      return;\n    }\n\n    const handleClickOut = (ee: MouseEvent) => {\n      const clickOutTarget = ee.target;\n      if (!(clickOutTarget instanceof Element)) {\n        // TypeScript doesn't realize this will always be true\n        return;\n      }\n      if (ref.contains(clickOutTarget)) {\n        return;\n      }\n      // If the click is _not_ inside the menu.\n      callback();\n      window.document.removeEventListener(\"click\", handleClickOut, {\n        capture: true,\n      });\n    };\n\n    window.document.addEventListener(\"click\", handleClickOut, {\n      capture: true,\n    });\n\n    return () => {\n      window.document.removeEventListener(\"click\", handleClickOut, {\n        capture: true,\n      });\n    };\n  }, [ref, callback]);\n}\n\n// TODO: Return useSelector directly and apply the type without wrapping\nexport function useTypedSelector<T>(selector: (state: AppState) => T): T {\n  return useSelector(selector);\n}\n\nexport function useActionCreator<T extends (...args: any[]) => Action | Thunk>(\n  actionCreator: T\n): (...funcArgs: Parameters<T>) => void {\n  const dispatch = useTypedDispatch();\n  return useCallback(\n    (...args) => dispatch(actionCreator(...args)),\n    [dispatch, actionCreator]\n  );\n}\n\nexport function useTypedDispatch(): (action: Action | Thunk) => void {\n  // useDispatch does not know about thunks. In theory this should be solvable, but I haven't bothered to figure it out:\n  // https://redux.js.org/usage/usage-with-typescript#type-checking-redux-thunks\n  // @ts-ignore\n  return useDispatch();\n}\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","import { useState, useEffect, memo } from \"react\";\nimport {\n  WINDOW_RESIZE_SEGMENT_WIDTH,\n  WINDOW_RESIZE_SEGMENT_HEIGHT,\n} from \"../constants\";\nimport * as Utils from \"../utils\";\n\ntype Size = [number, number];\n\ninterface Props {\n  currentSize: Size;\n  setWindowSize(size: Size): void;\n  widthOnly?: boolean;\n  id?: string;\n}\n\nfunction ResizeTarget(props: Props) {\n  const { currentSize, setWindowSize, widthOnly, ...passThroughProps } = props;\n  const [mouseDown, setMouseDown] = useState(false);\n  const [mouseStart, setMouseStart] = useState<null | { x: number; y: number }>(\n    null\n  );\n  useEffect(() => {\n    if (mouseDown === false || mouseStart == null) {\n      return;\n    }\n    const [width, height] = currentSize;\n    const handleMove = (ee: MouseEvent | TouchEvent) => {\n      const x = Utils.getX(ee) - mouseStart.x;\n      const y = Utils.getY(ee) - mouseStart.y;\n\n      const newWidth = Math.max(\n        0,\n        width + Math.round(x / WINDOW_RESIZE_SEGMENT_WIDTH)\n      );\n\n      const newHeight = widthOnly\n        ? width\n        : Math.max(0, height + Math.round(y / WINDOW_RESIZE_SEGMENT_HEIGHT));\n\n      const newSize: Size = [newWidth, newHeight];\n\n      props.setWindowSize(newSize);\n    };\n\n    window.addEventListener(\"mousemove\", handleMove);\n    window.addEventListener(\"touchmove\", handleMove);\n\n    const handleMouseUp = () => setMouseDown(false);\n    window.addEventListener(\"mouseup\", handleMouseUp);\n    window.addEventListener(\"touchend\", handleMouseUp);\n\n    return () => {\n      window.removeEventListener(\"mousemove\", handleMove);\n      window.removeEventListener(\"touchmove\", handleMove);\n      window.removeEventListener(\"mouseup\", handleMouseUp);\n      window.removeEventListener(\"touchend\", handleMouseUp);\n    };\n    // We pruposefully close over the props from when the mouse went down\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [mouseStart, mouseDown]);\n\n  const handleMouseDown = (\n    e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>\n  ) => {\n    setMouseStart({\n      x: Utils.getX(e),\n      y: Utils.getY(e),\n    });\n    setMouseDown(true);\n  };\n\n  return (\n    <div\n      onMouseDown={handleMouseDown}\n      onTouchStart={handleMouseDown}\n      {...passThroughProps}\n    />\n  );\n}\nexport default memo(ResizeTarget);\n","import { useCallback, useState, useEffect } from \"react\";\nimport { WindowId } from \"../types\";\nimport * as Actions from \"../actionCreators\";\nimport * as Selectors from \"../selectors\";\nimport { useActionCreator, useTypedSelector } from \"../hooks\";\n\ninterface Props {\n  onKeyDown?(e: KeyboardEvent): void;\n  windowId: WindowId;\n  children: React.ReactNode;\n}\n\nfunction FocusTarget({ onKeyDown, windowId, children }: Props) {\n  const focusedWindowId = useTypedSelector(Selectors.getFocusedWindow);\n  const setFocus = useActionCreator(Actions.setFocusedWindow);\n\n  const focusHandler = useCallback(() => {\n    if (windowId !== focusedWindowId) {\n      setFocus(windowId);\n    }\n  }, [windowId, focusedWindowId, setFocus]);\n\n  const [ref, setRef] = useState<HTMLDivElement | null>(null);\n\n  useEffect(() => {\n    if (ref == null || onKeyDown == null) {\n      return;\n    }\n    ref.addEventListener(\"keydown\", onKeyDown);\n    return () => ref.removeEventListener(\"keydown\", onKeyDown);\n  }, [onKeyDown, windowId, focusedWindowId, ref]);\n\n  // It's possible for a child component to gain focus and then become\n  // unmounted. In that case, the browser will return focus to the `<body>`.\n  // In the following hook, use a `MutationObserver` to watch for that behavior\n  // and refocus the containing FocusTarget when it happens.\n  //\n  // I tried a number of other approaches using `focus/blur/focusin/focusout` on\n  // various DOM nodes, and was unable to find a solution which would trigger in\n  // this senario in Firefox. Therefore we use this `MutationObserver` approach.\n  useEffect(() => {\n    // Only create the `MutationObserver` within the currently focused target.\n    if (ref == null || windowId !== focusedWindowId) {\n      return;\n    }\n\n    const observer = new MutationObserver((mutations) => {\n      // In the common case we won't have focused the body, so we can do this\n      // inexpensive check first to avoid calling the more expensive `O(n)`\n      // check of the individual mutations.\n      if (document.activeElement !== document.body) {\n        return;\n      }\n      if (mutations.some((mutation) => mutation.removedNodes.length > 0)) {\n        ref.focus();\n      }\n    });\n\n    observer.observe(ref, {\n      subtree: true,\n      attributes: false,\n      childList: true,\n    });\n\n    return () => observer.disconnect();\n  }, [windowId, focusedWindowId, ref]);\n\n  return (\n    <div\n      ref={setRef}\n      onPointerDown={focusHandler}\n      onFocus={focusHandler}\n      tabIndex={-1}\n      style={{ height: \"100%\", width: \"100%\" }}\n    >\n      {children}\n    </div>\n  );\n}\n\nexport default FocusTarget;\n","import classnames from \"classnames\";\nimport {\n  useCallback,\n  DetailedHTMLProps,\n  HTMLAttributes,\n  useState,\n  PointerEvent as ReactPointerEvent,\n} from \"react\";\n\nconst ACTIVE_CLASSNAME = \"winamp-active\";\nconst LEFT_MOUSE_NUMBER = 0;\n\ninterface DetailedHTMLPropsAndMore\n  extends DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement> {\n  requireClicksOriginateLocally?: boolean;\n}\n\ntype Props = DetailedHTMLPropsAndMore;\n\n/**\n * Renders a `div` with an `.winamp-active` class if the element is being clicked/tapped.\n *\n * For now this mimicks the behavior of `:active`, but in the future we will use\n * this component to mimic Winamp's behavior, which is quite different than\n * `:active`.\n *\n * https://html.spec.whatwg.org/multipage/semantics-other.html#selector-active\n *\n * > An element is said to be being actively pointed at while the user indicates\n * > the element using a pointing device while that pointing device is in the\n * > \"down\" state (e.g. for a mouse, between the time the mouse button is pressed\n * > and the time it is depressed; for a finger in a multitouch environment, while\n * > the finger is touching the display surface).\n */\nexport default function WinampButton({\n  requireClicksOriginateLocally = true,\n  onPointerDown: originalOnPointerDown,\n  className,\n  ...htmlProps\n}: Props): JSX.Element {\n  const [active, setActive] = useState(false);\n\n  const onPointerDown = useCallback(\n    (e: ReactPointerEvent<HTMLDivElement>) => {\n      if (originalOnPointerDown != null) {\n        originalOnPointerDown(e);\n      }\n      // Release the pointer capture\n      // https://w3c.github.io/pointerevents/#implicit-pointer-capture\n      // https://w3c.github.io/pointerevents/#pointer-capture\n      if (!requireClicksOriginateLocally) {\n        // @ts-ignore\n        e.target.releasePointerCapture(e.pointerId);\n      }\n      // We only care about left mouse.\n      // -1 button comes on onPointerEnter so we allow that.\n      if (\n        e.nativeEvent.button !== -1 &&\n        e.nativeEvent.button !== LEFT_MOUSE_NUMBER\n      ) {\n        return;\n      }\n      setActive(true);\n\n      function onRelease(ee: PointerEvent) {\n        setActive(false);\n        document.removeEventListener(\"pointerup\", onRelease);\n      }\n      document.addEventListener(\"pointerup\", onRelease);\n    },\n    [originalOnPointerDown, requireClicksOriginateLocally]\n  );\n\n  // We watch for events onPointerEnter only when requireClicksOriginateLocally === false\n  // If the pointer enters the WinampButton area, and the pointer button is already down, trigger a PointerDown\n  const onPointerEnter = (e: React.PointerEvent<HTMLDivElement>) => {\n    if (e.buttons === 1) {\n      // Emit a CustomEvent pointerup to get the other buttons to release.\n      // Add a special -42 detail value so we can identify this event elsewhere and ignore if needed.\n      document.dispatchEvent(\n        new CustomEvent(\"pointerup\", {\n          detail: -42,\n        })\n      );\n      // Simulate a pointerdown on the current button\n      onPointerDown(e);\n    }\n  };\n\n  return (\n    <div\n      {...htmlProps}\n      className={classnames(className, { [ACTIVE_CLASSNAME]: active })}\n      onPointerDown={onPointerDown}\n      onPointerEnter={\n        requireClicksOriginateLocally ? undefined : onPointerEnter\n      }\n    />\n  );\n}\n","import * as React from \"react\";\nimport classnames from \"classnames\";\n\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport ResizeTarget from \"../ResizeTarget\";\nimport { WindowId } from \"../../types\";\nimport FocusTarget from \"../FocusTarget\";\nimport { useActionCreator, useTypedSelector } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\ninterface TextProps {\n  children: string;\n}\n\nconst Text = ({ children }: TextProps) => {\n  const letters = children.split(\"\");\n  return (\n    <React.Fragment>\n      {letters.map((letter, i) => (\n        <div\n          key={i}\n          className={`draggable gen-text-letter gen-text-${\n            letter === \" \" ? \"space\" : letter.toLowerCase()\n          }`}\n        />\n      ))}\n    </React.Fragment>\n  );\n};\n\nconst CHROME_WIDTH = 19;\nconst CHROME_HEIGHT = 34;\n\ninterface WindowSize {\n  width: number;\n  height: number;\n}\n\ninterface Props {\n  windowId: WindowId;\n  children: (windowSize: WindowSize) => React.ReactNode;\n  title: string;\n  onKeyDown?(e: KeyboardEvent): void;\n}\n\n// Named export for testing\nexport const GenWindow = ({ children, title, windowId, onKeyDown }: Props) => {\n  const setWindowSize = useActionCreator(Actions.setWindowSize);\n  const closeWindow = useActionCreator(Actions.closeWindow);\n  const getWindowPixelSize = useTypedSelector(Selectors.getWindowPixelSize);\n  const focusedWindow = useTypedSelector(Selectors.getFocusedWindow);\n  const getWindowSize = useTypedSelector(Selectors.getWindowSize);\n  const windowSize = getWindowSize(windowId);\n  const selected = focusedWindow === windowId;\n  const { width, height } = getWindowPixelSize(windowId);\n  return (\n    <FocusTarget windowId={windowId} onKeyDown={onKeyDown}>\n      <div\n        className={classnames(\"gen-window\", \"window\", { selected })}\n        style={{ width, height }}\n      >\n        <div className=\"gen-top draggable\">\n          <div className=\"gen-top-left draggable\" />\n          <div className=\"gen-top-left-fill draggable\" />\n          <div className=\"gen-top-left-end draggable\" />\n          <div className=\"gen-top-title draggable\">\n            <Text>{title}</Text>\n          </div>\n          <div className=\"gen-top-right-end draggable\" />\n          <div className=\"gen-top-right-fill draggable\" />\n          <div className=\"gen-top-right draggable\">\n            <WinampButton\n              className=\"gen-close selected\"\n              onClick={() => closeWindow(windowId)}\n            />\n          </div>\n        </div>\n        <div className=\"gen-middle\">\n          <div className=\"gen-middle-left draggable\">\n            <div className=\"gen-middle-left-bottom draggable\" />\n          </div>\n          <div className=\"gen-middle-center\">\n            {children({\n              width: width - CHROME_WIDTH,\n              height: height - CHROME_HEIGHT,\n            })}\n          </div>\n          <div className=\"gen-middle-right draggable\">\n            <div className=\"gen-middle-right-bottom draggable\" />\n          </div>\n        </div>\n        <div className=\"gen-bottom draggable\">\n          <div className=\"gen-bottom-left draggable\" />\n          <div className=\"gen-bottom-right draggable\">\n            <ResizeTarget\n              currentSize={windowSize}\n              setWindowSize={(size) => setWindowSize(windowId, size)}\n              id={\"gen-resize-target\"}\n            />\n          </div>\n        </div>\n      </div>\n    </FocusTarget>\n  );\n};\n\nexport default GenWindow;\n","import { useEffect, useState, useRef } from \"react\";\nimport { VISUALIZERS } from \"../../constants\";\nimport * as Selectors from \"../../selectors\";\nimport { TransitionType } from \"../../types\";\nimport { useTypedSelector } from \"../../hooks\";\n\ntype ButterchurnVisualizer = {\n  setRendererSize(width: number, height: number): void;\n  loadPreset(preset: Object, transitionTime: number): void;\n  launchSongTitleAnim(title: string): void;\n  render(): void;\n};\n\ninterface Props {\n  analyser: AnalyserNode;\n  height: number;\n  width: number;\n}\n\nconst TRANSITION_TYPE_DURATIONS = {\n  [TransitionType.DEFAULT]: 2.7,\n  [TransitionType.IMMEDIATE]: 0,\n  [TransitionType.USER_PRESET]: 5.7,\n};\n\nfunction Visualizer({ analyser, width, height }: Props) {\n  const visualizerStyle = useTypedSelector(Selectors.getVisualizerStyle);\n  const playing = useTypedSelector(Selectors.getMediaIsPlaying);\n  const butterchurn = useTypedSelector(Selectors.getButterchurn);\n  const trackTitle = useTypedSelector(Selectors.getCurrentTrackDisplayName);\n  const currentPreset = useTypedSelector(Selectors.getCurrentPreset);\n  const transitionType = useTypedSelector(Selectors.getPresetTransitionType);\n  const message = useTypedSelector(Selectors.getMilkdropMessage);\n\n  const isEnabledVisualizer = visualizerStyle === VISUALIZERS.MILKDROP;\n\n  const canvasRef = useRef(null);\n  const [visualizer, setVisualizer] = useState<ButterchurnVisualizer | null>(\n    null\n  );\n\n  // Initialize the visualizer\n  useEffect(() => {\n    if (canvasRef.current == null || butterchurn == null) {\n      return;\n    }\n    if (visualizer != null) {\n      // Note: The visualizer does not offer anyway to clean itself up. So, we\n      // don't offer any way to recreate it. So, if you swap out the analyser\n      // node, or the canvas, that change won't be respected.\n      return;\n    }\n    const _visualizer = butterchurn.createVisualizer(\n      analyser.context,\n      canvasRef.current,\n      {\n        width,\n        height,\n        meshWidth: 32,\n        meshHeight: 24,\n        pixelRatio: window.devicePixelRatio || 1,\n      }\n    );\n    _visualizer.connectAudio(analyser);\n    setVisualizer(_visualizer);\n  }, [butterchurn, analyser, height, width, visualizer]);\n\n  // Ensure render size stays up to date\n  useEffect(() => {\n    if (visualizer == null) {\n      return;\n    }\n    visualizer.setRendererSize(width, height);\n  }, [visualizer, width, height]);\n\n  // Load presets when they change\n  const hasLoadedPreset = useRef<boolean>(false);\n  useEffect(() => {\n    if (visualizer == null || currentPreset == null) {\n      return;\n    }\n    if (hasLoadedPreset.current) {\n      visualizer.loadPreset(\n        currentPreset,\n        TRANSITION_TYPE_DURATIONS[transitionType]\n      );\n    } else {\n      visualizer.loadPreset(\n        currentPreset,\n        TRANSITION_TYPE_DURATIONS[TransitionType.IMMEDIATE]\n      );\n      hasLoadedPreset.current = true;\n    }\n    // We don't want to trigger the transition if the transition type changes.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [visualizer, currentPreset]);\n\n  // Handle title animations\n  useEffect(() => {\n    if (visualizer == null || !trackTitle) {\n      return;\n    }\n    visualizer.launchSongTitleAnim(trackTitle);\n  }, [visualizer, trackTitle]);\n\n  const lastShownMessage = useRef<null | number>(null);\n\n  useEffect(() => {\n    if (visualizer == null || message == null) {\n      return;\n    }\n    if (\n      lastShownMessage.current == null ||\n      message.time > lastShownMessage.current\n    ) {\n      lastShownMessage.current = Date.now();\n      visualizer.launchSongTitleAnim(message.text);\n    }\n  }, [visualizer, message]);\n\n  const shouldAnimate = playing && isEnabledVisualizer;\n\n  // Kick off the animation loop\n  useEffect(() => {\n    if (!shouldAnimate || visualizer == null) {\n      return;\n    }\n    let animationFrameRequest: number | null = null;\n    const loop = () => {\n      visualizer.render();\n      animationFrameRequest = window.requestAnimationFrame(loop);\n    };\n    loop();\n    return () => {\n      if (animationFrameRequest != null) {\n        window.cancelAnimationFrame(animationFrameRequest);\n      }\n    };\n  }, [visualizer, shouldAnimate]);\n\n  return (\n    <canvas\n      height={height}\n      width={width}\n      style={{\n        height: \"100%\",\n        width: \"100%\",\n        display: isEnabledVisualizer ? \"block\" : \"none\",\n      }}\n      ref={canvasRef}\n    />\n  );\n}\n\nexport default Visualizer;\n","import * as React from \"react\";\n\ninterface Props {\n  innerRef?: (node: HTMLDivElement) => void;\n  children: React.ReactNode;\n}\n\nconst Background = (props: Props) => {\n  const { innerRef } = props;\n  return (\n    <div\n      ref={innerRef}\n      className=\"draggable\"\n      style={{\n        // This color will be used until Butterchurn is loaded\n        backgroundColor: \"#000\",\n        position: \"absolute\",\n        top: 0,\n        bottom: 0,\n        left: 0,\n        right: 0,\n        height: \"100%\",\n        width: \"100%\",\n      }}\n      tabIndex={0}\n    >\n      {props.children}\n    </div>\n  );\n};\n\nexport default Background;\n","import { useState, useCallback } from \"react\";\nimport { promptForFileReferences } from \"../../fileUtils\";\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport { clamp } from \"../../utils\";\nimport { TransitionType } from \"../../types\";\nimport {\n  useUnmountedRef,\n  useActionCreator,\n  useTypedSelector,\n} from \"../../hooks\";\n\nconst ENTRY_HEIGHT = 14;\nconst HEIGHT_PADDING = 15;\nconst WIDTH_PADDING = 20;\n\nconst LOADING_STYLE: React.CSSProperties = {\n  position: \"absolute\",\n  top: 0,\n  left: 0,\n  color: \"white\",\n  background: \"rgba(0.33, 0.33, 0.33, 0.33)\",\n};\n\nconst OUTER_WRAPPER_STYLE: React.CSSProperties = {\n  position: \"absolute\",\n  top: 0,\n  left: 0,\n  padding: \"15px 10px 0 10px\",\n};\n\nconst INNER_WRAPPER_STYLE: React.CSSProperties = {\n  display: \"inline-block\",\n  whiteSpace: \"nowrap\",\n  overflow: \"hidden\",\n  background: \"rgba(0, 0, 0, 0.815)\",\n  fontSize: \"12px\",\n};\n\ninterface Props {\n  height: number;\n  width: number;\n}\n\nfunction presetIndexFromListIndex(listIndex: number) {\n  return listIndex - 1;\n}\n\nfunction listIndexFromPresetIndex(listIndex: number) {\n  return listIndex + 1;\n}\n\nfunction PresetOverlay({ height, width }: Props) {\n  const presetKeys = useTypedSelector(Selectors.getPresetNames);\n  const currentPresetIndex = useTypedSelector(Selectors.getCurrentPresetIndex);\n  const requestPresetAtIndex = useActionCreator(Actions.requestPresetAtIndex);\n  const togglePresetOverlay = useActionCreator(Actions.togglePresetOverlay);\n  const appendPresetFileList = useActionCreator(Actions.appendPresetFileList);\n\n  const unmountedRef = useUnmountedRef();\n  const [selectedListIndex, setSelectedListIndex] = useState(() => {\n    if (currentPresetIndex != null) {\n      return listIndexFromPresetIndex(currentPresetIndex);\n    }\n    return 0;\n  });\n\n  // Number of presets, plus one for the \"Load Local Directory\" option, minus\n  // one to convert a length to an index.\n  const maxListIndex = presetKeys.length; // - 1 + 1;\n\n  const renderList = useCallback(() => {\n    const maxVisibleRows = Math.floor((height - HEIGHT_PADDING) / ENTRY_HEIGHT);\n    const rowsToShow = Math.floor(maxVisibleRows * 0.75); // Only fill 3/4 of the screen.\n    const [startIndex, endIndex] = getRangeCenteredOnIndex(\n      maxListIndex + 1, // Add one to convert an index to a length\n      rowsToShow,\n      selectedListIndex\n    );\n\n    const presetElms = [];\n    for (let i = startIndex; i <= endIndex; i++) {\n      const presetIndex = presetIndexFromListIndex(i);\n      const isSelected = i === selectedListIndex;\n      const isCurrent = presetIndex === currentPresetIndex;\n      let color: string;\n      if (isSelected) {\n        color = isCurrent ? \"#FFCC22\" : \"#FF5050\";\n      } else {\n        color = isCurrent ? \"#CCFF03\" : \"#CCCCCC\";\n      }\n      presetElms.push(\n        <li key={i} style={{ color, lineHeight: `${ENTRY_HEIGHT}px` }}>\n          {i === 0 ? \"Load Local Directory\" : presetKeys[presetIndex]}\n        </li>\n      );\n    }\n\n    return presetElms;\n  }, [currentPresetIndex, height, maxListIndex, presetKeys, selectedListIndex]);\n\n  const loadLocalDir = useCallback(async () => {\n    const fileReferences = await promptForFileReferences({ directory: true });\n    if (unmountedRef.current) {\n      return;\n    }\n    appendPresetFileList(fileReferences);\n  }, [appendPresetFileList, unmountedRef]);\n\n  const handleFocusedKeyboardInput = useCallback(\n    (e: React.KeyboardEvent<HTMLDivElement>) => {\n      switch (e.keyCode) {\n        case 38: // up arrow\n          setSelectedListIndex((value) => Math.max(value - 1, 0));\n          e.stopPropagation();\n          break;\n        case 40: // down arrow\n          setSelectedListIndex((value) => Math.min(value + 1, maxListIndex));\n          e.stopPropagation();\n          break;\n        case 13: // enter\n          if (selectedListIndex === 0) {\n            loadLocalDir();\n          } else {\n            requestPresetAtIndex(\n              presetIndexFromListIndex(selectedListIndex),\n              TransitionType.DEFAULT,\n              true\n            );\n          }\n          e.stopPropagation();\n          break;\n        case 27: // escape\n          togglePresetOverlay();\n          e.stopPropagation();\n          break;\n      }\n    },\n    [\n      loadLocalDir,\n      maxListIndex,\n      requestPresetAtIndex,\n      selectedListIndex,\n      togglePresetOverlay,\n    ]\n  );\n\n  const handleNode = useCallback((node: HTMLDivElement | null) => {\n    if (node != null && document.activeElement !== node) {\n      node.focus();\n    }\n  }, []);\n\n  if (presetKeys == null) {\n    return (\n      <div style={LOADING_STYLE}>\n        <span>Loading presets</span>\n      </div>\n    );\n  }\n  return (\n    <div\n      ref={handleNode}\n      tabIndex={-1}\n      style={OUTER_WRAPPER_STYLE}\n      onKeyDown={handleFocusedKeyboardInput}\n    >\n      <div\n        style={{\n          ...INNER_WRAPPER_STYLE,\n          width: width - 20 - WIDTH_PADDING,\n          maxHeight: height - HEIGHT_PADDING,\n        }}\n      >\n        <ul style={{ listStyleType: \"none\", padding: 0, margin: 0 }}>\n          {renderList()}\n        </ul>\n      </div>\n    </div>\n  );\n}\n\n// Find a tuple `[startIndex, endIndex]` representing start/end indexes into an\n// array of length `length`, that descripe a range of size up to `rangeSize`\n// where a best effort is made to center `indexToCenter`.\nexport function getRangeCenteredOnIndex(\n  length: number,\n  maxRangeSize: number,\n  indexToCenter: number\n): [number, number] {\n  const rangeSize = Math.min(length, maxRangeSize);\n  const halfRangeSize = Math.floor(rangeSize / 2);\n  const idealStartIndex = indexToCenter - halfRangeSize;\n  const startIndex = clamp(idealStartIndex, 0, length - rangeSize);\n  const endIndex = startIndex + rangeSize - 1;\n  return [startIndex, endIndex];\n}\nexport default PresetOverlay;\n","import { useCallback } from \"react\";\nimport { useActionCreator } from \"../hooks\";\nimport * as Actions from \"../actionCreators\";\nimport { WindowId } from \"../types\";\n\ninterface Coord {\n  x: number;\n  y: number;\n}\n\ninterface Props extends React.HTMLAttributes<HTMLDivElement> {\n  handleDrop(e: React.DragEvent<HTMLDivElement>, coord: Coord): void;\n  windowId: WindowId;\n}\n\nfunction supress(e: React.DragEvent<HTMLDivElement>) {\n  e.stopPropagation();\n  e.preventDefault();\n  e.dataTransfer.dropEffect = \"link\";\n  e.dataTransfer.effectAllowed = \"link\";\n}\n\nconst DropTarget = (props: Props) => {\n  const {\n    // eslint-disable-next-line no-shadow, no-unused-vars\n    handleDrop,\n    windowId,\n    ...passThroughProps\n  } = props;\n\n  const droppedFiles = useActionCreator(Actions.droppedFiles);\n\n  const onDrop = useCallback(\n    (e: React.DragEvent<HTMLDivElement>) => {\n      supress(e);\n      droppedFiles(e, windowId);\n      // TODO: We could probably move this coordinate logic into the playlist.\n      // I think that's the only place it gets used.\n      const { currentTarget } = e;\n      if (!(currentTarget instanceof Element)) {\n        return;\n      }\n\n      const { left: x, top: y } = currentTarget.getBoundingClientRect();\n      handleDrop(e, { x, y });\n    },\n    [handleDrop, droppedFiles, windowId]\n  );\n  return (\n    <div\n      {...passThroughProps}\n      onDragStart={supress}\n      onDragEnter={supress}\n      onDragOver={supress}\n      onDrop={onDrop}\n    />\n  );\n};\n\nexport default DropTarget;\n","import { useMemo, useEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport classnames from \"classnames\";\n\nimport { useTypedSelector } from \"../hooks\";\nimport * as Selectors from \"../selectors\";\n\ninterface PortalProps {\n  zIndex: number;\n  top: number;\n  left: number;\n  children: JSX.Element[] | JSX.Element;\n}\n\nconst Portal = (props: PortalProps) => {\n  const node: HTMLDivElement = useMemo(() => {\n    const div = document.createElement(\"div\");\n    div.id = \"webamp-context-menu\";\n    div.style.position = \"absolute\";\n    div.style.top = \"0\";\n    div.style.left = \"0\";\n    div.style.zIndex = String(props.zIndex + 1);\n    return div;\n  }, [props.zIndex]);\n\n  useEffect(() => {\n    document.body.appendChild(node);\n    return () => {\n      document.body.removeChild(node);\n    };\n  }, [node]);\n\n  const style: React.CSSProperties = {\n    top: props.top,\n    left: props.left,\n    position: \"absolute\",\n  };\n  return createPortal(<div style={style}>{props.children}</div>, node);\n};\n\nexport const Hr = () => (\n  <li className=\"hr\">\n    <hr />\n  </li>\n);\n\ninterface ParentProps {\n  label: string;\n  children: React.ReactNode;\n}\n\nexport const Parent = ({ children, label }: ParentProps) => (\n  <li className=\"parent\">\n    <ul>{children}</ul>\n    {label}\n  </li>\n);\n\ninterface LinkNodeProps {\n  label: string;\n  href: string;\n  target?: string;\n}\n\nexport const LinkNode = (props: LinkNodeProps) => (\n  <li>\n    <a {...props}>{props.label}</a>\n  </li>\n);\n\ninterface NodeProps {\n  label: string;\n  checked?: boolean;\n  hotkey?: string;\n  className?: string;\n  // TODO: Figure out how to do passthrough props\n  onClick?: () => void;\n}\n\nexport const Node = (props: NodeProps) => {\n  const { label, checked, className = \"\", ...passThroughProps } = props;\n  return (\n    <li className={classnames(className, { checked })} {...passThroughProps}>\n      {label}\n    </li>\n  );\n};\n\ninterface ContextMenuProps {\n  children: React.ReactNode;\n  offsetTop: number;\n  offsetLeft: number;\n  top?: boolean;\n  bottom?: boolean;\n  // TODO: Remove this. Just conditionally render in the parent.\n  selected: boolean;\n}\n\nexport default function ContextMenu({\n  children,\n  offsetTop,\n  offsetLeft,\n  top,\n  bottom,\n  selected,\n}: ContextMenuProps) {\n  const zIndex = useTypedSelector(Selectors.getZIndex);\n  if (!selected) {\n    return null;\n  }\n  return (\n    <Portal top={offsetTop} left={offsetLeft} zIndex={zIndex}>\n      <ul className={classnames(\"context-menu\", { top, bottom })}>\n        {children}\n      </ul>\n    </Portal>\n  );\n}\n","import { ReactNode, useState, useEffect, useCallback } from \"react\";\nimport ContextMenu from \"./ContextMenu\";\n\ninterface Props {\n  renderContents(): ReactNode;\n  children: ReactNode;\n}\n\n// Trigger a context menu at the user's cursor position when the user right\n// clicks within this component.\n// For a component that triggers relative to a given component when the user\n// left-clicks see `<ContextMenuTarget />`.\n\n// TODO: Consider using nested contexts to ensure we don't ever have multiple\n// non-nested context menus open at a time.\nexport default function ContextMenuWraper({\n  children,\n  renderContents,\n  ...passThroughProps\n}: Props) {\n  const [openPosition, setOpenPosition] = useState<{\n    x: number;\n    y: number;\n  } | null>(null);\n\n  const closeMenu = useCallback(() => {\n    setOpenPosition(null);\n  }, []);\n\n  const handleGlobalClick = useCallback(\n    (e: MouseEvent) => {\n      if (e.button !== 2) {\n        closeMenu();\n      }\n    },\n    [closeMenu]\n  );\n\n  const handleRightClick = useCallback(\n    (e: React.MouseEvent<HTMLDivElement>) => {\n      const { pageX, pageY } = e;\n      // TODO: We could do an initial render to see if the menu fits here\n      // and do a second render if it does not.\n      setOpenPosition({ x: pageX, y: pageY });\n      e.preventDefault();\n      e.stopPropagation();\n    },\n    []\n  );\n\n  // Add click-away listeners when window is open\n  useEffect(() => {\n    if (openPosition == null) {\n      return;\n    }\n    document.addEventListener(\"click\", handleGlobalClick);\n    document.body.addEventListener(\"contextmenu\", closeMenu);\n\n    return () => {\n      document.removeEventListener(\"click\", handleGlobalClick);\n      document.body.removeEventListener(\"contextmenu\", closeMenu);\n    };\n  }, [openPosition, closeMenu, handleGlobalClick]);\n\n  return (\n    <div\n      onContextMenu={handleRightClick}\n      style={{ width: \"100%\", height: \"100%\" }}\n      {...passThroughProps}\n    >\n      <ContextMenu\n        selected={openPosition != null}\n        offsetTop={openPosition?.y ?? 0}\n        offsetLeft={openPosition?.x ?? 0}\n      >\n        {renderContents()}\n      </ContextMenu>\n      {children}\n    </div>\n  );\n}\n","import { ReactNode } from \"react\";\nimport { Hr, Node } from \"../ContextMenu\";\nimport { WINDOWS } from \"../../constants\";\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport ContextMenuWraper from \"../ContextMenuWrapper\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\n\ninterface Props {\n  children: ReactNode;\n}\n\nconst MilkdropContextMenu = (props: Props) => {\n  const desktop = useTypedSelector(Selectors.getMilkdropDesktopEnabled);\n\n  const closeWindow = useActionCreator(Actions.closeWindow);\n  const toggleDesktop = useActionCreator(Actions.toggleMilkdropDesktop);\n  const toggleFullscreen = useActionCreator(Actions.toggleMilkdropFullscreen);\n  return (\n    <ContextMenuWraper\n      renderContents={() => {\n        return (\n          <>\n            <Node\n              onClick={toggleFullscreen}\n              label=\"Fullscreen\"\n              hotkey=\"Alt+Enter\"\n            />\n            <Node\n              onClick={toggleDesktop}\n              checked={desktop}\n              label=\"Desktop Mode\"\n              hotkey=\"Alt+D\"\n            />\n            <Hr />\n            <Node onClick={() => closeWindow(WINDOWS.MILKDROP)} label=\"Quit\" />\n          </>\n        );\n      }}\n    >\n      {props.children}\n    </ContextMenuWraper>\n  );\n};\n\nexport default MilkdropContextMenu;\n","import * as React from \"react\";\nimport { ReactNode } from \"react\";\nimport ReactDOM from \"react-dom\";\n\ninterface Props {\n  children: ReactNode;\n}\n\nconst Desktop = React.memo(({ children }: Props) => {\n  const [desktopNode] = React.useState(() => document.createElement(\"div\"));\n\n  React.useEffect(() => {\n    desktopNode.classList.add(\"webamp-desktop\");\n    document.body.appendChild(desktopNode);\n    return () => {\n      document.body.removeChild(desktopNode);\n    };\n  }, [desktopNode]);\n\n  return ReactDOM.createPortal(children, desktopNode);\n});\n\nexport default Desktop;\n","import { useEffect, useCallback } from \"react\";\nimport Fullscreen from \"../Fullscreen\";\nimport {\n  useWindowSize,\n  useScreenSize,\n  useTypedSelector,\n  useActionCreator,\n} from \"../../hooks\";\nimport GenWindow from \"../GenWindow\";\nimport { WINDOWS } from \"../../constants\";\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport { TransitionType } from \"../../types\";\nimport Visualizer from \"./Visualizer\";\n\nimport Background from \"./Background\";\nimport PresetOverlay from \"./PresetOverlay\";\nimport DropTarget from \"../DropTarget\";\nimport MilkdropContextMenu from \"./MilkdropContextMenu\";\nimport Desktop from \"./Desktop\";\n\nconst MILLISECONDS_BETWEEN_PRESET_TRANSITIONS = 15000;\n\ninterface Props {\n  analyser: AnalyserNode;\n}\n\nfunction useKeyHandler() {\n  const trackTitle = useTypedSelector(Selectors.getCurrentTrackDisplayName);\n\n  const selectNextPreset = useActionCreator(Actions.selectNextPreset);\n  const selectPreviousPreset = useActionCreator(Actions.selectPreviousPreset);\n  const toggleRandomize = useActionCreator(Actions.toggleRandomizePresets);\n  const togglePresetOverlay = useActionCreator(Actions.togglePresetOverlay);\n  const scheduleMilkdropMessage = useActionCreator(\n    Actions.scheduleMilkdropMessage\n  );\n  const toggleCycling = useActionCreator(Actions.togglePresetCycling);\n\n  // Handle keyboard events\n  return useCallback(\n    (e: KeyboardEvent) => {\n      switch (e.keyCode) {\n        case 32: // spacebar\n          selectNextPreset();\n          break;\n        case 8: // backspace\n          selectPreviousPreset(TransitionType.IMMEDIATE);\n          break;\n        case 72: // H\n          selectNextPreset(TransitionType.IMMEDIATE);\n          break;\n        case 82: // R\n          toggleRandomize();\n          break;\n        case 76: // L\n          togglePresetOverlay();\n          e.stopPropagation();\n          break;\n        case 84: // T\n          if (trackTitle != null) {\n            scheduleMilkdropMessage(trackTitle);\n          }\n          e.stopPropagation();\n          break;\n        case 145: // scroll lock\n        case 125: // F14 (scroll lock for OS X)\n          toggleCycling();\n          break;\n      }\n    },\n    [\n      scheduleMilkdropMessage,\n      selectNextPreset,\n      selectPreviousPreset,\n      toggleCycling,\n      togglePresetOverlay,\n      toggleRandomize,\n      trackTitle,\n    ]\n  );\n}\n\nfunction Milkdrop({ analyser }: Props) {\n  const desktop = useTypedSelector(Selectors.getMilkdropDesktopEnabled);\n  const fullscreen = useTypedSelector(Selectors.getMilkdropFullscreenEnabled);\n  const overlay = useTypedSelector(Selectors.getPresetOverlayOpen);\n  const presetsAreCycling = useTypedSelector(Selectors.getPresetsAreCycling);\n  const currentPresetIndex = useTypedSelector(Selectors.getCurrentPresetIndex);\n  const mediaIsPlaying = useTypedSelector(Selectors.getMediaIsPlaying);\n\n  const toggleFullscreen = useActionCreator(Actions.toggleMilkdropFullscreen);\n  const selectNextPreset = useActionCreator(Actions.selectNextPreset);\n  const handlePresetDrop = useActionCreator(Actions.handlePresetDrop);\n  const setFullscreen = useActionCreator(Actions.setMilkdropFullscreen);\n\n  const handleKeyDown = useKeyHandler();\n\n  // Cycle presets\n  useEffect(() => {\n    if (!presetsAreCycling || !mediaIsPlaying) {\n      return;\n    }\n    const intervalId = setInterval(\n      selectNextPreset,\n      MILLISECONDS_BETWEEN_PRESET_TRANSITIONS\n    );\n    return () => clearInterval(intervalId);\n  }, [presetsAreCycling, currentPresetIndex, mediaIsPlaying, selectNextPreset]);\n\n  const screenSize = useScreenSize();\n  const windowSize = useWindowSize();\n\n  if (desktop) {\n    return (\n      <Desktop>\n        <MilkdropContextMenu>\n          <Visualizer {...windowSize} analyser={analyser} />\n        </MilkdropContextMenu>\n      </Desktop>\n    );\n  }\n\n  return (\n    <GenWindow\n      title={\"Milkdrop\"}\n      windowId={WINDOWS.MILKDROP}\n      onKeyDown={handleKeyDown}\n    >\n      {(genWindowSize: { width: number; height: number }) => {\n        const size = fullscreen ? screenSize : genWindowSize;\n        return (\n          <MilkdropContextMenu>\n            <Background>\n              <DropTarget\n                windowId={WINDOWS.MILKDROP}\n                handleDrop={handlePresetDrop}\n              >\n                {overlay && <PresetOverlay {...size} />}\n                <Fullscreen enabled={fullscreen} onChange={setFullscreen}>\n                  <div onDoubleClick={toggleFullscreen}>\n                    <Visualizer {...size} analyser={analyser} />\n                  </div>\n                </Fullscreen>\n              </DropTarget>\n            </Background>\n          </MilkdropContextMenu>\n        );\n      }}\n    </GenWindow>\n  );\n}\nexport default Milkdrop;\n","import { Fragment } from \"react\";\nimport * as Actions from \"../actionCreators\";\nimport { Hr, Node } from \"./ContextMenu\";\nimport { useActionCreator } from \"../hooks\";\n\nconst PlaybackContextMenu = () => {\n  const previous = useActionCreator(Actions.previous);\n  const play = useActionCreator(Actions.play);\n  const pause = useActionCreator(Actions.pause);\n  const stop = useActionCreator(Actions.stop);\n  const next = useActionCreator(Actions.next);\n  const seekForward = useActionCreator(Actions.seekForward);\n  const seekBackward = useActionCreator(Actions.seekBackward);\n  const nextN = useActionCreator(Actions.nextN);\n  return (\n    <Fragment>\n      <Node label=\"Previous\" hotkey=\"Z\" onClick={previous} />\n      <Node label=\"Play\" hotkey=\"X\" onClick={play} />\n      <Node label=\"Pause\" hotkey=\"C\" onClick={pause} />\n      <Node label=\"Stop\" hotkey=\"V\" onClick={stop} />\n      <Node label=\"Next\" hotkey=\"B\" onClick={next} />\n      <Hr />\n      {/*\n    <Node label=\"Stop w/ fadeout\" hotkey=\"Shift+V\" />\n    <Node label=\"Stop after current\" hotkey=\"Ctrl+V\" />\n    */}\n      <Node\n        label=\"Back 5 seconds\"\n        hotkey=\"Left\"\n        onClick={() => seekBackward(5)}\n      />\n      <Node\n        label=\"Fwd 5 seconds\"\n        hotkey=\"Right\"\n        onClick={() => seekForward(5)}\n      />\n      {/*\n    <Node label=\"Start of list\" hotkey=\"Ctrl+Z\" />\n    */}\n      <Node label=\"10 tracks back\" hotkey=\"Num. 1\" onClick={() => nextN(-10)} />\n      <Node label=\"10 tracks fwd\" hotkey=\"Num. 3\" onClick={() => nextN(10)} />\n      {/*\n    <Hr />\n    <Node label=\"Jump to time\" hotkey=\"Ctrl+J\" />\n    <Node label=\"Jump to file\" hotkey=\"J\" />\n    */}\n    </Fragment>\n  );\n};\n\nexport default PlaybackContextMenu;\n","import * as Actions from \"../actionCreators\";\nimport * as Selectors from \"../selectors\";\nimport { Hr, Node, Parent } from \"./ContextMenu\";\nimport { useActionCreator, useTypedSelector } from \"../hooks\";\n\nconst SkinContextMenu = () => {\n  const loadDefaultSkin = useActionCreator(Actions.loadDefaultSkin);\n  const openSkinFileDialog = useActionCreator(Actions.openSkinFileDialog);\n  const setSkin = useActionCreator(Actions.setSkinFromUrl);\n\n  const availableSkins = useTypedSelector(Selectors.getAvaliableSkins);\n  return (\n    <Parent label=\"Skins\">\n      <Node onClick={openSkinFileDialog} label=\"Load Skin...\" />\n      <Hr />\n      <Node onClick={loadDefaultSkin} label={\"<Base Skin>\"} />\n      {availableSkins.map((skin) => (\n        <Node\n          key={skin.url}\n          onClick={() => setSkin(skin.url)}\n          label={skin.name}\n        />\n      ))}\n    </Parent>\n  );\n};\nexport default SkinContextMenu;\n","import { Hr, Node } from \"./ContextMenu\";\nimport SkinsContextMenu from \"./SkinsContextMenu\";\nimport * as Actions from \"../actionCreators\";\nimport * as Selectors from \"../selectors\";\nimport { TIME_MODE } from \"../constants\";\nimport { useActionCreator, useTypedSelector } from \"../hooks\";\n\nconst OptionsContextMenu = () => {\n  const toggleTimeMode = useActionCreator(Actions.toggleTimeMode);\n  const toggleDoubleSizeMode = useActionCreator(Actions.toggleDoubleSizeMode);\n  const toggleRepeat = useActionCreator(Actions.toggleRepeat);\n  const toggleShuffle = useActionCreator(Actions.toggleShuffle);\n\n  const doubled = useTypedSelector(Selectors.getDoubled);\n  const timeMode = useTypedSelector(Selectors.getTimeMode);\n  const repeat = useTypedSelector(Selectors.getRepeat);\n  const shuffle = useTypedSelector(Selectors.getShuffle);\n  return (\n    <>\n      {/* <Node label=\"Preferences...\" /> */}\n      <SkinsContextMenu />\n      <Hr />\n      <Node\n        label=\"Time elapsed\"\n        hotkey=\"(Ctrl+T toggles)\"\n        onClick={toggleTimeMode}\n        checked={timeMode === TIME_MODE.ELAPSED}\n      />\n      <Node\n        label=\"Time remaining\"\n        hotkey=\"(Ctrl+T toggles)\"\n        onClick={toggleTimeMode}\n        checked={timeMode === TIME_MODE.REMAINING}\n      />\n      {/* <Node label=\"Always On Top\" hotkey=\"Ctrl+A\" /> */}\n      <Node\n        label=\"Double Size\"\n        hotkey=\"Ctrl+D\"\n        onClick={toggleDoubleSizeMode}\n        checked={doubled}\n      />\n      {/* <Node label=\"EasyMove\" hotkey=\"Ctrl+E\" /> */}\n      <Hr />\n      <Node label=\"Repeat\" hotkey=\"R\" onClick={toggleRepeat} checked={repeat} />\n      <Node\n        label=\"Shuffle\"\n        hotkey=\"S\"\n        onClick={toggleShuffle}\n        checked={shuffle}\n      />\n    </>\n  );\n};\nexport default OptionsContextMenu;\n","import { memo, Fragment, useEffect } from \"react\";\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport { LOAD_STYLE } from \"../../constants\";\nimport { Hr, Node, Parent, LinkNode } from \"../ContextMenu\";\nimport PlaybackContextMenu from \"../PlaybackContextMenu\";\nimport OptionsContextMenu from \"../OptionsContextMenu\";\nimport SkinsContextMenu from \"../SkinsContextMenu\";\nimport { FilePicker, WindowId } from \"../../types\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\n\ninterface Props {\n  filePickers: FilePicker[];\n}\n\nconst MainContextMenu = memo(({ filePickers }: Props) => {\n  const networkConnected = useTypedSelector(Selectors.getNetworkConnected);\n  const genWindows = useTypedSelector(Selectors.getGenWindows);\n\n  const close = useActionCreator(Actions.close);\n  const openMediaFileDialog = useActionCreator(Actions.openMediaFileDialog);\n  const loadMediaFiles = useActionCreator(Actions.loadMediaFiles);\n  const toggleWindow = useActionCreator(Actions.toggleWindow);\n  const menuOpened = useActionCreator(() => ({\n    type: \"MAIN_CONTEXT_MENU_OPENED\",\n  }));\n  useEffect(() => {\n    menuOpened();\n  }, [menuOpened]);\n\n  return (\n    <Fragment>\n      <LinkNode\n        href=\"https://webamp.org/about\"\n        target=\"_blank\"\n        label=\"Webamp...\"\n      />\n      <Hr />\n      <Parent label=\"Play\">\n        <Node onClick={openMediaFileDialog} label=\"File...\" hotkey=\"L\" />\n        {filePickers != null &&\n          filePickers.map(\n            (picker, i) =>\n              (networkConnected || !picker.requiresNetwork) && (\n                <Node\n                  key={i}\n                  onClick={async () => {\n                    let files;\n                    try {\n                      files = await picker.filePicker();\n                    } catch (e) {\n                      console.error(\"Error loading from file picker\", e);\n                    }\n                    loadMediaFiles(files || [], LOAD_STYLE.PLAY);\n                  }}\n                  label={picker.contextMenuName}\n                />\n              )\n          )}\n      </Parent>\n      <Hr />\n      {Object.keys(genWindows).map((i) => (\n        <Node\n          key={i}\n          label={genWindows[i].title}\n          checked={genWindows[i].open}\n          onClick={() => toggleWindow(i as WindowId)}\n          hotkey={genWindows[i].hotkey}\n        />\n      ))}\n      <Hr />\n      <SkinsContextMenu />\n      <Hr />\n      <Parent label=\"Options\">\n        <OptionsContextMenu />\n      </Parent>\n      <Parent label=\"Playback\">\n        <PlaybackContextMenu />\n      </Parent>\n      <Hr />\n      <Node onClick={close} label=\"Exit\" />\n    </Fragment>\n  );\n});\n\nexport default MainContextMenu;\n","import { ReactNode, useCallback, useEffect, useState } from \"react\";\n\nimport * as SnapUtils from \"../snapUtils\";\nimport * as Selectors from \"../selectors\";\nimport * as Actions from \"../actionCreators\";\nimport { WindowInfo, WindowId, Box, Point } from \"../types\";\nimport { useTypedSelector, useActionCreator } from \"../hooks\";\nimport * as Utils from \"../utils\";\n\nconst abuts = (a: Box, b: Box) => {\n  // TODO: This is kinda a hack. They should really be touching, not just within snapping distance.\n  // Also, overlapping should not count.\n  const wouldMoveTo = SnapUtils.snap(a, b);\n  return wouldMoveTo.x !== undefined || wouldMoveTo.y !== undefined;\n};\n\ninterface Props {\n  windows: { [windowId: string]: ReactNode };\n}\n\ntype DraggingState = {\n  moving: WindowInfo[];\n  stationary: WindowInfo[];\n  boundingBox: Box;\n  mouseStart: Point;\n};\n\nfunction useHandleMouseDown(propsWindows: {\n  [windowId: string]: ReactNode;\n}): (\n  key: WindowId,\n  e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>\n) => void {\n  const windowsInfo = useTypedSelector(Selectors.getWindowsInfo);\n  const getWindowHidden = useTypedSelector(Selectors.getWindowHidden);\n  const browserWindowSize = useTypedSelector(Selectors.getBrowserWindowSize);\n  const updateWindowPositions = useActionCreator(Actions.updateWindowPositions);\n\n  const [draggingState, setDraggingState] = useState<DraggingState | null>(\n    null\n  );\n\n  // When the mouse is down, attach a listener to track mouse move events.\n  useEffect(() => {\n    if (draggingState == null) {\n      return;\n    }\n    const { boundingBox, moving, stationary, mouseStart } = draggingState;\n    const handleMouseMove = (ee: MouseEvent | TouchEvent) => {\n      const proposedDiff = {\n        x: Utils.getX(ee) - mouseStart.x,\n        y: Utils.getY(ee) - mouseStart.y,\n      };\n\n      const proposedWindows = moving.map((node) => ({\n        ...node,\n        ...SnapUtils.applyDiff(node, proposedDiff),\n      }));\n\n      const proposedBox = {\n        ...boundingBox,\n        ...SnapUtils.applyDiff(boundingBox, proposedDiff),\n      };\n\n      const snapDiff = SnapUtils.snapDiffManyToMany(\n        proposedWindows,\n        stationary\n      );\n\n      const withinDiff = SnapUtils.snapWithinDiff(\n        proposedBox,\n        browserWindowSize\n      );\n\n      const finalDiff = SnapUtils.applyMultipleDiffs(\n        proposedDiff,\n        snapDiff,\n        withinDiff\n      );\n\n      const windowPositionDiff: { [windowId: string]: Point } = {};\n      moving.forEach((w) => {\n        windowPositionDiff[w.key] = SnapUtils.applyDiff(w, finalDiff);\n      });\n\n      updateWindowPositions(windowPositionDiff, false);\n    };\n\n    function handleMouseUp() {\n      setDraggingState(null);\n    }\n\n    window.addEventListener(\"mouseup\", handleMouseUp);\n    window.addEventListener(\"touchend\", handleMouseUp);\n\n    window.addEventListener(\"mousemove\", handleMouseMove, { passive: false });\n    window.addEventListener(\"touchmove\", handleMouseMove, { passive: false });\n\n    return () => {\n      window.removeEventListener(\"mousemove\", handleMouseMove);\n      window.removeEventListener(\"touchmove\", handleMouseMove);\n      window.removeEventListener(\"mouseup\", handleMouseUp);\n      window.removeEventListener(\"touchend\", handleMouseUp);\n    };\n  }, [browserWindowSize, draggingState, updateWindowPositions]);\n\n  // Mouse down handler\n  return useCallback(\n    (\n      key: WindowId,\n      e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>\n    ) => {\n      if (!(e.target as HTMLElement).classList.contains(\"draggable\")) {\n        return;\n      }\n\n      const x = Utils.getX(e);\n      const y = Utils.getY(e);\n\n      if (getWindowHidden(key)) {\n        // The user may be clicking on full screen Milkdrop.\n        return;\n      }\n\n      const windows = windowsInfo.filter(\n        (w) => propsWindows[w.key] != null && !getWindowHidden(w.key)\n      );\n      const targetNode = windows.find((node) => node.key === key);\n      if (targetNode == null) {\n        throw new Error(`Tried to move a node that does not exist: ${key}`);\n      }\n\n      let movingSet = new Set([targetNode]);\n      // Only the main window brings other windows along.\n      if (key === \"main\") {\n        const findAllConnected = SnapUtils.traceConnection<WindowInfo>(abuts);\n        movingSet = findAllConnected(windows, targetNode);\n      }\n\n      const stationary = windows.filter((w) => !movingSet.has(w));\n      const moving = Array.from(movingSet);\n\n      const mouseStart = { x, y };\n\n      const boundingBox = SnapUtils.boundingBox(moving);\n      setDraggingState({ boundingBox, moving, stationary, mouseStart });\n    },\n    [getWindowHidden, propsWindows, windowsInfo]\n  );\n}\n\nexport default function WindowManager({ windows: propsWindows }: Props) {\n  const windowsInfo = useTypedSelector(Selectors.getWindowsInfo);\n  const setFocusedWindow = useActionCreator(Actions.setFocusedWindow);\n  const handleMouseDown = useHandleMouseDown(propsWindows);\n\n  const windows = windowsInfo.filter((w) => propsWindows[w.key]);\n\n  const onBlur = useCallback(\n    // I give up on trying to type things with `relatedTarget`.\n    (e: any) => {\n      const { currentTarget, relatedTarget } = e;\n      if (\n        currentTarget === relatedTarget ||\n        currentTarget.contains(relatedTarget)\n      ) {\n        return;\n      }\n      setFocusedWindow(null);\n    },\n    [setFocusedWindow]\n  );\n\n  return (\n    <>\n      {windows.map((w) => (\n        <div\n          key={w.key}\n          onBlur={onBlur}\n          onMouseDown={(e: React.MouseEvent<HTMLDivElement>) => {\n            handleMouseDown(w.key, e);\n          }}\n          onTouchStart={(e: React.TouchEvent<HTMLDivElement>) => {\n            handleMouseDown(w.key, e);\n          }}\n          style={{\n            position: \"absolute\",\n            top: 0,\n            left: 0,\n            transform: `translate(${w.x}px, ${w.y}px)`,\n            touchAction: \"none\",\n          }}\n        >\n          {propsWindows[w.key]}\n        </div>\n      ))}\n    </>\n  );\n}\n","/**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\nfunction basePropertyOf(object) {\n  return function(key) {\n    return object == null ? undefined : object[key];\n  };\n}\n\nmodule.exports = basePropertyOf;\n","var basePropertyOf = require('./_basePropertyOf');\n\n/** Used to map Latin Unicode letters to basic Latin letters. */\nvar deburredLetters = {\n  // Latin-1 Supplement block.\n  '\\xc0': 'A',  '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n  '\\xe0': 'a',  '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n  '\\xc7': 'C',  '\\xe7': 'c',\n  '\\xd0': 'D',  '\\xf0': 'd',\n  '\\xc8': 'E',  '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n  '\\xe8': 'e',  '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n  '\\xcc': 'I',  '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n  '\\xec': 'i',  '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n  '\\xd1': 'N',  '\\xf1': 'n',\n  '\\xd2': 'O',  '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n  '\\xf2': 'o',  '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n  '\\xd9': 'U',  '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n  '\\xf9': 'u',  '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n  '\\xdd': 'Y',  '\\xfd': 'y', '\\xff': 'y',\n  '\\xc6': 'Ae', '\\xe6': 'ae',\n  '\\xde': 'Th', '\\xfe': 'th',\n  '\\xdf': 'ss',\n  // Latin Extended-A block.\n  '\\u0100': 'A',  '\\u0102': 'A', '\\u0104': 'A',\n  '\\u0101': 'a',  '\\u0103': 'a', '\\u0105': 'a',\n  '\\u0106': 'C',  '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n  '\\u0107': 'c',  '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n  '\\u010e': 'D',  '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n  '\\u0112': 'E',  '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n  '\\u0113': 'e',  '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n  '\\u011c': 'G',  '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n  '\\u011d': 'g',  '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n  '\\u0124': 'H',  '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n  '\\u0128': 'I',  '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n  '\\u0129': 'i',  '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n  '\\u0134': 'J',  '\\u0135': 'j',\n  '\\u0136': 'K',  '\\u0137': 'k', '\\u0138': 'k',\n  '\\u0139': 'L',  '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n  '\\u013a': 'l',  '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n  '\\u0143': 'N',  '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n  '\\u0144': 'n',  '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n  '\\u014c': 'O',  '\\u014e': 'O', '\\u0150': 'O',\n  '\\u014d': 'o',  '\\u014f': 'o', '\\u0151': 'o',\n  '\\u0154': 'R',  '\\u0156': 'R', '\\u0158': 'R',\n  '\\u0155': 'r',  '\\u0157': 'r', '\\u0159': 'r',\n  '\\u015a': 'S',  '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n  '\\u015b': 's',  '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n  '\\u0162': 'T',  '\\u0164': 'T', '\\u0166': 'T',\n  '\\u0163': 't',  '\\u0165': 't', '\\u0167': 't',\n  '\\u0168': 'U',  '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n  '\\u0169': 'u',  '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n  '\\u0174': 'W',  '\\u0175': 'w',\n  '\\u0176': 'Y',  '\\u0177': 'y', '\\u0178': 'Y',\n  '\\u0179': 'Z',  '\\u017b': 'Z', '\\u017d': 'Z',\n  '\\u017a': 'z',  '\\u017c': 'z', '\\u017e': 'z',\n  '\\u0132': 'IJ', '\\u0133': 'ij',\n  '\\u0152': 'Oe', '\\u0153': 'oe',\n  '\\u0149': \"'n\", '\\u017f': 's'\n};\n\n/**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\nvar deburrLetter = basePropertyOf(deburredLetters);\n\nmodule.exports = deburrLetter;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n  var index = -1,\n      length = array == null ? 0 : array.length,\n      result = Array(length);\n\n  while (++index < length) {\n    result[index] = iteratee(array[index], index, array);\n  }\n  return result;\n}\n\nmodule.exports = arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n  var isOwn = hasOwnProperty.call(value, symToStringTag),\n      tag = value[symToStringTag];\n\n  try {\n    value[symToStringTag] = undefined;\n    var unmasked = true;\n  } catch (e) {}\n\n  var result = nativeObjectToString.call(value);\n  if (unmasked) {\n    if (isOwn) {\n      value[symToStringTag] = tag;\n    } else {\n      delete value[symToStringTag];\n    }\n  }\n  return result;\n}\n\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n  if (value == null) {\n    return value === undefined ? undefinedTag : nullTag;\n  }\n  return (symToStringTag && symToStringTag in Object(value))\n    ? getRawTag(value)\n    : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var Symbol = require('./_Symbol'),\n    arrayMap = require('./_arrayMap'),\n    isArray = require('./isArray'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n    symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n  // Exit early for strings to avoid a performance hit in some environments.\n  if (typeof value == 'string') {\n    return value;\n  }\n  if (isArray(value)) {\n    // Recursively convert values (susceptible to call stack limits).\n    return arrayMap(value, baseToString) + '';\n  }\n  if (isSymbol(value)) {\n    return symbolToString ? symbolToString.call(value) : '';\n  }\n  var result = (value + '');\n  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = baseToString;\n","var baseToString = require('./_baseToString');\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n  return value == null ? '' : baseToString(value);\n}\n\nmodule.exports = toString;\n","var deburrLetter = require('./_deburrLetter'),\n    toString = require('./toString');\n\n/** Used to match Latin Unicode letters (excluding mathematical operators). */\nvar reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n/** Used to compose unicode character classes. */\nvar rsComboMarksRange = '\\\\u0300-\\\\u036f',\n    reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n    rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange;\n\n/** Used to compose unicode capture groups. */\nvar rsCombo = '[' + rsComboRange + ']';\n\n/**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\nvar reComboMark = RegExp(rsCombo, 'g');\n\n/**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\nfunction deburr(string) {\n  string = toString(string);\n  return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n}\n\nmodule.exports = deburr;\n","import * as React from \"react\";\nimport deburr from \"lodash/deburr\";\n\ninterface Props extends React.HTMLAttributes<HTMLSpanElement> {\n  children: string | number;\n  className?: string;\n}\n\nexport const characterClassName = (char: string | number) =>\n  `character-${deburr(char.toString()).toLowerCase().charCodeAt(0)}`;\n\nconst Character = React.memo(\n  ({ children: char, className, ...passThrough }: Props) => {\n    return (\n      <span\n        {...passThrough}\n        className={`${className || \"\"} character ${characterClassName(char)}`}\n      >\n        {char}\n      </span>\n    );\n  }\n);\n\nexport default Character;\n","import { Fragment } from \"react\";\nimport classnames from \"classnames\";\nimport { getTimeObj } from \"../utils\";\nimport { TIME_MODE, MEDIA_STATUS } from \"../constants\";\nimport * as Actions from \"../actionCreators\";\nimport Character from \"./Character\";\nimport * as Selectors from \"../selectors\";\n\nimport { useTypedSelector, useActionCreator } from \"../hooks\";\n\n// Sigh. When the display is blinking (say when it's paused) we need to\n// alternate between the actual character and the space character. Not\n// Possible to do that in pure CSS with the background being dynamically generated.\n// All \"space\" characters is also how Winamp renders no content.\nconst Background = () => (\n  <Fragment>\n    {[1, 7, 12, 20, 25].map((left, i) => (\n      <Character\n        style={{ left }}\n        key={i}\n        className=\"background-character\"\n        children=\" \"\n      />\n    ))}\n  </Fragment>\n);\n\nconst MiniTime = () => {\n  const status = useTypedSelector(Selectors.getMediaStatus);\n  const duration = useTypedSelector(Selectors.getDuration);\n  const timeElapsed = useTypedSelector(Selectors.getTimeElapsed);\n  const timeMode = useTypedSelector(Selectors.getTimeMode);\n\n  const toggle = useActionCreator(Actions.toggleTimeMode);\n  let seconds = null;\n  // TODO: Clean this up: If stopped, just render the background, rather than\n  // rendering spaces twice.\n  if (status !== MEDIA_STATUS.STOPPED && duration != null) {\n    seconds =\n      timeMode === TIME_MODE.ELAPSED ? timeElapsed : duration - timeElapsed;\n  }\n\n  const timeObj = getTimeObj(seconds);\n  const showMinus =\n    timeMode === TIME_MODE.REMAINING && status !== MEDIA_STATUS.STOPPED;\n  return (\n    <div\n      onClick={toggle}\n      className={classnames(\"mini-time\", \"countdown\", {\n        blinking: status === MEDIA_STATUS.PAUSED,\n      })}\n    >\n      <Background />\n      <Character style={{ left: 1 }}>{showMinus ? \"-\" : \" \"}</Character>\n      <Character style={{ left: 7 }}>{timeObj.minutesFirstDigit}</Character>\n      <Character style={{ left: 12 }}>{timeObj.minutesSecondDigit}</Character>\n      <Character style={{ left: 20 }}>{timeObj.secondsFirstDigit}</Character>\n      <Character style={{ left: 25 }}>{timeObj.secondsSecondDigit}</Character>\n    </div>\n  );\n};\n\nexport default MiniTime;\n","import { useState } from \"react\";\nimport classnames from \"classnames\";\nimport WinampButton from \"./WinampButton\";\n\ninterface Props extends React.HTMLAttributes<HTMLDivElement> {\n  className?: string;\n  onPointerDown?: (e: React.PointerEvent<HTMLDivElement>) => void;\n}\n\n// Winamp has a strange behavior for the buttons at the top of the main window.\n// It shows through to the main background sprite until the first time that it's\n// clicked, and then it shows the dedicated undepressed sprite thereafter.\n// This component is an abstraction that tracks if a div has ever been clicked.\n// Look in `skinSelectors` for CSS selectors that look like `#some-id.clicked`\n// for examples of this functionality in use.\nfunction ClickedDiv(props: Props) {\n  const [clicked, setClicked] = useState(false);\n  function handlePointerDown(e: React.PointerEvent<HTMLDivElement>) {\n    setClicked(true);\n    if (props.onPointerDown) {\n      props.onPointerDown(e);\n    }\n  }\n  return (\n    <WinampButton\n      {...props}\n      className={classnames(props.className, { clicked })}\n      onPointerDown={handlePointerDown}\n    />\n  );\n}\n\nexport default ClickedDiv;\n","import { useState, useRef, useEffect, useMemo } from \"react\";\nimport ContextMenu from \"./ContextMenu\";\n\ninterface Props extends React.HTMLAttributes<HTMLDivElement> {\n  renderMenu: () => React.ReactNode;\n  top?: boolean;\n  bottom?: boolean;\n}\n\nfunction getNodeOffset(node: HTMLDivElement | null) {\n  if (node == null) {\n    return { top: 0, left: 0 };\n  }\n\n  const rect = node.getBoundingClientRect();\n  const scrollLeft = window.pageXOffset || document.documentElement!.scrollLeft;\n  const scrollTop = window.pageYOffset || document.documentElement!.scrollTop;\n  return { top: rect.top + scrollTop, left: rect.left + scrollLeft };\n}\n\n// Trigger a context menu relative to the child element when the user\n// left-clicks on the child.\n//\n// For a component that triggers relative to the user's cursor on right-click\n// see `<ContextMenuWrapper />`.\nfunction ContextMenuTarget(props: Props) {\n  const handleNode = useRef<HTMLDivElement>(null);\n  const [selected, setSelected] = useState(false);\n  useEffect(() => {\n    if (!selected) {\n      return;\n    }\n    function handleGlobalClick(e: MouseEvent) {\n      if (\n        selected &&\n        // Typescript does not believe that these click events are always fired on DOM nodes.\n        e.target instanceof Element &&\n        selected &&\n        // Not sure how, but it's possible for this to get called when handleNode is null/undefined.\n        // https://sentry.io/share/issue/2066cd79f21e4f279791319f4d2ea35d/\n        handleNode.current &&\n        !handleNode.current.contains(e.target!)\n      ) {\n        setSelected(false);\n      }\n    }\n    document.addEventListener(\"click\", handleGlobalClick);\n    return () => {\n      document.removeEventListener(\"click\", handleGlobalClick);\n    };\n  }, [selected]);\n\n  const offset = useMemo(() => {\n    return selected\n      ? getNodeOffset(handleNode.current)\n      : // Kinda awkward. This is a nonsense return value since we only use\n        //this value when we are selected.\n        { top: 0, left: 0 };\n  }, [selected]);\n\n  const { renderMenu, children, top, bottom, ...passThroughProps } = props;\n  return (\n    <div {...passThroughProps}>\n      <div\n        className=\"handle\"\n        style={{ width: \"100%\", height: \"100%\" }}\n        ref={handleNode}\n        onClick={() => setSelected(!selected)}\n      >\n        {children}\n      </div>\n      <ContextMenu\n        selected={selected}\n        offsetTop={offset.top}\n        offsetLeft={offset.left}\n        top={top}\n        bottom={bottom}\n      >\n        {renderMenu()}\n      </ContextMenu>\n    </div>\n  );\n}\n\nexport default ContextMenuTarget;\n","// The Web Audio API's FFT is bad, so this exists now!\n// Taken from https://github.com/WACUP/vis_classic/tree/master/FFTNullsoft\n\nexport class FFT {\n  private bitrevtable: number[];\n  private envelope: Float32Array;\n  private equalize: Float32Array;\n  private temp1: Float32Array;\n  private temp2: Float32Array;\n  private cossintable: Float32Array[];\n\n  // Constants\n  private static readonly TWO_PI = 6.2831853; // 2 * Math.PI\n  private static readonly HALF_PI = 1.5707963268; // Math.PI / 2\n\n  constructor() {\n    // Assuming these are your hardcoded values:\n    const samplesIn = 1024; // hardcoded value\n    const samplesOut = 512; // hardcoded value\n    const bEqualize = true; // hardcoded value\n    const envelopePower = 1.0; // hardcoded value\n    const mode = false; // hardcoded value\n\n    const NFREQ = samplesOut * 2;\n\n    // Initialize the tables and arrays with hardcoded values\n    this.bitrevtable = this.initBitRevTable(NFREQ);\n    this.cossintable = this.initCosSinTable(NFREQ);\n\n    this.envelope = this.initEnvelopeTable(samplesIn, envelopePower);\n    this.equalize = this.initEqualizeTable(NFREQ, mode);\n\n    this.temp1 = new Float32Array(NFREQ);\n    this.temp2 = new Float32Array(NFREQ);\n  }\n\n  private initEqualizeTable(NFREQ: number, mode: boolean): Float32Array {\n    const equalize = new Float32Array(NFREQ / 2);\n    let bias = 0.04; // FFT.INITIAL_BIAS\n\n    for (let i = 0; i < NFREQ / 2; i++) {\n      const invHalfNfreq = (9.0 - bias) / (NFREQ / 2);\n      equalize[i] = Math.log10(1.0 + bias + (i + 1) * invHalfNfreq);\n      bias /= 1.0025; // FFT.BIAS_DECAY_RATE\n    }\n\n    return equalize;\n  }\n\n  private initEnvelopeTable(samplesIn: number, power: number): Float32Array {\n    const mult = (1.0 / samplesIn) * FFT.TWO_PI;\n    const envelope = new Float32Array(samplesIn);\n\n    for (let i = 0; i < samplesIn; i++) {\n      envelope[i] = Math.pow(\n        0.5 + 0.5 * Math.sin(i * mult - FFT.HALF_PI),\n        power\n      );\n    }\n\n    return envelope;\n  }\n\n  private initBitRevTable(NFREQ: number): number[] {\n    const bitrevtable = new Array(NFREQ);\n\n    for (let i = 0; i < NFREQ; i++) {\n      bitrevtable[i] = i;\n    }\n\n    for (let i = 0, j = 0; i < NFREQ; i++) {\n      if (j > i) {\n        const temp = bitrevtable[i];\n        bitrevtable[i] = bitrevtable[j];\n        bitrevtable[j] = temp;\n      }\n\n      let m = NFREQ >> 1;\n      while (m >= 1 && j >= m) {\n        j -= m;\n        m >>= 1;\n      }\n\n      j += m;\n    }\n\n    return bitrevtable;\n  }\n\n  private initCosSinTable(NFREQ: number): Float32Array[] {\n    const cossintable: Float32Array[] = [];\n    let dftsize = 2;\n\n    while (dftsize <= NFREQ) {\n      const theta = (-2.0 * Math.PI) / dftsize;\n      cossintable.push(new Float32Array([Math.cos(theta), Math.sin(theta)]));\n      dftsize <<= 1;\n    }\n\n    return cossintable;\n  }\n\n  public timeToFrequencyDomain(\n    inWavedata: Float32Array,\n    outSpectraldata: Float32Array\n  ): void {\n    if (!this.temp1 || !this.temp2 || !this.cossintable) return;\n    // Converts time-domain samples from inWavedata[]\n    //   into frequency-domain samples in outSpectraldata[].\n    // The array lengths are the two parameters to Init().\n\n    // The last sample of the output data will represent the frequency\n    //   that is 1/4th of the input sampling rate.  For example,\n    //   if the input wave data is sampled at 44,100 Hz, then the last\n    //   sample of the spectral data output will represent the frequency\n    //   11,025 Hz.  The first sample will be 0 Hz; the frequencies of\n    //   the rest of the samples vary linearly in between.\n    // Note that since human hearing is limited to the range 200 - 20,000\n    //   Hz.  200 is a low bass hum; 20,000 is an ear-piercing high shriek.\n    // Each time the frequency doubles, that sounds like going up an octave.\n    //   That means that the difference between 200 and 300 Hz is FAR more\n    //   than the difference between 5000 and 5100, for example!\n    // So, when trying to analyze bass, you'll want to look at (probably)\n    //   the 200-800 Hz range; whereas for treble, you'll want the 1,400 -\n    //   11,025 Hz range.\n    // If you want to get 3 bands, try it this way:\n    //   a) 11,025 / 200 = 55.125\n    //   b) to get the number of octaves between 200 and 11,025 Hz, solve for n:\n    //          2^n = 55.125\n    //          n = log 55.125 / log 2\n    //          n = 5.785\n    //   c) so each band should represent 5.785/3 = 1.928 octaves; the ranges are:\n    //          1) 200 - 200*2^1.928                    or  200  - 761   Hz\n    //          2) 200*2^1.928 - 200*2^(1.928*2)        or  761  - 2897  Hz\n    //          3) 200*2^(1.928*2) - 200*2^(1.928*3)    or  2897 - 11025 Hz\n\n    // A simple sine-wave-based envelope is convolved with the waveform\n    //   data before doing the FFT, to emeliorate the bad frequency response\n    //   of a square (i.e. nonexistent) filter.\n\n    // You might want to slightly damp (blur) the input if your signal isn't\n    //   of a very high quality, to reduce high-frequency noise that would\n    //   otherwise show up in the output.\n\n    // code should be smart enough to call Init before this function\n    //if (!bitrevtable) return;\n    //if (!temp1) return;\n    //if (!temp2) return;\n    //if (!cossintable) return;\n\n    // 1. set up input to the fft\n    for (let i = 0; i < this.temp1.length; i++) {\n      const idx = this.bitrevtable[i];\n      if (idx < inWavedata.length) {\n        this.temp1[i] =\n          inWavedata[idx] * (this.envelope ? this.envelope[idx] : 1);\n      } else {\n        this.temp1[i] = 0;\n      }\n    }\n    this.temp2.fill(0);\n\n    // 2. Perform FFT\n    const real = this.temp1;\n    const imag = this.temp2;\n    let dftsize = 2;\n    let t = 0;\n\n    while (dftsize <= this.temp1.length) {\n      const wpr = this.cossintable[t][0];\n      const wpi = this.cossintable[t][1];\n      let wr = 1.0;\n      let wi = 0.0;\n      const hdftsize = dftsize >> 1;\n\n      for (let m = 0; m < hdftsize; m += 1) {\n        for (let i = m; i < this.temp1.length; i += dftsize) {\n          const j = i + hdftsize;\n          const tempr = wr * real[j] - wi * imag[j];\n          const tempi = wr * imag[j] + wi * real[j];\n          real[j] = real[i] - tempr;\n          imag[j] = imag[i] - tempi;\n          real[i] += tempr;\n          imag[i] += tempi;\n        }\n\n        const wtemp = wr;\n        wr = wr * wpr - wi * wpi;\n        wi = wi * wpr + wtemp * wpi;\n      }\n\n      dftsize <<= 1;\n      ++t;\n    }\n\n    // 3. take the magnitude & equalize it (on a log10 scale) for output\n    for (let i = 0; i < outSpectraldata.length; i++) {\n      outSpectraldata[i] =\n        Math.sqrt(real[i] * real[i] + imag[i] * imag[i]) *\n        (this.equalize ? this.equalize[i] : 1);\n    }\n  }\n}\n","import { FFT } from \"./FFTNullsoft\";\n\nexport interface Vis {\n  canvas: HTMLCanvasElement;\n  colors: string[];\n  analyser?: AnalyserNode;\n  oscStyle?: \"dots\" | \"solid\" | \"lines\";\n  bandwidth?: \"wide\" | \"thin\";\n  coloring?: \"fire\" | \"line\" | \"normal\";\n  peaks?: boolean;\n  saFalloff?: \"slower\" | \"slow\" | \"moderate\" | \"fast\" | \"faster\";\n  saPeakFalloff?: \"slower\" | \"slow\" | \"moderate\" | \"fast\" | \"faster\";\n  sa?: \"analyzer\" | \"oscilloscope\" | \"none\";\n  renderHeight: number;\n  smallVis?: boolean;\n  pixelDensity?: number;\n  doubled?: boolean;\n  isMWOpen?: boolean;\n}\n\n/**\n * Base class of Visualizer (animation frame renderer engine)\n */\nabstract class VisPaintHandler {\n  _vis: Vis;\n  _ctx: CanvasRenderingContext2D | null;\n\n  constructor(vis: Vis) {\n    this._vis = vis;\n    this._ctx = vis.canvas!.getContext(\"2d\");\n  }\n\n  /**\n   * Attempt to build cached bitmaps for later use while rendering a frame.\n   * Purpose: fast rendering in animation loop\n   */\n  prepare() {}\n\n  /**\n   * Called once per frame rendering\n   */\n  paintFrame() {}\n\n  /**\n   * Attempt to cleanup cached bitmaps\n   */\n  dispose() {}\n}\n\n/**\n * Feeds audio data to the FFT.\n * @param analyser The AnalyserNode used to get the audio data.\n * @param fft The FFTNullsoft instance from the PaintHandler.\n */\nfunction processFFT(\n  analyser: AnalyserNode,\n  fft: FFT,\n  inWaveData: Float32Array,\n  outSpectralData: Float32Array\n): void {\n  const dataArray = new Uint8Array(1024);\n\n  analyser.getByteTimeDomainData(dataArray);\n  for (let i = 0; i < dataArray.length; i++) {\n    inWaveData[i] = (dataArray[i] - 128) / 24;\n  }\n  fft.timeToFrequencyDomain(inWaveData, outSpectralData);\n}\n\n//? =============================== BAR PAINTER ===============================\ntype PaintFrameFunction = () => void;\ntype PaintBarFunction = (\n  ctx: CanvasRenderingContext2D,\n  x1: number,\n  x2: number,\n  barHeight: number,\n  peakHeight: number\n) => void;\n\nexport class BarPaintHandler extends VisPaintHandler {\n  private saPeaks: Int16Array;\n  private saData2: Float32Array;\n  private saData: Int16Array;\n  private saFalloff: Float32Array;\n  private sample: Float32Array;\n  private barPeak: Int16Array;\n  private chunk: number;\n  private uVar12: number;\n  private falloff: number;\n  private peakFalloff: number;\n  private pushDown: number;\n\n  private inWaveData = new Float32Array(1024);\n  private outSpectralData = new Float32Array(512);\n\n  _analyser: AnalyserNode;\n  _fft: FFT;\n  _color: string = \"rgb(255,255,255)\";\n  _colorPeak: string = \"rgb(255,255,255)\";\n  // Off-screen canvas for pre-rendering a single bar gradient\n  _bar: HTMLCanvasElement = document.createElement(\"canvas\");\n  _peak: HTMLCanvasElement = document.createElement(\"canvas\");\n  _16h: HTMLCanvasElement = document.createElement(\"canvas\"); // non-stretched\n  _bufferLength: number;\n  _dataArray: Uint8Array;\n  colorssmall: string[];\n  colorssmall2: string[];\n  _renderHeight: number;\n  _smallVis: boolean;\n  _pixelDensity: number;\n  _doubled: boolean;\n  _isMWOpen: boolean;\n  paintBar: PaintBarFunction;\n  paintFrame: PaintFrameFunction;\n\n  constructor(vis: Vis) {\n    super(vis);\n    this._analyser = this._vis.analyser!;\n    this._fft = new FFT();\n    this._bufferLength = this._analyser.frequencyBinCount;\n    this._dataArray = new Uint8Array(this._bufferLength);\n\n    this._renderHeight = vis.renderHeight!;\n    this._smallVis = vis.smallVis!;\n    this._pixelDensity = vis.pixelDensity!;\n    this._doubled = vis.doubled!;\n    this._isMWOpen = vis.isMWOpen!;\n\n    this.colorssmall = [\n      vis.colors[17],\n      vis.colors[14],\n      vis.colors[11],\n      vis.colors[8],\n      vis.colors[4],\n    ];\n    this.colorssmall2 = [\n      vis.colors[17],\n      vis.colors[16],\n      vis.colors[14],\n      vis.colors[13],\n      vis.colors[11],\n      vis.colors[10],\n      vis.colors[8],\n      vis.colors[7],\n      vis.colors[5],\n      vis.colors[4],\n    ];\n\n    this._16h.width = 1;\n    this._16h.height = 16;\n    this._16h.setAttribute(\"width\", \"75\");\n    this._16h.setAttribute(\"height\", \"16\");\n\n    // draws the analyzer and handles changing the bandwidth correctly\n    this.paintFrame = this.paintAnalyzer.bind(this);\n\n    this.saPeaks = new Int16Array(76).fill(0);\n    this.saData2 = new Float32Array(76).fill(0);\n    this.saData = new Int16Array(76).fill(0);\n    this.saFalloff = new Float32Array(76).fill(0);\n    this.sample = new Float32Array(76).fill(0);\n    this.barPeak = new Int16Array(76).fill(0); // Needs to be specified as Int16 else the peaks don't behave as they should\n    this.chunk = 0;\n    this.uVar12 = 0;\n    this.pushDown = 0;\n\n    switch (this._vis.coloring) {\n      case \"fire\":\n        this.paintBar = this.paintBarFire.bind(this);\n        break;\n      case \"line\":\n        this.paintBar = this.paintBarLine.bind(this);\n        break;\n      default:\n        this.paintBar = this.paintBarNormal.bind(this);\n        break;\n    }\n\n    switch (this._vis.saFalloff) {\n      case \"slower\":\n        this.falloff = 3;\n        break;\n      case \"slow\":\n        this.falloff = 6;\n        break;\n      case \"moderate\":\n        this.falloff = 12;\n        break;\n      case \"fast\":\n        this.falloff = 16;\n        break;\n      case \"faster\":\n        this.falloff = 32;\n        break;\n      default:\n        this.falloff = 12;\n        break;\n    }\n\n    switch (this._vis.saPeakFalloff) {\n      case \"slower\":\n        this.peakFalloff = 1.05;\n        break;\n      case \"slow\":\n        this.peakFalloff = 1.1;\n        break;\n      case \"moderate\":\n        this.peakFalloff = 1.2;\n        break;\n      case \"fast\":\n        this.peakFalloff = 1.4;\n        break;\n      case \"faster\":\n        this.peakFalloff = 1.6;\n        break;\n      default:\n        this.peakFalloff = 1.1;\n        break;\n    }\n  }\n\n  prepare() {\n    const vis = this._vis;\n\n    //? paint peak\n    this._peak.height = 1;\n    this._peak.width = 1;\n    let ctx = this._peak.getContext(\"2d\")!;\n    ctx.fillStyle = vis.colors[23];\n    ctx.fillRect(0, 0, 1, 1);\n\n    if (this._vis.smallVis) {\n      this.pushDown = 0;\n    } else if (this._vis.doubled && !this._vis.isMWOpen) {\n      this.pushDown = 2;\n    } else if (this._vis.doubled) {\n      this.pushDown = 0;\n    } else {\n      this.pushDown = 2;\n    }\n\n    //? paint bar\n    this._bar.height = 16;\n    this._bar.width = 1;\n    this._bar.setAttribute(\"width\", \"1\");\n    this._bar.setAttribute(\"height\", \"16\");\n    ctx = this._bar.getContext(\"2d\")!;\n    for (let y = 0; y < 16; y++) {\n      if (this._vis.pixelDensity === 2 && this._vis.smallVis) {\n        ctx.fillStyle = this.colorssmall2[-y + 9];\n      } else {\n        ctx.fillStyle = this._vis.smallVis\n          ? this.colorssmall[-y + 4]\n          : vis.colors[2 - this.pushDown - -y];\n      }\n      ctx.fillRect(0, y, 1, y + 1);\n    }\n  }\n\n  /**\n   * ⬜⬜⬜ ⬜⬜⬜\n   * 🟧🟧🟧\n   * 🟫🟫🟫 🟧🟧🟧\n   * 🟫🟫🟫 🟫🟫🟫\n   * 🟫🟫🟫 🟫🟫🟫 ⬜⬜⬜\n   * 🟫🟫🟫 🟫🟫🟫 🟧🟧🟧\n   * 🟫🟫🟫 🟫🟫🟫 🟫🟫🟫\n   * 1 bar = multiple pixels\n   */\n  /**\n   * ⬜⬜\n   * 🟧\n   * 🟫🟧\n   * 🟫🟫⬜⬜\n   * 🟫🟫🟧\n   * 🟫🟫🟫🟧⬜\n   * 🟫🟫🟫🟫🟧\n   * drawing 1pixel width bars\n   */\n  paintAnalyzer() {\n    if (!this._ctx) return;\n    const ctx = this._ctx;\n    const w = ctx.canvas.width;\n    const h = ctx.canvas.height;\n    ctx.fillStyle = this._color;\n\n    const maxFreqIndex = 512;\n    const logMaxFreqIndex = Math.log10(maxFreqIndex);\n    const logMinFreqIndex = 0;\n\n    let targetSize: number;\n    let maxHeight: number;\n    let maxWidth: number;\n    if (this._vis.pixelDensity === 2) {\n      targetSize = 75;\n      maxHeight = 10;\n    } else {\n      targetSize = this._vis.smallVis ? 40 : 75;\n      maxHeight = this._vis.smallVis ? 5 : 15;\n    }\n\n    processFFT(\n      this._analyser,\n      this._fft,\n      this.inWaveData,\n      this.outSpectralData\n    );\n\n    if (this._vis.smallVis) {\n      if (this._vis.pixelDensity === 2) {\n        maxWidth = 75; // this is not 37*2, but if this was 74, we'd be missing a pixel\n        // someone here at Nullsoft screwed up...? or thought 74 didn't look good, I don't know.\n      } else {\n        maxWidth = 37;\n      }\n    } else {\n      maxWidth = 75;\n    }\n\n    // This is to roughly emulate the Analyzer in more modern versions of Winamp.\n    // 2.x and early 5.x versions had a completely linear(?) FFT, if so desired the\n    // scale variable can be set to 0.0\n\n    // This factor controls the scaling from linear to logarithmic.\n    // scale = 0.0 -> fully linear scaling\n    // scale = 1.0 -> fully logarithmic scaling\n    const scale = 0.91; // Adjust this value between 0.0 and 1.0\n    for (let x = 0; x < targetSize; x++) {\n      // Linear interpolation between linear and log scaling\n      const linearIndex = (x / (targetSize - 1)) * (maxFreqIndex - 1);\n      const logScaledIndex =\n        logMinFreqIndex +\n        ((logMaxFreqIndex - logMinFreqIndex) * x) / (targetSize - 1);\n      const logIndex = Math.pow(10, logScaledIndex);\n\n      // Interpolating between linear and logarithmic scaling\n      const scaledIndex = (1.0 - scale) * linearIndex + scale * logIndex;\n\n      let index1 = Math.floor(scaledIndex);\n      let index2 = Math.ceil(scaledIndex);\n\n      if (index1 >= maxFreqIndex) {\n        index1 = maxFreqIndex - 1;\n      }\n      if (index2 >= maxFreqIndex) {\n        index2 = maxFreqIndex - 1;\n      }\n\n      if (index1 === index2) {\n        this.sample[x] = this.outSpectralData[index1];\n      } else {\n        const frac2 = scaledIndex - index1;\n        const frac1 = 1.0 - frac2;\n        this.sample[x] =\n          frac1 * this.outSpectralData[index1] +\n          frac2 * this.outSpectralData[index2];\n      }\n    }\n\n    for (let x = 0; x < maxWidth; x++) {\n      // Based on research of looking at Winamp 5.666 and 2.63 executables\n\n      // if our bandwidth is \"wide\", chunk every 5 instances of the bars,\n      // add them together and display them\n      if (this._vis.bandwidth === \"wide\") {\n        this.chunk = this.chunk = x & 0xfffffffc;\n        this.uVar12 =\n          (this.sample[this.chunk + 3] +\n            this.sample[this.chunk + 2] +\n            this.sample[this.chunk + 1] +\n            this.sample[this.chunk]) /\n          4;\n        this.saData[x] = this.uVar12;\n      } else {\n        this.chunk = 0;\n        this.saData[x] = this.sample[x];\n      }\n\n      if (this.saData[x] >= maxHeight) {\n        this.saData[x] = maxHeight;\n      }\n\n      // prevents saPeaks going out of bounds when switching to windowShade mode\n      if (this.saPeaks[x] >= maxHeight * 256) {\n        this.saPeaks[x] = maxHeight * 256;\n      }\n\n      this.saFalloff[x] -= this.falloff / 16.0;\n      // Possible bar fall off values are\n      // 3, 6, 12, 16, 32\n      // Should there ever be some form of config options,\n      // these should be used\n      // 12 is the default of a fresh new Winamp installation\n\n      if (this.saFalloff[x] <= this.saData[x]) {\n        this.saFalloff[x] = this.saData[x];\n      }\n\n      if (this.saPeaks[x] <= Math.round(this.saFalloff[x] * 256)) {\n        this.saPeaks[x] = this.saFalloff[x] * 256;\n        this.saData2[x] = 3.0;\n      }\n\n      this.barPeak[x] = this.saPeaks[x] / 256;\n\n      this.saPeaks[x] -= Math.round(this.saData2[x]);\n      this.saData2[x] *= this.peakFalloff;\n      // Possible peak fall off values are\n      // 1.05f, 1.1f, 1.2f, 1.4f, 1.6f\n      // 1.1f is the default of a fresh new Winamp installation\n      if (this.saPeaks[x] <= 0) {\n        this.saPeaks[x] = 0;\n      }\n\n      if (this._vis.smallVis) {\n        // SORRY NOTHING\n        // ironically enough the peaks do appear at the bottom here\n      } else if (Math.round(this.barPeak[x]) < 1) {\n        this.barPeak[x] = -3; // Push peaks outside the viewable area, this isn't a Modern Skin!\n      }\n\n      // skip rendering if x is 4\n      if (!(x === this.chunk + 3 && this._vis.bandwidth === \"wide\")) {\n        this.paintBar(\n          ctx,\n          x,\n          x,\n          Math.round(this.saFalloff[x]) - this.pushDown,\n          this.barPeak[x] + 1 - this.pushDown\n        );\n      }\n    }\n  }\n\n  /**\n   * 🟥\n   * 🟧🟧\n   * 🟨🟨🟨\n   * 🟩🟩🟩🟩\n   */\n  paintBarNormal(\n    ctx: CanvasRenderingContext2D,\n    x: number,\n    x2: number,\n    barHeight: number,\n    peakHeight: number\n  ) {\n    const h = ctx.canvas.height;\n    const y = h - barHeight;\n\n    ctx.drawImage(this._bar, 0, y, 1, h - y, x, y, x2 - x + 1, h - y);\n\n    if (this._vis.peaks) {\n      const peakY = h - peakHeight;\n      ctx.drawImage(this._peak, 0, 0, 1, 1, x, peakY, x2 - x + 1, 1);\n    }\n  }\n\n  /**\n   * 🟥\n   * 🟧🟥\n   * 🟨🟧🟥\n   * 🟩🟨🟧🟥\n   */\n  paintBarFire(\n    ctx: CanvasRenderingContext2D,\n    x: number,\n    x2: number,\n    barHeight: number,\n    peakHeight: number\n  ) {\n    const h = ctx.canvas.height;\n    const y = h - barHeight;\n\n    ctx.drawImage(\n      this._bar,\n      0,\n      0,\n      this._bar.width,\n      h - y,\n      x,\n      y,\n      x2 - x + 1,\n      h - y\n    );\n\n    if (this._vis.peaks) {\n      const peakY = h - peakHeight;\n      ctx.drawImage(this._peak, 0, 0, 1, 1, x, peakY, x2 - x + 1, 1);\n    }\n  }\n\n  /**\n   * 🟥\n   * 🟥🟧\n   * 🟥🟧🟨\n   * 🟥🟧🟨🟩\n   */\n  paintBarLine(\n    ctx: CanvasRenderingContext2D,\n    x: number,\n    x2: number,\n    barHeight: number,\n    peakHeight: number\n  ) {\n    const h = ctx.canvas.height;\n    const y = h - barHeight;\n    // FIXME: Line drawing is currently Fire mode!\n\n    ctx.drawImage(\n      this._bar,\n      0, // sx\n      0, // sy\n      this._bar.width, // sw\n      h - y, // sh\n      x,\n      y, //  dx,dy\n      x2 - x + 1, //dw\n      h - y //dh\n    );\n\n    if (this._vis.peaks) {\n      const peakY = h - peakHeight;\n      ctx.drawImage(this._peak, 0, 0, 1, 1, x, peakY, x2 - x + 1, 1);\n    }\n  }\n}\n\n//? =============================== OSCILLOSCOPE PAINTER ===============================\n\ntype PaintWavFunction = (x: number, y: number) => void;\n\nfunction slice1st(\n  dataArray: Uint8Array,\n  sliceWidth: number,\n  sliceNumber: number\n): number {\n  const start = sliceWidth * sliceNumber;\n  return dataArray[start];\n}\n\nexport class WavePaintHandler extends VisPaintHandler {\n  private pushDown: number;\n\n  _analyser: AnalyserNode;\n  _bufferLength: number;\n  _lastX: number = 0;\n  _lastY: number = 0;\n  _dataArray: Uint8Array;\n  _pixelRatio: number; // 1 or 2\n  // Off-screen canvas for drawing perfect pixel (no blurred lines)\n  _bar: HTMLCanvasElement = document.createElement(\"canvas\");\n  _16h: HTMLCanvasElement = document.createElement(\"canvas\"); // non-stretched\n  paintWav: PaintWavFunction;\n\n  constructor(vis: Vis) {\n    super(vis);\n    this._analyser = this._vis.analyser!;\n    this._bufferLength = this._analyser.fftSize;\n    this._dataArray = new Uint8Array(this._bufferLength);\n\n    this._16h.width = 1;\n    this._16h.height = 16;\n    this._16h.setAttribute(\"width\", \"75\");\n    this._16h.setAttribute(\"height\", \"16\");\n\n    //* see https://developer.mozilla.org/en-US/docs/Web/API/Window/devicePixelRatio#monitoring_screen_resolution_or_zoom_level_changes\n    this._pixelRatio = window.devicePixelRatio || 1;\n\n    // draws the oscilloscope and handles overly complex operations\n    // in relation to oscilloscope style and main window states\n    this.paintWav = this.paintOscilloscope.bind(this);\n    this.pushDown = 0;\n  }\n\n  prepare() {\n    const vis = this._vis;\n\n    //? paint bar\n    this._bar.width = 1;\n    this._bar.height = 5;\n    this._bar.setAttribute(\"width\", \"1\");\n    this._bar.setAttribute(\"height\", \"5\");\n    const ctx = this._bar.getContext(\"2d\");\n    if (ctx) {\n      for (let y = 0; y < 5; y++) {\n        ctx.fillStyle = vis.colors[18 + y];\n        ctx.fillRect(0, y, 1, y + 1);\n      }\n    }\n\n    // @ts-ignore\n    this._ctx.imageSmoothingEnabled = false;\n    // @ts-ignore\n    this._ctx.mozImageSmoothingEnabled = false;\n    // @ts-ignore\n    this._ctx.webkitImageSmoothingEnabled = false;\n    // @ts-ignore\n    this._ctx.msImageSmoothingEnabled = false;\n  }\n\n  paintFrame() {\n    if (!this._ctx) return;\n    this._analyser.getByteTimeDomainData(this._dataArray);\n    this._dataArray = this._dataArray.slice(0, 576);\n    const bandwidth = this._dataArray.length;\n\n    const width = this._ctx!.canvas.width;\n    const height = this._ctx!.canvas.height;\n\n    // width would technically be correct, but if the main window is\n    // in windowshade mode, it is set to 150, making sliceWidth look\n    // wrong in that mode, concerning the oscilloscope\n    const sliceWidth = Math.floor(bandwidth / 75);\n\n    // Iterate over the width of the canvas in fixed 75 pixels.\n    for (let j = 0; j <= 75; j++) {\n      const amplitude = slice1st(this._dataArray, sliceWidth, j);\n      this.paintWav(j, amplitude);\n    }\n  }\n\n  /**\n   *\n   * @param y 0..5\n   * @returns value in use for coloring stuff in\n   */\n  colorIndex(y: number): number {\n    if (this._vis.smallVis) {\n      return 0;\n    }\n    if (y >= 14) return 4;\n    if (y >= 12) return 3;\n    if (y >= 10) return 2;\n    if (y >= 8) return 1;\n    if (y >= 6) return 0;\n    if (y >= 4) return 1;\n    if (y >= 2) return 2;\n    if (y >= 0) return 3;\n    return 3;\n  }\n\n  paintOscilloscope(x: number, y: number) {\n    // we skip rendering of the oscilloscope if we are in windowShade mode\n    // previously the renderWidth variable in Vis.tsx scaled down the width\n    // of the canvas, but i didn't really like the idea since we squished\n    // down the result of y to fit within 35/75 pixels, winamp doesn't\n    // squish it's audio data down in the x axis, resulting in only\n    // getting a small portion of what we hear, they did it, so do we\n    if (this._vis.smallVis && this._vis.doubled) {\n      if (x >= 75) {\n        // SORRY NOTHING\n        return;\n      }\n    } else if (x >= (this._vis.smallVis ? 38 : 75)) {\n      // SORRY NOTHING\n      return;\n    }\n    // pushes vis down if not double size, winamp does this\n    if (this._vis.smallVis) {\n      this.pushDown = 0;\n    } else if (this._vis.doubled && !this._vis.isMWOpen) {\n      this.pushDown = 2;\n    } else if (this._vis.doubled) {\n      this.pushDown = 0;\n    } else {\n      this.pushDown = 2;\n    }\n\n    // rounds y down to the nearest int\n    // before that even happens, y is scaled down and then doubled again (could've done * 8\n    // but i feel this makes more sense to me)\n    // y is then adjusted downward to be in the center of the scope\n    y = Math.round((y / 16) * 2) - 9;\n\n    // adjusts the center point of y if we are in windowShade mode, and if pixelDensity is 2\n    // where it's adjusted further to give you the fullest view possible in that small window\n    // else we leave y as is\n    let yadjust: number;\n    if (this._vis.pixelDensity === 2) yadjust = 3;\n    else yadjust = 5;\n    y = this._vis.smallVis ? y - yadjust : y;\n\n    // scales down the already scaled down result of y to 0..10 or 0..5, depending on\n    // if pixelDensity returns 2, this serves the purpose of avoiding full sending\n    // y to that really tiny space we have there\n    if (this._vis.smallVis && this._vis.pixelDensity === 2) {\n      y = Math.round(((y + 11) / 16) * 10) - 5;\n    } else if (this._vis.smallVis) {\n      y = Math.round(((y + 11) / 16) * 5) - 2;\n    }\n\n    // clamp y to be within a certain range, here it would be 0..10 if both windowShade and pixelDensity apply\n    // else we clamp y to 0..15 or 0..3, depending on renderHeight\n    if (this._vis.smallVis && this._vis.pixelDensity === 2) {\n      y = y < 0 ? 0 : y > 10 - 1 ? 10 - 1 : y;\n    } else {\n      y =\n        y < 0\n          ? 0\n          : y > this._vis.renderHeight - 1\n          ? this._vis.renderHeight - 1\n          : y;\n    }\n    const v = y;\n    if (x === 0) this._lastY = y;\n\n    let top = y;\n    let bottom = this._lastY;\n    this._lastY = y;\n\n    if (this._vis.oscStyle === \"solid\") {\n      if (this._vis.pixelDensity === 2) {\n        if (y >= (this._vis.smallVis ? 5 : 8)) {\n          top = this._vis.smallVis ? 5 : 8;\n          bottom = y;\n        } else {\n          top = y;\n          bottom = this._vis.smallVis ? 5 : 7;\n        }\n        if (x === 0 && this._vis.smallVis) {\n          // why? i dont know!!\n          top = y;\n          bottom = y;\n        }\n      } else {\n        if (y >= (this._vis.smallVis ? 2 : 8)) {\n          top = this._vis.smallVis ? 2 : 8;\n          bottom = y;\n        } else {\n          top = y;\n          bottom = this._vis.smallVis ? 2 : 7;\n        }\n        if (x === 0 && this._vis.smallVis) {\n          // why? i dont know!!\n          top = y;\n          bottom = y;\n        }\n      }\n    } else if (this._vis.oscStyle === \"dots\") {\n      top = y;\n      bottom = y;\n    } else if (bottom < top) {\n      [bottom, top] = [top, bottom];\n      if (this._vis.smallVis) {\n        // SORRY NOTHING\n        // really just removes the smoother line descending thing that's present in the Main Window\n      } else {\n        top++; //top++, that emulates Winamp's/WACUP's OSC behavior correctly\n      }\n    }\n\n    for (y = top; y <= bottom; y++) {\n      this._ctx!.drawImage(\n        this._bar,\n        0,\n        this.colorIndex(v), // sx,sy\n        1,\n        1, // sw,sh\n        x,\n        y + this.pushDown,\n        1,\n        1 //dw,dh\n      );\n    }\n  }\n}\n\nexport class NoVisualizerHandler extends VisPaintHandler {\n  cleared: boolean = false;\n  prepare() {\n    this.cleared = false;\n  }\n\n  paintFrame() {\n    if (!this._ctx) return;\n    const ctx = this._ctx;\n    this.cleared = true;\n  }\n}\n","import React, { useMemo, useState, useLayoutEffect, useEffect } from \"react\";\n\nimport * as Actions from \"../actionCreators\";\nimport * as Selectors from \"../selectors\";\nimport { useTypedSelector, useActionCreator } from \"../hooks\";\nimport { VISUALIZERS, MEDIA_STATUS } from \"../constants\";\n\nimport {\n  Vis as IVis,\n  BarPaintHandler,\n  WavePaintHandler,\n  NoVisualizerHandler,\n} from \"./VisPainter\";\n\ntype Props = {\n  analyser: AnalyserNode;\n};\n\n// Pre-render the background grid\nfunction preRenderBg(\n  width: number,\n  height: number,\n  bgColor: string,\n  fgColor: string,\n  windowShade: boolean,\n  pixelDensity: number\n): HTMLCanvasElement {\n  // Off-screen canvas for pre-rendering the background\n  const bgCanvas = document.createElement(\"canvas\");\n  bgCanvas.width = width;\n  bgCanvas.height = height;\n  const distance = 2 * pixelDensity;\n\n  const bgCanvasCtx = bgCanvas.getContext(\"2d\");\n  if (bgCanvasCtx == null) {\n    throw new Error(\"Could not construct canvas context\");\n  }\n  bgCanvasCtx.fillStyle = bgColor;\n  bgCanvasCtx.fillRect(0, 0, width, height);\n  if (!windowShade) {\n    bgCanvasCtx.fillStyle = fgColor;\n    for (let x = 0; x < width; x += distance) {\n      for (let y = pixelDensity; y < height; y += distance) {\n        bgCanvasCtx.fillRect(x, y, pixelDensity, pixelDensity);\n      }\n    }\n  }\n  return bgCanvas;\n}\n\nexport default function Vis({ analyser }: Props) {\n  useLayoutEffect(() => {\n    analyser.fftSize = 1024;\n  }, [analyser, analyser.fftSize]);\n\n  const colors = useTypedSelector(Selectors.getSkinColors);\n  const mode = useTypedSelector(Selectors.getVisualizerStyle);\n  const audioStatus = useTypedSelector(Selectors.getMediaStatus);\n  const getWindowShade = useTypedSelector(Selectors.getWindowShade);\n  const getWindowOpen = useTypedSelector(Selectors.getWindowOpen);\n  const isMWOpen = getWindowOpen(\"main\");\n  const doubled = useTypedSelector(Selectors.getDoubled);\n  const toggleVisualizerStyle = useActionCreator(Actions.toggleVisualizerStyle);\n  const windowShade = getWindowShade(\"main\");\n\n  const smallVis = windowShade && isMWOpen;\n  const renderHeight = smallVis ? 5 : 16;\n  const renderWidth = 76;\n  const pixelDensity = doubled && smallVis ? 2 : 1;\n  const renderWidthBG = !isMWOpen\n    ? renderWidth\n    : windowShade\n    ? doubled\n      ? renderWidth\n      : 38\n    : renderWidth * pixelDensity;\n\n  const width = renderWidth * pixelDensity;\n  const height = renderHeight * pixelDensity;\n\n  const bgCanvas = useMemo(() => {\n    return preRenderBg(\n      renderWidthBG,\n      height,\n      colors[0],\n      colors[1],\n      Boolean(windowShade),\n      pixelDensity\n    );\n  }, [colors, height, renderWidthBG, windowShade, pixelDensity]);\n\n  const [canvas, setCanvas] = useState<HTMLCanvasElement | null>(null);\n\n  //? painter administration\n  const painter = useMemo(() => {\n    if (!canvas) return null;\n\n    const vis: IVis = {\n      canvas,\n      colors,\n      analyser,\n      oscStyle: \"lines\",\n      bandwidth: \"wide\",\n      coloring: \"normal\",\n      peaks: true,\n      saFalloff: \"moderate\",\n      saPeakFalloff: \"slow\",\n      sa: \"analyzer\", // unused, but hopefully will be used in the future for providing config options\n      renderHeight,\n      smallVis,\n      pixelDensity,\n      doubled,\n      isMWOpen,\n    };\n\n    switch (mode) {\n      case VISUALIZERS.OSCILLOSCOPE:\n        return new WavePaintHandler(vis);\n      case VISUALIZERS.BAR:\n        return new BarPaintHandler(vis);\n      case VISUALIZERS.NONE:\n        return new NoVisualizerHandler(vis);\n      default:\n        return new NoVisualizerHandler(vis);\n    }\n  }, [\n    analyser,\n    canvas,\n    mode,\n    colors,\n    renderHeight,\n    smallVis,\n    pixelDensity,\n    doubled,\n    isMWOpen,\n  ]);\n\n  // reacts to changes in doublesize mode\n  useEffect(() => {\n    if (canvas && painter) {\n      const canvasCtx = canvas.getContext(\"2d\");\n      if (canvasCtx) {\n        painter.prepare();\n        // wipes the canvas clean if playback is paused and doubled is changing\n        if (audioStatus === MEDIA_STATUS.PAUSED) {\n          canvasCtx.clearRect(0, 0, canvas.width, canvas.height);\n        }\n      }\n    }\n    // TODO: Double check expected behavior when pause state changes.\n    // Here we ignore the audioStatus dependency because we don't\n    // want to clear the canvas when the audio is paused.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [doubled, canvas, painter]);\n\n  useEffect(() => {\n    if (canvas == null || painter == null) {\n      return;\n    }\n\n    const canvasCtx = canvas.getContext(\"2d\");\n    if (canvasCtx == null) {\n      return;\n    }\n    canvasCtx.imageSmoothingEnabled = false;\n\n    let animationRequest: number | null = null;\n\n    const loop = () => {\n      canvasCtx.drawImage(bgCanvas, 0, 0);\n      painter.paintFrame();\n      animationRequest = window.requestAnimationFrame(loop);\n    };\n\n    if (audioStatus === MEDIA_STATUS.PLAYING) {\n      if (mode === VISUALIZERS.NONE) {\n        canvasCtx.clearRect(0, 0, renderWidthBG, height);\n      } else {\n        loop();\n      }\n    }\n\n    return () => {\n      if (animationRequest !== null) {\n        window.cancelAnimationFrame(animationRequest);\n      }\n    };\n  }, [audioStatus, canvas, painter, bgCanvas, renderWidthBG, height, mode]);\n\n  if (audioStatus === MEDIA_STATUS.STOPPED) {\n    return null;\n  }\n\n  return (\n    <canvas\n      id=\"visualizer\"\n      ref={setCanvas}\n      style={{ width: renderWidth, height: renderHeight }}\n      width={width}\n      height={height}\n      onClick={toggleVisualizerStyle}\n    />\n  );\n}\n","import { memo } from \"react\";\nimport * as Actions from \"../../actionCreators\";\nimport { useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nconst ActionButtons = memo(() => {\n  const previous = useActionCreator(Actions.previous);\n  const play = useActionCreator(Actions.play);\n  const pause = useActionCreator(Actions.pause);\n  const next = useActionCreator(Actions.next);\n  const stop = useActionCreator(Actions.stop);\n  return (\n    <div className=\"actions\">\n      <WinampButton id=\"previous\" onClick={previous} title=\"Previous Track\" />\n      <WinampButton id=\"play\" onClick={play} title=\"Play\" />\n      <WinampButton id=\"pause\" onClick={pause} title=\"Pause\" />\n      <WinampButton id=\"stop\" onClick={stop} title=\"Stop\" />\n      <WinampButton id=\"next\" onClick={next} title=\"Next Track\" />\n    </div>\n  );\n});\n\nexport default ActionButtons;\n","import * as React from \"react\";\n\nimport * as Actions from \"../actionCreators\";\nimport * as Selectors from \"../selectors\";\nimport { useTypedSelector, useActionCreator } from \"../hooks\";\n\ninterface Props {\n  id?: string;\n  style?: React.CSSProperties;\n  className?: string;\n}\n\nexport default function Balance({ style, className, id }: Props) {\n  const balance = useTypedSelector(Selectors.getBalance);\n  const setBalance = useActionCreator(Actions.setBalance);\n  const setFocus = useActionCreator(Actions.setFocus);\n  const unsetFocus = useActionCreator(Actions.unsetFocus);\n  return (\n    <input\n      id={id}\n      className={className}\n      type=\"range\"\n      min=\"-100\"\n      max=\"100\"\n      step=\"1\"\n      value={balance}\n      style={{ ...style, touchAction: \"none\" }}\n      onChange={(e) => setBalance(Number(e.target.value))}\n      onPointerDown={() => setFocus(\"balance\")}\n      onPointerUp={unsetFocus}\n      title=\"Balance\"\n    />\n  );\n}\n","import { memo } from \"react\";\n\nimport Balance from \"../Balance\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector } from \"../../hooks\";\n\nexport const offsetFromBalance = (balance: number): number => {\n  const percent = Math.abs(balance) / 100;\n  const sprite = Math.floor(percent * 27);\n  const offset = sprite * 15;\n  return offset;\n};\n\nconst MainBalance = memo(() => {\n  const balance = useTypedSelector(Selectors.getBalance);\n  return (\n    <Balance\n      id=\"balance\"\n      style={{ backgroundPosition: `0 -${offsetFromBalance(balance)}px` }}\n    />\n  );\n});\n\nexport default MainBalance;\n","import { memo } from \"react\";\nimport ClickedDiv from \"../ClickedDiv\";\nimport { useActionCreator } from \"../../hooks\";\n\nimport * as Actions from \"../../actionCreators\";\n\nconst Close = memo(() => {\n  const close = useActionCreator(Actions.close);\n  return <ClickedDiv id=\"close\" onClick={close} title=\"Close\" />;\n});\n\nexport default Close;\n","import { memo } from \"react\";\nimport classnames from \"classnames\";\n\nimport * as Actions from \"../../actionCreators\";\nimport { Action, Thunk } from \"../../types\";\nimport OptionsContextMenu from \"../OptionsContextMenu\";\nimport ContextMenuTarget from \"../ContextMenuTarget\";\nimport { useActionCreator, useTypedSelector } from \"../../hooks\";\nimport * as Selectors from \"../../selectors\";\n\nfunction setFocusDouble(): Action {\n  return Actions.setFocus(\"double\");\n}\n\nfunction mouseUp(): Thunk {\n  return (dispatch) => {\n    dispatch(Actions.toggleDoubleSizeMode());\n    dispatch(Actions.unsetFocus());\n  };\n}\n\nconst ClutterBar = memo(() => {\n  const handleMouseDown = useActionCreator(setFocusDouble);\n  const handleMouseUp = useActionCreator(mouseUp);\n  const doubled = useTypedSelector(Selectors.getDoubled);\n  return (\n    <div id=\"clutter-bar\">\n      <ContextMenuTarget bottom renderMenu={() => <OptionsContextMenu />}>\n        <div id=\"button-o\" />\n      </ContextMenuTarget>\n      <div id=\"button-a\" />\n      <div id=\"button-i\" />\n      <div\n        title={\"Toggle Doublesize Mode\"}\n        id=\"button-d\"\n        className={classnames({ selected: doubled })}\n        onPointerUp={handleMouseUp}\n        onPointerDown={(e) => {\n          e.preventDefault();\n          handleMouseDown();\n        }}\n      />\n      <div id=\"button-v\" />\n    </div>\n  );\n});\n\nexport default ClutterBar;\n","import { memo } from \"react\";\n\nimport * as Actions from \"../../actionCreators\";\nimport { useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nconst Eject = memo(() => {\n  const openMediaFileDialog = useActionCreator(Actions.openMediaFileDialog);\n  return (\n    <WinampButton\n      id=\"eject\"\n      onClick={openMediaFileDialog}\n      title=\"Open File(s)\"\n    />\n  );\n});\n\nexport default Eject;\n","import { memo } from \"react\";\nimport classnames from \"classnames\";\n\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport { useActionCreator, useTypedSelector } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nfunction toggleEqualizer() {\n  return Actions.toggleWindow(\"equalizer\");\n}\n\nconst EqToggleButton = memo(() => {\n  const handleClick = useActionCreator(toggleEqualizer);\n  const windowOpen = useTypedSelector(Selectors.getWindowOpen)(\"equalizer\");\n  return (\n    <WinampButton\n      id=\"equalizer-button\"\n      className={classnames({ selected: windowOpen })}\n      onClick={handleClick}\n      title=\"Toggle Graphical Equalizer\"\n    />\n  );\n});\n\nexport default EqToggleButton;\n","import { memo } from \"react\";\nimport classnames from \"classnames\";\n\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nfunction togglePlaylist() {\n  return Actions.toggleWindow(\"playlist\");\n}\n\nconst PlaylistToggleButton = memo(() => {\n  const selected = useTypedSelector(Selectors.getWindowOpen)(\"playlist\");\n  const handleClick = useActionCreator(togglePlaylist);\n  return (\n    <WinampButton\n      id=\"playlist-button\"\n      className={classnames({ selected })}\n      onClick={handleClick}\n      title=\"Toggle Playlist Editor\"\n    />\n  );\n});\n\nexport default PlaylistToggleButton;\n","import { memo, Fragment } from \"react\";\nimport Character from \"./Character\";\n\ninterface Props {\n  children: string;\n}\n\nconst CharacterString = memo((props: Props) => {\n  const text = `${props.children}` || \"\";\n  const chars = text.split(\"\");\n  return (\n    <Fragment>\n      {chars.map((character, index) => (\n        <Character key={index + character}>{character}</Character>\n      ))}\n    </Fragment>\n  );\n});\n\nexport default CharacterString;\n","import { memo } from \"react\";\n\nimport CharacterString from \"../CharacterString\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector } from \"../../hooks\";\n\nconst Kbps = memo(() => {\n  const kbps = useTypedSelector(Selectors.getKbps);\n  return (\n    <div id=\"kbps\">\n      <CharacterString>{kbps || \"\"}</CharacterString>\n    </div>\n  );\n});\n\nexport default Kbps;\n","import { memo } from \"react\";\n\nimport CharacterString from \"../CharacterString\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector } from \"../../hooks\";\n\nconst Khz = memo(() => {\n  const khz = useTypedSelector(Selectors.getKhz);\n  return (\n    <div id=\"khz\">\n      <CharacterString>{khz || \"\"}</CharacterString>\n    </div>\n  );\n});\n\nexport default Khz;\n","// Single line text display that can animate and hold multiple registers\n// Knows how to display various modes like tracking, volume, balance, etc.\nimport * as React from \"react\";\nimport CharacterString from \"../CharacterString\";\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport * as Utils from \"../../utils\";\n\nconst SEPARATOR = \"  ***  \";\n\nconst CHAR_WIDTH = 5;\nconst MARQUEE_MAX_LENGTH = 31;\n\n// Always positive modulus\nexport const mod = (n: number, m: number): number => ((n % m) + m) % m;\n\nconst isLong = (text: string): boolean => text.length >= MARQUEE_MAX_LENGTH;\n\n// Given text and step, how many pixels should it be shifted?\nexport const stepOffset = (\n  text: string,\n  step: number,\n  pixels: number\n): number => {\n  if (!isLong(text)) {\n    return 0;\n  }\n\n  const stepOffsetWidth = step * CHAR_WIDTH; // Steps move one char at a time\n  const offset = stepOffsetWidth + pixels;\n  const stringLength = (text.length + SEPARATOR.length) * CHAR_WIDTH;\n\n  return mod(offset, stringLength);\n};\n\n// Format an int as pixels\nexport const pixelUnits = (pixels: number): string => `${pixels}px`;\n\n// If text is wider than the marquee, it needs to loop\nexport const loopText = (text: string): string =>\n  isLong(text)\n    ? `${text}${SEPARATOR}${text}`\n    : text.padEnd(MARQUEE_MAX_LENGTH, \" \");\n\ninterface UseStepperArgs {\n  step: () => void;\n  dragging: boolean;\n}\n\n// Call `step` every second, except when dragging. Resume stepping 1 second after dragging ceases.\nfunction useStepper({ step, dragging }: UseStepperArgs): void {\n  const [stepping, setStepping] = React.useState(true);\n  React.useEffect(() => {\n    if (stepping === false) {\n      return;\n    }\n    const stepHandle = setInterval(step, 220);\n    return () => clearInterval(stepHandle);\n  }, [step, stepping]);\n\n  React.useEffect(() => {\n    if (dragging) {\n      setStepping(false);\n      return;\n    }\n    const steppingTimeout = window.setTimeout(() => {\n      setStepping(true);\n    }, 1000);\n    return () => {\n      window.clearTimeout(steppingTimeout);\n    };\n  }, [dragging]);\n}\n\n// When user calls `handleMouseDown`, and moves the mouse, `dragOffset` will update as they drag.\nfunction useDragX() {\n  const [mouseDownX, setMouseDownX] = React.useState<number | null>(null);\n  const [dragOffset, setDragOffset] = React.useState(0);\n\n  React.useEffect(() => {\n    if (mouseDownX == null) {\n      return;\n    }\n    const xStart = mouseDownX;\n    const handleMouseMove = (ee: MouseEvent | TouchEvent) => {\n      const diff = Utils.getX(ee) - xStart;\n      setDragOffset(-diff);\n    };\n\n    // TODO: Use `once` or something instead of this flag nonsense\n    let cleanedUp = false;\n    const handleMouseUp = () => {\n      if (cleanedUp) {\n        return;\n      }\n      document.removeEventListener(\"mousemove\", handleMouseMove);\n      document.removeEventListener(\"touchmove\", handleMouseMove);\n      document.removeEventListener(\"mouseup\", handleMouseUp);\n      document.removeEventListener(\"touchend\", handleMouseUp);\n      setMouseDownX(null);\n      cleanedUp = true;\n    };\n\n    document.addEventListener(\"mousemove\", handleMouseMove);\n    document.addEventListener(\"touchmove\", handleMouseMove);\n    document.addEventListener(\"touseup\", handleMouseUp);\n    document.addEventListener(\"touchend\", handleMouseUp);\n\n    return handleMouseUp;\n  }, [mouseDownX]);\n\n  const handleMouseDown = React.useCallback(\n    (\n      e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>\n    ): void => {\n      setMouseDownX(Utils.getX(e));\n    },\n    []\n  );\n\n  return { handleMouseDown, dragOffset, dragging: mouseDownX != null };\n}\n\nconst Marquee = React.memo(() => {\n  const text = useTypedSelector(Selectors.getMarqueeText);\n  const doubled = useTypedSelector(Selectors.getDoubled);\n  const marqueeStep = useTypedSelector(Selectors.getMarqueeStep);\n  const stepMarquee = useActionCreator(Actions.stepMarquee);\n  const { handleMouseDown, dragOffset, dragging } = useDragX();\n  const offset = stepOffset(text, marqueeStep, dragOffset);\n  const offsetPixels = pixelUnits(-offset);\n\n  useStepper({ step: stepMarquee, dragging });\n\n  return (\n    <div\n      id=\"marquee\"\n      className=\"text\"\n      onPointerDown={handleMouseDown}\n      title=\"Song Title\"\n    >\n      <div\n        style={{\n          whiteSpace: \"nowrap\",\n          willChange: \"transform\",\n          transform: `translateX(${offsetPixels})`,\n        }}\n        // Force the DOM node to be recreated when the doubled size changes.\n        // This works around a Chrome browser bug where the `will-change: transform;`\n        // on this node seems to cause a change to the `image-rendering:\n        // pixelated;` which we inherit from `#webamp` not to be respected.\n        key={doubled ? \"doubled\" : \"not-doubled\"}\n      >\n        <CharacterString>{loopText(text)}</CharacterString>\n      </div>\n    </div>\n  );\n});\n\nexport default Marquee;\n","import { memo } from \"react\";\nimport classnames from \"classnames\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector } from \"../../hooks\";\n\nconst MonoStereo = memo(() => {\n  const channels = useTypedSelector(Selectors.getChannels);\n  return (\n    <div className=\"mono-stereo\">\n      <div id=\"stereo\" className={classnames({ selected: channels === 2 })} />\n      <div id=\"mono\" className={classnames({ selected: channels === 1 })} />\n    </div>\n  );\n});\n\nexport default MonoStereo;\n","import { FormEvent, memo, useCallback } from \"react\";\n\nimport {\n  SEEK_TO_PERCENT_COMPLETE,\n  SET_FOCUS,\n  UNSET_FOCUS,\n  SET_SCRUB_POSITION,\n} from \"../../actionTypes\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector, useTypedDispatch } from \"../../hooks\";\n\nfunction usePosition() {\n  const duration = useTypedSelector(Selectors.getDuration);\n  const timeElapsed = useTypedSelector(Selectors.getTimeElapsed);\n  const position = duration ? (Math.floor(timeElapsed) / duration) * 100 : 0;\n  const scrubPosition = useTypedSelector(Selectors.getUserInputScrubPosition);\n  const userInputFocus = useTypedSelector(Selectors.getUserInputFocus);\n\n  const displayedPosition =\n    userInputFocus === \"position\" ? scrubPosition : position;\n\n  return [position, displayedPosition];\n}\n\nconst Position = memo(() => {\n  const [position, displayedPosition] = usePosition();\n  const dispatch = useTypedDispatch();\n\n  const seekToPercentComplete = useCallback(\n    (e: FormEvent) => {\n      dispatch({\n        type: SEEK_TO_PERCENT_COMPLETE,\n        percent: Number((e.target as HTMLInputElement).value),\n      });\n      dispatch({ type: UNSET_FOCUS });\n    },\n    [dispatch]\n  );\n\n  const setPosition = useCallback(\n    (e: FormEvent) => {\n      dispatch({ type: SET_FOCUS, input: \"position\" });\n      dispatch({\n        type: SET_SCRUB_POSITION,\n        position: Number((e.target as HTMLInputElement).value),\n      });\n    },\n    [dispatch]\n  );\n\n  // In shade mode, the position slider shows up differently depending on if\n  // it's near the start, middle or end of its progress\n  let className = \"\";\n  if (position <= 33) {\n    className = \"left\";\n  } else if (position >= 66) {\n    className = \"right\";\n  }\n\n  return (\n    <input\n      id=\"position\"\n      className={className}\n      type=\"range\"\n      min=\"0\"\n      max=\"100\"\n      step=\"1\"\n      style={{ touchAction: \"none\" }}\n      value={displayedPosition}\n      onInput={setPosition}\n      onChange={\n        () => {} /* React complains without this, can probably rename onInput to onChange */\n      }\n      onPointerUp={seekToPercentComplete}\n      onPointerDown={setPosition}\n      title=\"Seeking Bar\"\n    />\n  );\n});\n\nexport default Position;\n","import { memo } from \"react\";\nimport classnames from \"classnames\";\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport ContextMenuWraper from \"../ContextMenuWrapper\";\nimport { Node } from \"../ContextMenu\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nconst Repeat = memo(() => {\n  const repeat = useTypedSelector(Selectors.getRepeat);\n  const handleClick = useActionCreator(Actions.toggleRepeat);\n  return (\n    <ContextMenuWraper\n      renderContents={() => (\n        <Node\n          checked={repeat}\n          label=\"Repeat\"\n          onClick={handleClick}\n          hotkey=\"(R)\"\n        />\n      )}\n    >\n      <WinampButton\n        id=\"repeat\"\n        className={classnames({ selected: repeat })}\n        onClick={handleClick}\n        title=\"Toggle Repeat\"\n      />\n    </ContextMenuWraper>\n  );\n});\n\nexport default Repeat;\n","import { memo } from \"react\";\nimport ClickedDiv from \"../ClickedDiv\";\n\nimport * as Actions from \"../../actionCreators\";\nimport { useActionCreator } from \"../../hooks\";\n\nconst Shade = memo(() => {\n  const handleClick = useActionCreator(Actions.toggleMainWindowShadeMode);\n  return (\n    <ClickedDiv\n      id=\"shade\"\n      onPointerDown={handleClick}\n      onDoubleClick={(e) => e.stopPropagation()}\n      title=\"Toggle Windowshade Mode\"\n    />\n  );\n});\n\nexport default Shade;\n","import { memo } from \"react\";\nimport ClickedDiv from \"../ClickedDiv\";\nimport * as Actions from \"../../actionCreators\";\nimport { useActionCreator } from \"../../hooks\";\n\nconst Minimize = memo(() => {\n  const minimize = useActionCreator(Actions.minimize);\n  return <ClickedDiv id=\"minimize\" title=\"Minimize\" onClick={minimize} />;\n});\n\nexport default Minimize;\n","import { memo } from \"react\";\nimport classnames from \"classnames\";\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport ContextMenuWraper from \"../ContextMenuWrapper\";\nimport { Node } from \"../ContextMenu\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nconst Shuffle = memo(() => {\n  const shuffle = useTypedSelector(Selectors.getShuffle);\n  const handleClick = useActionCreator(Actions.toggleShuffle);\n  return (\n    <ContextMenuWraper\n      renderContents={() => (\n        <Node\n          checked={shuffle}\n          label=\"Shuffle\"\n          onClick={handleClick}\n          hotkey=\"(S)\"\n        />\n      )}\n    >\n      <WinampButton\n        id=\"shuffle\"\n        className={classnames({ selected: shuffle })}\n        onClick={handleClick}\n        title=\"Toggle Shuffle\"\n      />\n    </ContextMenuWraper>\n  );\n});\n\nexport default Shuffle;\n","import { memo } from \"react\";\nimport * as Utils from \"../../utils\";\n\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport { TIME_MODE } from \"../../constants\";\nimport { useActionCreator, useTypedSelector } from \"../../hooks\";\n\nconst Time = memo(() => {\n  const toggleTimeMode = useActionCreator(Actions.toggleTimeMode);\n  const timeElapsed = useTypedSelector(Selectors.getTimeElapsed);\n  const duration = useTypedSelector(Selectors.getDuration) || 0;\n  const timeMode = useTypedSelector(Selectors.getTimeMode);\n  const seconds =\n    timeMode === TIME_MODE.ELAPSED ? timeElapsed : duration - timeElapsed;\n\n  const timeObj = Utils.getTimeObj(seconds);\n  return (\n    <div id=\"time\" onClick={toggleTimeMode} className=\"countdown\">\n      {timeMode === TIME_MODE.REMAINING && <div id=\"minus-sign\" />}\n      <div\n        id=\"minute-first-digit\"\n        className={`digit digit-${timeObj.minutesFirstDigit}`}\n      />\n      <div\n        id=\"minute-second-digit\"\n        className={`digit digit-${timeObj.minutesSecondDigit}`}\n      />\n      <div\n        id=\"second-first-digit\"\n        className={`digit digit-${timeObj.secondsFirstDigit}`}\n      />\n      <div\n        id=\"second-second-digit\"\n        className={`digit digit-${timeObj.secondsSecondDigit}`}\n      />\n    </div>\n  );\n});\n\nexport default Time;\n","import * as React from \"react\";\nimport * as Actions from \"../actionCreators\";\nimport * as Selectors from \"../selectors\";\nimport { useTypedSelector, useActionCreator } from \"../hooks\";\n\ninterface Props {\n  id?: string;\n  style?: React.CSSProperties;\n  className?: string;\n}\n\nexport default function Volume({ id, style, className }: Props) {\n  const volume = useTypedSelector(Selectors.getVolume);\n  const setFocus = useActionCreator(Actions.setFocus);\n  const unsetFocus = useActionCreator(Actions.unsetFocus);\n  const setVolume = useActionCreator(Actions.setVolume);\n\n  return (\n    <input\n      id={id}\n      type=\"range\"\n      min=\"0\"\n      max=\"100\"\n      step=\"1\"\n      value={volume}\n      style={{ ...style, touchAction: \"none\" }}\n      className={className}\n      onChange={(e) => setVolume(Number(e.target.value))}\n      onPointerDown={() => setFocus(\"volume\")}\n      onPointerUp={unsetFocus}\n      title=\"Volume Bar\"\n    />\n  );\n}\n","import { memo } from \"react\";\nimport * as Selectors from \"../../selectors\";\n\nimport Volume from \"../Volume\";\nimport { useTypedSelector } from \"../../hooks\";\n\nconst MainVolume = memo(() => {\n  const volume = useTypedSelector(Selectors.getVolume);\n  const percent = volume / 100;\n  const sprite = Math.round(percent * 28);\n  const offset = (sprite - 1) * 15;\n\n  const style = {\n    backgroundPosition: `0 -${offset}px`,\n  };\n  return (\n    <div id=\"volume\" style={style}>\n      <Volume />\n    </div>\n  );\n});\n\nexport default MainVolume;\n","import * as React from \"react\";\nimport classnames from \"classnames\";\nimport { WINDOWS, MEDIA_STATUS, LOAD_STYLE } from \"../../constants\";\nimport * as Actions from \"../../actionCreators\";\n\nimport DropTarget from \"../DropTarget\";\nimport MiniTime from \"../MiniTime\";\n\nimport ClickedDiv from \"../ClickedDiv\";\nimport ContextMenuTarget from \"../ContextMenuTarget\";\nimport Vis from \"../Vis\";\nimport ActionButtons from \"./ActionButtons\";\nimport MainBalance from \"./MainBalance\";\nimport Close from \"./Close\";\nimport ClutterBar from \"./ClutterBar\";\nimport MainContextMenu from \"./MainContextMenu\";\nimport Eject from \"./Eject\";\nimport EqToggleButton from \"./EqToggleButton\";\nimport PlaylistToggleButton from \"./PlaylistToggleButton\";\nimport Kbps from \"./Kbps\";\nimport Khz from \"./Khz\";\nimport Marquee from \"./Marquee\";\nimport MonoStereo from \"./MonoStereo\";\nimport Position from \"./Position\";\nimport Repeat from \"./Repeat\";\nimport Shade from \"./Shade\";\nimport Minimize from \"./Minimize\";\nimport Shuffle from \"./Shuffle\";\nimport Time from \"./Time\";\nimport MainVolume from \"./MainVolume\";\nimport * as Selectors from \"../../selectors\";\n\nimport { FilePicker } from \"../../types\";\nimport FocusTarget from \"../FocusTarget\";\nimport { useActionCreator, useTypedSelector } from \"../../hooks\";\n\ninterface Props {\n  analyser: AnalyserNode;\n  filePickers: FilePicker[];\n}\n\nfunction loadMediaAndPlay(e: React.DragEvent<HTMLDivElement>) {\n  return Actions.loadMedia(e, LOAD_STYLE.PLAY);\n}\n\nconst MainWindow = React.memo(({ analyser, filePickers }: Props) => {\n  const mainShade = useTypedSelector(Selectors.getWindowShade)(\"main\");\n  const status = useTypedSelector(Selectors.getMediaStatus);\n  const focused = useTypedSelector(Selectors.getFocusedWindow);\n  const loading = useTypedSelector(Selectors.getLoading);\n  const doubled = useTypedSelector(Selectors.getDoubled);\n  const llama = useTypedSelector(Selectors.getLlamaMode);\n  const working = useTypedSelector(Selectors.getWorking);\n\n  const className = classnames({\n    window: true,\n    play: status === MEDIA_STATUS.PLAYING,\n    stop: status === MEDIA_STATUS.STOPPED,\n    pause: status === MEDIA_STATUS.PAUSED,\n    selected: focused === WINDOWS.MAIN,\n    shade: mainShade,\n    draggable: true,\n    loading,\n    doubled,\n    llama,\n  });\n\n  const toggleMainWindowShadeMode = useActionCreator(\n    Actions.toggleMainWindowShadeMode\n  );\n  const scrollVolume = useActionCreator(Actions.scrollVolume);\n  const loadMedia = useActionCreator(loadMediaAndPlay);\n\n  return (\n    <DropTarget\n      id=\"main-window\"\n      windowId={WINDOWS.MAIN}\n      className={className}\n      handleDrop={loadMedia}\n      onWheel={scrollVolume}\n    >\n      <FocusTarget windowId={WINDOWS.MAIN}>\n        <div\n          id=\"title-bar\"\n          className=\"selected draggable\"\n          onDoubleClick={toggleMainWindowShadeMode}\n        >\n          <ContextMenuTarget\n            id=\"option-context\"\n            bottom\n            renderMenu={() => <MainContextMenu filePickers={filePickers} />}\n          >\n            <ClickedDiv id=\"option\" title=\"Winamp Menu\" />\n          </ContextMenuTarget>\n          {mainShade && <MiniTime />}\n          <Minimize />\n          <Shade />\n          <Close />\n        </div>\n        <div className=\"webamp-status\">\n          <ClutterBar />\n          {!working && <div id=\"play-pause\" />}\n          <div\n            id=\"work-indicator\"\n            className={classnames({ selected: working })}\n          />\n          <Time />\n        </div>\n        <Vis analyser={analyser} />\n        <div className=\"media-info\">\n          <Marquee />\n          <Kbps />\n          <Khz />\n          <MonoStereo />\n        </div>\n        <MainVolume />\n        <MainBalance />\n        <div className=\"windows\">\n          <EqToggleButton />\n          <PlaylistToggleButton />\n        </div>\n        <Position />\n        <ActionButtons />\n        <Eject />\n        <div className=\"shuffle-repeat\">\n          <Shuffle />\n          <Repeat />\n        </div>\n        <a\n          id=\"about\"\n          target=\"_blank\"\n          href=\"https://webamp.org/about\"\n          title=\"About\"\n        />\n      </FocusTarget>\n    </DropTarget>\n  );\n});\n\nexport default MainWindow;\n","import ResizeTarget from \"../ResizeTarget\";\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\n\ntype Props = {\n  widthOnly?: boolean;\n};\n\nfunction PlaylistResizeTarget({ widthOnly }: Props) {\n  const windowSize = useTypedSelector(Selectors.getWindowSize);\n  const setWindowSize = useActionCreator(Actions.setWindowSize);\n  const currentSize = windowSize(\"playlist\");\n\n  return (\n    <ResizeTarget\n      currentSize={currentSize}\n      id=\"playlist-resize-target\"\n      setWindowSize={(size) => {\n        setWindowSize(\"playlist\", size);\n      }}\n      widthOnly={widthOnly}\n    />\n  );\n}\nexport default PlaylistResizeTarget;\n","import { useMemo } from \"react\";\nimport classnames from \"classnames\";\nimport { getTimeStr } from \"../../utils\";\nimport * as Selectors from \"../../selectors\";\n\nimport {\n  WINDOWS,\n  WINDOW_RESIZE_SEGMENT_WIDTH,\n  WINDOW_WIDTH,\n  CHARACTER_WIDTH,\n  UTF8_ELLIPSIS,\n} from \"../../constants\";\nimport * as Actions from \"../../actionCreators\";\nimport CharacterString from \"../CharacterString\";\nimport PlaylistResizeTarget from \"./PlaylistResizeTarget\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nfunction PlaylistShade() {\n  const focused = useTypedSelector(Selectors.getFocusedWindow);\n  const getWindowSize = useTypedSelector(Selectors.getWindowSize);\n  const playlistSize = getWindowSize(\"playlist\");\n  const duration = useTypedSelector(Selectors.getDuration);\n  const name = useTypedSelector(Selectors.getMinimalMediaText);\n\n  const closeWindow = useActionCreator(Actions.closeWindow);\n  const toggleShade = useActionCreator(Actions.togglePlaylistShadeMode);\n  const focusWindow = useActionCreator(Actions.setFocusedWindow);\n\n  const addedWidth = playlistSize[0] * WINDOW_RESIZE_SEGMENT_WIDTH;\n\n  const trimmedName = useMemo(() => {\n    if (name == null) {\n      return \"[No file]\";\n    }\n\n    const MIN_NAME_WIDTH = 205;\n\n    const nameLength = (MIN_NAME_WIDTH + addedWidth) / CHARACTER_WIDTH;\n    return name.length > nameLength\n      ? name.slice(0, nameLength - 1) + UTF8_ELLIPSIS\n      : name;\n  }, [addedWidth, name]);\n\n  const time = useMemo(() => {\n    return name == null ? \"\" : getTimeStr(duration);\n  }, [duration, name]);\n\n  return (\n    <div\n      id=\"playlist-window-shade\"\n      className={classnames(\"window\", \"draggable\", {\n        selected: focused === WINDOWS.PLAYLIST,\n      })}\n      style={{ width: `${WINDOW_WIDTH + addedWidth}px` }}\n      onPointerDown={() => focusWindow(\"playlist\")}\n      onDoubleClick={toggleShade}\n    >\n      <div className=\"left\">\n        <div className=\"right draggable\">\n          <div id=\"playlist-shade-track-title\">\n            <CharacterString>{trimmedName}</CharacterString>\n          </div>\n          <div id=\"playlist-shade-time\">\n            <CharacterString>{time}</CharacterString>\n          </div>\n          <PlaylistResizeTarget widthOnly />\n          <WinampButton id=\"playlist-shade-button\" onClick={toggleShade} />\n          <WinampButton\n            id=\"playlist-close-button\"\n            onClick={() => closeWindow(\"playlist\")}\n          />\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport default PlaylistShade;\n","import { memo, ReactNode } from \"react\";\nimport classnames from \"classnames\";\nimport { useIsHovered } from \"../../hooks\";\n\ninterface Props {\n  children: ReactNode;\n}\n\n// We implement hover ourselves, because we hate ourselves and https://stackoverflow.com/a/13259049/1263117\nfunction PlaylistMenuEntry({ children }: Props) {\n  const { ref, hover } = useIsHovered();\n  return (\n    <li ref={ref} className={classnames({ hover })}>\n      {children}\n    </li>\n  );\n}\n\nexport default memo(PlaylistMenuEntry);\n","import { Children, memo, useState, ReactNode, useCallback } from \"react\";\nimport classnames from \"classnames\";\nimport { useOnClickAway } from \"../../hooks\";\n\nimport PlaylistMenuEnry from \"./PlaylistMenuEntry\";\n\ninterface Props {\n  id: string;\n  children: ReactNode | Array<ReactNode>;\n}\n\ninterface State {\n  selected: boolean;\n}\n\nfunction PlaylistMenu(props: Props) {\n  const [selected, setSelected] = useState(false);\n\n  const [ref, setRef] = useState<Element | null>(null);\n\n  const callback = useCallback(() => {\n    // If we've clicked on a Context Menu spawed inside this menu, it will\n    // register as an external click. However, hiding the menu will remove\n    // the Context Menu from the DOM. Therefore, we wait until the next\n    // event loop to actually hide ourselves.\n    setTimeout(() => {\n      // Close the menu\n      setSelected(false);\n    }, 0);\n  }, []);\n\n  useOnClickAway(ref, selected ? callback : null);\n\n  return (\n    <div\n      id={props.id}\n      className={classnames(\"playlist-menu\", {\n        selected,\n      })}\n      ref={setRef}\n      onClick={() => setSelected((selected_) => !selected_)}\n    >\n      <div className=\"bar\" />\n      {selected && (\n        <ul>\n          {Children.map(props.children, (child, i) => (\n            <PlaylistMenuEnry key={i}>{child}</PlaylistMenuEnry>\n          ))}\n        </ul>\n      )}\n    </div>\n  );\n}\nexport default memo(PlaylistMenu);\n","import * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport PlaylistMenu from \"./PlaylistMenu\";\n\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\n\nconst AddMenu = () => {\n  const nextIndex = useTypedSelector(Selectors.getTrackCount);\n  const addDirAtIndex = useActionCreator(Actions.addDirAtIndex);\n  const addFilesAtIndex = useActionCreator(Actions.addFilesAtIndex);\n  const addFilesFromUrl = useActionCreator(Actions.addFilesFromUrl);\n  return (\n    <PlaylistMenu id=\"playlist-add-menu\">\n      <div className=\"add-url\" onClick={() => addFilesFromUrl(nextIndex)} />\n      <div className=\"add-dir\" onClick={() => addDirAtIndex(nextIndex)} />\n      <div className=\"add-file\" onClick={() => addFilesAtIndex(nextIndex)} />\n    </PlaylistMenu>\n  );\n};\n\nexport default AddMenu;\n","import * as Actions from \"../../actionCreators\";\nimport PlaylistMenu from \"./PlaylistMenu\";\nimport { useActionCreator } from \"../../hooks\";\n\n/* eslint-disable no-alert */\n\nconst RemoveMenu = () => {\n  const removeSelected = useActionCreator(Actions.removeSelectedTracks);\n  const removeAll = useActionCreator(Actions.removeAllTracks);\n  const crop = useActionCreator(Actions.cropPlaylist);\n  return (\n    <PlaylistMenu id=\"playlist-remove-menu\">\n      <div\n        className=\"remove-misc\"\n        onClick={() => alert(\"Not supported in Webamp\")}\n      />\n      <div className=\"remove-all\" onClick={removeAll} />\n      <div className=\"crop\" onClick={crop} />\n      <div className=\"remove-selected\" onClick={removeSelected} />\n    </PlaylistMenu>\n  );\n};\n\nexport default RemoveMenu;\n","import PlaylistMenu from \"./PlaylistMenu\";\nimport * as Actions from \"../../actionCreators\";\nimport { useActionCreator } from \"../../hooks\";\n\nexport default function SelectionMenu() {\n  const invert = useActionCreator(Actions.invertSelection);\n  const zero = useActionCreator(Actions.selectZero);\n  const all = useActionCreator(Actions.selectAll);\n  return (\n    <PlaylistMenu id=\"playlist-selection-menu\">\n      <div className=\"invert-selection\" onClick={invert} />\n      <div className=\"select-zero\" onClick={zero} />\n      <div className=\"select-all\" onClick={all} />\n    </PlaylistMenu>\n  );\n}\n","import * as Actions from \"../../actionCreators\";\n\nimport { Hr, Node } from \"../ContextMenu\";\nimport ContextMenuTarget from \"../ContextMenuTarget\";\nimport { useActionCreator } from \"../../hooks\";\n\ninterface DispatchProps {\n  sortListByTitle: () => void;\n  reverseList: () => void;\n  randomizeList: () => void;\n}\n\n/* eslint-disable no-alert */\n/* TODO: This should really be kitty-corner to the upper right hand corner of the MiscMenu */\nexport default function SortContextMenu() {\n  const reverseList = useActionCreator(Actions.reverseList);\n  const randomizeList = useActionCreator(Actions.randomizeList);\n  const sortListByTitle = useActionCreator(Actions.sortListByTitle);\n  return (\n    <ContextMenuTarget\n      style={{ width: \"100%\", height: \"100%\" }}\n      top\n      renderMenu={() => (\n        <>\n          <Node label=\"Sort list by title\" onClick={sortListByTitle} />\n          <Hr />\n          <Node label=\"Reverse list\" onClick={reverseList} />\n          <Node label=\"Randomize list\" onClick={randomizeList} />\n        </>\n      )}\n    >\n      <div />\n    </ContextMenuTarget>\n  );\n}\n","import { Node } from \"../ContextMenu\";\nimport ContextMenuTarget from \"../ContextMenuTarget\";\nimport * as Actions from \"../../actionCreators\";\nimport { useActionCreator } from \"../../hooks\";\n\nconst MiscOptionsContextMenu = () => {\n  const downloadHtmlPlaylist = useActionCreator(Actions.downloadHtmlPlaylist);\n  return (\n    <ContextMenuTarget\n      style={{ width: \"100%\", height: \"100%\" }}\n      top\n      renderMenu={() => (\n        <Node onClick={downloadHtmlPlaylist} label=\"Generate HTML playlist\" />\n      )}\n    >\n      <div />\n    </ContextMenuTarget>\n  );\n};\n\nexport default MiscOptionsContextMenu;\n","import PlaylistMenu from \"./PlaylistMenu\";\nimport SortContextMenu from \"./SortContextMenu\";\nimport MiscOptionsContextMenu from \"./MiscOptionsContextMenu\";\n\nconst MiscMenu = () => (\n  <PlaylistMenu id=\"playlist-misc-menu\">\n    <div className=\"sort-list\" onClick={(e) => e.stopPropagation()}>\n      <SortContextMenu />\n    </div>\n    <div\n      className=\"file-info\"\n      onClick={() => alert(\"Not supported in Webamp\")}\n    />\n\n    <div className=\"misc-options\" onClick={(e) => e.stopPropagation()}>\n      <MiscOptionsContextMenu />\n    </div>\n  </PlaylistMenu>\n);\n\nexport default MiscMenu;\n","import * as Actions from \"../../actionCreators\";\nimport PlaylistMenu from \"./PlaylistMenu\";\nimport { useActionCreator } from \"../../hooks\";\n\n/* eslint-disable no-alert */\nexport default function ListMenu() {\n  const removeAllTracks = useActionCreator(Actions.removeAllTracks);\n  const addFilesFromList = useActionCreator(Actions.addFilesFromList);\n  const saveFilesToList = useActionCreator(Actions.saveFilesToList);\n  return (\n    <PlaylistMenu id=\"playlist-list-menu\">\n      <div className=\"new-list\" onClick={removeAllTracks} />\n      <div className=\"save-list\" onClick={saveFilesToList} />\n      <div className=\"load-list\" onClick={addFilesFromList} />\n    </PlaylistMenu>\n  );\n}\n","import { useMemo } from \"react\";\n\nimport CharacterString from \"../CharacterString\";\nimport * as Actions from \"../../selectors\";\nimport { useTypedSelector } from \"../../hooks\";\n\n// While all the browsers I care about support String.prototype.padEnd,\n// Not all node versions do, and I want tests to pass in Jest...\n// Sigh.\nfunction rightPad(str: string, len: number, fillChar: string): string {\n  while (str.length < len) {\n    str += fillChar;\n  }\n  return str;\n}\n\nconst RunningTimeDisplay = () => {\n  const runningTimeMessage = useTypedSelector(Actions.getRunningTimeMessage);\n  const text = useMemo(\n    () => rightPad(runningTimeMessage, 18, \" \"),\n    [runningTimeMessage]\n  );\n  return (\n    <div className=\"playlist-running-time-display draggable\">\n      {/* This div is probably not strictly needed */}\n      <div>\n        <CharacterString>{text}</CharacterString>\n      </div>\n    </div>\n  );\n};\n\nexport default RunningTimeDisplay;\n","import { Fragment } from \"react\";\n\nimport * as Actions from \"../../actionCreators\";\n\nimport MiniTime from \"../MiniTime\";\nimport RunningTimeDisplay from \"./RunningTimeDisplay\";\nimport { useActionCreator } from \"../../hooks\";\n\nconst PlaylistWindow = () => {\n  const play = useActionCreator(Actions.play);\n  const pause = useActionCreator(Actions.pause);\n  const stop = useActionCreator(Actions.stop);\n  const openMediaFileDialog = useActionCreator(Actions.openMediaFileDialog);\n  const next = useActionCreator(Actions.next);\n  const previous = useActionCreator(Actions.previous);\n  return (\n    <Fragment>\n      <RunningTimeDisplay />\n      <div className=\"playlist-action-buttons\">\n        <div className=\"playlist-previous-button\" onClick={previous} />\n        <div className=\"playlist-play-button\" onClick={play} />\n        <div className=\"playlist-pause-button\" onClick={pause} />\n        <div className=\"playlist-stop-button\" onClick={stop} />\n        <div className=\"playlist-next-button\" onClick={next} />\n        <div className=\"playlist-eject-button\" onClick={openMediaFileDialog} />\n      </div>\n      <MiniTime />\n    </Fragment>\n  );\n};\nexport default PlaylistWindow;\n","import { useCallback, ReactNode, TouchEvent } from \"react\";\nimport classnames from \"classnames\";\nimport {\n  CLICKED_TRACK,\n  CTRL_CLICKED_TRACK,\n  SHIFT_CLICKED_TRACK,\n} from \"../../actionTypes\";\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport {\n  useTypedSelector,\n  useActionCreator,\n  useTypedDispatch,\n} from \"../../hooks\";\n\ninterface Props {\n  id: number;\n  index: number;\n  handleMoveClick: (\n    e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>\n  ) => void;\n  children: ReactNode;\n}\n\nfunction TrackCell({ children, handleMoveClick, index, id }: Props) {\n  const skinPlaylistStyle = useTypedSelector(Selectors.getSkinPlaylistStyle);\n  const selectedTrackIds = useTypedSelector(Selectors.getSelectedTrackIds);\n  const currentTrackId = useTypedSelector(Selectors.getCurrentTrackId);\n  const selected = selectedTrackIds.has(id);\n  const current = currentTrackId === id;\n\n  const dispatch = useTypedDispatch();\n  const playTrackNow = useActionCreator(Actions.playTrackNow);\n\n  const onMouseDown = useCallback(\n    (e: React.MouseEvent<HTMLDivElement>) => {\n      if (e.shiftKey) {\n        e.preventDefault();\n        dispatch({ type: SHIFT_CLICKED_TRACK, index });\n        return;\n      } else if (e.metaKey || e.ctrlKey) {\n        e.preventDefault();\n        dispatch({ type: CTRL_CLICKED_TRACK, index });\n        return;\n      }\n\n      if (!selected) {\n        dispatch({ type: CLICKED_TRACK, index });\n      }\n\n      handleMoveClick(e);\n    },\n    [dispatch, handleMoveClick, index, selected]\n  );\n\n  const handleTouchStart = useCallback(\n    (e: TouchEvent<HTMLDivElement>) => {\n      if (!selected) {\n        dispatch({ type: CLICKED_TRACK, index });\n      }\n      handleMoveClick(e);\n\n      // There's no touch equivalent of onDoubleClick, so we fake one:\n      function handleSecondTap() {\n        playTrackNow(id);\n      }\n      e.target.addEventListener(\"touchstart\", handleSecondTap);\n      setTimeout(() => {\n        // Technically we might be unmounted here, but that's fine since you\n        // can't tap an unmounted element and we will clean up eventually.\n        e.target.removeEventListener(\"touchstart\", handleSecondTap);\n      }, 250);\n    },\n    [dispatch, handleMoveClick, id, index, playTrackNow, selected]\n  );\n\n  const style: React.CSSProperties = {\n    backgroundColor: selected ? skinPlaylistStyle.selectedbg : undefined,\n    color: current ? skinPlaylistStyle.current : undefined,\n  };\n  return (\n    <div\n      className={classnames(\"track-cell\", { selected, current })}\n      style={style}\n      onClick={(e) => e.stopPropagation()}\n      onMouseDown={onMouseDown}\n      onTouchStart={handleTouchStart}\n      onContextMenu={(e) => e.preventDefault()}\n      onDoubleClick={() => playTrackNow(id)}\n    >\n      {children}\n    </div>\n  );\n}\n\nexport default TrackCell;\n","import * as Selectors from \"../../selectors\";\nimport { useTypedSelector } from \"../../hooks\";\n\ninterface Props {\n  id: number;\n  paddedTrackNumber: string;\n}\n\nconst TrackTitle = ({ id, paddedTrackNumber }: Props) => {\n  const title = useTypedSelector(Selectors.getTrackDisplayName)(id);\n  return (\n    <span>\n      {paddedTrackNumber}. {title}\n    </span>\n  );\n};\n\nexport default TrackTitle;\n","import { useState, useEffect } from \"react\";\n\nimport * as Selectors from \"../../selectors\";\nimport { TRACK_HEIGHT } from \"../../constants\";\nimport * as Actions from \"../../actionCreators\";\nimport TrackCell from \"./TrackCell\";\nimport TrackTitle from \"./TrackTitle\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport * as Utils from \"../../utils\";\n\nfunction getNumberLength(number: number): number {\n  return number.toString().length;\n}\n\nfunction TrackList() {\n  const offset = useTypedSelector(Selectors.getScrollOffset);\n  const trackIds = useTypedSelector(Selectors.getVisibleTrackIds);\n  const tracks = useTypedSelector(Selectors.getTracks);\n  const numberOfTracks = useTypedSelector(Selectors.getNumberOfTracks);\n\n  const selectZero = useActionCreator(Actions.selectZero);\n  const dragSelected = useActionCreator(Actions.dragSelected);\n  const scrollPlaylistByDelta = useActionCreator(Actions.scrollPlaylistByDelta);\n\n  const [node, setNode] = useState<HTMLElement | null>(null);\n  const [moving, setMoving] = useState(false);\n  const [mouseStartY, setMouseStartY] = useState<number | null>(null);\n\n  const _handleMoveClick = (\n    e: React.MouseEvent<HTMLDivElement> | React.TouchEvent<HTMLDivElement>\n  ) => {\n    setMoving(true);\n    setMouseStartY(Utils.getY(e));\n  };\n\n  useEffect(() => {\n    if (node == null || mouseStartY == null || moving === false) {\n      return;\n    }\n    const { top, bottom, left, right } = node.getBoundingClientRect();\n    let lastDiff = 0;\n    const handleMouseMove = (ee: MouseEvent | TouchEvent) => {\n      const x = Utils.getX(ee);\n      const y = Utils.getY(ee);\n      if (y < top || y > bottom || x < left || x > right) {\n        // Mouse is outside the track list\n        return;\n      }\n      const proposedDiff = Math.floor((y - mouseStartY) / TRACK_HEIGHT);\n      if (proposedDiff !== lastDiff) {\n        const diffDiff = proposedDiff - lastDiff;\n        dragSelected(diffDiff);\n        lastDiff = proposedDiff;\n      }\n    };\n\n    // A little indirect here. Basically, we set `moving` false here which\n    // causes our useEffect to rerun which removes all of these event listeners.\n    // It might be a little tigher to actually remove these listeners in the\n    // `handleMouseUp` callback, but... I'm lazy.\n    const handleMouseUp = () => setMoving(false);\n    window.addEventListener(\"mouseup\", handleMouseUp);\n    window.addEventListener(\"mousemove\", handleMouseMove);\n    window.addEventListener(\"touchend\", handleMouseUp);\n    window.addEventListener(\"touchmove\", handleMouseMove);\n    return () => {\n      window.removeEventListener(\"mousemove\", handleMouseMove);\n      window.removeEventListener(\"touchmove\", handleMouseMove);\n      window.removeEventListener(\"mouseup\", handleMouseUp);\n      window.removeEventListener(\"touchend\", handleMouseUp);\n    };\n    // I'm not 100% sure how well this would work if it rebound mid drag, so\n    // we'll just pretend it's okay that we have stale values in there.\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [moving]);\n\n  function _renderTracks(\n    format: (id: number, i: number) => JSX.Element | string\n  ) {\n    return trackIds.map((id, i) => (\n      <TrackCell\n        key={id}\n        id={id}\n        index={offset + i}\n        handleMoveClick={_handleMoveClick}\n      >\n        {format(id, i)}\n      </TrackCell>\n    ));\n  }\n\n  const maxTrackNumberLength = getNumberLength(numberOfTracks);\n  const paddedTrackNumForIndex = (i: number) =>\n    (i + 1 + offset).toString().padStart(maxTrackNumberLength, \"\\u00A0\");\n\n  useEffect(() => {\n    if (node == null) {\n      return;\n    }\n\n    // Chome changed wheel events to be passive be default. We need active (so\n    // we can prevent default) and React does not have a way to control this, so\n    // we must bind our own events.\n    //\n    // https://github.com/facebook/react/issues/14856#issuecomment-806052402\n    node.addEventListener(\"wheel\", scrollPlaylistByDelta, { passive: false });\n\n    return () => {\n      node.removeEventListener(\"wheel\", scrollPlaylistByDelta);\n    };\n  }, [node, scrollPlaylistByDelta]);\n  return (\n    <div\n      ref={setNode}\n      className=\"playlist-tracks\"\n      style={{ height: \"100%\", userSelect: \"none\" }}\n      onClick={selectZero}\n    >\n      <div className=\"playlist-track-titles\">\n        {_renderTracks((id, i) => (\n          <TrackTitle id={id} paddedTrackNumber={paddedTrackNumForIndex(i)} />\n        ))}\n      </div>\n      <div className=\"playlist-track-durations\">\n        {_renderTracks((id) => Utils.getTimeStr(tracks[id].duration))}\n      </div>\n    </div>\n  );\n}\n\nexport default TrackList;\n","import * as Utils from \"../utils\";\nimport { ReactNode, useRef } from \"react\";\n\ntype Props = {\n  height: number;\n  width: number;\n  handleHeight: number;\n  value: number;\n  handle: ReactNode;\n  onBeforeChange?: () => void;\n  onChange: (value: number) => void;\n  onAfterChange?: () => void;\n  requireClicksOriginateLocally?: boolean;\n  disabled?: boolean;\n};\n\ntype RegOptions = {\n  target: HTMLElement;\n  clientY: number;\n};\n\n// `<input type=\"range\" />` can be rotated to become a vertical slider using\n// CSS, but that makes it impossible to style the handle in a pixel perfect\n// manner. Instead we reimplement it in React.\nexport default function VerticalSlider({\n  value,\n  height,\n  width,\n  handle,\n  handleHeight,\n  onBeforeChange,\n  onChange,\n  onAfterChange,\n  requireClicksOriginateLocally = true,\n  disabled,\n}: Props) {\n  const ref = useRef<HTMLDivElement | null>(null);\n  const handleRef = useRef<HTMLDivElement | null>(null);\n\n  function registerMoveListener({ target, clientY }: RegOptions) {\n    const sliderNode = ref.current;\n    const handleNode = handleRef.current;\n    if (sliderNode == null || handleNode == null) {\n      // I don't think this could ever happen in practice\n      return null;\n    }\n\n    const sliderRect = sliderNode.getBoundingClientRect();\n    const handleRect = handleNode.getBoundingClientRect();\n\n    const { top: sliderTop, height: sliderHeight } = sliderRect;\n    const { top: handleTop, height: realHandleHeight } = handleRect;\n\n    // If the user clicks on the handle we want them to continue to hold onto\n    // that point of te handle. If they click outside of the handle (in the\n    // slider itself) we want to center the handle at that point and have them\n    // move the handle from the center.\n    const handleOffset = handleNode.contains(target as HTMLElement)\n      ? clientY - handleTop\n      : realHandleHeight / 2;\n\n    const baseOffset = sliderTop + handleOffset;\n    // Measure the actual rect height rather than use the `height` prop, becuase\n    // we might be in double-size mode.\n    const spanSize = sliderHeight - realHandleHeight;\n\n    function moveToPosition(y: number) {\n      // Ensure dragging does not cause elements/text to be selected.\n      // https://stackoverflow.com/a/19164149/1263117\n      const startOffset = y - baseOffset;\n      onChange(Utils.clamp(startOffset / spanSize, 0, 1));\n    }\n\n    const handlePointerMove = (event: PointerEvent) => {\n      event.preventDefault();\n      moveToPosition(event.clientY);\n    };\n    const handleRelease = () => {\n      if (onAfterChange != null) {\n        onAfterChange();\n      }\n      document.removeEventListener(\"pointermove\", handlePointerMove);\n      document.removeEventListener(\"pointerup\", handleRelease);\n    };\n    document.addEventListener(\"pointermove\", handlePointerMove);\n    document.addEventListener(\"pointerup\", handleRelease);\n\n    if (onBeforeChange != null) {\n      onBeforeChange();\n    }\n\n    // Move the slider to where they've started.\n    moveToPosition(clientY);\n  }\n\n  function handlePointerDown(e: React.PointerEvent<HTMLDivElement>) {\n    e.preventDefault();\n    registerMoveListener({\n      target: e.target as HTMLElement,\n      clientY: e.clientY,\n    });\n  }\n\n  // We watch for events onPointerEnter only when requireClicksOriginateLocally === false\n  // If the mouse/touch enters the Slider area, and the button/touch is already down, trigger a PointerDown\n  function handlePointerEnter(e: React.PointerEvent<HTMLDivElement>) {\n    if (e.buttons === 1) {\n      handlePointerDown(e);\n    }\n  }\n\n  const offset = Math.floor((height - handleHeight) * value);\n  return (\n    <div\n      style={{ height, width }}\n      onPointerDown={disabled ? undefined : handlePointerDown}\n      onPointerEnter={\n        disabled || requireClicksOriginateLocally\n          ? undefined\n          : handlePointerEnter\n      }\n      ref={ref}\n    >\n      <div style={{ transform: `translateY(${offset}px)` }} ref={handleRef}>\n        {handle}\n      </div>\n    </div>\n  );\n}\n","import VerticalSlider from \"../VerticalSlider\";\n\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport { WINDOWS } from \"../../constants\";\n\nconst HANDLE_HEIGHT = 18;\n\nconst Handle = () => (\n  <div\n    className=\"playlist-scrollbar-handle\"\n    style={{ height: HANDLE_HEIGHT }}\n  />\n);\n\nexport default function PlaylistScrollBar() {\n  const getWindowPixelSize = useTypedSelector(Selectors.getWindowPixelSize);\n  const playlistHeight = getWindowPixelSize(WINDOWS.PLAYLIST).height;\n  const playlistScrollPosition = useTypedSelector(\n    Selectors.getPlaylistScrollPosition\n  );\n  const allTracksAreVisible = useTypedSelector(\n    Selectors.getAllTracksAreVisible\n  );\n  const setPlaylistScrollPosition = useActionCreator(\n    Actions.setPlaylistScrollPosition\n  );\n  return (\n    <div className=\"playlist-scrollbar\" style={{ marginLeft: 5 }}>\n      <VerticalSlider\n        height={playlistHeight - 58}\n        handleHeight={HANDLE_HEIGHT}\n        width={8}\n        value={playlistScrollPosition / 100}\n        onChange={(val) => setPlaylistScrollPosition(val * 100)}\n        handle={<Handle />}\n        disabled={allTracksAreVisible}\n      />\n    </div>\n  );\n}\n","import { useCallback } from \"react\";\nimport classnames from \"classnames\";\n\nimport { WINDOWS, TRACK_HEIGHT, LOAD_STYLE } from \"../../constants\";\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\n\nimport { clamp } from \"../../utils\";\nimport DropTarget from \"../DropTarget\";\nimport Vis from \"../Vis\";\nimport PlaylistShade from \"./PlaylistShade\";\nimport AddMenu from \"./AddMenu\";\nimport RemoveMenu from \"./RemoveMenu\";\nimport SelectionMenu from \"./SelectionMenu\";\nimport MiscMenu from \"./MiscMenu\";\nimport ListMenu from \"./ListMenu\";\nimport PlaylistResizeTarget from \"./PlaylistResizeTarget\";\nimport PlaylistActionArea from \"./PlaylistActionArea\";\nimport TrackList from \"./TrackList\";\nimport PlaylistScrollBar from \"./PlaylistScrollBar\";\n\nimport { AppState } from \"../../types\";\nimport FocusTarget from \"../FocusTarget\";\nimport { useActionCreator, useTypedSelector } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\ninterface Props {\n  analyser: AnalyserNode;\n}\n\nfunction _maxTrackIndex(state: AppState) {\n  return state.playlist.trackOrder.length - 1;\n}\n\nfunction PlaylistWindow({ analyser }: Props) {\n  const offset = useTypedSelector(Selectors.getScrollOffset);\n  const getWindowSize = useTypedSelector(Selectors.getWindowSize);\n  const selectedWindow = useTypedSelector(Selectors.getFocusedWindow);\n  const getWindowShade = useTypedSelector(Selectors.getWindowShade);\n  const getWindowOpen = useTypedSelector(Selectors.getWindowOpen);\n  const maxTrackIndex = useTypedSelector(_maxTrackIndex);\n  const skinPlaylistStyle = useTypedSelector(Selectors.getSkinPlaylistStyle);\n  const getWindowPixelSize = useTypedSelector(Selectors.getWindowPixelSize);\n\n  const selected = selectedWindow === WINDOWS.PLAYLIST;\n  const playlistShade = Boolean(getWindowShade(WINDOWS.PLAYLIST));\n  const playlistSize = getWindowSize(WINDOWS.PLAYLIST);\n  const playlistWindowPixelSize = getWindowPixelSize(WINDOWS.PLAYLIST);\n\n  const close = useActionCreator(Actions.closeWindow);\n  const toggleShade = useActionCreator(Actions.togglePlaylistShadeMode);\n  const scrollUpFourTracks = useActionCreator(Actions.scrollUpFourTracks);\n  const scrollDownFourTracks = useActionCreator(Actions.scrollDownFourTracks);\n  const scrollVolume = useActionCreator(Actions.scrollVolume);\n  const loadMedia = useActionCreator(Actions.loadMedia);\n\n  const showVisualizer = playlistSize[0] > 2;\n  const activateVisualizer = !getWindowOpen(WINDOWS.MAIN);\n\n  const handleDrop = useCallback(\n    (\n      e: React.DragEvent<HTMLDivElement>,\n      targetCoords: { x: number; y: number }\n    ) => {\n      const top = e.clientY - targetCoords.y;\n      const atIndex = clamp(\n        offset + Math.round((top - 23) / TRACK_HEIGHT),\n        0,\n        maxTrackIndex + 1\n      );\n      loadMedia(e, LOAD_STYLE.NONE, atIndex);\n    },\n    [loadMedia, maxTrackIndex, offset]\n  );\n\n  if (playlistShade) {\n    return <PlaylistShade />;\n  }\n\n  const style = {\n    color: skinPlaylistStyle.normal,\n    backgroundColor: skinPlaylistStyle.normalbg,\n    fontFamily: `${skinPlaylistStyle.font}, Arial, sans-serif`,\n    height: `${playlistWindowPixelSize.height}px`,\n    width: `${playlistWindowPixelSize.width}px`,\n  };\n\n  const classes = classnames(\"window\", \"draggable\", { selected });\n\n  const showSpacers = playlistSize[0] % 2 === 0;\n\n  return (\n    <FocusTarget windowId={WINDOWS.PLAYLIST}>\n      <DropTarget\n        id=\"playlist-window\"\n        windowId={WINDOWS.PLAYLIST}\n        className={classes}\n        style={style}\n        handleDrop={handleDrop}\n        onWheel={scrollVolume}\n      >\n        <div className=\"playlist-top draggable\" onDoubleClick={toggleShade}>\n          <div className=\"playlist-top-left draggable\" />\n          {showSpacers && (\n            <div className=\"playlist-top-left-spacer draggable\" />\n          )}\n          <div className=\"playlist-top-left-fill draggable\" />\n          <div className=\"playlist-top-title draggable\" />\n          {showSpacers && (\n            <div className=\"playlist-top-right-spacer draggable\" />\n          )}\n          <div className=\"playlist-top-right-fill draggable\" />\n          <div className=\"playlist-top-right draggable\">\n            <WinampButton id=\"playlist-shade-button\" onClick={toggleShade} />\n            <WinampButton\n              id=\"playlist-close-button\"\n              onClick={() => close(WINDOWS.PLAYLIST)}\n            />\n          </div>\n        </div>\n        <div className=\"playlist-middle draggable\">\n          <div className=\"playlist-middle-left draggable\" />\n          <div className=\"playlist-middle-center\">\n            <TrackList />\n          </div>\n          <WinampButton className=\"playlist-middle-right draggable\">\n            <PlaylistScrollBar />\n          </WinampButton>\n        </div>\n        <div className=\"playlist-bottom draggable\">\n          <div className=\"playlist-bottom-left draggable\">\n            <AddMenu />\n            <RemoveMenu />\n            <SelectionMenu />\n            <MiscMenu />\n          </div>\n          <div className=\"playlist-bottom-center draggable\" />\n          <div className=\"playlist-bottom-right draggable\">\n            {showVisualizer && (\n              <div className=\"playlist-visualizer\">\n                {activateVisualizer && (\n                  <div className=\"visualizer-wrapper\">\n                    <Vis analyser={analyser} />\n                  </div>\n                )}\n              </div>\n            )}\n            <PlaylistActionArea />\n            <ListMenu />\n            <div id=\"playlist-scroll-up-button\" onClick={scrollUpFourTracks} />\n            <div\n              id=\"playlist-scroll-down-button\"\n              onClick={scrollDownFourTracks}\n            />\n            <PlaylistResizeTarget />\n          </div>\n        </div>\n      </DropTarget>\n    </FocusTarget>\n  );\n}\n\nexport default PlaylistWindow;\n","import { useMemo } from \"react\";\nimport { Slider as SliderType } from \"../../types\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport VerticalSlider from \"../VerticalSlider\";\nimport WinampButton from \"../WinampButton\";\n\ninterface Props {\n  id: string;\n  band: SliderType;\n  onChange(value: number): void;\n  clickOriginatedInEq?: boolean;\n}\n\nconst MAX_VALUE = 100;\n\n// Given a value between 1-100, return the sprite number (0-27)\nexport const spriteNumber = (value: number): number => {\n  const percent = value / MAX_VALUE;\n  return Math.round(percent * 27);\n};\n\n// Given a sprite number, return the x,y\nexport const spriteOffsets = (number: number): { x: number; y: number } => {\n  const x = number % 14;\n  const y = Math.floor(number / 14);\n  return { x, y };\n};\n\nconst Handle = () => {\n  const style = { width: 11, height: 11, marginLeft: 1 };\n  return <div style={style} className=\"slider-handle\" />;\n};\n\nexport default function Band({\n  id,\n  onChange,\n  band,\n  clickOriginatedInEq,\n}: Props) {\n  const sliders = useTypedSelector(Selectors.getSliders);\n  const value = sliders[band];\n  const backgroundPosition = useMemo(() => {\n    const { x, y } = spriteOffsets(spriteNumber(value));\n    const xOffset = x * 15; // Each sprite is 15px wide\n    const yOffset = y * 65; // Each sprite is 15px tall\n    return `-${xOffset}px -${yOffset}px`;\n  }, [value]);\n  const focusBand = useActionCreator(Actions.focusBand);\n  const unsetFocus = useActionCreator(Actions.unsetFocus);\n\n  // Note: The band background is actually one pixel taller (63) than the slider\n  // it contains (62).\n  return (\n    <WinampButton\n      id={id}\n      className=\"band\"\n      style={{ backgroundPosition, height: 63 }}\n      requireClicksOriginateLocally={\n        !(band !== \"preamp\" && clickOriginatedInEq)\n      }\n    >\n      <VerticalSlider\n        height={62}\n        width={14}\n        handleHeight={11}\n        value={1 - value / MAX_VALUE}\n        onBeforeChange={() => focusBand(band)}\n        onChange={(val) => onChange((1 - val) * MAX_VALUE)}\n        onAfterChange={unsetFocus}\n        requireClicksOriginateLocally={\n          !(band !== \"preamp\" && clickOriginatedInEq)\n        }\n        handle={<Handle />}\n      />\n    </WinampButton>\n  );\n}\n","import classnames from \"classnames\";\n\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport { useActionCreator, useTypedSelector } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nconst EqOn = () => {\n  const toggleEq = useActionCreator(Actions.toggleEq);\n  const on = useTypedSelector(Selectors.getEqualizerEnabled);\n  return (\n    <WinampButton\n      id=\"on\"\n      className={classnames({ selected: on })}\n      onClick={toggleEq}\n    />\n  );\n};\n\nexport default EqOn;\n","import { memo } from \"react\";\nimport classnames from \"classnames\";\n\nimport * as Actions from \"../../actionCreators\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nconst EqAuto = memo(() => {\n  const selected = useTypedSelector((state) => state.equalizer.auto);\n  const toggleAuto = useActionCreator(Actions.toggleEqAuto);\n  return (\n    <WinampButton\n      id=\"auto\"\n      className={classnames({ selected })}\n      onClick={toggleAuto}\n    />\n  );\n});\n\nexport default EqAuto;\n","// Adapted from https://github.com/morganherlocker/cubic-spline\n\nexport default function spline(xs, ys) {\n  const ks = getNaturalKs(xs, ys);\n  const maxX = xs[xs.length - 1];\n  const allYs = [];\n  let i = 1;\n  for (let x = 0; x <= maxX; x++) {\n    while (xs[i] < x) i++;\n    const t = (x - xs[i - 1]) / (xs[i] - xs[i - 1]);\n    const a = ks[i - 1] * (xs[i] - xs[i - 1]) - (ys[i] - ys[i - 1]);\n    const b = -ks[i] * (xs[i] - xs[i - 1]) + (ys[i] - ys[i - 1]);\n    const q =\n      (1 - t) * ys[i - 1] + t * ys[i] + t * (1 - t) * (a * (1 - t) + b * t);\n    allYs.push(q);\n  }\n  return allYs;\n}\n\nfunction getNaturalKs(xs, ys) {\n  const ks = xs.map(() => 0);\n  const n = xs.length - 1;\n  const matrix = zerosMatrix(n + 1, n + 2);\n\n  for (\n    let i = 1;\n    i < n;\n    i++ // rows\n  ) {\n    matrix[i][i - 1] = 1 / (xs[i] - xs[i - 1]);\n    matrix[i][i] = 2 * (1 / (xs[i] - xs[i - 1]) + 1 / (xs[i + 1] - xs[i]));\n    matrix[i][i + 1] = 1 / (xs[i + 1] - xs[i]);\n    matrix[i][n + 1] =\n      3 *\n      ((ys[i] - ys[i - 1]) / ((xs[i] - xs[i - 1]) * (xs[i] - xs[i - 1])) +\n        (ys[i + 1] - ys[i]) / ((xs[i + 1] - xs[i]) * (xs[i + 1] - xs[i])));\n  }\n\n  matrix[0][0] = 2 / (xs[1] - xs[0]);\n  matrix[0][1] = 1 / (xs[1] - xs[0]);\n  matrix[0][n + 1] =\n    (3 * (ys[1] - ys[0])) / ((xs[1] - xs[0]) * (xs[1] - xs[0]));\n\n  matrix[n][n - 1] = 1 / (xs[n] - xs[n - 1]);\n  matrix[n][n] = 2 / (xs[n] - xs[n - 1]);\n  matrix[n][n + 1] =\n    (3 * (ys[n] - ys[n - 1])) / ((xs[n] - xs[n - 1]) * (xs[n] - xs[n - 1]));\n\n  return solve(matrix, ks);\n}\n\nfunction solve(matrix, ks) {\n  const m = matrix.length;\n  // column\n  for (let k = 0; k < m; k++) {\n    // pivot for column\n    let iMax = 0;\n    let vali = Number.NEGATIVE_INFINITY;\n    for (let i = k; i < m; i++)\n      if (matrix[i][k] > vali) {\n        iMax = i;\n        vali = matrix[i][k];\n      }\n    swapRows(matrix, k, iMax);\n\n    // for all rows below pivot\n    for (let i = k + 1; i < m; i++) {\n      for (let j = k + 1; j < m + 1; j++)\n        matrix[i][j] =\n          matrix[i][j] - matrix[k][j] * (matrix[i][k] / matrix[k][k]);\n      matrix[i][k] = 0;\n    }\n  }\n  // rows = columns\n  for (let i = m - 1; i >= 0; i--) {\n    const v = matrix[i][m] / matrix[i][i];\n    ks[i] = v;\n    // rows\n    for (let j = i - 1; j >= 0; j--) {\n      matrix[j][m] -= matrix[j][i] * v;\n      matrix[j][i] = 0;\n    }\n  }\n  return ks;\n}\n\nfunction zerosMatrix(rows, columns) {\n  const matrix = [];\n  for (let i = 0; i < rows; i++) {\n    matrix.push([]);\n    for (let j = 0; j < columns; j++) {\n      matrix[i].push(0);\n    }\n  }\n  return matrix;\n}\n\nfunction swapRows(m, k, l) {\n  const p = m[k];\n  m[k] = m[l];\n  m[l] = p;\n}\n","import { useState, useMemo, useLayoutEffect } from \"react\";\nimport { percentToRange, clamp } from \"../../utils\";\nimport { BANDS } from \"../../constants\";\nimport spline from \"./spline\";\nimport * as Selectors from \"../../selectors\";\nimport { usePromiseValueOrNull, useTypedSelector } from \"../../hooks\";\nimport { Slider } from \"../../types\";\n\nconst GRAPH_HEIGHT = 19;\nconst GRAPH_WIDTH = 113;\n\nfunction EqGraph() {\n  const sliders = useTypedSelector(Selectors.getSliders);\n\n  const preampLineImagePromise = useTypedSelector(Selectors.getPreampLineImage);\n  const preampLineImage = usePromiseValueOrNull(preampLineImagePromise);\n\n  const [canvasNode, setCanvasNode] = useState<HTMLCanvasElement | null>(null);\n\n  const canvasCtx = useMemo(\n    () => canvasNode?.getContext(\"2d\") ?? null,\n    [canvasNode]\n  );\n  const colorPattern = useColorPattern(canvasCtx);\n\n  useLayoutEffect(() => {\n    if (\n      canvasCtx == null ||\n      canvasNode == null ||\n      preampLineImage == null ||\n      colorPattern == null\n    ) {\n      return;\n    }\n    const width = Number(canvasNode.width);\n    const height = Number(canvasNode.height);\n    canvasCtx.clearRect(0, 0, width, height);\n    drawEqLine({ colorPattern, sliders, canvasCtx, preampLineImage });\n  }, [canvasCtx, canvasNode, colorPattern, preampLineImage, sliders]);\n\n  return (\n    <canvas\n      id=\"eqGraph\"\n      ref={setCanvasNode}\n      width={GRAPH_WIDTH}\n      height={GRAPH_HEIGHT}\n    />\n  );\n}\n\nfunction useColorPattern(canvasCtx: CanvasRenderingContext2D | null) {\n  const lineColorsImagePromise = useTypedSelector(Selectors.getLineColorsImage);\n  const lineColorsImage = usePromiseValueOrNull(lineColorsImagePromise);\n  return useMemo(() => {\n    if (canvasCtx == null || lineColorsImage == null) {\n      return null;\n    }\n    return canvasCtx.createPattern(lineColorsImage, \"repeat-x\");\n  }, [canvasCtx, lineColorsImage]);\n}\n\nfunction drawEqLine({\n  colorPattern,\n  sliders,\n  canvasCtx,\n  preampLineImage,\n}: {\n  sliders: Record<Slider, number>;\n  colorPattern: CanvasPattern;\n  preampLineImage: HTMLImageElement;\n  canvasCtx: CanvasRenderingContext2D;\n}) {\n  const preampValue = percentToRange(sliders.preamp / 100, 0, GRAPH_HEIGHT - 1);\n  canvasCtx.drawImage(\n    preampLineImage,\n    0,\n    preampValue,\n    preampLineImage.width,\n    preampLineImage.height\n  );\n\n  const amplitudes = BANDS.map((band) => sliders[band]);\n\n  canvasCtx.fillStyle = colorPattern;\n  const paddingLeft = 2; // TODO: This should be 1.5\n\n  const min = 0;\n  const max = GRAPH_HEIGHT - 1;\n\n  const xs: number[] = [];\n  const ys: number[] = [];\n  amplitudes.forEach((value, i) => {\n    const percent = (100 - value) / 100;\n    // Each band is 12 pixels widex\n    xs.push(i * 12);\n    ys.push(percentToRange(percent, min, max));\n  });\n\n  const allYs = spline(xs, ys);\n\n  const maxX = xs[xs.length - 1];\n  let lastY = ys[0];\n  for (let x = 0; x <= maxX; x++) {\n    const y = clamp(Math.round(allYs[x]), 0, GRAPH_HEIGHT - 1);\n    const yTop = Math.min(y, lastY);\n    const height = 1 + Math.abs(lastY - y);\n    canvasCtx.fillRect(paddingLeft + x, yTop, 1, height);\n    lastY = y;\n  }\n}\n\nexport default EqGraph;\n","import builtin from \"../../../presets/builtin.json\";\nimport * as Actions from \"../../actionCreators\";\nimport { Node, Parent, Hr } from \"../ContextMenu\";\nimport ContextMenuTarget from \"../ContextMenuTarget\";\nimport { useActionCreator } from \"../../hooks\";\nimport WinampButton from \"../WinampButton\";\n\nconst PresetsContextMenu = () => {\n  const openEqfFileDialog = useActionCreator(Actions.openEqfFileDialog);\n  const downloadPreset = useActionCreator(Actions.downloadPreset);\n  const setEqFromObject = useActionCreator(Actions.setEqFromObject);\n  return (\n    <ContextMenuTarget\n      top\n      id=\"presets-context\"\n      renderMenu={() => (\n        <>\n          <Parent label=\"Load\">\n            {builtin.presets.map((preset) => (\n              <Node\n                key={preset.name}\n                onClick={() => setEqFromObject(preset)}\n                label={preset.name}\n              />\n            ))}\n            <Hr />\n            <Node onClick={openEqfFileDialog} label=\"From Eqf...\" />\n          </Parent>\n          <Node onClick={downloadPreset} label=\"Save\" />\n        </>\n      )}\n    >\n      <WinampButton id=\"presets\" />\n    </ContextMenuTarget>\n  );\n};\n\nexport default PresetsContextMenu;\n","import ClickedDiv from \"../ClickedDiv\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport * as Selectors from \"../../selectors\";\nimport * as Actions from \"../../actionCreators\";\nimport { WINDOWS } from \"../../constants\";\nimport WinampButton from \"../WinampButton\";\n\nexport default function EqTitleButtons() {\n  const focusedWindow = useTypedSelector(Selectors.getFocusedWindow);\n\n  const selected = focusedWindow === WINDOWS.EQUALIZER;\n  const closeWindow = useActionCreator(Actions.closeWindow);\n  const toggleEqualizerShadeMode = useActionCreator(\n    Actions.toggleEqualizerShadeMode\n  );\n  return (\n    <ClickedDiv id=\"eq-buttons\" key={selected ? \"selected\" : \"unselected\"}>\n      <WinampButton id=\"equalizer-shade\" onClick={toggleEqualizerShadeMode} />\n      <WinampButton\n        id=\"equalizer-close\"\n        onClick={() => closeWindow(WINDOWS.EQUALIZER)}\n      />\n    </ClickedDiv>\n  );\n}\n","import Volume from \"../Volume\";\nimport Balance from \"../Balance\";\nimport { segment } from \"../../utils\";\nimport EqTitleButtons from \"./EqTitleButtons\";\n\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\n\nconst EqualizerShade = () => {\n  const volume = useTypedSelector(Selectors.getVolume);\n  const balance = useTypedSelector(Selectors.getBalance);\n  const toggleEqualizerShadeMode = useActionCreator(\n    Actions.toggleEqualizerShadeMode\n  );\n\n  const classes = [\"left\", \"center\", \"right\"];\n  const eqVolumeClassName = segment(0, 100, volume, classes);\n  const eqBalanceClassName = segment(-100, 100, balance, classes);\n  return (\n    <div\n      className=\"draggable\"\n      onDoubleClick={toggleEqualizerShadeMode}\n      style={{ width: \"100%\", height: \"100%\" }}\n    >\n      <EqTitleButtons />\n      <Volume id=\"equalizer-volume\" className={eqVolumeClassName} />\n      <Balance id=\"equalizer-balance\" className={eqBalanceClassName} />\n    </div>\n  );\n};\nexport default EqualizerShade;\n","import { useState } from \"react\";\nimport classnames from \"classnames\";\n\nimport { BANDS, WINDOWS } from \"../../constants\";\nimport * as Actions from \"../../actionCreators\";\nimport * as Selectors from \"../../selectors\";\n\nimport Band from \"./Band\";\nimport EqOn from \"./EqOn\";\nimport EqAuto from \"./EqAuto\";\nimport EqGraph from \"./EqGraph\";\nimport PresetsContextMenu from \"./PresetsContextMenu\";\nimport EqualizerShade from \"./EqualizerShade\";\n\nimport { Band as BandType } from \"../../types\";\nimport FocusTarget from \"../FocusTarget\";\nimport { useTypedSelector, useActionCreator } from \"../../hooks\";\nimport EqTitleButtons from \"./EqTitleButtons\";\n\nconst bandClassName = (band: BandType) => `band-${band}`;\n\nconst EqualizerWindow = () => {\n  const doubled = useTypedSelector(Selectors.getDoubled);\n  const focusedWindow = useTypedSelector(Selectors.getFocusedWindow);\n  const getWindowShade = useTypedSelector(Selectors.getWindowShade);\n\n  const selected = focusedWindow === WINDOWS.EQUALIZER;\n  const shade = getWindowShade(WINDOWS.EQUALIZER);\n\n  const setPreampValue = useActionCreator(Actions.setPreamp);\n  const setEqToMin = useActionCreator(Actions.setEqToMin);\n  const setEqToMid = useActionCreator(Actions.setEqToMid);\n  const setEqToMax = useActionCreator(Actions.setEqToMax);\n  const setHertzValue = useActionCreator(Actions.setEqBand);\n  const toggleEqualizerShadeMode = useActionCreator(\n    Actions.toggleEqualizerShadeMode\n  );\n\n  const className = classnames({\n    selected,\n    doubled,\n    shade,\n    window: true,\n    draggable: true,\n  });\n\n  // Track whether the click originated in the \"hertz\" area of the EQ\n  // We only want to allow drag across the EQ when the click originated in that area\n  const [clickOriginatedInEq, setClickOriginatedInEq] = useState(false);\n\n  const onPointerDownHz = (e: React.PointerEvent<HTMLDivElement>) => {\n    e.stopPropagation();\n    // Release the pointer capture\n    // https://w3c.github.io/pointerevents/#implicit-pointer-capture\n    // https://w3c.github.io/pointerevents/#pointer-capture\n    const target = e.target as HTMLDivElement;\n    target.releasePointerCapture(e.pointerId);\n\n    setClickOriginatedInEq(true);\n\n    function onReleaseHz(ee: PointerEvent) {\n      // Release only if it is the actual pointer release, not the simulated one coming from WinampButton\n      // Simulated pointer release coming from WinampButton has ee.detail == -42\n      // Actual pointer release here will come in as ee.detail === 0\n      if (ee.detail === 0) {\n        setClickOriginatedInEq(false);\n        document.removeEventListener(\"pointerup\", onReleaseHz);\n      }\n    }\n    document.addEventListener(\"pointerup\", onReleaseHz);\n  };\n\n  return (\n    <div id=\"equalizer-window\" className={className}>\n      <FocusTarget windowId={WINDOWS.EQUALIZER}>\n        {shade ? (\n          <EqualizerShade />\n        ) : (\n          <div>\n            <div\n              className=\"equalizer-top title-bar draggable\"\n              onDoubleClick={toggleEqualizerShadeMode}\n            >\n              <EqTitleButtons />\n            </div>\n            <EqOn />\n            <EqAuto />\n            <EqGraph />\n            <PresetsContextMenu />\n            <Band id=\"preamp\" band=\"preamp\" onChange={setPreampValue} />\n            <div id=\"plus12db\" onClick={setEqToMax} />\n            <div id=\"zerodb\" onClick={setEqToMid} />\n            <div id=\"minus12db\" onClick={setEqToMin} />\n            <div onPointerDown={onPointerDownHz}>\n              {BANDS.map((hertz) => (\n                <Band\n                  key={hertz}\n                  id={bandClassName(hertz)}\n                  band={hertz}\n                  onChange={(value) => setHertzValue(hertz, value)}\n                  clickOriginatedInEq={clickOriginatedInEq}\n                />\n              ))}\n            </div>\n          </div>\n        )}\n      </FocusTarget>\n    </div>\n  );\n};\nexport default EqualizerWindow;\n","import { LETTERS } from \"./constants\";\nimport { FONT_LOOKUP, imageConstFromChar } from \"./skinSprites\";\n\ninterface Selectors {\n  [name: string]: string[];\n}\n\nexport const imageSelectors: Selectors = {\n  MAIN_BALANCE_BACKGROUND: [\"#balance\"],\n  MAIN_BALANCE_THUMB: [\n    \"#balance::-webkit-slider-thumb\",\n    \"#balance::-moz-range-thumb\",\n  ],\n  MAIN_BALANCE_THUMB_ACTIVE: [\n    \"#balance:active::-webkit-slider-thumb\",\n    \"#balance:active::-moz-range-thumb\",\n  ],\n  MAIN_PREVIOUS_BUTTON: [\".actions #previous\"],\n  MAIN_PREVIOUS_BUTTON_ACTIVE: [\".actions #previous.winamp-active\"],\n  MAIN_PLAY_BUTTON: [\".actions #play\"],\n  MAIN_PLAY_BUTTON_ACTIVE: [\".actions #play.winamp-active\"],\n  MAIN_PAUSE_BUTTON: [\".actions #pause\"],\n  MAIN_PAUSE_BUTTON_ACTIVE: [\".actions #pause.winamp-active\"],\n  MAIN_STOP_BUTTON: [\".actions #stop\"],\n  MAIN_STOP_BUTTON_ACTIVE: [\".actions #stop.winamp-active\"],\n  MAIN_NEXT_BUTTON: [\".actions #next\"],\n  MAIN_NEXT_BUTTON_ACTIVE: [\".actions #next.winamp-active\"],\n  MAIN_EJECT_BUTTON: [\"#eject\"],\n  MAIN_EJECT_BUTTON_ACTIVE: [\"#eject.winamp-active\"],\n  MAIN_WINDOW_BACKGROUND: [\"#main-window\"],\n  MAIN_STEREO: [\".media-info #stereo\", \".stop .media-info #stereo.selected\"],\n  MAIN_STEREO_SELECTED: [\".media-info #stereo.selected\"],\n  MAIN_MONO: [\".media-info #mono\", \".stop .media-info #mono.selected\"],\n  MAIN_MONO_SELECTED: [\".media-info #mono.selected\"],\n  NO_MINUS_SIGN: [\"#time #minus-sign\"],\n  MINUS_SIGN: [\"#time.countdown #minus-sign\"],\n  DIGIT_0: [\".digit-0\"],\n  DIGIT_1: [\".digit-1\"],\n  DIGIT_2: [\".digit-2\"],\n  DIGIT_3: [\".digit-3\"],\n  DIGIT_4: [\".digit-4\"],\n  DIGIT_5: [\".digit-5\"],\n  DIGIT_6: [\".digit-6\"],\n  DIGIT_7: [\".digit-7\"],\n  DIGIT_8: [\".digit-8\"],\n  DIGIT_9: [\".digit-9\"],\n  NO_MINUS_SIGN_EX: [\"#time #minus-sign\"],\n  MINUS_SIGN_EX: [\"#time.countdown #minus-sign\"],\n  DIGIT_0_EX: [\".digit-0\"],\n  DIGIT_1_EX: [\".digit-1\"],\n  DIGIT_2_EX: [\".digit-2\"],\n  DIGIT_3_EX: [\".digit-3\"],\n  DIGIT_4_EX: [\".digit-4\"],\n  DIGIT_5_EX: [\".digit-5\"],\n  DIGIT_6_EX: [\".digit-6\"],\n  DIGIT_7_EX: [\".digit-7\"],\n  DIGIT_8_EX: [\".digit-8\"],\n  DIGIT_9_EX: [\".digit-9\"],\n  MAIN_PLAYING_INDICATOR: [\".play #play-pause\"],\n  MAIN_PAUSED_INDICATOR: [\".pause #play-pause\"],\n  MAIN_STOPPED_INDICATOR: [\".stop #play-pause\"],\n  MAIN_NOT_WORKING_INDICATOR: [\"#work-indicator\"],\n  MAIN_WORKING_INDICATOR: [\"#work-indicator.selected\"],\n  PLAYLIST_TOP_TILE: [\n    \".playlist-top-left-fill\",\n    \".playlist-top-left-spacer\",\n    \".playlist-top-right-fill\",\n    \".playlist-top-right-spacer\",\n  ],\n  PLAYLIST_TOP_LEFT_CORNER: [\".playlist-top-left\"],\n  PLAYLIST_TITLE_BAR: [\".playlist-top-title\"],\n  PLAYLIST_TOP_RIGHT_CORNER: [\".playlist-top-right\"],\n  PLAYLIST_TOP_TILE_SELECTED: [\n    \".selected .playlist-top-left-fill\",\n    \".selected .playlist-top-left-spacer\",\n    \".selected .playlist-top-right-fill\",\n    \".selected .playlist-top-right-spacer\",\n  ],\n  PLAYLIST_TOP_LEFT_SELECTED: [\".selected .playlist-top-left\"],\n  PLAYLIST_TITLE_BAR_SELECTED: [\".selected .playlist-top-title\"],\n  PLAYLIST_TOP_RIGHT_CORNER_SELECTED: [\".selected .playlist-top-right\"],\n  PLAYLIST_LEFT_TILE: [\".playlist-middle-left\"],\n  PLAYLIST_RIGHT_TILE: [\".playlist-middle-right\"],\n  PLAYLIST_SCROLL_HANDLE: [\".playlist-scrollbar-handle\"],\n  PLAYLIST_SCROLL_HANDLE_SELECTED: [\n    \".playlist-middle-right.winamp-active .playlist-scrollbar-handle\",\n  ],\n  PLAYLIST_BOTTOM_TILE: [\".playlist-bottom\"],\n  PLAYLIST_BOTTOM_LEFT_CORNER: [\".playlist-bottom-left\"],\n  PLAYLIST_BOTTOM_RIGHT_CORNER: [\".playlist-bottom-right\"],\n  PLAYLIST_VISUALIZER_BACKGROUND: [\".playlist-visualizer\"],\n  PLAYLIST_SHADE_BACKGROUND: [\"#playlist-window-shade\"],\n  PLAYLIST_SHADE_BACKGROUND_LEFT: [\"#playlist-window-shade .left\"],\n  PLAYLIST_SHADE_BACKGROUND_RIGHT: [\"#playlist-window-shade .right\"],\n  PLAYLIST_SHADE_BACKGROUND_RIGHT_SELECTED: [\n    \"#playlist-window-shade.selected .right\",\n  ],\n\n  PLAYLIST_ADD_MENU_BAR: [\"#playlist-add-menu.selected .bar\"],\n  PLAYLIST_ADD_URL: [\"#playlist-add-menu .add-url\"],\n  PLAYLIST_ADD_URL_SELECTED: [\"#playlist-add-menu .hover .add-url\"],\n  PLAYLIST_ADD_DIR: [\"#playlist-add-menu .add-dir\"],\n  PLAYLIST_ADD_DIR_SELECTED: [\"#playlist-add-menu .hover .add-dir\"],\n  PLAYLIST_ADD_FILE: [\"#playlist-add-menu .add-file\"],\n  PLAYLIST_ADD_FILE_SELECTED: [\"#playlist-add-menu .hover .add-file\"],\n\n  PLAYLIST_REMOVE_MENU_BAR: [\"#playlist-remove-menu.selected .bar\"],\n  PLAYLIST_REMOVE_ALL: [\"#playlist-remove-menu .remove-all\"],\n  PLAYLIST_REMOVE_ALL_SELECTED: [\"#playlist-remove-menu .hover .remove-all\"],\n  PLAYLIST_CROP: [\"#playlist-remove-menu .crop\"],\n  PLAYLIST_CROP_SELECTED: [\"#playlist-remove-menu .hover .crop\"],\n  PLAYLIST_REMOVE_SELECTED: [\"#playlist-remove-menu .remove-selected\"],\n  PLAYLIST_REMOVE_SELECTED_SELECTED: [\n    \"#playlist-remove-menu .hover .remove-selected\",\n  ],\n  PLAYLIST_REMOVE_MISC: [\"#playlist-remove-menu .remove-misc\"],\n  PLAYLIST_REMOVE_MISC_SELECTED: [\"#playlist-remove-menu .hover .remove-misc\"],\n\n  PLAYLIST_SELECT_MENU_BAR: [\"#playlist-selection-menu.selected .bar\"],\n  PLAYLIST_INVERT_SELECTION: [\"#playlist-selection-menu .invert-selection\"],\n  PLAYLIST_INVERT_SELECTION_SELECTED: [\n    \"#playlist-selection-menu .hover .invert-selection\",\n  ],\n  PLAYLIST_SELECT_ZERO: [\"#playlist-selection-menu .select-zero\"],\n  PLAYLIST_SELECT_ZERO_SELECTED: [\n    \"#playlist-selection-menu .hover .select-zero\",\n  ],\n  PLAYLIST_SELECT_ALL: [\"#playlist-selection-menu .select-all\"],\n  PLAYLIST_SELECT_ALL_SELECTED: [\"#playlist-selection-menu .hover .select-all\"],\n  PLAYLIST_CLOSE_SELECTED: [\"#playlist-close-button.winamp-active\"],\n  PLAYLIST_COLLAPSE_SELECTED: [\n    \"#playlist-window #playlist-shade-button.winamp-active\",\n  ],\n  PLAYLIST_EXPAND_SELECTED: [\n    \"#playlist-window-shade #playlist-shade-button.winamp-active\",\n  ],\n\n  PLAYLIST_MISC_MENU_BAR: [\"#playlist-misc-menu.selected .bar\"],\n  PLAYLIST_MISC_OPTIONS: [\"#playlist-misc-menu .misc-options\"],\n  PLAYLIST_MISC_OPTIONS_SELECTED: [\"#playlist-misc-menu .hover .misc-options\"],\n  PLAYLIST_FILE_INFO: [\"#playlist-misc-menu .file-info\"],\n  PLAYLIST_FILE_INFO_SELECTED: [\"#playlist-misc-menu .hover .file-info\"],\n  PLAYLIST_SORT_LIST: [\"#playlist-misc-menu .sort-list\"],\n  PLAYLIST_SORT_LIST_SELECTED: [\"#playlist-misc-menu .hover .sort-list\"],\n\n  PLAYLIST_LIST_BAR: [\"#playlist-list-menu.selected .bar\"],\n  PLAYLIST_NEW_LIST: [\"#playlist-list-menu .new-list\"],\n  PLAYLIST_NEW_LIST_SELECTED: [\"#playlist-list-menu .hover .new-list\"],\n  PLAYLIST_LOAD_LIST: [\"#playlist-list-menu .load-list\"],\n  PLAYLIST_LOAD_LIST_SELECTED: [\"#playlist-list-menu .hover .load-list\"],\n  PLAYLIST_SAVE_LIST: [\"#playlist-list-menu .save-list\"],\n  PLAYLIST_SAVE_LIST_SELECTED: [\"#playlist-list-menu .hover .save-list\"],\n\n  EQ_WINDOW_BACKGROUND: [\"#equalizer-window:not(.shade)\"],\n  EQ_TITLE_BAR: [\".equalizer-top\"],\n  EQ_TITLE_BAR_SELECTED: [\".selected .equalizer-top\"],\n  EQ_SLIDER_BACKGROUND: [\".band\"],\n  EQ_SLIDER_THUMB: [\".band .slider-handle\"],\n  // Put the \"active\" pseudo selector on the parent, since clicking\n  // anywhere on the track moves the slider.\n  EQ_SLIDER_THUMB_SELECTED: [\".band.winamp-active .slider-handle\"],\n  EQ_ON_BUTTON: [\"#on\"],\n  EQ_ON_BUTTON_DEPRESSED: [\"#on.winamp-active\"],\n  EQ_ON_BUTTON_SELECTED: [\"#on.selected\"],\n  EQ_ON_BUTTON_SELECTED_DEPRESSED: [\"#on.selected.winamp-active\"],\n  EQ_AUTO_BUTTON: [\"#auto\"],\n  EQ_AUTO_BUTTON_DEPRESSED: [\"#auto.winamp-active\"],\n  EQ_AUTO_BUTTON_SELECTED: [\"#auto.selected\"],\n  EQ_AUTO_BUTTON_SELECTED_DEPRESSED: [\"#auto.selected.winamp-active\"],\n  EQ_GRAPH_BACKGROUND: [\"#eqGraph\"],\n  EQ_PRESETS_BUTTON: [\"#presets\"],\n  EQ_PRESETS_BUTTON_SELECTED: [\"#presets.winamp-active\"],\n  EQ_PREAMP_LINE: [\"#preamp-line\"],\n  EQ_SHADE_BACKGROUND: [\"#equalizer-window.shade\"],\n  EQ_SHADE_BACKGROUND_SELECTED: [\"#equalizer-window.shade.selected\"],\n  EQ_SHADE_VOLUME_SLIDER_LEFT: [\n    \"#equalizer-volume.left::-webkit-slider-thumb\",\n    \"#equalizer-volume.left::-moz-range-thumb\",\n  ],\n  EQ_SHADE_VOLUME_SLIDER_CENTER: [\n    \"#equalizer-volume.center::-webkit-slider-thumb\",\n    \"#equalizer-volume.center::-moz-range-thumb\",\n  ],\n  EQ_SHADE_VOLUME_SLIDER_RIGHT: [\n    \"#equalizer-volume.right::-webkit-slider-thumb\",\n    \"#equalizer-volume.right::-moz-range-thumb\",\n  ],\n  EQ_SHADE_BALANCE_SLIDER_LEFT: [\n    \"#equalizer-balance.left::-webkit-slider-thumb\",\n    \"#equalizer-balance.left::-moz-range-thumb\",\n  ],\n  EQ_SHADE_BALANCE_SLIDER_CENTER: [\n    \"#equalizer-balance.center::-webkit-slider-thumb\",\n    \"#equalizer-balance.center::-moz-range-thumb\",\n  ],\n  EQ_SHADE_BALANCE_SLIDER_RIGHT: [\n    \"#equalizer-balance.right::-webkit-slider-thumb\",\n    \"#equalizer-balance.right::-moz-range-thumb\",\n  ],\n  EQ_MAXIMIZE_BUTTON_ACTIVE: [\"#equalizer-shade.winamp-active\"],\n  EQ_MINIMIZE_BUTTON_ACTIVE: [\n    \"#equalizer-window.shade #equalizer-shade.winamp-active\",\n  ],\n  EQ_CLOSE_BUTTON: [\n    \"#equalizer-window.selected #eq-buttons.clicked #equalizer-close\",\n  ],\n  EQ_CLOSE_BUTTON_ACTIVE: [\n    \"#equalizer-window.selected #eq-buttons.clicked #equalizer-close.winamp-active\",\n  ],\n  EQ_SHADE_CLOSE_BUTTON: [\n    \"#equalizer-window.shade.selected #eq-buttons.clicked #equalizer-close\",\n  ],\n  EQ_SHADE_CLOSE_BUTTON_ACTIVE: [\n    \"#equalizer-window.shade.selected #eq-buttons.clicked #equalizer-close.winamp-active\",\n  ],\n  MAIN_POSITION_SLIDER_BACKGROUND: [\"#position\"],\n  MAIN_POSITION_SLIDER_THUMB: [\n    \"#position::-webkit-slider-thumb\",\n    \"#position::-moz-range-thumb\",\n  ],\n  MAIN_POSITION_SLIDER_THUMB_SELECTED: [\n    \"#position:active::-webkit-slider-thumb\",\n    \"#position:active::-moz-range-thumb\",\n  ],\n  MAIN_SHUFFLE_BUTTON: [\"#shuffle\"],\n  MAIN_SHUFFLE_BUTTON_DEPRESSED: [\"#shuffle.winamp-active\"],\n  MAIN_SHUFFLE_BUTTON_SELECTED: [\"#shuffle.selected\"],\n  MAIN_SHUFFLE_BUTTON_SELECTED_DEPRESSED: [\"#shuffle.selected.winamp-active\"],\n  MAIN_REPEAT_BUTTON: [\"#repeat\"],\n  MAIN_REPEAT_BUTTON_DEPRESSED: [\"#repeat.winamp-active\"],\n  MAIN_REPEAT_BUTTON_SELECTED: [\"#repeat.selected\"],\n  MAIN_REPEAT_BUTTON_SELECTED_DEPRESSED: [\"#repeat.selected.winamp-active\"],\n  MAIN_EQ_BUTTON: [\"#equalizer-button\"],\n  MAIN_EQ_BUTTON_SELECTED: [\"#equalizer-button.selected\"],\n  MAIN_EQ_BUTTON_DEPRESSED: [\"#equalizer-button.winamp-active\"],\n  MAIN_EQ_BUTTON_DEPRESSED_SELECTED: [\n    \"#equalizer-button.selected.winamp-button\",\n  ],\n  MAIN_PLAYLIST_BUTTON: [\"#playlist-button\"],\n  MAIN_PLAYLIST_BUTTON_SELECTED: [\"#playlist-button.selected\"],\n  MAIN_PLAYLIST_BUTTON_DEPRESSED: [\"#playlist-button.winamp-active\"],\n  MAIN_PLAYLIST_BUTTON_DEPRESSED_SELECTED: [\n    \"#playlist-button.selected.winamp-active\",\n  ],\n  MAIN_TITLE_BAR: [\"#title-bar\"],\n  MAIN_TITLE_BAR_SELECTED: [\".selected #title-bar\"],\n  MAIN_EASTER_EGG_TITLE_BAR: [\".llama #title-bar\"],\n  MAIN_EASTER_EGG_TITLE_BAR_SELECTED: [\".llama.selected #title-bar\"],\n  MAIN_OPTIONS_BUTTON: [\".selected #title-bar #option.clicked\"],\n  MAIN_OPTIONS_BUTTON_DEPRESSED: [\n    \".selected #title-bar #option:active\",\n    \".selected #title-bar #option.selected\",\n  ],\n  MAIN_MINIMIZE_BUTTON: [\".selected #title-bar #minimize.clicked\"],\n  MAIN_MINIMIZE_BUTTON_DEPRESSED: [\n    \".selected #title-bar #minimize.winamp-active\",\n  ],\n  MAIN_SHADE_BUTTON: [\".selected #title-bar #shade.clicked\"],\n  MAIN_SHADE_BUTTON_DEPRESSED: [\".selected #title-bar #shade.winamp-active\"],\n  MAIN_CLOSE_BUTTON: [\".selected #title-bar #close.clicked\"],\n  MAIN_CLOSE_BUTTON_DEPRESSED: [\".selected #title-bar #close.winamp-active\"],\n  MAIN_CLUTTER_BAR_BACKGROUND: [\"#clutter-bar\"],\n  MAIN_CLUTTER_BAR_BACKGROUND_DISABLED: [\"#clutter-bar.disabled\"],\n  MAIN_CLUTTER_BAR_BUTTON_O_SELECTED: [\n    \"#button-o:active\",\n    \"#button-0.selected\",\n  ],\n  MAIN_CLUTTER_BAR_BUTTON_A_SELECTED: [\n    \"#button-a:active\",\n    \"#button-a.selected\",\n  ],\n  MAIN_CLUTTER_BAR_BUTTON_I_SELECTED: [\n    \"#button-i:active\",\n    \"#button-i.selected\",\n  ],\n  MAIN_CLUTTER_BAR_BUTTON_D_SELECTED: [\n    \"#button-d:active\",\n    \"#button-d.selected\",\n  ],\n  MAIN_CLUTTER_BAR_BUTTON_V_SELECTED: [\n    \"#button-v:active\",\n    \"#button-v.selected\",\n  ],\n  MAIN_SHADE_BACKGROUND: [\".shade #title-bar\"],\n  MAIN_SHADE_BACKGROUND_SELECTED: [\".shade.selected #title-bar\"],\n  MAIN_SHADE_BUTTON_SELECTED: [\".shade.selected #title-bar #shade\"],\n  MAIN_SHADE_BUTTON_SELECTED_DEPRESSED: [\n    \".shade #title-bar #shade.winamp-active\",\n  ],\n  MAIN_SHADE_POSITION_BACKGROUND: [\".shade #position\"],\n  MAIN_SHADE_POSITION_THUMB: [\n    \".shade #position::-moz-range-thumb\",\n    \".shade #position::-webkit-slider-thumb\",\n  ],\n  MAIN_SHADE_POSITION_THUMB_LEFT: [\n    \".shade #position.left::-moz-range-thumb\",\n    \".shade #position.left::-webkit-slider-thumb\",\n  ],\n  MAIN_SHADE_POSITION_THUMB_RIGHT: [\n    \".shade #position.right::-moz-range-thumb\",\n    \".shade #position.right::-webkit-slider-thumb\",\n  ],\n  MAIN_VOLUME_BACKGROUND: [\"#volume\"],\n  MAIN_VOLUME_THUMB: [\n    \"#volume input::-webkit-slider-thumb\",\n    \"#volume input::-moz-range-thumb\",\n  ],\n  MAIN_VOLUME_THUMB_SELECTED: [\n    \"#volume input:active::-webkit-slider-thumb\",\n    \"#volume input:active::-moz-range-thumb\",\n  ],\n  GEN_TOP_CENTER_FILL: [\".gen-window .gen-top\"],\n  GEN_TOP_LEFT: [\".gen-window .gen-top-left\"],\n  GEN_TOP_LEFT_END: [\".gen-window .gen-top-left-end\"],\n  GEN_TOP_RIGHT: [\".gen-window .gen-top-right\"],\n  GEN_TOP_RIGHT_END: [\".gen-window .gen-top-right-end\"],\n  GEN_TOP_LEFT_RIGHT_FILL: [\n    \".gen-window .gen-top-left-fill\",\n    \".gen-window .gen-top-right-fill\",\n  ],\n\n  GEN_TOP_CENTER_FILL_SELECTED: [\".gen-window.selected .gen-top\"],\n  GEN_TOP_LEFT_SELECTED: [\".gen-window.selected .gen-top-left\"],\n  GEN_TOP_LEFT_END_SELECTED: [\".gen-window.selected .gen-top-left-end\"],\n  GEN_TOP_RIGHT_SELECTED: [\".gen-window.selected .gen-top-right\"],\n  GEN_TOP_RIGHT_END_SELECTED: [\".gen-window.selected .gen-top-right-end\"],\n  GEN_TOP_LEFT_RIGHT_FILL_SELECTED: [\n    \".gen-window.selected .gen-top-left-fill\",\n    \".gen-window.selected .gen-top-right-fill\",\n  ],\n  GEN_BOTTOM_LEFT: [\".gen-window .gen-bottom-left\"],\n  GEN_BOTTOM_RIGHT: [\".gen-window .gen-bottom-right\"],\n  GEN_BOTTOM_FILL: [\".gen-window .gen-bottom\"],\n  GEN_MIDDLE_LEFT: [\".gen-window .gen-middle-left\"],\n  GEN_MIDDLE_LEFT_BOTTOM: [\".gen-window .gen-middle-left-bottom\"],\n  GEN_MIDDLE_RIGHT: [\".gen-window .gen-middle-right\"],\n  GEN_MIDDLE_RIGHT_BOTTOM: [\".gen-window .gen-middle-right-bottom\"],\n  GEN_CLOSE_SELECTED: [\".gen-window .gen-close.winamp-active\"],\n};\n\nObject.keys(FONT_LOOKUP).forEach((character) => {\n  const key = imageConstFromChar(character);\n  const code = character.charCodeAt(0);\n  imageSelectors[key] = [`.character-${code}`];\n});\n\nLETTERS.forEach((character) => {\n  imageSelectors[`GEN_TEXT_${character}`] = [\n    `.gen-text-${character.toLowerCase()}`,\n  ];\n  imageSelectors[`GEN_TEXT_SELECTED_${character}`] = [\n    `.gen-window.selected .gen-text-${character.toLowerCase()}`,\n  ];\n});\n\nexport const cursorSelectors: Selectors = {\n  CLOSE: [\"#title-bar #close\"],\n  // This is not quite right. There are some areas that show this cursor\n  // but are not clickable.\n  EQSLID: [\"#equalizer-window .band\"],\n  EQNORMAL: [\"#equalizer-window\"],\n  EQCLOSE: [\"#equalizer-window #equalizer-close\"],\n  EQTITLE: [\n    \"#equalizer-window .title-bar\",\n    \"#equalizer-window.shade\",\n    \"#equalizer-window.shade input\",\n  ],\n  MAINMENU: [\"#main-window #option\", \"#webamp-context-menu .context-menu\"],\n  MIN: [\"#main-window #minimize\"],\n  NORMAL: [\n    // Use this as the default cursor.\n    \".window\",\n    \".window input\", // Otherwise\n    \"#main-window\",\n    \"#main-window.shade #title-bar\",\n  ],\n  MMENU: [\"#main-window.shade #option\"],\n  PNORMAL: [\"#playlist-window\"],\n  // TODO: This is should really only apply to the top part of the top.\n  // The chrome around the playlist window is larger than others. The\n  // cursor only applies to the same height as the other window's chrome.\n  PTBAR: [\"#playlist-window .playlist-top\"],\n  PCLOSE: [\n    \"#playlist-window #playlist-close-button\",\n    \"#playlist-window-shade #playlist-close-button\",\n  ],\n  PWINBUT: [\n    \"#playlist-window #playlist-shade-button\",\n    \"#playlist-window-shade #playlist-shade-button\",\n  ],\n  POSBAR: [\"#main-window #position\"],\n  PSIZE: [\"#playlist-window #playlist-resize-target\"],\n  PWSSIZE: [\"#playlist-window-shade #playlist-resize-target\"],\n  PWSNORM: [\"#playlist-window-shade\"],\n  // TODO: The target for this is not quite right.\n  PVSCROLL: [\"#playlist-window .playlist-scrollbar\"],\n  SONGNAME: [\"#main-window #marquee\"],\n  TITLEBAR: [\"#main-window #title-bar\"],\n  VOLBAL: [\"#volume\", \"#volume input\", \"#balance\"],\n  WINBUT: [\"#main-window #shade\"],\n  WSNORMAL: [\"#main-window.shade #title-bar\"],\n  WSPOSBAR: [\"#main-window.shade #position\"],\n};\n","import { createPortal } from \"react-dom\";\nimport { useMemo, useLayoutEffect } from \"react\";\n\ntype Props = {\n  children: string;\n  id?: string;\n};\n\nexport default function Css({ children, id }: Props) {\n  const style = useMemo(() => {\n    const s = document.createElement(\"style\");\n    s.type = \"text/css\";\n    if (id != null) {\n      s.id = id;\n    }\n    return s;\n  }, [id]);\n\n  useLayoutEffect(() => {\n    document.head.appendChild(style);\n    return () => style.remove();\n  }, [style]);\n\n  return createPortal(children, style);\n}\n","import { useMemo, useLayoutEffect } from \"react\";\nimport { createPortal } from \"react-dom\";\n\ntype Props = {\n  children: { [id: string]: string[] };\n};\n\n// this.props.children should be an object containing arrays of strings. The\n// keys are ids, and the arrays are arrays of polygon point strings\nexport default function ClipPaths({ children }: Props) {\n  const paths = useMemo(() => {\n    return document.createElement(\"div\");\n  }, []);\n\n  useLayoutEffect(() => {\n    document.body.appendChild(paths);\n    return () => paths.remove();\n  }, [paths]);\n\n  return createPortal(\n    <svg height={0} width={0}>\n      <defs>\n        {Object.keys(children).map((id) => (\n          <clipPath id={id} key={id}>\n            {children[id].map((points, i) => (\n              <polygon points={points} key={i} />\n            ))}\n          </clipPath>\n        ))}\n      </defs>\n    </svg>,\n    paths\n  );\n}\n","/*\r\n * Copyright (c) 2017-2018 Rafael da Silva Rocha.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview A function to swap endianness in byte buffers.\r\n * @see https://github.com/rochars/endianness\r\n */\r\n\r\n/** @module endianness */\r\n\r\n/**\r\n * Swap the byte ordering in a buffer. The buffer is modified in place.\r\n * @param {!Array|!Uint8Array} bytes The bytes.\r\n * @param {number} offset The byte offset.\r\n * @param {number=} start The start index. Assumes 0.\r\n * @param {number=} end The end index. Assumes the buffer length.\r\n * @throws {Error} If the buffer length is not valid.\r\n */\r\nexport default function endianness(bytes, offset, start=0, end=bytes.length) {\r\n  if (end % offset) {\r\n    throw new Error(\"Bad buffer length.\");\r\n  }\r\n  for (let index = start; index < end; index += offset) {\r\n    swap(bytes, offset, index);\r\n  }\r\n}\r\n\r\n/**\r\n * Swap the byte order of a value in a buffer. The buffer is modified in place.\r\n * @param {!Array|!Uint8Array} bytes The bytes.\r\n * @param {number} offset The byte offset.\r\n * @param {number} index The start index.\r\n * @private\r\n */\r\nfunction swap(bytes, offset, index) {\r\n  offset--;\r\n  for(let x = 0; x < offset; x++) {\r\n    /** @type {*} */\r\n    let theByte = bytes[index + x];\r\n    bytes[index + x] = bytes[index + offset];\r\n    bytes[index + offset] = theByte;\r\n    offset--;\r\n  }\r\n}\r\n","/*\r\n * Copyright (c) 2018 Rafael da Silva Rocha.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview Functions to serialize and deserialize UTF-8 strings.\r\n * @see https://github.com/rochars/utf8-buffer\r\n * @see https://encoding.spec.whatwg.org/#the-encoding\r\n * @see https://encoding.spec.whatwg.org/#utf-8-encoder\r\n */\r\n\r\n/** @module utf8-buffer */\r\n\r\n/**\r\n * Read a string of UTF-8 characters from a byte buffer.\r\n * Invalid characters are replaced with 'REPLACEMENT CHARACTER' (U+FFFD).\r\n * @see https://encoding.spec.whatwg.org/#the-encoding\r\n * @see https://stackoverflow.com/a/34926911\r\n * @param {!Uint8Array|!Array<number>} buffer A byte buffer.\r\n * @param {number=} start The buffer index to start reading.\r\n * @param {?number=} end The buffer index to stop reading.\r\n *   Assumes the buffer length if undefined.\r\n * @return {string}\r\n */\r\nexport function unpack(buffer, start=0, end=buffer.length) {\r\n  /** @type {string} */\r\n  let str = '';\r\n  for(let index = start; index < end;) {\r\n    /** @type {number} */\r\n    let lowerBoundary = 0x80;\r\n    /** @type {number} */\r\n    let upperBoundary = 0xBF;\r\n    /** @type {boolean} */\r\n    let replace = false;\r\n    /** @type {number} */\r\n    let charCode = buffer[index++];\r\n    if (charCode >= 0x00 && charCode <= 0x7F) {\r\n      str += String.fromCharCode(charCode);\r\n    } else {\r\n      /** @type {number} */\r\n      let count = 0;\r\n      if (charCode >= 0xC2 && charCode <= 0xDF) {\r\n        count = 1;\r\n      } else if (charCode >= 0xE0 && charCode <= 0xEF ) {\r\n        count = 2;\r\n        if (buffer[index] === 0xE0) {\r\n          lowerBoundary = 0xA0;\r\n        }\r\n        if (buffer[index] === 0xED) {\r\n          upperBoundary = 0x9F;\r\n        }\r\n      } else if (charCode >= 0xF0 && charCode <= 0xF4 ) {\r\n        count = 3;\r\n        if (buffer[index] === 0xF0) {\r\n          lowerBoundary = 0x90;\r\n        }\r\n        if (buffer[index] === 0xF4) {\r\n          upperBoundary = 0x8F;\r\n        }\r\n      } else {\r\n        replace = true;\r\n      }\r\n      charCode = charCode & (1 << (8 - count - 1)) - 1;\r\n      for (let i = 0; i < count; i++) {\r\n        if (buffer[index] < lowerBoundary || buffer[index] > upperBoundary) {\r\n          replace = true;\r\n        }\r\n        charCode = (charCode << 6) | (buffer[index] & 0x3f);\r\n        index++;\r\n      }\r\n      if (replace) {\r\n        str += String.fromCharCode(0xFFFD);\r\n      } \r\n      else if (charCode <= 0xffff) {\r\n        str += String.fromCharCode(charCode);\r\n      } else {\r\n        charCode -= 0x10000;\r\n        str += String.fromCharCode(\r\n          ((charCode >> 10) & 0x3ff) + 0xd800,\r\n          (charCode & 0x3ff) + 0xdc00);\r\n      }\r\n    }\r\n  }\r\n  return str;\r\n}\r\n\r\n/**\r\n * Write a string of UTF-8 characters to a byte buffer.\r\n * @see https://encoding.spec.whatwg.org/#utf-8-encoder\r\n * @param {string} str The string to pack.\r\n * @param {!Uint8Array|!Array<number>} buffer The buffer to pack the string to.\r\n * @param {number=} index The buffer index to start writing.\r\n * @return {number} The next index to write in the buffer.\r\n */\r\nexport function pack(str, buffer, index=0) {\r\n  for (let i = 0, len = str.length; i < len; i++) {\r\n    /** @type {number} */\r\n    let codePoint = str.codePointAt(i);\r\n    if (codePoint < 128) {\r\n      buffer[index] = codePoint;\r\n      index++;\r\n    } else {\r\n      /** @type {number} */\r\n      let count = 0;\r\n      /** @type {number} */\r\n      let offset = 0;\r\n      if (codePoint <= 0x07FF) {\r\n        count = 1;\r\n        offset = 0xC0;\r\n      } else if(codePoint <= 0xFFFF) {\r\n        count = 2;\r\n        offset = 0xE0;\r\n      } else if(codePoint <= 0x10FFFF) {\r\n        count = 3;\r\n        offset = 0xF0;\r\n        i++;\r\n      }\r\n      buffer[index] = (codePoint >> (6 * count)) + offset;\r\n      index++;\r\n      while (count > 0) {\r\n        buffer[index] = 0x80 | (codePoint >> (6 * (count - 1)) & 0x3F);\r\n        index++;\r\n        count--;\r\n      }\r\n    }\r\n  }\r\n  return index;\r\n}\r\n","/*\r\n * Copyright (c) 2017-2018 Rafael da Silva Rocha.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview Encode and decode int numbers to and from byte buffers.\r\n * @see https://github.com/rochars/byte-data\r\n */\r\n\r\n/**\r\n * A class to write and read integer numbers to and from byte buffers.\r\n */\r\nexport class IntParser {\r\n  \r\n  /**\r\n   * @param {number} bits The number of bits used by the integer.\r\n   * @param {boolean} [signed=false] True for signed, false otherwise.\r\n   * @param {boolean} [clamp=false] True to clamp on overflow.\r\n   */\r\n  constructor(bits, signed=false, clamp=false) {\r\n    /**\r\n     * The number of bits used by one number.\r\n     * @type {number}\r\n     */\r\n    this.bits = bits;\r\n    /**\r\n     * The number of bytes used by one number.\r\n     * @type {number}\r\n     */\r\n    this.bytes = bits < 8 ? 1 : Math.ceil(bits / 8);\r\n    /**\r\n     * @type {number}\r\n     * @protected\r\n     */\r\n    this.max = Math.pow(2, bits) - 1;\r\n    /**\r\n     * @type {number}\r\n     * @protected\r\n     */\r\n    this.min = 0;\r\n    /** @type {number} */\r\n    let r = 8 - ((((bits - 1) | 7) + 1) - bits);\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.lastByteMask_ = Math.pow(2, r > 0 ? r : 8) - 1;\r\n    /**\r\n     * @type {Function}\r\n     * @protected\r\n     */\r\n    this.unpack = this.unpackUnsigned_;\r\n    if (signed) {\r\n      this.max = Math.pow(2, bits) / 2 - 1;\r\n      this.min = -this.max - 1;\r\n      this.unpack = this.unpackSigned_;\r\n    }\r\n    if (clamp) {\r\n      this.overflow_ = this.overflowClamp_;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Write one unsigned integer to a byte buffer.\r\n   * @param {!(Uint8Array|Array<number>)} buffer An array of bytes.\r\n   * @param {number} num The number. Overflows are truncated.\r\n   * @param {number} [index=0] The index being written in the byte buffer.\r\n   * @return {number} The next index to write on the byte buffer.\r\n   */\r\n  pack(buffer, num, index=0) {\r\n    if (num !== num || num.constructor != Number) {\r\n      throw new TypeError();\r\n    }\r\n    num = this.overflow_(num);\r\n    buffer[index] = (num < 0 ? num + Math.pow(2, this.bits) : num) & 255;\r\n    index++;\r\n    for (let i = 2, len = this.bytes; i < len; i++) {\r\n      buffer[index] = Math.floor(num / Math.pow(2, ((i - 1) * 8))) & 255;\r\n      index++;\r\n    }\r\n    if (this.bits > 8) {\r\n      buffer[index] = Math.floor(\r\n        num / Math.pow(2, ((this.bytes - 1) * 8))) & this.lastByteMask_;\r\n      index++;\r\n    }\r\n    return index;\r\n  }\r\n\r\n  /**\r\n   * Read one unsigned integer from a byte buffer.\r\n   * Does not check for overflows.\r\n   * @param {!(Uint8Array|Array<number>)} buffer An array of bytes.\r\n   * @param {number} [index=0] The index to read.\r\n   * @return {number}\r\n   */\r\n  unpack_(buffer, index=0) {\r\n    /** @type {number} */\r\n    let num = 0;\r\n    for(let x = 0; x < this.bytes; x++) {\r\n      num += buffer[index + x] * Math.pow(256, x);\r\n    }\r\n    return num;\r\n  }\r\n\r\n  unpackUnsigned_(buffer, index=0) {\r\n    return this.overflow_(this.unpack_(buffer, index));\r\n  }\r\n\r\n  /**\r\n   * Read one two's complement signed integer from a byte buffer.\r\n   * @param {!(Uint8Array|Array<number>)} buffer An array of bytes.\r\n   * @param {number} [index=0] The index to read.\r\n   * @return {number}\r\n   */\r\n  unpackSigned_(buffer, index=0) {\r\n    return this.overflow_(this.sign_(this.unpack_(buffer, index)));\r\n  }\r\n\r\n  /**\r\n   * Truncate values in case of overflow.\r\n   * @param {number} num The number.\r\n   * @private\r\n   */\r\n  overflow_(num) {\r\n    if (num > this.max || num < this.min) {\r\n      throw new RangeError();\r\n    }\r\n    return num;\r\n  }\r\n\r\n  /**\r\n   * Truncate values in case of overflow.\r\n   * @param {number} num The number.\r\n   * @private\r\n   */\r\n  overflowClamp_(num) {\r\n    if (num > this.max) {\r\n      return this.max;\r\n    } else if (num < this.min) {\r\n      return this.min;\r\n    }\r\n    return num;\r\n  }\r\n\r\n  /**\r\n   * Sign a number.\r\n   * @param {number} num The number.\r\n   * @return {number}\r\n   * @private\r\n   */\r\n  sign_(num) {\r\n    if (num > this.max) {\r\n      num -= (this.max * 2) + 2;\r\n    }\r\n    return num;\r\n  }\r\n}\r\n","/*\r\n * Copyright (c) 2018-2019 Rafael da Silva Rocha.\r\n * Copyright (c) 2013 DeNA Co., Ltd.\r\n * Copyright (c) 2010, Linden Research, Inc\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview Encode and decode IEEE 754 floating point numbers.\r\n * @see https://github.com/rochars/ieee754-buffer\r\n * @see https://bitbucket.org/lindenlab/llsd/raw/7d2646cd3f9b4c806e73aebc4b32bd81e4047fdc/js/typedarray.js\r\n * @see https://github.com/kazuho/ieee754.js/blob/master/ieee754.js\r\n */\r\n\r\n/** \r\n * @module ieee754-buffer\r\n */\r\n\r\n/**\r\n * A class to encode and decode IEEE 754 floating-point numbers.\r\n */\r\nexport class IEEE754Buffer {\r\n\r\n  /**\r\n   * Pack a IEEE 754 floating point number.\r\n   * @param {number} ebits The exponent bits.\r\n   * @param {number} fbits The fraction bits.\r\n   */\r\n  constructor(ebits, fbits) {\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.ebits = ebits;\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.fbits = fbits;\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.bias = (1 << (ebits - 1)) - 1;\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.numBytes = Math.ceil((ebits + fbits) / 8);\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.biasP2 = Math.pow(2, this.bias + 1);\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.ebitsFbits = (ebits + fbits);\r\n    /**\r\n     * @type {number}\r\n     * @private\r\n     */\r\n    this.fbias = Math.pow(2, -(8 * this.numBytes - 1 - ebits));\r\n  }\r\n\r\n  /**\r\n   * Pack a IEEE 754 floating point number.\r\n   * @param {!Uint8Array|!Array<number>} buffer The buffer.\r\n   * @param {number} num The number.\r\n   * @param {number} index The index to write on the buffer.\r\n   * @return {number} The next index to write on the buffer.\r\n   * @throws {TypeError} If input is not a number.\r\n   */\r\n  pack(buffer, num, index) {\r\n    // Only numbers can be packed\r\n    if (typeof num != 'number') {\r\n      throw new TypeError();\r\n    }\r\n    // Round overflows\r\n    if (Math.abs(num) > this.biasP2 - (this.ebitsFbits * 2)) {\r\n      num = num < 0 ? -Infinity : Infinity;\r\n    }\r\n    /**\r\n     * sign, need this to handle negative zero\r\n     * @see http://cwestblog.com/2014/02/25/javascript-testing-for-negative-zero/\r\n     * @type {number}\r\n     */\r\n    let sign = (((num = +num) || 1 / num) < 0) ? 1 : num < 0 ? 1 : 0;\r\n    num = Math.abs(num);\r\n    /** @type {number} */\r\n    let exp = Math.min(Math.floor(Math.log(num) / Math.LN2), 1023);\r\n    /** @type {number} */\r\n    let fraction = roundToEven(num / Math.pow(2, exp) * Math.pow(2, this.fbits));\r\n    // NaN\r\n    if (num !== num) {\r\n      fraction = Math.pow(2, this.fbits - 1);\r\n      exp = (1 << this.ebits) - 1;\r\n    // Number\r\n    } else if (num !== 0) {\r\n      if (num >= Math.pow(2, 1 - this.bias)) {\r\n        if (fraction / Math.pow(2, this.fbits) >= 2) {\r\n          exp = exp + 1;\r\n          fraction = 1;\r\n        }\r\n        // Overflow\r\n        if (exp > this.bias) {\r\n          exp = (1 << this.ebits) - 1;\r\n          fraction = 0;\r\n        } else {\r\n          exp = exp + this.bias;\r\n          fraction = roundToEven(fraction) - Math.pow(2, this.fbits);\r\n        }\r\n      } else {\r\n        fraction = roundToEven(num / Math.pow(2, 1 - this.bias - this.fbits));\r\n        exp = 0;\r\n      } \r\n    }\r\n    return this.packFloatBits_(buffer, index, sign, exp, fraction);\r\n  }\r\n\r\n  /**\r\n   * Unpack a IEEE 754 floating point number.\r\n   * Derived from IEEE754 by DeNA Co., Ltd., MIT License. \r\n   * Adapted to handle NaN. Should port the solution to the original repo.\r\n   * @param {!Uint8Array|!Array<number>} buffer The buffer.\r\n   * @param {number} index The index to read from the buffer.\r\n   * @return {number} The floating point number.\r\n   */\r\n  unpack(buffer, index) {\r\n    /** @type {number} */\r\n    let eMax = (1 << this.ebits) - 1;\r\n    /** @type {number} */\r\n    let significand;\r\n    /** @type {string} */\r\n    let leftBits = \"\";\r\n    for (let i = this.numBytes - 1; i >= 0 ; i--) {\r\n      /** @type {string} */\r\n      let t = buffer[i + index].toString(2);\r\n      leftBits += \"00000000\".substring(t.length) + t;\r\n    }\r\n    /** @type {number} */\r\n    let sign = leftBits.charAt(0) == \"1\" ? -1 : 1;\r\n    leftBits = leftBits.substring(1);\r\n    /** @type {number} */\r\n    let exponent = parseInt(leftBits.substring(0, this.ebits), 2);\r\n    leftBits = leftBits.substring(this.ebits);\r\n    if (exponent == eMax) {\r\n      if (parseInt(leftBits, 2) !== 0) {\r\n        return NaN;\r\n      }\r\n      return sign * Infinity;  \r\n    } else if (exponent === 0) {\r\n      exponent += 1;\r\n      significand = parseInt(leftBits, 2);\r\n    } else {\r\n      significand = parseInt(\"1\" + leftBits, 2);\r\n    }\r\n    return sign * significand * this.fbias * Math.pow(2, exponent - this.bias);\r\n  }\r\n\r\n  /**\r\n   * Pack a IEEE754 from its sign, exponent and fraction bits\r\n   * and place it in a byte buffer.\r\n   * @param {!Uint8Array|!Array<number>} buffer The byte buffer to write to.\r\n   * @param {number} index The buffer index to write.\r\n   * @param {number} sign The sign.\r\n   * @param {number} exp the exponent.\r\n   * @param {number} fraction The fraction.\r\n   * @return {number}\r\n   * @private\r\n   */\r\n  packFloatBits_(buffer, index, sign, exp, fraction) {\r\n    /** @type {!Array<number>} */\r\n    let bits = [];\r\n    // the sign\r\n    bits.push(sign);\r\n    // the exponent\r\n    for (let i = this.ebits; i > 0; i -= 1) {\r\n      bits[i] = (exp % 2 ? 1 : 0);\r\n      exp = Math.floor(exp / 2);\r\n    }\r\n    // the fraction\r\n    let len = bits.length;\r\n    for (let i = this.fbits; i > 0; i -= 1) {\r\n      bits[len + i] = (fraction % 2 ? 1 : 0);\r\n      fraction = Math.floor(fraction / 2);\r\n    }\r\n    // pack as bytes\r\n    /** @type {string} */\r\n    let str = bits.join('');\r\n    /** @type {number} */\r\n    let numBytes = this.numBytes + index - 1;\r\n    /** @type {number} */\r\n    let k = index;\r\n    while (numBytes >= index) {\r\n      buffer[numBytes] = parseInt(str.substring(0, 8), 2);\r\n      str = str.substring(8);\r\n      numBytes--;\r\n      k++;\r\n    }\r\n    return k;\r\n  }\r\n}\r\n\r\n/**\r\n * Round a number to its nearest even value.\r\n * @param {number} n The number.\r\n * @return {number}\r\n * @private\r\n */\r\nfunction roundToEven(n) {\r\n  /** @type {number} */\r\n  let w = Math.floor(n);\r\n  let f = n - w;\r\n  if (f < 0.5) {\r\n    return w;\r\n  }\r\n  if (f > 0.5) {\r\n    return w + 1;\r\n  }\r\n  return w % 2 ? w + 1 : w;\r\n}\r\n","/*\r\n * Copyright (c) 2017-2019 Rafael da Silva Rocha.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview JavaScript binary parser for any browser or environment.\r\n * @see https://github.com/rochars/byte-data\r\n */\r\n\r\n/** @module byte-data */\r\n\r\nimport endianness from 'endianness';\r\nimport { pack as packUTF8, unpack as unpackUTF8 } from 'utf8-buffer';\r\nimport { IntParser } from './lib/int-parser';\r\nimport { IEEE754Buffer } from 'ieee754-buffer';\r\n\r\n/**\r\n * Read a string of UTF-8 characters from a byte buffer.\r\n * @param {!(Uint8Array|Array<number>)} buffer A byte buffer.\r\n * @param {number} [index=0] The buffer index to start reading.\r\n * @param {number} [end=buffer.length] The index to stop reading, non inclusive.\r\n * @return {string}\r\n */\r\nexport function unpackString(buffer, index=0, end=buffer.length) {\r\n  return unpackUTF8(buffer, index, end);\r\n}\r\n\r\n/**\r\n * Write a string of UTF-8 characters as a byte buffer.\r\n * @param {string} str The string to pack.\r\n * @return {!Array<number>} The UTF-8 string bytes.\r\n */\r\nexport function packString(str) {\r\n  /** @type {!Array<number>} */\r\n  let buffer = [];\r\n  packUTF8(str, buffer, 0);\r\n  return buffer;\r\n}\r\n\r\n/**\r\n * Write a string of UTF-8 characters to a byte buffer.\r\n * @param {string} str The string to pack.\r\n * @param {!(Uint8Array|Array<number>)} buffer The output buffer.\r\n * @param {number} [index=0] The buffer index to start writing.\r\n * @return {number} The next index to write in the buffer.\r\n */\r\nexport function packStringTo(str, buffer, index=0) {\r\n  return packUTF8(str, buffer, index);\r\n}\r\n\r\n// Numbers\r\n/**\r\n * Pack a array of numbers to a byte buffer.\r\n * All other packing functions are interfaces to this function.\r\n * @param {!(Array<number>|TypedArray)} values The values to pack.\r\n * @param {!{bits:number,\r\n *   fp: (boolean|undefined),\r\n *   signed: (boolean|undefined),\r\n *   be: (boolean|undefined)}} theType The type definition.\r\n * @param {!(Uint8Array|Array<number>)} buffer The buffer to write on.\r\n * @param {number} [index=0] The buffer index to start writing.\r\n * @param {boolean} [clamp=false] True to clamp ints on overflow.\r\n * @return {number} The next index to write.\r\n * @throws {Error} If the type definition is not valid.\r\n * @throws {RangeError} On overflow.\r\n * @throws {TypeError} If input is not valid.\r\n */\r\nexport function packArrayTo(values, theType, buffer, index=0, clamp=false) {\r\n  theType = theType || {};\r\n  /** @type {!Object} */\r\n  let packer = getParser_(theType.bits, theType.fp, theType.signed, clamp);\r\n  /** @type {number} */\r\n  let offset = Math.ceil(theType.bits / 8);\r\n  /** @type {number} */\r\n  let i = 0;\r\n  /** @type {number} */\r\n  let start = index;\r\n  try {\r\n    for (let valuesLen = values.length; i < valuesLen; i++) {\r\n      index = packer.pack(buffer, values[i], index);\r\n    }\r\n    if (theType.be) {\r\n      endianness(buffer, offset, start, index);\r\n    }\r\n  } catch (e) {\r\n    throwValueError_(e, values[i], i);\r\n  }\r\n  return index;\r\n}\r\n\r\n/**\r\n * Unpack a array of numbers from a byte buffer to a array or a typed array.\r\n * All other unpacking functions are interfaces to this function.\r\n * @param {!(Uint8Array|Array<number>)} buffer The byte buffer.\r\n * @param {!{bits:number,\r\n *   fp: (boolean|undefined),\r\n *   signed: (boolean|undefined),\r\n *   be: (boolean|undefined)}} theType The type definition.\r\n * @param {!(TypedArray|Array<number>)} output The output array or typed array.\r\n * @param {number} [start=0] The buffer index to start reading.\r\n * @param {number} [end=buffer.length] The buffer index to stop reading.\r\n * @param {boolean} [safe=false] If set to false, extra bytes in the end of\r\n *   the array are ignored and input buffers with insufficient bytes will\r\n *   write nothing to the output array. If safe is set to true the function\r\n *   will throw a 'Bad buffer length' error.\r\n * @param {boolean} [clamp=false] True to clamp ints on overflow.\r\n * @throws {Error} If the type definition is not valid\r\n * @throws {RangeError} On overflow\r\n */\r\nexport function unpackArrayTo(\r\n    buffer, theType, output, start=0, end=buffer.length,\r\n    safe=false, clamp=false) {\r\n  theType = theType || {};\r\n  /** @type {!Object} */\r\n  let packer = getParser_(theType.bits, theType.fp, theType.signed, clamp);\r\n  /** @type {number} */\r\n  let offset = Math.ceil(theType.bits / 8);\r\n  // getUnpackLen_ will either fix the length of the input buffer\r\n  // according to the byte offset of the type (on unsafe mode) or\r\n  // throw a Error if the input buffer has a bad length (on safe mode)\r\n  end = getUnpackLen_(buffer, start, end, offset, safe);\r\n  /** @type {number} */\r\n  let index = 0;\r\n  let j = start;\r\n  try {\r\n    if (theType.be) {\r\n      endianness(buffer, offset, start, end);\r\n    }\r\n    for (; j < end; j += offset, index++) {\r\n      output[index] = packer.unpack(buffer, j);\r\n    }\r\n    if (theType.be) {\r\n      endianness(buffer, offset, start, end);\r\n    }\r\n  } catch (e) {\r\n    throwValueError_(e, buffer.slice(j, j + offset), j);\r\n  }\r\n}\r\n\r\n/**\r\n * Pack a number to a byte buffer.\r\n * @param {number} value The value.\r\n * @param {!{bits:number,\r\n *   fp: (boolean|undefined),\r\n *   signed: (boolean|undefined),\r\n *   be: (boolean|undefined)}} theType The type definition.\r\n * @param {!(Uint8Array|Array<number>)} buffer The byte buffer to write on.\r\n * @param {number} [index=0] The buffer index to write.\r\n * @param {boolean} [clamp=false] True to clamp ints on overflow.\r\n * @return {number} The next index to write.\r\n * @throws {Error} If the type definition is not valid.\r\n * @throws {RangeError} On overflow.\r\n * @throws {TypeError} If input is not valid.\r\n */\r\nexport function packTo(value, theType, buffer, index=0, clamp=false) {\r\n  return packArrayTo([value], theType, buffer, index, clamp);\r\n}\r\n\r\n/**\r\n * Pack a number as a array of bytes.\r\n * @param {number} value The number to pack.\r\n * @param {!{bits:number,\r\n *   fp: (boolean|undefined),\r\n *   signed: (boolean|undefined),\r\n *   be: (boolean|undefined)}} theType The type definition.\r\n * @param {boolean} [clamp=false] True to clamp ints on overflow.\r\n * @return {!Array<number>} The packed value.\r\n * @throws {Error} If the type definition is not valid.\r\n * @throws {RangeError} On overflow.\r\n * @throws {TypeError} If input is not valid.\r\n */\r\nexport function pack(value, theType, clamp=false) {\r\n  /** @type {!Array<number>} */\r\n  let output = [];\r\n  packTo(value, theType, output, 0, clamp);\r\n  return output;\r\n}\r\n\r\n/**\r\n * Pack a array of numbers as a array of bytes.\r\n * @param {!(Array<number>|TypedArray)} values The values to pack.\r\n * @param {!{bits:number,\r\n *   fp: (boolean|undefined),\r\n *   signed: (boolean|undefined),\r\n *   be: (boolean|undefined)}} theType The type definition.\r\n * @param {boolean} [clamp=false] True to clamp ints on overflow.\r\n * @return {!Array<number>} The packed values.\r\n * @throws {Error} If the type definition is not valid.\r\n * @throws {RangeError} On overflow.\r\n * @throws {TypeError} If input is not valid.\r\n */\r\nexport function packArray(values, theType, clamp=false) {\r\n  /** @type {!Array<number>} */\r\n  let output = [];\r\n  packArrayTo(values, theType, output, 0, clamp);\r\n  return output;\r\n}\r\n\r\n/**\r\n * Unpack a array of numbers from a byte buffer.\r\n * @param {!(Uint8Array|Array<number>)} buffer The byte buffer.\r\n * @param {!{bits:number,\r\n *   fp: (boolean|undefined),\r\n *   signed: (boolean|undefined),\r\n *   be: (boolean|undefined)}} theType The type definition.\r\n * @param {number} [start=0] The buffer index to start reading.\r\n * @param {number} [end=buffer.length] The buffer index to stop reading.\r\n * @param {boolean} [safe=false] If set to false, extra bytes in the end of\r\n *   the array are ignored and input buffers with insufficient bytes will\r\n *   output a empty array. If safe is set to true the function\r\n *   will throw a 'Bad buffer length' error.\r\n * @param {boolean} [clamp=false] True to clamp ints on overflow.\r\n * @return {!Array<number>}\r\n * @throws {Error} If the type definition is not valid\r\n * @throws {RangeError} On overflow\r\n */\r\nexport function unpackArray(\r\n    buffer, theType, start=0, end=buffer.length, safe=false, clamp=false) {\r\n  /** @type {!Array<number>} */\r\n  let output = [];\r\n  unpackArrayTo(buffer, theType, output, start, end, safe, clamp);\r\n  return output;\r\n}\r\n\r\n/**\r\n * Unpack a number from a byte buffer.\r\n * @param {!(Uint8Array|Array<number>)} buffer The byte buffer.\r\n * @param {!{bits:number,\r\n *   fp: (boolean|undefined),\r\n *   signed: (boolean|undefined),\r\n *   be: (boolean|undefined)}} theType The type definition.\r\n * @param {number} [index=0] The buffer index to read.\r\n * @param {boolean} [clamp=false] True to clamp ints on overflow.\r\n * @return {number}\r\n * @throws {Error} If the type definition is not valid\r\n * @throws {Error} On bad buffer length.\r\n * @throws {RangeError} On overflow\r\n */\r\nexport function unpack(buffer, theType, index=0, clamp=false) {\r\n  return unpackArray(\r\n    buffer, theType, index, index + Math.ceil(theType.bits / 8),\r\n    true, clamp)[0];\r\n}\r\n\r\n/**\r\n * Throw a error with information about the problem.\r\n * @param {!Object} err The Error object that is being raised.\r\n * @param {*} value The value that caused the error.\r\n * @param {number} index The index of the value that caused the error.\r\n * @throws {RangeError|TypeError|Error} A Error with a message.\r\n * @private\r\n */\r\nfunction throwValueError_(err, value, index) {\r\n  err.message = err.constructor.name +\r\n    ' at index ' + index + ': ' + value;\r\n  throw err;\r\n}\r\n\r\n/**\r\n * Unpack a array of numbers to a typed array.\r\n * All other unpacking functions are interfaces to this function.\r\n * @param {!(Uint8Array|Array<number>)} buffer The byte buffer.\r\n * @param {number} start The buffer index to start reading.\r\n * @param {number} end The buffer index to stop reading.\r\n * @param {number} offset The number of bytes used by the type.\r\n * @param {boolean} safe True for size-safe buffer reading.\r\n * @throws {Error} On bad buffer length, if safe.\r\n * @private\r\n */\r\nfunction getUnpackLen_(buffer, start, end, offset, safe) {\r\n  /** @type {number} */\r\n  let extra = (end - start) % offset;\r\n  if (safe && (extra || buffer.length < offset)) {\r\n    throw new Error('Bad buffer length');\r\n  }\r\n  return end - extra;\r\n}\r\n\r\n/**\r\n * Return a parser for int, uint or fp numbers.\r\n * @param {number} bits The number of bits.\r\n * @param {boolean|undefined} fp True for fp numbers, false otherwise.\r\n * @param {boolean|undefined} signed True for signed ints, false otherwise.\r\n * @param {boolean|undefined} clamp True to clamp ints on overflow, false otherwise.\r\n * @return {!Object}\r\n * @private\r\n */\r\nfunction getParser_(bits, fp, signed, clamp) {\r\n  if (fp) {\r\n    validateFloatType(bits);\r\n  } else {\r\n    validateIntType(bits);\r\n  }\r\n  if (fp && bits === 16) {\r\n    return new IEEE754Buffer(5, 11);\r\n  } else if (fp && bits == 32) {\r\n    return new IEEE754Buffer(8, 23);\r\n  } else if(fp && bits == 64) {\r\n    return new IEEE754Buffer(11, 52);\r\n  }\r\n  return new IntParser(bits, signed, clamp);\r\n}\r\n\r\n/**\r\n * The type definition error message.\r\n * @type {string}\r\n * @private\r\n */\r\nconst TYPE_ERR = 'Unsupported type';\r\n\r\n/**\r\n * Validate the type definition of floating-point numbers.\r\n * @param {number} bits The number of bits.\r\n * @throws {Error} If the type definition is not valid.\r\n * @private\r\n */\r\nfunction validateFloatType(bits) {\r\n  if (!bits || bits !== 16 && bits !== 32 && bits !== 64) {\r\n    throw new Error(TYPE_ERR + ': float, bits: ' + bits);\r\n  }\r\n}\r\n\r\n/**\r\n * Validate the type definition of integers.\r\n * @param {number} bits The number of bits.\r\n * @throws {Error} If the type definition is not valid.\r\n * @private\r\n */\r\nfunction validateIntType(bits) {\r\n  if (!bits || bits < 1 || bits > 53) {\r\n    throw new Error(TYPE_ERR + ': int, bits: ' + bits);\r\n  }\r\n}\r\n","/*\r\n * Copyright (c) 2017-2019 Rafael da Silva Rocha.\r\n *\r\n * Permission is hereby granted, free of charge, to any person obtaining\r\n * a copy of this software and associated documentation files (the\r\n * \"Software\"), to deal in the Software without restriction, including\r\n * without limitation the rights to use, copy, modify, merge, publish,\r\n * distribute, sublicense, and/or sell copies of the Software, and to\r\n * permit persons to whom the Software is furnished to do so, subject to\r\n * the following conditions:\r\n *\r\n * The above copyright notice and this permission notice shall be\r\n * included in all copies or substantial portions of the Software.\r\n *\r\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r\n * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r\n * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r\n * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r\n * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r\n *\r\n */\r\n\r\n/**\r\n * @fileoverview The RIFFFile class.\r\n * @see https://github.com/rochars/riff-file\r\n */\r\n\r\n/** @module riff-file */\r\n\r\nimport {unpackString, unpack} from 'byte-data';\r\n\r\n/**\r\n * A class to perform low-level reading of RIFF/RIFX files.\r\n */\r\nexport class RIFFFile {\r\n\r\n  constructor() {\r\n    /**\r\n     * The container identifier.\r\n     * 'RIFF', 'RIFX' and 'RF64' are supported.\r\n     * @type {string}\r\n     */\r\n    this.container = '';\r\n    /**\r\n     * The main chunk size, in bytes.\r\n     * @type {number}\r\n     */\r\n    this.chunkSize = 0;\r\n    /**\r\n     * The format identifier.\r\n     * @type {string}\r\n     */\r\n    this.format = '';\r\n    /**\r\n     * An object representing the signature of all chunks in the file.\r\n     * @type {{\r\n      chunkId: string,\r\n      chunkSize: number,\r\n      format: string,\r\n      chunkData: {start: number, end: number},\r\n      subChunks: Array\r\n      }|null}\r\n     */\r\n    this.signature = null;\r\n    /**\r\n     * @type {number}\r\n     * @protected\r\n     */\r\n    this.head = 0;\r\n    /**\r\n     * @type {\r\n      {bits: number, be: boolean, signed: boolean, fp: boolean}\r\n     }\r\n     * @protected\r\n     */\r\n    this.uInt32 = { bits: 32, be: false, signed: false, fp: false };\r\n    /**\r\n     * The list of supported containers.\r\n     * Any format different from RIFX will be treated as RIFF.\r\n     * @type {!Array<string>}\r\n     * @protected\r\n     */\r\n    this.supported_containers = ['RIFF', 'RIFX'];\r\n  }\r\n\r\n  /**\r\n   * Read the signature of the chunks in a RIFF/RIFX file.\r\n   * @param {!Uint8Array} buffer The file bytes.\r\n   * @protected\r\n   */\r\n  setSignature(buffer) {\r\n      this.head = 0;\r\n      this.container = this.readString(buffer, 4);\r\n      if (this.supported_containers.indexOf(this.container) === -1) {\r\n        throw Error('Not a supported format.');\r\n      }\r\n      this.uInt32.be = this.container === 'RIFX';\r\n      this.chunkSize = this.readUInt32(buffer);\r\n      this.format = this.readString(buffer, 4);\r\n      // The RIFF file signature\r\n      this.signature = {\r\n          chunkId: this.container,\r\n          chunkSize: this.chunkSize,\r\n          format: this.format,\r\n          subChunks: this.getSubChunksIndex_(buffer),\r\n          chunkData: {start: 0, end: this.chunkSize}\r\n      };\r\n  }\r\n\r\n  /**\r\n    * Find a chunk by its fourCC_ in a array of RIFF chunks.\r\n    * @param {string} chunkId The chunk fourCC_.\r\n    * @param {boolean} multiple True if there may be multiple chunks\r\n    *    with the same chunkId.\r\n    * @return {Object}\r\n    * @protected\r\n    */\r\n  findChunk(chunkId, multiple=false) {\r\n    /** @type {!Array|null} */\r\n    let chunks = this.signature.subChunks;\r\n    /** @type {!Array<!Object>} */\r\n    let chunk = [];\r\n    for (let i=0; i<chunks.length; i++) {\r\n      if (chunks[i].chunkId == chunkId) {\r\n        if (multiple) {\r\n          chunk.push(chunks[i]);\r\n        } else {\r\n          return chunks[i];\r\n        }\r\n      }\r\n    }\r\n    if (chunkId == 'LIST') {\r\n      return chunk.length ? chunk : null;\r\n    }\r\n    return null;\r\n  }\r\n\r\n  /**\r\n   * Read bytes as a string from a RIFF chunk.\r\n   * @param {!Uint8Array} bytes The bytes.\r\n   * @param {number} maxSize the max size of the string.\r\n   * @return {string} The string.\r\n   * @protected\r\n   */\r\n  readString(bytes, maxSize) {\r\n    /** @type {string} */\r\n    let str = '';\r\n    str = unpackString(bytes, this.head, this.head + maxSize);\r\n    this.head += maxSize;\r\n    return str;\r\n  }\r\n\r\n  /**\r\n   * Read a number from a chunk.\r\n   * @param {!Uint8Array} bytes The chunk bytes.\r\n   * @return {number} The number.\r\n   * @protected\r\n   */\r\n  readUInt32(bytes) {\r\n    /** @type {number} */\r\n    let value = unpack(bytes, this.uInt32, this.head);\r\n    this.head += 4;\r\n    return value;\r\n  }\r\n\r\n  /**\r\n   * Return the sub chunks of a RIFF file.\r\n   * @param {!Uint8Array} buffer the RIFF file bytes.\r\n   * @return {!Array<Object>} The subchunks of a RIFF/RIFX or LIST chunk.\r\n   * @private\r\n   */\r\n  getSubChunksIndex_(buffer) {\r\n      /** @type {!Array<!Object>} */\r\n      let chunks = [];\r\n      /** @type {number} */\r\n      let i = this.head;\r\n      while(i <= buffer.length - 8) {\r\n          chunks.push(this.getSubChunkIndex_(buffer, i));\r\n          i += 8 + chunks[chunks.length - 1].chunkSize;\r\n          i = i % 2 ? i + 1 : i;\r\n      }\r\n      return chunks;\r\n  }\r\n\r\n  /**\r\n   * Return a sub chunk from a RIFF file.\r\n   * @param {!Uint8Array} buffer the RIFF file bytes.\r\n   * @param {number} index The start index of the chunk.\r\n   * @return {!Object} A subchunk of a RIFF/RIFX or LIST chunk.\r\n   * @private\r\n   */\r\n  getSubChunkIndex_(buffer, index) {\r\n      /** @type {!Object} */\r\n      let chunk = {\r\n          chunkId: this.getChunkId_(buffer, index),\r\n          chunkSize: this.getChunkSize_(buffer, index),\r\n      };\r\n      if (chunk.chunkId == 'LIST') {\r\n          chunk.format = unpackString(buffer, index + 8, index + 12);\r\n          this.head += 4;\r\n          chunk.subChunks = this.getSubChunksIndex_(buffer);\r\n      } else {\r\n          /** @type {number} */\r\n          let realChunkSize = chunk.chunkSize % 2 ?\r\n              chunk.chunkSize + 1 : chunk.chunkSize;\r\n          this.head = index + 8 + realChunkSize;\r\n          chunk.chunkData = {\r\n              start: index + 8,\r\n              end: this.head\r\n          };\r\n      }\r\n      return chunk;\r\n  }\r\n\r\n  /**\r\n   * Return the fourCC_ of a chunk.\r\n   * @param {!Uint8Array} buffer the RIFF file bytes.\r\n   * @param {number} index The start index of the chunk.\r\n   * @return {string} The id of the chunk.\r\n   * @private\r\n   */\r\n  getChunkId_(buffer, index) {\r\n      this.head += 4;\r\n      return unpackString(buffer, index, index + 4);\r\n  }\r\n\r\n  /**\r\n   * Return the size of a chunk.\r\n   * @param {!Uint8Array} buffer the RIFF file bytes.\r\n   * @param {number} index The start index of the chunk.\r\n   * @return {number} The size of the chunk without the id and size fields.\r\n   * @private\r\n   */\r\n  getChunkSize_(buffer, index) {\r\n      this.head += 4;\r\n      return unpack(buffer, this.uInt32, index + 4);\r\n  }\r\n}\r\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.parseAni = void 0;\nvar riff_file_1 = require(\"riff-file\");\nvar byte_data_1 = require(\"byte-data\");\nvar DWORD = { bits: 32, be: false, signed: false, fp: false };\nfunction parseAni(arr) {\n    var riff = new riff_file_1.RIFFFile();\n    riff.setSignature(arr);\n    var signature = riff.signature;\n    if (signature.format !== \"ACON\") {\n        throw new Error(\"Expected format. Expected \\\"ACON\\\", got \\\"\" + signature.format + \"\\\"\");\n    }\n    // Helper function to get a chunk by chunkId and transform it if it's non-null.\n    function mapChunk(chunkId, mapper) {\n        var chunk = riff.findChunk(chunkId);\n        return chunk == null ? null : mapper(chunk);\n    }\n    var metadata = mapChunk(\"anih\", function (c) {\n        var words = byte_data_1.unpackArray(arr, DWORD, c.chunkData.start, c.chunkData.end);\n        return {\n            cbSize: words[0],\n            nFrames: words[1],\n            nSteps: words[2],\n            iWidth: words[3],\n            iHeight: words[4],\n            iBitCount: words[5],\n            nPlanes: words[6],\n            iDispRate: words[7],\n            bfAttributes: words[8],\n        };\n    });\n    if (metadata == null) {\n        throw new Error(\"Did not find anih\");\n    }\n    var rate = mapChunk(\"rate\", function (c) {\n        return byte_data_1.unpackArray(arr, DWORD, c.chunkData.start, c.chunkData.end);\n    });\n    // chunkIds are always four chars, hence the trailing space.\n    var seq = mapChunk(\"seq \", function (c) {\n        return byte_data_1.unpackArray(arr, DWORD, c.chunkData.start, c.chunkData.end);\n    });\n    var lists = riff.findChunk(\"LIST\", true);\n    var imageChunk = lists === null || lists === void 0 ? void 0 : lists.find(function (c) { return c.format === \"fram\"; });\n    if (imageChunk == null) {\n        throw new Error(\"Did not find fram LIST\");\n    }\n    var images = imageChunk.subChunks.slice(0, metadata.nFrames).map(function (c) {\n        if (c.chunkId !== \"icon\") {\n            throw new Error(\"Unexpected chunk type in fram: \" + c.chunkId);\n        }\n        return arr.slice(c.chunkData.start, c.chunkData.end);\n    });\n    var title = null;\n    var artist = null;\n    var infoChunk = lists === null || lists === void 0 ? void 0 : lists.find(function (c) { return c.format === \"INFO\"; });\n    if (infoChunk != null) {\n        infoChunk.subChunks.forEach(function (c) {\n            switch (c.chunkId) {\n                case \"INAM\":\n                    title = byte_data_1.unpackString(arr, c.chunkData.start, c.chunkData.end);\n                    break;\n                case \"IART\":\n                    artist = byte_data_1.unpackString(arr, c.chunkData.start, c.chunkData.end);\n                    break;\n                default:\n                // Unexpected subchunk\n            }\n        });\n    }\n    return { images: images, rate: rate, seq: seq, metadata: metadata, artist: artist, title: title };\n}\nexports.parseAni = parseAni;\n//# sourceMappingURL=parser.js.map","\"use strict\";\nvar __read = (this && this.__read) || function (o, n) {\n    var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n    if (!m) return o;\n    var i = m.call(o), r, ar = [], e;\n    try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n    }\n    catch (error) { e = { error: error }; }\n    finally {\n        try {\n            if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        }\n        finally { if (e) throw e.error; }\n    }\n    return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n    for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n    return ar;\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertAniBinaryToCSS = void 0;\nvar parser_1 = require(\"./parser\");\nvar JIFFIES_PER_MS = 1000 / 60;\n// Generate CSS for an animated cursor.\n//\n// This function returns CSS containing a set of keyframes with embedded Data\n// URIs as well as a CSS rule to the given selector.\nfunction convertAniBinaryToCSS(selector, aniBinary) {\n    var ani = readAni(aniBinary);\n    var animationName = \"ani-cursor-\" + uniqueId();\n    var keyframes = ani.frames.map(function (_a) {\n        var url = _a.url, percents = _a.percents;\n        var percent = percents.map(function (num) { return num + \"%\"; }).join(\", \");\n        return percent + \" { cursor: url(\" + url + \"), auto; }\";\n    });\n    // CSS properties with a animation type of \"discrete\", like `cursor`, actually\n    // switch half-way _between_ each keyframe percentage. Luckily this half-way\n    // measurement is applied _after_ the easing function is applied. So, we can\n    // force the frames to appear at exactly the % that we specify by using\n    // `timing-function` of `step-end`.\n    //\n    // https://drafts.csswg.org/web-animations-1/#discrete\n    var timingFunction = \"step-end\";\n    // Winamp (re)starts the animation cycle when your mouse enters an element. By\n    // default this approach would cause the animation to run continuously, even\n    // when the cursor is not visible. To match Winamp's behavior we add a\n    // `:hover` pseudo selector so that the animation only runs when the cursor is\n    // visible.\n    var pseudoSelector = \":hover\";\n    // prettier-ignore\n    return \"\\n    @keyframes \" + animationName + \" {\\n        \" + keyframes.join(\"\\n\") + \"\\n    }\\n    \" + selector + pseudoSelector + \" {\\n        animation: \" + animationName + \" \" + ani.duration + \"ms \" + timingFunction + \" infinite;\\n    }\\n   \";\n}\nexports.convertAniBinaryToCSS = convertAniBinaryToCSS;\nfunction readAni(contents) {\n    var _a;\n    var ani = parser_1.parseAni(contents);\n    var rate = (_a = ani.rate) !== null && _a !== void 0 ? _a : ani.images.map(function () { return ani.metadata.iDispRate; });\n    var duration = sum(rate);\n    var frames = ani.images.map(function (image) { return ({\n        url: curUrlFromByteArray(image),\n        percents: [],\n    }); });\n    var elapsed = 0;\n    rate.forEach(function (r, i) {\n        var frameIdx = ani.seq ? ani.seq[i] : i;\n        frames[frameIdx].percents.push((elapsed / duration) * 100);\n        elapsed += r;\n    });\n    return { duration: duration * JIFFIES_PER_MS, frames: frames };\n}\n/* Utility Functions */\nvar i = 0;\nvar uniqueId = function () { return i++; };\nfunction base64FromDataArray(dataArray) {\n    return window.btoa(String.fromCharCode.apply(String, __spread(dataArray)));\n}\nfunction curUrlFromByteArray(arr) {\n    var base64 = base64FromDataArray(arr);\n    return \"data:image/x-win-bitmap;base64,\" + base64;\n}\nfunction sum(values) {\n    return values.reduce(function (total, value) { return total + value; }, 0);\n}\n//# sourceMappingURL=index.js.map","// Dynamically set the css background images for all the sprites\nimport { LETTERS } from \"../constants\";\nimport { imageSelectors, cursorSelectors } from \"../skinSelectors\";\nimport { useTypedSelector } from \"../hooks\";\nimport * as Selectors from \"../selectors\";\nimport { SkinImages } from \"../types\";\nimport { createSelector } from \"reselect\";\nimport Css from \"./Css\";\nimport ClipPaths from \"./ClipPaths\";\nimport { convertAniBinaryToCSS } from \"ani-cursor\";\n\nconst CSS_PREFIX = \"#webamp\";\n\nconst mapRegionNamesToIds: { [key: string]: string } = {\n  normal: \"mainWindowClipPath\",\n  windowshade: \"shadeMainWindowClipPath\",\n  equalizer: \"equalizerWindowClipPath\",\n  equalizerws: \"shadeEqualizerWindowClipPath\",\n};\n\nconst mapRegionNamesToMatcher: { [key: string]: string } = {\n  normal: \"#main-window:not(.shade)\",\n  windowshade: \"#main-window.shade\",\n  equalizer: \"#equalizer-window:not(.shade)\",\n  equalizerws: \"#equalizer-window.shade\",\n};\n\nconst numExIsUsed = (skinImages: SkinImages) => Boolean(skinImages.DIGIT_0_EX);\n\nconst FALLBACKS: { [key: string]: string } = {\n  MAIN_BALANCE_BACKGROUND: \"MAIN_VOLUME_BACKGROUND\",\n  MAIN_BALANCE_THUMB: \"MAIN_VOLUME_THUMB\",\n  MAIN_BALANCE_THUMB_ACTIVE: \"MAIN_VOLUME_THUMB_SELECTED\",\n  EQ_MAXIMIZE_BUTTON_ACTIVE: \"EQ_MAXIMIZE_BUTTON_ACTIVE_FALLBACK\",\n};\n\n// Cursors might appear in context menus which are not nested inside the window layout div.\nfunction normalizeCursorSelector(selector: string): string {\n  return `${\n    // TODO: Fix this hack\n    // Maybe our CSS name spacing should be based on some other class/id\n    // than the one we use for defining the main div.\n    // That way it could be shared by both the player and the context menu.\n    selector.startsWith(\"#webamp-context-menu\") ? \"\" : CSS_PREFIX\n  } ${selector}`;\n}\n\nconst getCssRules = createSelector(\n  Selectors.getSkinImages,\n  Selectors.getSkinCursors,\n  Selectors.getSkinLetterWidths,\n  Selectors.getSkinRegion,\n  (skinImages, skinCursors, skinGenLetterWidths, skinRegion): string | null => {\n    if (!skinImages || !skinCursors) {\n      return null;\n    }\n    const cssRules = [];\n    Object.keys(imageSelectors).forEach((imageName) => {\n      const imageUrl =\n        skinImages[imageName] || skinImages[FALLBACKS[imageName]];\n      if (imageUrl) {\n        imageSelectors[imageName].forEach((_selector) => {\n          const selector = _selector; // .replace(\":active\", \".active\");\n          cssRules.push(\n            `${CSS_PREFIX} ${selector} {background-image: url(${imageUrl})}`\n          );\n        });\n      }\n    });\n\n    if (skinGenLetterWidths != null) {\n      LETTERS.forEach((letter) => {\n        const width = skinGenLetterWidths[`GEN_TEXT_${letter}`];\n        const selectedWidth =\n          skinGenLetterWidths[`GEN_TEXT_SELECTED_${letter}`];\n        cssRules.push(\n          `${CSS_PREFIX} .gen-text-${letter.toLowerCase()} {width: ${width}px;}`\n        );\n        cssRules.push(\n          `${CSS_PREFIX} .selected .gen-text-${letter.toLowerCase()} {width: ${selectedWidth}px;}`\n        );\n      });\n    }\n\n    Object.entries(cursorSelectors).forEach(([cursorName, cursorSelector]) => {\n      const cursor = skinCursors[cursorName];\n      if (cursor == null) {\n        return;\n      }\n      const cursorRules = cursorSelector\n        .map(normalizeCursorSelector)\n        .map((selector) => {\n          switch (cursor.type) {\n            case \"cur\":\n              return `${selector} {cursor: url(${cursor.url}), auto}`;\n            case \"ani\": {\n              try {\n                return convertAniBinaryToCSS(selector, cursor.aniData);\n              } catch (e) {\n                console.error(e);\n                return null;\n              }\n            }\n          }\n        })\n        .filter(Boolean);\n      cssRules.push(...cursorRules);\n    });\n\n    if (numExIsUsed(skinImages)) {\n      // This alternate number file requires that the minus sign be\n      // formatted differently.\n      cssRules.push(\n        `${CSS_PREFIX} .webamp-status #time #minus-sign { top: 0px; left: -1px; width: 9px; height: 13px; }`\n      );\n    }\n\n    for (const [regionName, polygons] of Object.entries(skinRegion)) {\n      if (polygons) {\n        const matcher = mapRegionNamesToMatcher[regionName];\n        const id = mapRegionNamesToIds[regionName];\n        cssRules.push(`${CSS_PREFIX} ${matcher} { clip-path: url(#${id}); }`);\n      }\n    }\n\n    return cssRules.join(\"\\n\");\n  }\n);\n\nconst getClipPaths = createSelector(Selectors.getSkinRegion, (skinRegion) => {\n  const clipPaths: { [id: string]: string[] } = {};\n  for (const [regionName, polygons] of Object.entries(skinRegion)) {\n    if (polygons) {\n      const id = mapRegionNamesToIds[regionName];\n      clipPaths[id] = polygons;\n    }\n  }\n  return clipPaths;\n});\n\nexport default function Skin() {\n  const cssRules = useTypedSelector(getCssRules);\n  const clipPaths = useTypedSelector(getClipPaths);\n  if (cssRules == null) {\n    return null;\n  }\n  return (\n    <>\n      <Css id=\"webamp-skin\">{cssRules}</Css>\n      <ClipPaths>{clipPaths}</ClipPaths>\n    </>\n  );\n}\n","import {\n  useLayoutEffect,\n  useEffect,\n  useState,\n  useCallback,\n  StrictMode,\n} from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { FilePicker } from \"../types\";\nimport { WINDOWS } from \"../constants\";\nimport * as Selectors from \"../selectors\";\nimport * as Actions from \"../actionCreators\";\nimport * as Utils from \"../utils\";\nimport MilkdropWindow from \"../components/MilkdropWindow\";\nimport ContextMenuWrapper from \"./ContextMenuWrapper\";\nimport MainContextMenu from \"./MainWindow/MainContextMenu\";\nimport WindowManager from \"./WindowManager\";\nimport MainWindow from \"./MainWindow\";\nimport PlaylistWindow from \"./PlaylistWindow\";\nimport EqualizerWindow from \"./EqualizerWindow\";\nimport Skin from \"./Skin\";\n\nimport Media, { IMedia } from \"../media\";\nimport { useTypedSelector, useActionCreator } from \"../hooks\";\nimport Css from \"./Css\";\n\n// @ts-ignore\nimport cssText from \"../../css/webamp.css?inline\";\n\ninterface Props {\n  filePickers: FilePicker[];\n  media: IMedia;\n}\n\n/**\n * Constructs the windows to render\n */\nexport default function App({ media, filePickers }: Props) {\n  const closed = useTypedSelector(Selectors.getClosed);\n  const genWindowsInfo = useTypedSelector(Selectors.getGenWindows);\n  const zIndex = useTypedSelector(Selectors.getZIndex);\n\n  const browserWindowSizeChanged = useActionCreator(\n    Actions.browserWindowSizeChanged\n  );\n  const setFocusedWindow = useActionCreator(Actions.setFocusedWindow);\n\n  const [webampNode] = useState(() => {\n    const node = document.createElement(\"div\");\n    node.id = \"webamp\";\n    // @ts-ignore I think I'm supposed to set this with setAttribute, but I can't confirm.\n    node.role = \"application\";\n    return node;\n  });\n\n  useLayoutEffect(() => {\n    webampNode.style.zIndex = String(zIndex);\n  }, [webampNode, zIndex]);\n\n  useLayoutEffect(() => {\n    document.body.appendChild(webampNode);\n    return () => {\n      document.body.removeChild(webampNode);\n    };\n  }, [webampNode]);\n\n  useEffect(() => {\n    const handleWindowResize = () => {\n      if (webampNode == null) {\n        return;\n      }\n      // It's a bit tricky to measure the \"natural\" size of the browser window.\n      // Specifically we want to know how large the window would be without our\n      // own Webamp windows influencing it. To achieve this, we temporarily make\n      // our container `overflow: hidden;`. We then make our container full\n      // screen by setting the bottom/right properties to zero. This second part\n      // allows our Webamp windows to stay visible during the resize. After we\n      // measure, we set the style back so that we don't end up interfering with\n      // click events outside of our Webamp windows.\n      webampNode.style.right = \"0\";\n      webampNode.style.bottom = \"0\";\n      webampNode.style.overflow = \"hidden\";\n      browserWindowSizeChanged(Utils.getWindowSize());\n      webampNode.style.right = \"auto\";\n      webampNode.style.bottom = \"auto\";\n      webampNode.style.overflow = \"visible\";\n    };\n\n    handleWindowResize();\n\n    window.addEventListener(\"resize\", handleWindowResize);\n\n    return () => {\n      window.removeEventListener(\"resize\", handleWindowResize);\n    };\n  }, [browserWindowSizeChanged, webampNode]);\n\n  const renderWindows = useCallback(() => {\n    return Utils.objectMap(genWindowsInfo, (w, id) => {\n      if (!w.open) {\n        return null;\n      }\n      switch (id) {\n        case WINDOWS.MAIN:\n          return (\n            <MainWindow\n              analyser={media.getAnalyser()}\n              filePickers={filePickers}\n            />\n          );\n        case WINDOWS.EQUALIZER:\n          return <EqualizerWindow />;\n        case WINDOWS.PLAYLIST:\n          return <PlaylistWindow analyser={media.getAnalyser()} />;\n        case WINDOWS.MILKDROP:\n          return <MilkdropWindow analyser={media.getAnalyser()} />;\n        default:\n          throw new Error(`Tried to render an unknown window: ${id}`);\n      }\n    });\n  }, [media, filePickers, genWindowsInfo]);\n\n  const handleBlur = (e: React.FocusEvent<HTMLElement>) => {\n    if (!e.currentTarget.contains(e.relatedTarget as Element)) {\n      setFocusedWindow(null);\n    }\n  };\n\n  if (closed) {\n    return null;\n  }\n\n  return ReactDOM.createPortal(\n    <StrictMode>\n      <Css>{cssText}</Css>\n      <div onBlur={handleBlur}>\n        <Skin />\n        <ContextMenuWrapper\n          renderContents={() => <MainContextMenu filePickers={filePickers} />}\n        >\n          <WindowManager windows={renderWindows()} />\n        </ContextMenuWrapper>\n      </div>\n    </StrictMode>,\n    webampNode\n  );\n}\n","import {\n  play,\n  pause,\n  stop,\n  adjustVolume,\n  toggleRepeat,\n  toggleShuffle,\n  openMediaFileDialog,\n  seekForward,\n  seekBackward,\n  reverseList,\n  nextN,\n  next,\n  previous,\n  toggleDoubleSizeMode,\n  toggleWindow,\n} from \"./actionCreators\";\n\nimport { TOGGLE_TIME_MODE, TOGGLE_LLAMA_MODE } from \"./actionTypes\";\n\nimport { Dispatch } from \"./types\";\n\nconst IGNORE_EVENTS_FROM_TAGS = new Set([\"input\", \"textarea\", \"select\"]);\n\nexport function bindHotkeys(dispatch: Dispatch): () => void {\n  let currentPos: number = 0;\n  const trigger = [\n    78, // N\n    85, // U\n    76, // L\n    76, // L\n    83, // S\n    79, // O\n    70, // F\n    84, // T\n  ];\n\n  const listener = (e: KeyboardEvent) => {\n    if (\n      e.target instanceof Element &&\n      IGNORE_EVENTS_FROM_TAGS.has(e.target.tagName.toLowerCase())\n    ) {\n      return;\n    }\n    if (e.ctrlKey) {\n      switch (e.keyCode) {\n        case 68: // CTRL+D\n          dispatch(toggleDoubleSizeMode());\n          e.preventDefault(); // Supress the \"Bookmark\" action on windows.\n          break;\n        case 76: // CTRL+L FIXME\n          break;\n        case 82: // CTRL+R\n          dispatch(reverseList());\n          break;\n        case 84: // CTRL+T\n          dispatch({ type: TOGGLE_TIME_MODE });\n          break;\n      }\n    } else if (e.altKey) {\n      switch (e.keyCode) {\n        case 87: // ALT+W\n          dispatch(toggleWindow(\"main\"));\n          break;\n        case 69: // ALT+E\n          dispatch(toggleWindow(\"playlist\"));\n          break;\n        case 71: // ALT+G\n          dispatch(toggleWindow(\"equalizer\"));\n          break;\n      }\n    } else {\n      switch (e.keyCode) {\n        case 37: // left arrow\n          dispatch(seekBackward(5));\n          break;\n        case 38: // up arrow\n          dispatch(adjustVolume(1));\n          break;\n        case 39: // right arrow\n          dispatch(seekForward(5));\n          break;\n        case 40: // down arrow\n          dispatch(adjustVolume(-1));\n          break;\n        case 66: // B\n          dispatch(next());\n          break;\n        case 67: // C\n          dispatch(pause());\n          break;\n        case 76: // L\n          dispatch(openMediaFileDialog());\n          break;\n        case 82: // R\n          dispatch(toggleRepeat());\n          break;\n        case 83: // S\n          dispatch(toggleShuffle());\n          break;\n        case 86: // V\n          dispatch(stop());\n          break;\n        case 88: // X\n          dispatch(play());\n          break;\n        case 90: // Z\n          dispatch(previous());\n          break;\n        case 96: // numpad 0\n          dispatch(openMediaFileDialog());\n          break;\n        case 97: // numpad 1\n          dispatch(nextN(-10));\n          break;\n        case 98: // numpad 2\n          dispatch(adjustVolume(-1));\n          break;\n        case 99: // numpad 3\n          dispatch(nextN(10));\n          break;\n        case 100: // numpad 4\n          dispatch(previous());\n          break;\n        case 101: // numpad 5\n          dispatch(play());\n          break;\n        case 102: // numpad 6\n          dispatch(next());\n          break;\n        case 103: // numpad 7\n          dispatch(seekBackward(5));\n          break;\n        case 104: // numpad 8\n          dispatch(adjustVolume(1));\n          break;\n        case 105: // numpad 9\n          dispatch(seekForward(5));\n          break;\n      }\n    }\n\n    // Easter Egg\n\n    // Ignore escape. Usually this gets swallowed by the browser, but not always.\n    if (e.keyCode !== 27) {\n      currentPos = e.keyCode === trigger[currentPos] ? currentPos + 1 : 0;\n      if (currentPos === trigger.length) {\n        dispatch({ type: TOGGLE_LLAMA_MODE });\n      }\n    }\n  };\n  document.addEventListener(\"keydown\", listener);\n\n  return () => {\n    document.removeEventListener(\"keydown\", listener);\n  };\n}\n","export default class Emitter {\n  _listeners: { [event: string]: Array<(...args: any[]) => void> };\n\n  constructor() {\n    this._listeners = {};\n  }\n\n  on(event: string, callback: (...args: any[]) => void) {\n    const eventListeners = this._listeners[event] || [];\n    eventListeners.push(callback);\n    this._listeners[event] = eventListeners;\n    const unsubscribe = () => {\n      this._listeners[event] = eventListeners.filter((cb) => cb !== callback);\n    };\n    return unsubscribe;\n  }\n\n  trigger(event: string, ...args: any[]) {\n    const callbacks = this._listeners[event];\n    if (callbacks) {\n      callbacks.forEach((cb) => cb(...args));\n    }\n  }\n\n  dispose() {\n    this._listeners = {};\n  }\n}\n","// The Web Audio API does not offer an easy way to make a stereo balance\n// control. This is an attempt to fill that void, using an API similar to\n// [StereoPannerNode](https://developer.mozilla.org/en-US/docs/Web/API/StereoPannerNode)\nexport default function StereoBalanceNode(context, options = { balance: 0 }) {\n  let balance = 0;\n\n  // ChannelSplitterNode cannot be told to use a `channelInterperatation` of\n  // \"speakers\". This means that if we get a mono file, we will end up only\n  // playing in the left speaker. So instead we use this dummy gain node to\n  // convert whatever source we get (stereo, mono, or n channels) into a stereo\n  // signal.\n  // Idea credit: https://github.com/WebAudio/web-audio-api/issues/975#issue-177242377\n  const upMixer = context.createGain();\n  upMixer.channelCount = 2;\n  upMixer.channelCountMode = \"explicit\";\n  upMixer.channelInterpretation = \"speakers\";\n\n  const splitter = context.createChannelSplitter(2);\n\n  // Create the gains for left and right\n  const leftGain = context.createGain();\n  const rightGain = context.createGain();\n\n  const merger = context.createChannelMerger(2);\n\n  upMixer.connect(splitter);\n\n  splitter.connect(leftGain, 0);\n  splitter.connect(rightGain, 1);\n\n  leftGain.connect(merger, 0, 0);\n  rightGain.connect(merger, 0, 1);\n\n  // -1 (left) to 1 (right)\n  function set(rawValue) {\n    const value = Number(rawValue);\n    leftGain.gain.value = value > 0 ? 1 - value : 1;\n    rightGain.gain.value = value > 0 ? 1 : 1 + value;\n    balance = value;\n  }\n\n  function get() {\n    return balance;\n  }\n\n  // Create our own version of an [AudioParam](https://developer.mozilla.org/en-US/docs/Web/API/AudioParam).\n  // We don't currently support any of the \"over time\" methods, but maybe some day\n  // we'll want to.\n  const audioParam = {};\n  Object.defineProperties(audioParam, {\n    value: { get, set, enumerable: true, configurable: true },\n  });\n\n  // The way the `.connect` API works, we can't actually construct our own\n  // AudioNode. Instead we have to take an existing node and monkey patch it.\n  Object.defineProperties(upMixer, {\n    balance: {\n      value: audioParam,\n      enumerable: true,\n      writable: false,\n      configurable: true,\n    },\n    connect: {\n      value: AudioNode.prototype.connect.bind(merger),\n      enumerable: false,\n      writable: false,\n      configurable: true,\n    },\n    disconnect: {\n      value: AudioNode.prototype.disconnect.bind(merger),\n      enumerable: false,\n      writable: false,\n      configurable: true,\n    },\n  });\n\n  if (balance !== options.balance) {\n    set(options.balance);\n  }\n\n  return upMixer;\n}\n","import Emitter from \"../emitter\";\nimport { clamp } from \"../utils\";\nimport { MEDIA_STATUS } from \"../constants\";\nimport { MediaStatus } from \"../types\";\n\nexport default class ElementSource {\n  _emitter: Emitter;\n  _context: AudioContext;\n  _source: AudioNode;\n  _destination: AudioNode;\n  _audio: HTMLAudioElement;\n  _stalled: boolean;\n  _status: MediaStatus;\n\n  on(eventType: string, cb: (...args: any[]) => void) {\n    return this._emitter.on(eventType, cb);\n  }\n\n  constructor(context: AudioContext, destination: AudioNode) {\n    this._emitter = new Emitter();\n    this._context = context;\n    this._destination = destination;\n    this._audio = document.createElement(\"audio\");\n    this._audio.crossOrigin = \"anonymous\";\n    this._stalled = false;\n    this._status = MEDIA_STATUS.STOPPED;\n\n    // TODO: #leak\n    this._audio.addEventListener(\"suspend\", () => {\n      this._setStalled(true);\n    });\n\n    // TODO: #leak\n    this._audio.addEventListener(\"durationchange\", () => {\n      this._emitter.trigger(\"loaded\");\n      this._setStalled(false);\n    });\n\n    // TODO: #leak\n    this._audio.addEventListener(\"ended\", () => {\n      this._emitter.trigger(\"ended\");\n      this._setStatus(MEDIA_STATUS.STOPPED);\n    });\n\n    // TODO: Throttle to 50 (if needed)\n    // TODO: #leak\n    this._audio.addEventListener(\"timeupdate\", () => {\n      this._emitter.trigger(\"positionChange\");\n    });\n\n    // TODO: #leak\n    this._audio.addEventListener(\"error\", (e) => {\n      switch (this._audio.error!.code) {\n        case 1:\n          // The fetching of the associated resource was aborted by the user's request.\n          console.error(\"MEDIA_ERR_ABORTED\", e);\n          break;\n        case 2:\n          console.error(\"MEDIA_ERR_NETWORK\", e);\n          // Some kind of network error occurred which prevented the media from being successfully fetched, despite having previously been available.\n          break;\n        case 3:\n          // Despite having previously been determined to be usable, an error occurred while trying to decode the media resource, resulting in an error.\n\n          // There is a bug in Chrome where improperly terminated mp3s can cuase this error.\n          // https://bugs.chromium.org/p/chromium/issues/detail?id=794782\n          // Related: Commit f44e826c83c74fef04c2c448af30cfb353b28312\n          console.error(\"PIPELINE_ERROR_DECODE\", e);\n          break;\n        case 4:\n          console.error(\"MEDIA_ERR_SRC_NOT_SUPPORTED\", e);\n          // The associated resource or media provider object (such as a MediaStream) has been found to be unsuitable.\n          break;\n      }\n      // Rather than just geting stuck in this error state, we can just pretend this is\n      // the end of the track.\n\n      this._emitter.trigger(\"ended\");\n      this._setStatus(MEDIA_STATUS.STOPPED);\n    });\n\n    this._source = this._context.createMediaElementSource(this._audio);\n    this._source.connect(destination);\n  }\n\n  _setStalled(stalled: boolean) {\n    this._stalled = stalled;\n    this._emitter.trigger(\"stallChanged\");\n  }\n\n  disconnect() {\n    this._source.disconnect();\n  }\n\n  // Async for now, for compatibility with BufferAudioSource\n  // TODO: This does not need to be async\n  async loadUrl(url: string) {\n    this._audio.src = url;\n  }\n\n  async play() {\n    if (this._status !== MEDIA_STATUS.PAUSED) {\n      this.seekToTime(0);\n    }\n    try {\n      await this._audio.play();\n      // TODO #race\n    } catch (err) {\n      //\n    }\n    this._setStatus(MEDIA_STATUS.PLAYING);\n  }\n\n  pause() {\n    this._audio.pause();\n    this._setStatus(MEDIA_STATUS.PAUSED);\n  }\n\n  stop() {\n    this._audio.pause();\n    this._audio.currentTime = 0;\n    this._setStatus(MEDIA_STATUS.STOPPED);\n  }\n\n  seekToTime(time: number) {\n    /* TODO: We could check if this is actually seekable:\n    const { seekable } = this._audio;\n    for (let i = 0; i < seekable.length; i++) {\n      console.log(\"start\", seekable.start(i), \"end\", seekable.end(i));\n    }\n    */\n    this._audio.currentTime = clamp(time, 0, this.getDuration());\n    this._emitter.trigger(\"positionChange\");\n  }\n\n  getStalled() {\n    return this._stalled;\n  }\n\n  getStatus() {\n    return this._status;\n  }\n\n  getDuration() {\n    const { duration } = this._audio;\n    // Safari on iOS currently has a strange behavior where it reports\n    // the duration as infinity if an Accept-Ranges header is not returned.\n    // For now, 0 is better even though it's still wrong.\n    return isNaN(duration) || duration === Infinity ? 0 : duration;\n  }\n\n  getTimeElapsed() {\n    return this._audio.currentTime;\n  }\n\n  _setStatus(status: MediaStatus) {\n    this._status = status;\n    this._emitter.trigger(\"statusChange\");\n  }\n\n  dispose() {\n    // TODO: Dispose subscriptions to this.audio\n    this.stop();\n    this._emitter.dispose();\n  }\n}\n","/* Emulate the native <audio> element with Web Audio API */\nimport { BANDS, MEDIA_STATUS } from \"../constants\";\nimport { Band } from \"../types\";\nimport Emitter from \"../emitter\";\nimport StereoBalanceNode from \"./StereoBalanceNode\";\nimport ElementSource from \"./elementSource\";\n\ninterface StereoBalanceNodeType extends AudioNode {\n  constructor(context: AudioContext): StereoBalanceNodeType;\n  balance: {\n    value: number;\n  };\n}\n\nexport interface IMedia {\n  /**\n   * Set the volume from 0 to 100\n   */\n  setVolume(volume: number): void;\n  /**\n   * Set the stereo balance from -100 to 100\n   */\n  setBalance(balance: number): void;\n  /**\n   * Set the preamp value from 0 to 100\n   * The input value represents -12db to 12db, where 50 is 0db (no change)\n   * Equation used is: 10^((dB)/20) = x, where x is the gain value\n   */\n  setPreamp(value: number): void;\n  /**\n   * Register an event listener\n   */\n  on(event: string, callback: (...args: any[]) => void): void;\n  /**\n   * Get the current playback time in seconds\n   */\n  timeElapsed(): number;\n  /**\n   * Get the total duration of the current track in seconds\n   */\n  duration(): number;\n  /**\n   * Start or resume playback\n   */\n  play(): Promise<void>;\n  /**\n   * Pause playback\n   */\n  pause(): void;\n  /**\n   * Stop playback and reset position to beginning\n   */\n  stop(): void;\n  /**\n   * Seek to a specific position as a percentage of the total duration\n   */\n  seekToPercentComplete(percent: number): void;\n  /**\n   * Load a track from a URL and optionally start playing it\n   * Used only for the initial load, since it must have a CORS header\n   */\n  loadFromUrl(url: string, autoPlay: boolean): Promise<void>;\n  /**\n   * Set the gain value for a specific EQ band\n   */\n  setEqBand(band: Band, value: number): void;\n  /**\n   * Disable the equalizer by bypassing all EQ bands\n   */\n  disableEq(): void;\n  /**\n   * Enable the equalizer processing\n   */\n  enableEq(): void;\n  /**\n   * Get the analyser node for visualizer data\n   */\n  getAnalyser(): AnalyserNode;\n  /**\n   * Clean up resources and dispose of the media instance\n   */\n  dispose(): void;\n}\n\n// A constructable class that implements the IMedia interface.\nexport interface IMediaClass {\n  new (): IMedia;\n}\n\n// NOTE: While this is not technically a public API, https://winampify.io/ is\n// replacing this class with a custom version. Breaking changes to this API\n// surface should be communicated to Remi.\nexport default class Media implements IMedia {\n  _emitter: Emitter;\n  _context: AudioContext;\n  _balance: StereoBalanceNodeType;\n  _staticSource: GainNode;\n  _preamp: GainNode;\n  _analyser: AnalyserNode;\n  _gainNode: GainNode;\n  _source: ElementSource;\n  _bands: { [band: number]: BiquadFilterNode };\n\n  constructor() {\n    this._emitter = new Emitter();\n    // @ts-ignore Typescript does not know about webkitAudioContext\n    this._context = new (window.AudioContext || window.webkitAudioContext)();\n    // Fix for iOS and Chrome (Canary) which require that the context be created\n    // or resumed by a user interaction.\n    // https://developers.google.com/web/updates/2017/09/autoplay-policy-changes\n    // https://gist.github.com/laziel/7aefabe99ee57b16081c\n    // Via: https://stackoverflow.com/a/43395068/1263117\n    // TODO #leak\n    if (this._context.state === \"suspended\") {\n      const resume = async () => {\n        await this._context.resume();\n\n        if (this._context.state === \"running\") {\n          // TODO: Add this to the disposable\n          document.body.removeEventListener(\"touchend\", resume, false);\n          document.body.removeEventListener(\"click\", resume, false);\n          document.body.removeEventListener(\"keydown\", resume, false);\n        }\n      };\n\n      document.body.addEventListener(\"touchend\", resume, false);\n      document.body.addEventListener(\"click\", resume, false);\n      document.body.addEventListener(\"keydown\", resume, false);\n    }\n\n    // TODO: Maybe we can get rid of this now that we are using AudioAbstraction?\n    this._staticSource = this._context.createGain(); // Just a noop node\n\n    // @ts-ignore The way this class has to be monkey patched, makes it very hard to type.\n    this._balance = new StereoBalanceNode(this._context);\n\n    // Create the preamp node\n    this._preamp = this._context.createGain();\n\n    // Create the analyser node for the visualizer\n    this._analyser = this._context.createAnalyser();\n    this._analyser.fftSize = 2048;\n    // don't smooth audio analysis\n    this._analyser.smoothingTimeConstant = 0.0;\n\n    // Create the gain node for the volume control\n    this._gainNode = this._context.createGain();\n\n    // Connect all the nodes in the correct way\n    // (Note, source is created and connected later)\n    //\n    //                <source>\n    //                    |\n    //                    |_____________\n    //                    |             \\\n    //                <preamp>          |\n    //                    |             | <-- Optional bypass\n    //           [...biquadFilters]     |\n    //                    |_____________/\n    //                    |\n    //              <staticSource>\n    //                    |\n    //                <balance>\n    //                    |\n    //                    |\\\n    //                    | <analyser>\n    //                  <gain>\n    //                    |\n    //              <destination>\n\n    this._source = new ElementSource(this._context, this._staticSource);\n\n    this._source.on(\"positionChange\", () => {\n      this._emitter.trigger(\"timeupdate\");\n    });\n    this._source.on(\"ended\", () => {\n      this._emitter.trigger(\"ended\");\n    });\n    this._source.on(\"statusChange\", () => {\n      switch (this._source.getStatus()) {\n        case MEDIA_STATUS.PLAYING:\n          this._emitter.trigger(\"playing\");\n          break;\n      }\n      this._emitter.trigger(\"timeupdate\");\n    });\n    this._source.on(\"loaded\", () => {\n      this._emitter.trigger(\"fileLoaded\");\n    });\n\n    this._staticSource.connect(this._preamp);\n\n    let output = this._preamp;\n    this._bands = {};\n\n    BANDS.forEach((band, i) => {\n      const filter = this._context.createBiquadFilter();\n\n      this._bands[band] = filter;\n\n      if (i === 0) {\n        // The first filter, includes all lower frequencies\n        filter.type = \"lowshelf\";\n      } else if (i === BANDS.length - 1) {\n        // The last filter, includes all higher frequencies\n        filter.type = \"highshelf\";\n      } else {\n        filter.type = \"peaking\";\n      }\n      filter.frequency.value = band;\n      filter.gain.value = 0;\n\n      output.connect(filter);\n      output = filter;\n    });\n\n    output.connect(this._balance);\n\n    this._balance.connect(this._gainNode);\n    this._balance.connect(this._analyser);\n\n    this._gainNode.connect(this._context.destination);\n  }\n\n  getAnalyser() {\n    return this._analyser;\n  }\n\n  /* Properties */\n  duration() {\n    return this._source.getDuration();\n  }\n\n  timeElapsed() {\n    return this._source.getTimeElapsed();\n  }\n\n  timeRemaining() {\n    return this.duration() - this.timeElapsed();\n  }\n\n  percentComplete() {\n    return (this.timeElapsed() / this.duration()) * 100;\n  }\n\n  /* Actions */\n  async play() {\n    await this._source.play();\n  }\n\n  pause() {\n    this._source.pause();\n  }\n\n  stop() {\n    this._source.stop();\n  }\n\n  /* Actions with arguments */\n  seekToPercentComplete(percent: number) {\n    const seekTime = this.duration() * (percent / 100);\n    this.seekToTime(seekTime);\n  }\n\n  // From 0-1\n  setVolume(volume: number) {\n    this._gainNode.gain.value = volume / 100;\n  }\n\n  // from 0 to 100\n  // The input value here is 0-100 which is kinda wrong, since it represents -12db to 12db.\n  // For now, 50 is 0db (no change).\n  // Equation used is: 10^((dB)/20) = x, where x (preamp.gain.value) is passed on to gainnode for boosting or attenuation.\n  setPreamp(value: number) {\n    const db = (value / 100) * 24 - 12;\n    this._preamp.gain.value = Math.pow(10, db / 20);\n  }\n\n  // From -100 to 100\n  setBalance(balance: number) {\n    // Yo Dawg.\n    this._balance.balance.value = balance / 100;\n  }\n\n  setEqBand(band: Band, value: number) {\n    const db = (value / 100) * 24 - 12;\n    this._bands[band].gain.value = db;\n  }\n\n  disableEq() {\n    this._staticSource.disconnect();\n    this._staticSource.connect(this._balance);\n  }\n\n  enableEq() {\n    this._staticSource.disconnect();\n    this._staticSource.connect(this._preamp);\n  }\n\n  /* Listeners */\n  on(event: string, callback: (...args: any[]) => void) {\n    this._emitter.on(event, callback);\n  }\n\n  seekToTime(time: number) {\n    this._source.seekToTime(time);\n  }\n\n  // Used only for the initial load, since it must have a CORS header\n  async loadFromUrl(url: string, autoPlay: boolean) {\n    this._emitter.trigger(\"waiting\");\n    await this._source.loadUrl(url);\n    // TODO #race\n    this._emitter.trigger(\"stopWaiting\");\n    if (autoPlay) {\n      this.play();\n    }\n  }\n\n  dispose() {\n    this._source.dispose();\n    this._emitter.dispose();\n  }\n}\n","type Teardown = (() => void) | { dispose: () => void };\n\nexport default class Disposable {\n  _teardowns: Teardown[] = [];\n  disposed: boolean;\n\n  constructor() {\n    this.disposed = false;\n  }\n\n  add(...teardowns: Teardown[]): void {\n    if (this.disposed) {\n      throw new Error(\n        \"Attempted to add a new teardown to a disposed disposable.\"\n      );\n    }\n    this._teardowns.push(...teardowns);\n  }\n\n  dispose() {\n    if (this.disposed) {\n      throw new Error(\n        \"Attempted to dispose disposable which is already disposed.\"\n      );\n    }\n    this._teardowns.forEach((teardown) => {\n      if (typeof teardown === \"function\") {\n        teardown();\n      } else if (typeof teardown.dispose === \"function\") {\n        teardown.dispose();\n      }\n    });\n    this._teardowns = [];\n    this.disposed = true;\n  }\n}\n","import * as React from \"react\";\nimport ReactDOM from \"react-dom/client\";\nimport { Provider } from \"react-redux\";\n\nimport {\n  Store,\n  AppState,\n  Track,\n  LoadedURLTrack,\n  Middleware,\n  ButterchurnOptions,\n  PartialState,\n  Options,\n  MediaStatus,\n  PlaylistTrack,\n} from \"./types\";\nimport getStore from \"./store\";\nimport App from \"./components/App\";\nimport { bindHotkeys } from \"./hotkeys\";\nimport Media, { IMedia, IMediaClass } from \"./media\";\nimport * as Selectors from \"./selectors\";\nimport * as Actions from \"./actionCreators\";\n\nimport { LOAD_STYLE } from \"./constants\";\nimport * as FileUtils from \"./fileUtils\";\n\nimport {\n  SET_AVAILABLE_SKINS,\n  NETWORK_CONNECTED,\n  NETWORK_DISCONNECTED,\n  CLOSE_WINAMP,\n  MINIMIZE_WINAMP,\n  LOADED,\n  SET_Z_INDEX,\n  CLOSE_REQUESTED,\n  ENABLE_MILKDROP,\n} from \"./actionTypes\";\nimport Emitter from \"./emitter\";\n\nimport { SerializedStateV1 } from \"./serializedStates/v1Types\";\nimport Disposable from \"./Disposable\";\n\nexport interface PrivateOptions {\n  __initialState?: PartialState;\n  __customMiddlewares?: Middleware[];\n  __butterchurnOptions?: ButterchurnOptions;\n  // This is used by https://winampify.io/ to proxy through to Spotify's API.\n  __customMediaClass?: IMediaClass;\n}\n\nexport interface InjectableDependencies {\n  requireJSZip: () => Promise<any>; // TODO: Type JSZip\n  requireMusicMetadata: () => Promise<any>; // TODO: Type music-metadata-browser\n}\n\nclass Webamp {\n  static VERSION = \"1.5.0\";\n  _actionEmitter: Emitter;\n  _root: ReactDOM.Root | null;\n  _disposable: Disposable;\n  options: Options & PrivateOptions & InjectableDependencies; // TODO: Make this _private\n  media: IMedia; // TODO: Make this _private\n  store: Store; // TODO: Make this _private\n\n  /**\n   * Returns a true if the current browser supports the features that Webamp depends upon.\n   *\n   * It is recommended to check this before you attempt to instantiate an instance of Winamp.\n   */\n  static browserIsSupported(): boolean {\n    const supportsAudioApi = !!(\n      window.AudioContext ||\n      // @ts-ignore\n      window.webkitAudioContext\n    );\n    const supportsCanvas = !!window.document.createElement(\"canvas\").getContext;\n    const supportsPromises = typeof Promise !== \"undefined\";\n    return supportsAudioApi && supportsCanvas && supportsPromises;\n  }\n\n  constructor(options: Options & PrivateOptions & InjectableDependencies) {\n    this._root = null;\n    this._disposable = new Disposable();\n    this._actionEmitter = new Emitter();\n    this.options = options;\n    const {\n      initialTracks,\n      initialSkin,\n      availableSkins,\n      enableHotkeys = false,\n      zIndex,\n      requireJSZip,\n      requireMusicMetadata,\n      handleTrackDropEvent,\n      handleAddUrlEvent,\n      handleLoadListEvent,\n      handleSaveListEvent,\n      enableDoubleSizeMode,\n      __butterchurnOptions,\n      __customMediaClass,\n    } = this.options;\n\n    // TODO: Make this much cleaner\n    let convertPreset = null;\n    if (__butterchurnOptions != null) {\n      const { importConvertPreset, presetConverterEndpoint } =\n        __butterchurnOptions;\n\n      if (importConvertPreset != null && presetConverterEndpoint != null) {\n        convertPreset = async (file: File): Promise<Object> => {\n          const { convertPreset: convert } = await importConvertPreset();\n          return convert(\n            await FileUtils.genStringFromFileReference(file),\n            presetConverterEndpoint\n          );\n        };\n      }\n    }\n\n    // TODO: Validate required options\n\n    this.media = new (__customMediaClass || Media)();\n    this.store = getStore(\n      this.media,\n      this._actionEmitter,\n      this.options.__customMiddlewares,\n      this.options.__initialState,\n      {\n        requireJSZip,\n        requireMusicMetadata,\n        convertPreset,\n        // @ts-ignore Typescript is drunk\n        handleTrackDropEvent,\n        handleAddUrlEvent,\n        handleLoadListEvent,\n        handleSaveListEvent,\n      }\n    ) as Store;\n\n    if (enableDoubleSizeMode) {\n      this.store.dispatch(Actions.toggleDoubleSizeMode());\n    }\n\n    if (navigator.onLine) {\n      this.store.dispatch({ type: NETWORK_CONNECTED });\n    } else {\n      this.store.dispatch({ type: NETWORK_DISCONNECTED });\n    }\n\n    if (zIndex != null) {\n      this.store.dispatch({ type: SET_Z_INDEX, zIndex });\n    }\n\n    if (options.__butterchurnOptions) {\n      this.store.dispatch({\n        type: ENABLE_MILKDROP,\n        open: options.__butterchurnOptions.butterchurnOpen,\n      });\n      this.store.dispatch(\n        Actions.initializePresets(options.__butterchurnOptions)\n      );\n    }\n\n    const handleOnline = () => this.store.dispatch({ type: NETWORK_CONNECTED });\n    const handleOffline = () =>\n      this.store.dispatch({ type: NETWORK_DISCONNECTED });\n\n    window.addEventListener(\"online\", handleOnline);\n    window.addEventListener(\"offline\", handleOffline);\n\n    this._disposable.add(() => {\n      window.removeEventListener(\"online\", handleOnline);\n      window.removeEventListener(\"offline\", handleOffline);\n    });\n\n    if (initialSkin) {\n      this.store.dispatch(Actions.setSkinFromUrl(initialSkin.url));\n    } else {\n      // We are using the default skin.\n      this.store.dispatch({ type: LOADED });\n    }\n\n    if (initialTracks) {\n      this._bufferTracks(initialTracks);\n    }\n\n    // @ts-ignore\n    if (options.avaliableSkins != null) {\n      console.warn(\n        \"The misspelled option `avaliableSkins` is deprecated. Please use `availableSkins` instead.\"\n      );\n      // @ts-ignore\n      this.store.dispatch({ type: SET_AVAILABLE_SKINS, skins: avaliableSkins });\n    } else if (availableSkins != null) {\n      this.store.dispatch({ type: SET_AVAILABLE_SKINS, skins: availableSkins });\n    }\n\n    this.store.dispatch(Actions.setWindowLayout(options.windowLayout));\n\n    if (enableHotkeys) {\n      this._disposable.add(bindHotkeys(this.store.dispatch));\n    }\n  }\n\n  /**\n   * Play the current tack\n   */\n  play(): void {\n    this.store.dispatch(Actions.play());\n  }\n\n  /**\n   * Pause the current tack\n   */\n  pause(): void {\n    this.store.dispatch(Actions.pause());\n  }\n\n  /**\n   * Stop the currently playing audio. Equivalent to pressing the \"stop\" button\n   */\n  stop(): void {\n    this.store.dispatch(Actions.stop());\n  }\n\n  /**\n   * Set volume from 0 - 100\n   */\n  setVolume(volume: number): void {\n    this.store.dispatch(Actions.setVolume(volume));\n  }\n\n  /**\n   * Seek backward n seconds in the current track\n   */\n  seekBackward(seconds: number) {\n    this.store.dispatch(Actions.seekBackward(seconds));\n  }\n\n  /**\n   * Seek forward n seconds in the current track\n   */\n  seekForward(seconds: number) {\n    this.store.dispatch(Actions.seekForward(seconds));\n  }\n\n  /**\n   * Seek to a given time within the current track\n   */\n  seekToTime(seconds: number) {\n    this.store.dispatch(Actions.seekToTime(seconds));\n  }\n\n  /**\n   * Check if shuffle is enabled\n   */\n  isShuffleEnabled(): boolean {\n    return Selectors.getShuffle(this.store.getState());\n  }\n\n  /**\n   * Check if repeat is enabled\n   */\n  isRepeatEnabled(): boolean {\n    return Selectors.getRepeat(this.store.getState());\n  }\n\n  /**\n   * Play the next track\n   */\n  nextTrack(): void {\n    this.store.dispatch(Actions.next());\n  }\n\n  /**\n   * Play the previous track\n   */\n  previousTrack(): void {\n    this.store.dispatch(Actions.previous());\n  }\n\n  /**\n   * Set the current track a specific track in the playlist by zero-based index.\n   *\n   * Note: If Webamp is currently playing, the track will begin playing. If\n   * Webamp is not playing, the track will not start playing. You can use\n   * `webamp.pause()` before calling this method or `webamp.play()` after\n   * calling this method to control whether the track starts playing.\n   */\n  setCurrentTrack(index: number): void {\n    this.store.dispatch(Actions.playTrack(index));\n  }\n\n  /**\n   * Add an array of `Track`s to the end of the playlist.\n   */\n  appendTracks(tracks: Track[]): void {\n    const nextIndex = Selectors.getTrackCount(this.store.getState());\n    this.store.dispatch(\n      Actions.loadMediaFiles(tracks, LOAD_STYLE.NONE, nextIndex)\n    );\n  }\n\n  /**\n   * Replace the playlist with an array of `Track`s and begin playing the first track.\n   */\n  setTracksToPlay(tracks: Track[]): void {\n    this.store.dispatch(Actions.loadMediaFiles(tracks, LOAD_STYLE.PLAY));\n  }\n\n  /**\n   * Get the current playlist in order.\n   */\n  getPlaylistTracks(): PlaylistTrack[] {\n    return Selectors.getPlaylistTracks(this.store.getState());\n  }\n\n  /**\n   * Get the current \"playing\" status.\n   */\n  getMediaStatus(): MediaStatus | null {\n    return Selectors.getMediaStatus(this.store.getState());\n  }\n\n  /**\n   * A callback which will be called when Webamp is _about to_ close. Returns an\n   * \"unsubscribe\" function. The callback will be passed a `cancel` function\n   * which you can use to conditionally prevent Webamp from being closed.\n   *\n   * @returns An \"unsubscribe\" function. Useful if at some point in the future you want to stop listening to these events.\n   */\n  onWillClose(cb: (cancel: () => void) => void): () => void {\n    return this._actionEmitter.on(CLOSE_REQUESTED, (action) => {\n      cb(action.cancel);\n    });\n  }\n\n  /**\n   * A callback which will be called when Webamp is closed.\n   *\n   * @returns An \"unsubscribe\" function. Useful if at some point in the future you want to stop listening to these events.\n   */\n  onClose(cb: () => void): () => void {\n    return this._actionEmitter.on(CLOSE_WINAMP, cb);\n  }\n\n  /**\n   * Equivalent to selection \"Close\" from Webamp's options menu. Once closed,\n   * you can open it again with `.reopen()`.\n   */\n  close(): void {\n    this.store.dispatch(Actions.close());\n  }\n\n  /**\n   * After `.close()`ing this instance, you can reopen it by calling this method.\n   */\n  reopen(): void {\n    this.store.dispatch(Actions.open());\n  }\n\n  /**\n   * A callback which will be called when a new track starts loading.\n   *\n   * This can happen on startup when the first track starts buffering, or when a\n   * subsequent track starts playing.  The callback will be called with an\n   * object `({url: 'https://example.com/track.mp3'})` containing the URL of the\n   * track.\n   *\n   * Note: If the user drags in a track, the URL may be an ObjectURL.\n   *\n   * @returns An \"unsubscribe\" function. Useful if at some point in the future\n   * you want to stop listening to these events.\n   */\n  onTrackDidChange(cb: (trackInfo: LoadedURLTrack | null) => void): () => void {\n    let previousTrackId: number | null = null;\n    // TODO #leak\n    return this.store.subscribe(() => {\n      const state = this.store.getState();\n      const trackId = Selectors.getCurrentlyPlayingTrackIdIfLoaded(state);\n      if (trackId === previousTrackId) {\n        return;\n      }\n      previousTrackId = trackId;\n      cb(trackId == null ? null : Selectors.getCurrentTrackInfo(state));\n    });\n  }\n\n  /**\n   * A callback which will be called when Webamp is minimized.\n   *\n   * @returns An \"unsubscribe\" function. Useful if at some point in the future you want to stop listening to these events.\n   */\n  onMinimize(cb: () => void): () => void {\n    return this._actionEmitter.on(MINIMIZE_WINAMP, cb);\n  }\n\n  /**\n   * Set the skin to use. This can be a URL or a base64 encoded string. The skin\n   * will be loaded asynchronously.\n   *\n   * NOTE: If the URL is not on the same domain as the page, you will need to consider CORS.\n   * https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS\n   */\n  setSkinFromUrl(url: string): void {\n    this.store.dispatch(Actions.setSkinFromUrl(url));\n    // TODO: Should this return a promise?\n    // return this.skinIsLoaded(); ??\n  }\n\n  /**\n   * Returns a promise that resolves when the skin is done loading.\n   */\n  async skinIsLoaded(): Promise<void> {\n    // Wait for the skin to load.\n    // TODO #leak\n    await storeHas(this.store, (state) => !state.display.loading);\n    // We attempt to pre-resolve these promises before we declare the skin\n    // loaded. That's because `<EqGraph>` needs these in order to render fully.\n    // As long as these are resolved before we attempt to render, we can ensure\n    // that we will have all the data we need on first paint.\n    //\n    // Note: This won't help for non-initial skin loads.\n    await Promise.all([\n      Selectors.getPreampLineImage(this.store.getState()),\n      Selectors.getLineColorsImage(this.store.getState()),\n    ]);\n    return;\n  }\n\n  /**\n   * Webamp will wait until it has fetched the skin and fully parsed it and then render itself.\n   *\n   * Webamp is rendered into a new DOM node at the end of the <body> tag with the id `#webamp`.\n   *\n   * If a domNode is passed, Webamp will place itself in the center of that DOM node.\n   *\n   * @returns A promise is returned which will resolve after the render is complete.\n   */\n  async renderWhenReady(node: HTMLElement): Promise<void> {\n    this.store.dispatch(Actions.centerWindowsInContainer(node));\n    await this.skinIsLoaded();\n    if (this._disposable.disposed) {\n      return;\n    }\n    if (this._root != null) {\n      throw new Error(\"Cannot render a Webamp instance twice\");\n    }\n    this._root = ReactDOM.createRoot(node);\n    this._disposable.add(() => {\n      if (this._root != null) {\n        this._root.unmount();\n        this._root = null;\n      }\n    });\n\n    this._root.render(\n      <Provider store={this.store}>\n        <App media={this.media} filePickers={this.options.filePickers || []} />\n      </Provider>\n    );\n  }\n\n  /**\n   * **Note:** _This method is not fully functional. It is currently impossible to\n   * clean up a Winamp instance. This method makes an effort, but it still leaks\n   * the whole instance. In the future the behavior of this method will improve,\n   * so you might as well call it._\n   *\n   * When you are done with a Webamp instance, call this method and Webamp will\n   * attempt to clean itself up to avoid memory leaks.\n   */\n  dispose(): void {\n    // TODO: Clean up store subscription in onTrackDidChange\n    // TODO: Every storeHas call represents a potential race condition\n    this.media.dispose();\n    this._actionEmitter.dispose();\n    this._disposable.dispose();\n  }\n\n  __loadSerializedState(serializedState: SerializedStateV1): void {\n    this.store.dispatch(Actions.loadSerializedState(serializedState));\n  }\n\n  __getSerializedState() {\n    return Selectors.getSerlializedState(this.store.getState());\n  }\n\n  __onStateChange(cb: () => void): () => void {\n    // TODO #leak\n    return this.store.subscribe(cb);\n  }\n\n  _bufferTracks(tracks: Track[]): void {\n    const nextIndex = Selectors.getTrackCount(this.store.getState());\n    this.store.dispatch(\n      Actions.loadMediaFiles(tracks, LOAD_STYLE.BUFFER, nextIndex)\n    );\n  }\n}\n\n// Return a promise that resolves when the store matches a predicate.\n// TODO #leak\nconst storeHas = (\n  store: Store,\n  predicate: (state: AppState) => boolean\n): Promise<void> =>\n  new Promise((resolve) => {\n    if (predicate(store.getState())) {\n      resolve();\n      return;\n    }\n    const unsubscribe = store.subscribe(() => {\n      if (predicate(store.getState())) {\n        resolve();\n        unsubscribe();\n      }\n    });\n  });\n\n// @ts-ignore\nwindow.Webamp = Webamp;\n\nexport default Webamp;\n","// A Fork of the NPM module `setimmediate`\n// I've adapted this to only include the browser implementation and to not\n// mutate the global object and instead export the `setImmediate` function.\n\ntype Handle = { callback: Function; args: any[] };\ntype TaskByHandle = { [handle: number]: Handle };\n\nlet nextHandle = 1; // Spec says greater than zero\nconst tasksByHandle: TaskByHandle = {};\nlet currentlyRunningATask = false;\nlet registerImmediate: (arg0: number) => void;\n\nexport function setImmediate(callback: Function) {\n  // Copy function arguments\n  const args = new Array(arguments.length - 1);\n  for (let i = 0; i < args.length; i++) {\n    args[i] = arguments[i + 1];\n  }\n  // Store and register the task\n  const task = { callback: callback, args: args };\n  tasksByHandle[nextHandle] = task;\n  registerImmediate(nextHandle);\n  return nextHandle++;\n}\n\nfunction clearImmediate(handle: number) {\n  delete tasksByHandle[handle];\n}\n\nfunction run(task: Handle) {\n  const callback = task.callback;\n  const args = task.args;\n  switch (args.length) {\n    case 0:\n      callback();\n      break;\n    case 1:\n      callback(args[0]);\n      break;\n    case 2:\n      callback(args[0], args[1]);\n      break;\n    case 3:\n      callback(args[0], args[1], args[2]);\n      break;\n    default:\n      // eslint-disable-next-line prefer-spread\n      callback.apply(undefined, args);\n      break;\n  }\n}\n\nfunction runIfPresent(handle: number) {\n  // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n  // So if we're currently running a task, we'll need to delay this invocation.\n  if (currentlyRunningATask) {\n    // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n    // \"too much recursion\" error.\n    setTimeout(runIfPresent, 0, handle);\n  } else {\n    const task = tasksByHandle[handle];\n    if (task) {\n      currentlyRunningATask = true;\n      try {\n        run(task);\n      } finally {\n        clearImmediate(handle);\n        currentlyRunningATask = false;\n      }\n    }\n  }\n}\n\nfunction canUsePostMessage() {\n  // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n  // where `global.postMessage` means something completely different and can't be used for this purpose.\n  if (!window.importScripts) {\n    let postMessageIsAsynchronous = true;\n    const oldOnMessage = window.onmessage;\n    window.onmessage = function () {\n      postMessageIsAsynchronous = false;\n    };\n    window.postMessage(\"\", \"*\");\n    window.onmessage = oldOnMessage;\n    return postMessageIsAsynchronous;\n  }\n}\n\nfunction installPostMessageImplementation() {\n  // Installs an event handler on `global` for the `message` event: see\n  // * https://developer.mozilla.org/en/DOM/window.postMessage\n  // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n  const messagePrefix = `setImmediate$${Math.random()}$`;\n\n  window.addEventListener(\n    \"message\",\n    (event) => {\n      if (\n        event.source === window &&\n        typeof event.data === \"string\" &&\n        event.data.indexOf(messagePrefix) === 0\n      ) {\n        runIfPresent(+event.data.slice(messagePrefix.length));\n      }\n    },\n    false\n  );\n\n  registerImmediate = function (handle) {\n    window.postMessage(messagePrefix + handle, \"*\");\n  };\n}\n\nfunction installSetTimeoutImplementation() {\n  registerImmediate = function (handle) {\n    setTimeout(runIfPresent, 0, handle);\n  };\n}\n\nif (canUsePostMessage()) {\n  // For non-IE10 modern browsers\n  installPostMessageImplementation();\n} else {\n  // For older browsers\n  installSetTimeoutImplementation();\n}\n","import JSZip from \"jszip\";\nimport * as musicMetadataBrowser from \"music-metadata-browser\";\nimport { Options } from \"./types\";\nimport WebampLazy, { PrivateOptions } from \"./webampLazy\";\n\n// There is some bug between how JSZip pulls in setimmediate (which it expects\n// to polyfill `window.setimmediate` and our bundler set. The result is that one\n// of our bundles is missing the polyfill. If we call JSZip code from within\n// that bundle the polyfill is not present and we get an error.\n//\n// To work around this we manually import the helper function which is the one\n// place JSZip actually uses `setImmediate` and then set it to use our fork of\n// the polyfill which does not require adding a property to `window`.\nimport { setImmediate } from \"./setImmediate\";\n// @ts-ignore\nimport Utils from \"jszip/lib/utils\";\n// @ts-ignore\nUtils.delay = function (callback, args, self) {\n  setImmediate(() => {\n    callback.apply(self || null, args || []);\n  });\n};\n\nexport type * from \"./types\";\n\nexport default class Webamp extends WebampLazy {\n  constructor(options: Options & PrivateOptions) {\n    super({\n      ...options,\n      requireJSZip: async () => JSZip,\n      requireMusicMetadata: async () => musicMetadataBrowser,\n    });\n  }\n}\n\n// Bit of a hack here. This overwrites the value set in WebampLazy.ts\n// @ts-ignore\nwindow.Webamp = Webamp;\n"],"names":["process","version","indexOf","processNextickArgsModule","nextTick","fn","arg1","arg2","arg3","TypeError","args","i","len","arguments","length","call","Array","apply","exports","toString","isarray","isArray","arr","stream","require$$0","buffer","Buffer","copyProps","src","dst","key","SafeBuffer","arg","encodingOrOffset","from","alloc","allocUnsafe","allocUnsafeSlow","module","size","fill","encoding","buf","undefined","SlowBuffer","objectToString","o","Object","prototype","util","isBoolean","isNull","isNullOrUndefined","isNumber","isString","isSymbol","isUndefined","isRegExp","re","isObject","isDate","d","isError","e","Error","isFunction","isPrimitive","isBuffer","require$$1","copyBuffer","target","offset","copy","BufferList","instance","Constructor","_classCallCheck","this","head","tail","push","v","entry","data","next","unshift","shift","ret","clear","join","s","p","concat","n","inspect","custom","obj","constructor","name","pna","emitErrorNT","self","err","emit","destroy_1","destroy","cb","_this","readableDestroyed","_readableState","destroyed","writableDestroyed","_writableState","errorEmitted","_destroy","undestroy","reading","ended","endEmitted","ending","finalCalled","prefinished","finished","node","deprecate","CorkedRequest","state","finish","corkReq","callback","pendingcb","corkedRequestsFree","onCorkedFinish","_stream_writable","Writable","Duplex","asyncWrite","browser","slice","setImmediate","WritableState","create","inherits","require$$2","internalUtil","require$$3","Stream","require$$4","require$$5","OurUint8Array","global","window","Uint8Array","realHasInstance","destroyImpl","require$$6","nop","options","require$$7","isDuplex","objectMode","writableObjectMode","hwm","highWaterMark","writableHwm","writableHighWaterMark","defaultHwm","Math","floor","needDrain","noDecode","decodeStrings","defaultEncoding","writing","corked","sync","bufferProcessing","onwrite","er","writecb","writelen","onwriteStateUpdate","finishMaybe","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","bufferedRequestCount","writable","write","_write","writev","_writev","final","_final","doWrite","chunk","onwriteDrain","l","holder","count","allBuffers","isBuf","callFinal","need","prefinish","getBuffer","current","out","defineProperty","get","_","Symbol","hasInstance","Function","value","object","pipe","_uint8ArrayToBuffer","writeAfterEnd","valid","validChunk","newChunk","decodeChunk","last","writeOrBuffer","cork","uncork","setDefaultEncoding","toLowerCase","enumerable","end","once","endWritable","set","_undestroy","objectKeys","keys","_stream_duplex","Readable","method","readable","allowHalfOpen","onend","onEndNT","_stream_readable","ReadableState","EventEmitter","EElistenerCount","emitter","type","listeners","debugUtil","debug","debuglog","StringDecoder","require$$8","require$$9","kProxyEvents","require$$10","readableObjectMode","readableHwm","readableHighWaterMark","pipes","pipesCount","flowing","needReadable","emittedReadable","readableListening","resumeScheduled","awaitDrain","readingMore","decoder","require$$11","read","_read","readableAddChunk","addToFront","skipChunkCheck","emitReadable","onEofChunk","chunkInvalid","getPrototypeOf","addChunk","maybeReadMore","needMoreData","isPaused","setEncoding","enc","MAX_HWM","howMuchToRead","computeNewHighWaterMark","emitReadable_","flow","maybeReadMore_","nReadingNextTick","resume_","fromList","list","hasStrings","c","str","nb","copyFromBufferString","copyFromBuffer","fromListPartial","endReadable","endReadableNT","xs","x","parseInt","nOrig","doRead","dest","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","removeListener","onclose","onfinish","ondrain","onerror","ondata","cleanedUp","on","pipeOnDrain","increasedAwaitDrain","pause","event","prependListener","_events","resume","dests","index","splice","ev","res","addListener","wrap","paused","bind","_fromList","_stream_transform","Transform","afterTransform","ts","_transformState","transforming","writechunk","rs","needTransform","writeencoding","transform","_transform","flush","_flush","done","_this2","err2","_stream_passthrough","PassThrough","env","READABLE_STREAM","support","base64","array","string","arraybuffer","ArrayBuffer","nodebuffer","uint8array","blob","Blob","Builder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","builder","append","getBlob","nodestream","utils","_keyStr","encode","input","chr1","chr2","chr3","enc1","enc2","enc3","enc4","output","remainingBytes","getTypeOf","charCodeAt","charAt","decode","resultIndex","dataUrlPrefix","substr","totalLength","replace","nodejsUtils","isNode","newBufferFrom","allocBuffer","b","isStream","scheduleDrain","draining","Mutation","MutationObserver","WebKitMutationObserver","called","observer","element","document","createTextNode","observe","characterData","MessageChannel","createElement","scriptEl","onreadystatechange","parentNode","removeChild","documentElement","appendChild","setTimeout","channel","port1","onmessage","port2","postMessage","queue","oldQueue","lib","task","immediate","INTERNAL","handlers","REJECTED","FULFILLED","PENDING","UNHANDLED","Promise","resolver","outcome","handled","safelyResolveThenable","QueueItem","promise","onFulfilled","onRejected","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","unwrap","func","returnValue","reject","resolve","getThen","then","thenable","onError","onSuccess","result","tryCatch","status","finally","reason","catch","error","all","iterable","values","resolved","allResolver","outValue","race","response","ES6Promise","external","identity","stringToArrayLike","newBlob","part","checkSupport","arrayToStringHelper","stringifyByChunk","k","String","fromCharCode","min","subarray","stringifyByChar","resultStr","applyCanBeUsed","arrayLikeToString","canUseApply","arrayLikeToArrayLike","arrayFrom","arrayTo","applyFromCharCode","byteLength","transformTo","outputType","inputType","path","parts","split","pop","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","code","toUpperCase","delay","ctor","superCtor","Obj","extend","attr","hasOwnProperty","prepareContent","inputData","isBinary","isOptimizedBinaryString","isBase64","FileReader","reader","onload","readAsArrayBuffer","dataType","GenericWorker","streamInfo","generatedError","extraStreamInfo","isFinished","isLocked","_listeners","previous","cleanUp","listener","registerPrevious","mergeStreamInfo","processChunk","withError","withStreamInfo","lock","me","GenericWorker_1","_utf8len","Utf8DecodeWorker","leftOver","Utf8EncodeWorker","utf8encode","c2","m_pos","str_len","buf_len","string2buf","utf8decode","c_len","utf16buf","buf2string","previousData","nextBoundary","max","pos","utf8border","usableData","meta","ConvertWorker","destType","ConvertWorker_1","NodejsStreamOutputAdapter","helper","updateCb","_helper","NodejsStreamOutputAdapter_1","transformZipOutput","content","mimeType","dataArray","accumulate","updateCallback","chunkType","_internalType","resultType","_outputType","_mimeType","StreamHelper","worker","internalType","_worker","evt","toNodejsStream","StreamHelper_1","defaults","DEFAULT_BLOCK_SIZE","DataWorker","dataP","dataIsReady","_tickScheduled","_tickAndRepeat","_tick","nextIndex","substring","percent","DataWorker_1","makeTable","table","crcTable","crc32","crc","t","crc32str","crc32_1","Crc32Probe","Crc32Probe_1","DataLengthProbe","propName","DataLengthProbe_1","CompressedObject","compressedSize","uncompressedSize","compression","compressedContent","getContentWorker","uncompressWorker","that","getCompressedWorker","createWorkerFrom","uncompressedWorker","compressionOptions","compressWorker","compressedObject","utf8","ZipObject","dir","date","comment","unixPermissions","dosPermissions","_data","_dataBinary","binary","internalStream","askUnicodeString","_decompressWorker","isUnicodeString","async","onUpdate","nodeStream","_compressWorker","magic","removedMethods","removedFn","zipObject","TYPED_OK","Uint16Array","Int32Array","_has","assign","sources","source","shrinkBuf","fnTyped","arraySet","src_offs","dest_offs","flattenChunks","chunks","fnUntyped","setTyped","Buf8","Buf16","Buf32","Z_FIXED","Z_BINARY","Z_TEXT","Z_UNKNOWN","zero","STORED_BLOCK","STATIC_TREES","DYN_TREES","MIN_MATCH","MAX_MATCH","LENGTH_CODES","LITERALS","L_CODES","D_CODES","BL_CODES","HEAP_SIZE","MAX_BITS","Buf_size","MAX_BL_BITS","END_BLOCK","REP_3_6","REPZ_3_10","REPZ_11_138","extra_lbits","extra_dbits","extra_blbits","bl_order","DIST_CODE_LEN","static_ltree","static_dtree","_dist_code","_length_code","base_length","base_dist","static_l_desc","static_d_desc","static_bl_desc","StaticTreeDesc","static_tree","extra_bits","extra_base","elems","max_length","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","dist","put_short","w","pending_buf","pending","send_bits","bi_valid","bi_buf","send_code","tree","bi_reverse","bi_flush","gen_bitlen","desc","h","m","bits","xbits","f","stree","extra","base","overflow","bl_count","heap","heap_max","opt_len","static_len","gen_codes","next_code","tr_static_init","init_block","dyn_ltree","dyn_dtree","bl_tree","last_lit","matches","bi_windup","copy_block","header","smaller","depth","_n2","_m2","pqdownheap","j","heap_len","compress_block","ltree","dtree","lc","lx","d_buf","l_buf","build_tree","scan_tree","curlen","prevlen","nextlen","max_count","min_count","send_tree","build_bl_tree","max_blindex","l_desc","d_desc","bl_desc","send_all_trees","lcodes","dcodes","blcodes","rank","detect_data_type","black_mask","static_init_done","_tr_init","_tr_stored_block","stored_len","_tr_align","_tr_flush_block","opt_lenb","static_lenb","level","strm","data_type","strategy","_tr_tally","lit_bufsize","adler32","adler","s1","s2","trees","adler32_1","messages","msg","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_OK","Z_STREAM_END","Z_STREAM_ERROR","Z_DATA_ERROR","Z_BUF_ERROR","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_DEFAULT_STRATEGY","Z_DEFLATED","MAX_MEM_LEVEL","MAX_WBITS","DEF_MEM_LEVEL","MIN_LOOKAHEAD","PRESET_DICT","INIT_STATE","EXTRA_STATE","NAME_STATE","COMMENT_STATE","HCRC_STATE","BUSY_STATE","FINISH_STATE","BS_NEED_MORE","BS_BLOCK_DONE","BS_FINISH_STARTED","BS_FINISH_DONE","OS_CODE","configuration_table","errorCode","flush_pending","avail_out","pending_out","next_out","total_out","flush_block_only","block_start","strstart","put_byte","putShortMSB","read_buf","start","avail_in","next_in","total_in","longest_match","cur_match","match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","limit","w_size","_win","wmask","w_mask","prev","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","more","_w_size","window_size","hash_size","insert","ins_h","hash_shift","hash_mask","deflate_stored","max_block_size","pending_buf_size","max_start","deflate_fast","hash_head","bflush","match_length","max_lazy_match","deflate_slow","max_insert","prev_match","match_available","deflate_rle","deflate_huff","Config","good_length","max_lazy","nice_length","max_chain","lm_init","DeflateState","gzhead","gzindex","last_flush","w_bits","hash_bits","deflateResetKeep","deflateReset","deflateSetHeader","deflateInit2","windowBits","memLevel","deflateInit","deflate","old_flush","beg","val","text","hcrc","time","os","bstate","deflateEnd","deflateSetDictionary","dictionary","avail","tmpDict","dictLength","deflate_1","deflateInfo","STR_APPLY_OK","STR_APPLY_UIA_OK","__","q","buf2binstring","ZStream","strings","binstring2buf","zstream","zlib_deflate","Z_SYNC_FLUSH","Deflate","chunkSize","to","opt","raw","gzip","dict","_dict_set","deflator","deflateRaw","mode","_mode","onEnd","onData","BAD","TYPE","inffast","_in","_out","dmax","wsize","whave","wnext","s_window","hold","lcode","dcode","lmask","dmask","here","op","from_source","lencode","distcode","lenbits","distbits","top","dolen","sane","MAXBITS","ENOUGH_LENS","ENOUGH_DISTS","CODES","LENS","DISTS","lbase","lext","dbase","dext","inftrees","lens","lens_index","codes","table_index","work","opts","incr","low","mask","here_bits","here_op","here_val","sym","root","curr","drop","left","used","huff","base_index","offs","extra_index","inflate_fast","inflate_table","Z_TREES","Z_NEED_DICT","Z_MEM_ERROR","HEAD","FLAGS","TIME","OS","EXLEN","EXTRA","NAME","COMMENT","HCRC","DICTID","DICT","TYPEDO","STORED","COPY_","COPY","TABLE","LENLENS","CODELENS","LEN_","LEN","LENEXT","DIST","DISTEXT","MATCH","LIT","CHECK","LENGTH","DONE","MEM","SYNC","DEF_WBITS","zswap32","InflateState","havedict","flags","check","total","wbits","ncode","nlen","ndist","have","lendyn","distdyn","back","was","inflateResetKeep","inflateReset","inflateReset2","inflateInit2","inflateInit","virgin","lenfix","distfix","fixedtables","updatewindow","inflate","put","last_bits","last_op","last_val","hbuf","order","inf_leave","xflags","extra_len","inflateEnd","inflateGetHeader","inflateSetDictionary","inflate_1","inflateInfo","constants","Z_ERRNO","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","GZheader","gzheader","zlib_inflate","Inflate","inflator","inflateRaw","next_out_utf8","utf8str","allowBufError","ungzip","pako","pako_1","USE_TYPEDARRAY","Uint32Array","ARRAY_TYPE","FlateWorker","action","_pako","_pakoAction","_pakoOptions","flate","_createPako","compressions","STORE","DEFLATE","signature","decToHex","dec","bytes","hex","generateUnixExternalFileAttr","isDir","generateDosExternalFileAttr","generateZipParts","streamedContent","streamingEnded","platform","encodeFileName","dosTime","dosDate","file","useCustomEncoding","encodedFileName","utfEncodedFileName","encodedComment","utfEncodedComment","useUTF8ForFileName","useUTF8ForComment","extraFields","unicodePathExtraField","unicodeCommentExtraField","dataInfo","bitflag","extFileAttr","versionMadeBy","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCFullYear","getUTCMonth","getUTCDate","fileRecord","LOCAL_FILE_HEADER","dirRecord","CENTRAL_FILE_HEADER","generateCentralDirectoryEnd","entriesCount","centralDirLength","localDirLength","CENTRAL_DIRECTORY_END","generateDataDescriptors","DATA_DESCRIPTOR","ZipFileWorker","streamFiles","bytesWritten","zipComment","zipPlatform","contentBuffer","dirRecords","currentSourceOffset","currentFile","_sources","currentFilePercent","remainingFiles","openedSource","record","closedSource","dirEnd","prepareNextSource","ZipFileWorker_1","getCompression","fileCompression","zipCompression","compressionName","generate","generateWorker","zip","zipFileWorker","forEach","relativePath","NodejsStreamInputAdapter","filename","_upstreamEnded","_bindStream","_stream","NodejsStreamInputAdapter_1","fileAdd","originalOptions","parent","Date","forceTrailingSlash","createFolders","parentFolder","folderAdd","zipObjectContent","optimizedBinaryString","files","lastSlash","lastIndexOf","load","filter","search","regexp","test","folder","newFolder","clone","remove","kids","generateInternalStream","generateAsync","generateNodeStream","DataReader","checkOffset","checkIndex","newIndex","setIndex","skip","byteAt","readInt","readString","readData","lastIndexOfSignature","readAndCheckSignature","readDate","dostime","UTC","DataReader_1","ArrayReader","sig","sig0","sig1","sig2","sig3","ArrayReader_1","StringReader","StringReader_1","Uint8ArrayReader","Uint8ArrayReader_1","NodeBufferReader","NodeBufferReader_1","readerFor","crc32fn","MADE_BY_DOS","MADE_BY_UNIX","findCompression","compressionMethod","ZipEntry","loadOptions","isEncrypted","bitFlag","useUTF8","readLocalPart","localExtraFieldsLength","fileNameLength","fileName","decompressed","readCentralPart","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","localHeaderOffset","readExtraFields","parseZIP64ExtraField","fileComment","processAttributes","madeBy","fileNameStr","extraReader","extraFieldId","extraFieldLength","extraFieldValue","id","handleUTF8","decodeParamType","fileCommentStr","upath","findExtraFieldUnicodePath","fileNameByteArray","decodeFileName","ucomment","findExtraFieldUnicodeComment","commentByteArray","upathField","ucommentField","zipEntry","ZipEntries","checkSignature","expectedSignature","isSignature","askedIndex","currentIndex","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","decodeContent","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","extraDataSize","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","readCentralDir","zip64","readEndOfCentral","endOfCentralDirOffset","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","expectedEndOfCentralDirOffset","extraBytes","abs","prepareReader","zipEntries","checkEntryCRC32","checkCRC32","promises","results","unsafeName","safeName","unsafeOriginalName","JSZip","newObj","loadAsync","y","plural","ms","msAbs","isPlural","round","exec","parseFloat","parse","isFinite","long","fmtLong","fmtShort","JSON","stringify","common","createDebug","namespace","prevTime","namespacesCache","enabledCache","enableOverride","enabled","Number","diff","coerce","format","formatter","formatters","formatArgs","log","useColors","color","selectColor","configurable","namespaces","init","delimiter","newDebug","toNamespace","default","stack","message","disable","names","map","skips","enable","save","RegExp","humanize","console","warn","hash","colors","lastC","storage","setItem","removeItem","r","getItem","DEBUG","__nwjs","navigator","userAgent","style","WebkitAppearance","firebug","exception","$1","localStorage","localstorage","warned","hasFlag","flag","argv","prefix","startsWith","position","terminatorPosition","tty","forceColor","translateLevel","hasBasic","has256","has16m","supportsColor","haveStream","streamIsTTY","TERM","osRelease","release","some","sign","CI_NAME","TEAMCITY_VERSION","COLORTERM","TERM_PROGRAM_VERSION","TERM_PROGRAM","FORCE_COLOR","supportsColor_1","isTTY","isatty","inspectOpts","colorCode","hideDate","toISOString","getDate","Boolean","fd","reduce","prop","trim","O","srcModule","endOfFile","__awaiter","thisArg","_arguments","P","generator","fulfilled","step","rejected","AbstractTokenizer_1","type_1","AbstractTokenizer","numBuffer","readToken","token","maybeless","readBuffer","peekToken","peekBuffer","readNumber","peekNumber","close","assert","Deferred","endOfStream","StreamReader","peekQueue","peek","bytesRead","remaining","peekData","lenCopy","ok","request","deferred","tryRead","ReadStreamTokenizer_1","then_read_stream_1","_debug","ReadStreamTokenizer","fileSize","super","streamReader","skipBytes","ignore","skipBuffer","BufferTokenizer_1","BufferTokenizer","maybeLess","bytes2read","tv","bytesIgnored","core","fromStream","fromBuffer","character","uint8ArrayUtf8ByteString","readUInt64LE","mul","tarHeaderChecksumMatches","sum","signedBitSum","byte","readSum","stringToBytes","xpiZipFilename","oxmlContentTypes","oxmlRels","fileType","checkString","ext","mime","findNextZipHeaderIndex","startAt","findIndex","el","zipHeaderIndex","oxmlFound","brandMajor","sliced","idPos","docTypePos","findDocType","every","objectSize","readableStream","eval","pass","minimumBytes","pipeline","paramRegExp","textRegExp","tokenRegExp","qescRegExp","quoteRegExp","subtypeNameRegExp","typeNameRegExp","typeRegExp","parameters","subtype","suffix","param","params","sort","qstring","getcontenttype","splitType","lastIndex","getHeader","headers","mediaTyper","Windows1292Decoder","inRange","a","codePointToString","cp","singleByteDecoder","bite","codePoint","windows1252","trimRightNull","pos0","swapBytes","readUTF16String","Util","decodeString","Windows1292Decoder_1","stripNulls","getBitAllignedNumber","byteOffset","bitOffset","bitOff","bitsRead","bitsLeft","isBitSet","a2hex","strtokBITSET","off","bit","ieee754","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","NaN","Infinity","pow","rt","isNaN","LN2","tokenTypes","maybeFlush","UINT8","readUInt8","equal","no","writeUInt8","UINT16_LE","readUInt16LE","writeUInt16LE","UINT16_BE","readUInt16BE","writeUInt16BE","UINT24_LE","readUIntLE","writeUIntLE","UINT24_BE","readUIntBE","writeUIntBE","UINT32_LE","readUInt32LE","writeUInt32LE","UINT32_BE","readUInt32BE","writeUInt32BE","INT8","readInt8","writeInt8","INT16_BE","readInt16BE","writeInt16BE","INT16_LE","readInt16LE","writeInt16LE","INT24_LE","readIntLE","writeIntLE","INT24_BE","readIntBE","writeIntBE","INT32_BE","readInt32BE","writeInt32BE","INT32_LE","readInt32LE","writeInt32LE","UINT64_LE","INT64_LE","UINT64_BE","INT64_BE","Float16_BE","Float16_LE","Float32_BE","readFloatBE","writeFloatBE","Float32_LE","readFloatLE","writeFloatLE","Float64_BE","readDoubleBE","writeDoubleBE","Float64_LE","readDoubleLE","writeDoubleLE","Float80_BE","Float80_LE","IgnoreType","BufferType","StringType","AnsiStringType","until","sub","BasicParser_1","metadata","tokenizer","initDebug","Util_1","Token","Genres","Id3v1StringType","title","artist","album","year","zeroByte","track","genre","getGenre","genreIndex","Iid3v1Token","GenericTagMapper","ID3v1Parser_1","CommonTagMapper","tagTypes","tagMap","parseGenre","origVal","cur","fixPictureMimeType","pictureType","toLocaleLowerCase","toIntOrNull","cleaned","normalizeTrack","postMap","tag","ID3v1TagMap","GenericTagMapper_1","id3v1TagMap","ID3v1TagMapper","ID3v24TagMapper_1","id3v24TagMap","TIT2","TPE1","TPE2","TALB","TDRV","TORY","TPOS","TCON","APIC","TCOM","TSOA","TSOT","TOAL","TSOP","TSO2","TSOC","TEXT","TPE3","TPE4","TPUB","TIT1","TIT3","TRCK","TCMP","POPM","TBPM","TLAN","TCOP","WCOP","TENC","TSSE","TSRC","WOAR","TDRC","TYER","TDOR","TMOO","SYLT","TSST","TKEY","COMM","TOPE","toRating","popm","email","rating","maxRatingScore","owner_identifier","identifier","asfTagMap","Title","Author","Description","Copyright","LICENSE","ASIN","id3v22TagMap","TT2","TP1","TP2","TAL","TYE","COM","TRK","TPA","TCO","PIC","TCM","TOR","TOT","TXT","TP3","TPB","TT1","TT3","TLA","TCR","WCP","ID3v22TagMapper","APEv2TagMapper_1","apev2TagMap","Artist","Artists","Album","Year","Originalyear","Originaldate","Comment","Track","Disc","DISCNUMBER","Genre","Composer","Lyrics","ALBUMSORT","TITLESORT","WORK","ARTISTSORT","ALBUMARTISTSORT","COMPOSERSORT","Lyricist","Writer","Conductor","MixArtist","Arranger","Engineer","Producer","DJMixer","Mixer","Label","Grouping","Subtitle","DiscSubtitle","Compilation","BPM","Mood","Media","CatalogNumber","MUSICBRAINZ_ALBUMSTATUS","MUSICBRAINZ_ALBUMTYPE","RELEASECOUNTRY","Script","Language","EncodedBy","EncoderSettings","Barcode","ISRC","musicbrainz_trackid","musicbrainz_releasetrackid","MUSICBRAINZ_ALBUMID","MUSICBRAINZ_ARTISTID","MUSICBRAINZ_ALBUMARTISTID","MUSICBRAINZ_RELEASEGROUPID","MUSICBRAINZ_WORKID","MUSICBRAINZ_TRMID","MUSICBRAINZ_DISCID","Acoustid_Id","ACOUSTID_FINGERPRINT","MUSICIP_PUID","Weblink","upperCaseMap","getCommonName","aART","trkn","disk","covr","soal","sonm","soar","soaa","soco","cpil","tmpo","tvsh","tvsn","tves","sosn","tven","tvnn","pcst","purl","cprt","pgap","gnre","ldes","tagType","MP4TagMapper","vorbisTagMap","TITLE","ARTIST","ARTISTS","ALBUMARTIST","ALBUM","DATE","ORIGINALDATE","ORIGINALYEAR","TRACKNUMBER","GENRE","METADATA_BLOCK_PICTURE","COMPOSER","LYRICS","LYRICIST","WRITER","CONDUCTOR","REMIXER","ARRANGER","ENGINEER","PRODUCER","DJMIXER","MIXER","LABEL","GROUPING","SUBTITLE","DISCSUBTITLE","TRACKTOTAL","DISCTOTAL","COMPILATION","RATING","MOOD","MEDIA","CATALOGNUMBER","RELEASESTATUS","RELEASETYPE","SCRIPT","LANGUAGE","COPYRIGHT","ENCODEDBY","ENCODERSETTINGS","BARCODE","MUSICBRAINZ_TRACKID","MUSICBRAINZ_RELEASETRACKID","ACOUSTID_ID","ACOUSTID_ID_FINGERPRINT","WEBSITE","NOTES","TOTALTRACKS","TOTALDISCS","DISCOGS_ARTIST_ID","DISCOGS_ARTISTS","DISCOGS_ARTIST_NAME","DISCOGS_ALBUM_ARTISTS","DISCOGS_CATALOG","DISCOGS_COUNTRY","DISCOGS_DATE","DISCOGS_LABEL","DISCOGS_LABEL_ID","DISCOGS_MASTER_RELEASE_ID","DISCOGS_RATING","DISCOGS_RELEASED","DISCOGS_RELEASE_ID","DISCOGS_VOTES","CATALOGID","STYLE","REPLAYGAIN_TRACK_GAIN","REPLAYGAIN_TRACK_PEAK","riffInfoTagMap","IART","ICRD","INAM","TITL","IPRD","ITRK","ICMT","ICNT","GNRE","IWRI","RATE","YEAR","ISFT","CODE","TURL","IGNR","ITCH","IRPD","CombinedTagMapper_1","ID3v1TagMap_1","AsfTagMapper_1","ID3v22TagMapper_1","VorbisTagMapper_1","RiffInfoTagMap_1","CombinedTagMapper","tagMappers","ID3v24TagMapper","MP4TagMapper_1","VorbisTagMapper","APEv2TagMapper","AsfTagMapper","RiffInfoTagMapper","mapper","registerTagMapper","mapTag","MetadataCollector_1","TagPriority","MetadataCollector","native","of","commonOrigin","originPriority","tagMapper","priority","artificial","hasAny","setFormat","addTag","tagId","toCommon","artists","setGenericTag","artistTag","joinArtists","AttachedPictureType","ID3v2Token","UINT32SYNCSAFE","Header","fileIdentifier","sizeOfPadding","FrameParser_1","ID3v2_1","major","includeCovers","FrameParser","getTextEncoding","nullTerminatorLength","getNullTerminatorLength","splitValue","functionList","readIdentifierAndData","description","pic","fzero","findZero","txt","language","dataLen","counter","url","ID3v2Parser_1","ID3v2Parser","removeUnsyncBytes","readI","writeI","majorVer","readFrameFlags","getFrameHeaderLength","tag_alter_preservation","file_alter_preservation","read_only","grouping_identity","encryption","unsynchronisation","data_length_indicator","readFrameData","frameHeader","id3Header","headerType","isExtendedHeader","parseExtendedHeader","parseId3Data","extendedHeader","ExtendedHeader","dataRemaining","parseExtendedHeaderData","extendedHeaderSize","parseMetadata","makeDescriptionTagName","frameDataBytes","validFourCC","FourCcToken","AiffToken","FourCC_1","Common","isAifc","minimumChunkSize","baseSampleRate","numChannels","numSampleFrames","sampleSize","sampleRate","ID3Stream_1","stream_1","ID3Stream","BasicParser","iff","chunkID","isCompressed","chunkHeader","nextChunk","id3_data","id3stream","rst","strtok3","DataType","DescriptorParser","ID","headerBytes","seekTableBytes","headerDataBytes","apeFrameDataBytes","apeFrameDataBytesHigh","terminatingDataBytes","fileMD5","APEv2Parser_1","FileType","preamble","APEv2Parser","ape","calculateDuration","ah","duration","totalFrames","blocksPerFrame","parseTagHeader","APEv2Token_1","TagFooter","footer","tags","parseTags","skipCovers","parseTagFooter","fields","TagItemHeader","tagItemHeader","text_utf8","tagFormat","picData","picture","external_info","descriptor","lenExp","descriptorBytes","parseDescriptorExpansion","parseHeader","GUID","fromBin","bin","objectId","VideoMedia","Degradable_JPEG_Media","FileTransferMedia","BinaryMedia","HeaderObject","DataObject","IndexObject","MediaObjectIndexObject","TimecodeIndexObject","FilePropertiesObject","StreamPropertiesObject","HeaderExtensionObject","ScriptCommandObject","MarkerObject","BitrateMutualExclusionObject","ErrorCorrectionObject","ExtendedContentDescriptionObject","ContentBrandingObject","StreamBitratePropertiesObject","ContentEncryptionObject","ExtendedContentEncryptionObject","DigitalSignatureObject","PaddingObject","ExtendedStreamPropertiesObject","AdvancedMutualExclusionObject","GroupMutualExclusionObject","StreamPrioritizationObject","BandwidthSharingObject","LanguageListObject","MetadataObject","MetadataLibraryObject","IndexParametersObject","MediaObjectIndexParametersObject","TimecodeIndexParametersObject","CompatibilityObject","AdvancedContentEncryptionObject","AudioMedia","CommandMedia","JFIF_Media","AsfUtil_1","AsfUtil","getParserForAttr","attributeParsers","parseUnicodeAttr","parseByteArrayAttr","newBuf","parseBoolAttr","parseWordAttr","parseDWordAttr","TopLevelHeaderObjectToken","numberOfHeaderObjects","HeaderObjectToken","GUID_1","State","postProcessTag","valueType","WmPictureToken","parseAttr","IgnoreObjectState","creationDate","dataPacketsCount","playDuration","sendDuration","preroll","seekable","maximumBitrate","guid","extensionDataSize","tagName","ContentDescriptionObjectState","contentDescTags","AsfParser_1","AsfObject","equals","parseObjectHeader","numberOfObjectHeaders","fpo","spo","streamType","extHeader","parseExtensionObject","addTags","ExtendedContentDescriptionObjectState","CodecListObject","warnings","extensionSize","ExtendedStreamPropertiesObjectState","MetadataObjectState","moTags","MetadataLibraryObjectState","mlTags","ASF_Index_Placeholder_Object","VorbisPictureToken","fromBase64","base64str","mimeLen","descLen","width","height","colour_depth","indexed_color","picDataLen","AbstractID3Parser","id3parser","startsWithID3v2Header","parseID3v2","_parse","skipPostHeaders","finalize","id3v1parser","ID3v1Parser","Vorbis_1","AbstractID3Parser_1","BlockType","FlacParser","fourCC","blockHeader","Metadata","BlockHeader","parseDataBlock","lastBlock","dataSize","STREAMINFO","parseBlockStreamInfo","PADDING","padding","APPLICATION","SEEKTABLE","VORBIS_COMMENT","parseComment","CUESHEET","parsePicture","BlockStreamInfo","channels","bitsPerSample","totalSamples","DataDecoder","readStringUtf8","commentListLength","FlacParser_1","minimumBlockSize","AtomToken","hdr","ExtendedSize","ftyp","mhdr","FixedLengthAtom","expLen","atomId","MdhdAtom","Atom_1","Atom","extended","children","atomPath","atomBean","readAtom","dataHandler","readAtoms","MP4Parser_1","encoderDict","alac","lossy","mp4a","mp4s","c608","read_BE_Signed_Integer","read_BE_Unsigned_Integer","formatList","rootAtom","atom","parseMetadataItemData","parseAtom_stsd","types","parseAtom_ftyp","distinct","parseAtom_mdhd","parseAtom_mvhd","addWarning","metaAtom","tagKey","child","parseValueAtom","NameAtom","mean","dataAtom","DataAtom","num","genreInt","genreStr","MP4Parser","mvhd","parse_mxhd","mvhd_data","mdhd","mdhd_data","mxhd","timeScale","XingTag","XingTag_1","MPEG4","AudioObjectTypes","SamplingFrequencies","MPEG4_ChannelConfigurations","MpegFrameHeader","versionIndex","layer","LayerDescription","parseAdtsHeader","parseMpegHeader","isProtectedByCRC","calcDuration","numFrames","samplingRate","container","bitrateIndex","sampRateFreqIndex","privateBit","channelModeIndex","modeExtension","emphasis","VersionID","channelMode","ChannelMode","codec","bitrateInKbps","calcBitrate","bitrate","calcSamplingRate","profileIndex","codecProfile","samplingFrequencyIndex","channelIndex","mp4ChannelConfig","frameLength","mpegVersion","bitrate_index","sampling_rate_freq_index","SyncByte1","SyncByte2","samplesInFrameTable","FrameHeader","getVbrCodecProfile","vbrScale","frameCount","countSkipFrameData","bitrates","calculateEofDuration","syncPeek","maxPeekLen","quit","parseAudioFrameHeader","numberOfSamples","samplesPerFrame","hasID3v1","mpegSize","mpegOffset","frame_size","bo","gotFirstSync","buf_frame_header","syncFrameCount","parseAdts","slot_size","calcSlotSize","samples_per_frame","calcSamplesPerFrame","fsize","audioFrameHeader","skipSideInformation","areAllSame","totalAudioLength","framesPerSec","StreamVersion8","PacketKey","SH_part3","sampleFrequency","maxUsedBands","channelCount","msUsed","audioBlockFrames","readVariableSizeField","MpcSv8Parser_1","SV8","audioLength","parsePacket","sv8reader","readPacketHeader","payloadLength","sh","readStreamHeader","sampleCount","StreamVersion7","BitReader_1","BitReader","dword","remainder","numOfWords","MpcSv7Parser_1","SV7","streamMajorVersion","streamMinorVersion","lastFrameLength","bitreader","toFixed","skipAudioData","musepack","mpcParser","MpcSv7Parser","MpcSv8Parser","Vorbis","VorbisParser","pageSegments","parsePage","pageData","firstPage","parseFirstPage","continued","lastPage","fullPage","parseFullPage","commonHeader","CommonHeader","vorbis","packetType","idHeader","bitrateNominal","parseUserCommentList","absoluteGranulePosition","strLen","userCommentListLength","parseUserComment","Opus","VorbisParser_1","OpusParser","lastPos","IdHeader","magicSignature","inputSampleRate","SpeexParser","speexHeader","Speex","nb_channels","OggParser_1","OpusParser_1","SpeexParser_1","SegmentTable","totalPageSize","OggParser","capturePattern","pageSequenceNo","segmentTable","pageConsumer","codecName","pageNumber","RiffChunk","ListInfoTagValue","tagHeader","WaveFormat","nBlockAlign","WaveParser","riffHeader","riff","parseRiffChunk","readWaveChunk","parseListTag","fact","WaveChunk","FactChunk","fmt","Format","subFormat","wFormatTag","wBitsPerSample","nSamplesPerSec","nChannels","blockAlign","lossless","dwSampleLength","numberOfChannels","listHeader","listType","parseRiffInfoTags","valueToken","isOddSize","WavPack","WavPackToken_1","WavPackParser","parseWavPackBlocks","BlockHeaderToken","strictEqual","BlockID","blockIndex","dataformat","isHybrid","isDSD","ignoreBytes","blockSize","parseMetadataSubBlock","blockSamples","audioDataSize","remainingLength","MetadataIdToken","dataSizeInWords","largeBlock","functionId","mp","ChunkHeader","DsdChunk","DsfChunk_1","p0","dsdChunk","metadataPointer","parseChunks","bytesRemaining","formatChunk","FormatChunk","channelNum","samplingFrequency","DsdiffToken","DsdiffToken_1","readFmt8Chunks","remainingSize","propType","handleSoundPropertyChunks","sndPropHeader","handleChannelChunks","compressionIdCode","hours","minutes","seconds","samples","lsConfig","ParserFactory_1","MpegParser_1","musepack_1","WaveParser_1","require$$12","WavPackParser_1","require$$13","DsfParser_1","require$$14","DsdiffParser_1","require$$15","ParserFactory","contentType","parserId","getParserIdForMimeType","getParserIdForExtension","guessedType","filePath","getExtension","loadParser","moduleName","AiffParser_1","AIFFParser","AsfParser","DsfParser","DsdiffParser","MpegParser","parser","toCommonMetadata","fname","subType","parseBuffer","parseFromTokenizer","orderTags","nativeTags","isTypedarray","isTypedArray","strict","isStrictTypedArray","loose","isLooseTypedArray","Int8Array","Int16Array","Uint8ClampedArray","Float32Array","Float64Array","typedarrayToBuffer","Browser2NodeStream_1","Browser2NodeStream","getReader","cancel","mm","toBuffer","parseNodeStream","parseStream","parseReadableStream","ns","parseBlob","fileReader","onloadend","onabort","convertBlobToBuffer","fetchFromUrl","audioTrackUrl","fetch","body","statusText","ratingToStars","REACT_ELEMENT_TYPE","for","REACT_FRAGMENT_TYPE","jsxProd","config","maybeKey","ref","$$typeof","props","reactJsxRuntime_production","Fragment","jsx","jsxs","jsxRuntimeModule","parentIndex","compare","first","halfLength","leftIndex","rightIndex","right","sortIndex","unstable_now","performance","now","localPerformance","localDate","initialTime","taskQueue","timerQueue","taskIdCounter","currentTask","currentPriorityLevel","isPerformingWork","isHostCallbackScheduled","isHostTimeoutScheduled","needsPaint","localSetTimeout","localClearTimeout","clearTimeout","localSetImmediate","advanceTimers","currentTime","timer","startTime","expirationTime","handleTimeout","isMessageLoopRunning","schedulePerformWorkUntilDeadline","firstTimer","requestHostTimeout","taskTimeoutID","frameInterval","shouldYieldToHost","performWorkUntilDeadline","hasMoreWork","previousPriorityLevel","priorityLevel","continuationCallback","port","unstable_IdlePriority","unstable_ImmediatePriority","unstable_LowPriority","unstable_NormalPriority","unstable_Profiling","unstable_UserBlockingPriority","unstable_cancelCallback","unstable_forceFrameRate","fps","unstable_getCurrentPriorityLevel","unstable_next","eventHandler","unstable_requestPaint","unstable_runWithPriority","unstable_scheduleCallback","timeout","unstable_shouldYield","unstable_wrapCallback","parentPriorityLevel","schedulerModule","REACT_PORTAL_TYPE","REACT_STRICT_MODE_TYPE","REACT_PROFILER_TYPE","REACT_CONSUMER_TYPE","REACT_CONTEXT_TYPE","REACT_FORWARD_REF_TYPE","REACT_SUSPENSE_TYPE","REACT_MEMO_TYPE","REACT_LAZY_TYPE","MAYBE_ITERATOR_SYMBOL","iterator","getIteratorFn","maybeIterable","ReactNoopUpdateQueue","isMounted","enqueueForceUpdate","enqueueReplaceState","enqueueSetState","emptyObject","Component","context","updater","refs","ComponentDummy","PureComponent","isReactComponent","setState","partialState","forceUpdate","pureComponentPrototype","isPureReactComponent","isArrayImpl","ReactSharedInternals","H","A","T","S","V","ReactElement","owner","cloneAndReplaceKey","oldElement","newKey","isValidElement","escape","escaperLookup","userProvidedKeyEscapeRegex","getElementKey","noop$1","resolveThenable","fulfilledValue","mapIntoArray","escapedPrefix","nameSoFar","invokeCallback","_init","_payload","nextNamePrefix","mapChildren","lazyInitializer","payload","_status","_result","moduleObject","reportGlobalError","reportError","ErrorEvent","bubbles","cancelable","dispatchEvent","noop","react_production","Children","forEachFunc","forEachContext","toArray","only","Profiler","StrictMode","Suspense","__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","__COMPILER_RUNTIME","__proto__","useMemoCache","cache","cloneElement","childArray","createContext","defaultValue","_currentValue","_currentValue2","_threadCount","Provider","Consumer","_context","childrenLength","defaultProps","createRef","forwardRef","render","lazy","memo","startTransition","scope","prevTransition","currentTransition","onStartTransitionFinish","unstable_useCacheRefresh","useCacheRefresh","use","usable","useActionState","initialState","permalink","useCallback","deps","useContext","Context","useDebugValue","useDeferredValue","initialValue","useEffect","createDeps","update","dispatcher","useId","useImperativeHandle","useInsertionEffect","useLayoutEffect","useMemo","useOptimistic","passthrough","reducer","useReducer","initialArg","useRef","useState","useSyncExternalStore","subscribe","getSnapshot","getServerSnapshot","useTransition","reactModule","React","formatProdErrorMessage","encodeURIComponent","Internals","D","C","L","X","M","findDOMNode","createPortal$1","containerInfo","implementation","getCrossOriginStringAs","as","checkDCE","__REACT_DEVTOOLS_GLOBAL_HOOK__","reactDom_production","__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE","createPortal","nodeType","flushSync","previousTransition","previousUpdatePriority","preconnect","href","crossOrigin","prefetchDNS","preinit","integrity","fetchPriority","precedence","nonce","preinitModule","preload","referrerPolicy","imageSrcSet","imageSizes","media","preloadModule","requestFormReset","form","unstable_batchedUpdates","useFormState","useFormStatus","useHostTransitionStatus","reactDomModule","Scheduler","ReactDOM","isValidContainer","getNearestMountedFiber","fiber","nearestMounted","alternate","return","getSuspenseInstanceFromFiber","suspenseState","memoizedState","dehydrated","assertIsMounted","findCurrentFiberUsingSlowPath","parentA","parentB","sibling","didFindChild","child$0","stateNode","findCurrentHostFiberImpl","REACT_LEGACY_ELEMENT_TYPE","REACT_PROVIDER_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_MEMO_CACHE_SENTINEL","REACT_CLIENT_REFERENCE","getComponentNameFromType","displayName","innerType","ReactDOMSharedInternals","sharedNotPendingObject","valueStack","createCursor","cursor","contextStackCursor","contextFiberStackCursor","rootInstanceStackCursor","hostTransitionProviderCursor","pushHostContainer","nextRootInstance","namespaceURI","getOwnHostContext","getChildHostContextProd","popHostContainer","pushHostContext","JSCompiler_inline_result","popHostContext","HostTransitionContext","scheduleCallback$3","cancelCallback$1","shouldYield","requestPaint","getCurrentPriorityLevel","ImmediatePriority","UserBlockingPriority","NormalPriority$1","LowPriority","IdlePriority","log$1","unstable_setDisableYieldValue","rendererID","injectedHook","setIsStrictModeForDevtools","newIsStrictMode","setStrictMode","clz32","clz32Fallback","nextTransitionLane","nextRetryLane","getHighestPriorityLanes","lanes","pendingSyncLanes","getNextLanes","wipLanes","rootHasPendingCommit","pendingLanes","nextLanes","suspendedLanes","pingedLanes","warmLanes","nonIdlePendingLanes","checkIfRootIsPrerendering","renderLanes","computeExpirationTime","lane","claimNextTransitionLane","claimNextRetryLane","createLaneMap","initial","laneMap","markRootUpdated$1","updateLane","markRootFinished","finishedLanes","remainingLanes","spawnedLane","updatedLanes","suspendedRetryLanes","previouslyPendingLanes","expiredLanes","entangledLanes","errorRecoveryDisabledLanes","shellSuspendCounter","entanglements","expirationTimes","hiddenUpdates","index$5","hiddenUpdatesForLane","markSpawnedDeferredLane","spawnedLaneIndex","markRootEntangled","rootEntangledLanes","index$6","getBumpedLaneForHydrationByLane","lanesToEventPriority","resolveUpdatePriority","updatePriority","getEventPriority","runWithPriority","previousPriority","randomKey","random","internalInstanceKey","internalPropsKey","internalContainerInstanceKey","internalEventHandlersKey","internalEventHandlerListenersKey","internalEventHandlesSetKey","internalRootNodeResourcesKey","internalHoistableMarker","detachDeletedInstance","getClosestInstanceFromNode","targetNode","targetInst","getParentSuspenseInstance","getInstanceFromNode","getNodeFromInstance","inst","getResourcesFromRoot","resources","hoistableStyles","Map","hoistableScripts","markNodeAsHoistable","allNativeEvents","Set","registrationNameDependencies","registerTwoPhaseEvent","registrationName","dependencies","registerDirectEvent","add","VALID_ATTRIBUTE_NAME_REGEX","illegalAttributeNameCache","validatedAttributeNameCache","isAttributeNameSafe","attributeName","setValueForAttribute","removeAttribute","prefix$8","setAttribute","setValueForKnownAttribute","setValueForNamespacedAttribute","setAttributeNS","describeBuiltInComponentFrame","reentry","describeNativeComponentFrame","construct","previousPrepareStackTrace","prepareStackTrace","RunInRootFrame","DetermineComponentFrameRoot","Fake","Reflect","control","x$9","x$10","sample","namePropDescriptor","getOwnPropertyDescriptor","_RunInRootFrame$Deter","sampleStack","controlStack","sampleLines","controlLines","includes","frame","describeFiber","getStackByFiberInDevAndProd","workInProgress","info","getToStringValue","isCheckable","elem","nodeName","trackValueOnNode","valueField","currentValue","getValue","setValue","stopTracking","_valueTracker","updateValueIfChanged","tracker","lastValue","checked","getActiveElement","doc","activeElement","escapeSelectorAttributeValueInsideDoubleQuotesRegex","escapeSelectorAttributeValueInsideDoubleQuotes","ch","updateInput","lastDefaultValue","defaultChecked","setDefaultValue","initInput","isHydrating","ownerDocument","updateOptions","multiple","propValue","setDefaultSelected","selected","defaultSelected","disabled","updateTextarea","initTextarea","textContent","setTextContent","firstChild","lastChild","nodeValue","unitlessNumbers","setValueForStyle","styleName","isCustomProperty","setProperty","cssFloat","has","setValueForStyles","styles","prevStyles","styleName$16","styleName$17","isCustomElement","aliases","isJavaScriptProtocol","sanitizeURL","currentReplayingEvent","getEventTarget","nativeEvent","srcElement","correspondingUseElement","restoreTarget","restoreQueue","restoreStateOfTarget","internalInstance","querySelectorAll","otherNode","otherProps","isInsideEventHandler","batchedUpdates$1","flushSyncWork$1","getListener","canUseDOM","passiveBrowserEventsSupported","addEventListener","removeEventListener","startText","fallbackText","getData","startValue","startLength","endValue","endLength","minEnd","getEventCharCode","keyCode","charCode","functionThatReturnsTrue","functionThatReturnsFalse","createSyntheticEvent","Interface","SyntheticBaseEvent","reactName","reactEventType","nativeEventTarget","_reactName","_targetInst","currentTarget","isDefaultPrevented","defaultPrevented","isPropagationStopped","preventDefault","stopPropagation","cancelBubble","persist","isPersistent","EventInterface","eventPhase","timeStamp","isTrusted","SyntheticEvent","UIEventInterface","view","detail","SyntheticUIEvent","lastMovementX","lastMovementY","lastMouseEvent","MouseEventInterface","screenX","screenY","clientX","clientY","pageX","pageY","ctrlKey","shiftKey","altKey","metaKey","getModifierState","getEventModifierState","button","buttons","relatedTarget","fromElement","toElement","movementX","movementY","SyntheticMouseEvent","DragEventInterface","dataTransfer","SyntheticDragEvent","FocusEventInterface","SyntheticFocusEvent","AnimationEventInterface","animationName","elapsedTime","pseudoElement","SyntheticAnimationEvent","ClipboardEventInterface","clipboardData","SyntheticClipboardEvent","CompositionEventInterface","SyntheticCompositionEvent","normalizeKey","Esc","Spacebar","Left","Up","Right","Down","Del","Win","Menu","Apps","Scroll","MozPrintableKey","translateToKey","modifierKeyToProp","Alt","Control","Meta","Shift","modifierStateGetter","keyArg","KeyboardEventInterface","location","repeat","locale","which","SyntheticKeyboardEvent","PointerEventInterface","pointerId","pressure","tangentialPressure","tiltX","tiltY","twist","pointerType","isPrimary","SyntheticPointerEvent","TouchEventInterface","touches","targetTouches","changedTouches","SyntheticTouchEvent","TransitionEventInterface","propertyName","SyntheticTransitionEvent","WheelEventInterface","deltaX","wheelDeltaX","deltaY","wheelDeltaY","wheelDelta","deltaZ","deltaMode","SyntheticWheelEvent","ToggleEventInterface","newState","oldState","SyntheticToggleEvent","END_KEYCODES","canUseCompositionEvent","documentMode","canUseTextInputEvent","useFallbackCompositionData","SPACEBAR_CHAR","hasSpaceKeypress","isFallbackCompositionEnd","domEventName","getDataFromCustomEvent","isComposing","getNativeBeforeInputChars","getFallbackBeforeInputChars","char","supportedInputTypes","datetime","month","number","password","range","tel","week","isTextInputElement","createAndAccumulateChangeEvent","dispatchQueue","accumulateTwoPhaseListeners","activeElement$1","activeElementInst$1","runEventInBatch","processDispatchQueue","getInstIfValueChanged","getTargetInstForChangeEvent","isInputEventSupported","JSCompiler_inline_result$jscomp$282","isSupported$jscomp$inline_417","element$jscomp$inline_418","oninput","stopWatchingForValueChange","detachEvent","handlePropertyChange","handleEventsForInputEventPolyfill","attachEvent","getTargetInstForInputEventPolyfill","getTargetInstForClickEvent","getTargetInstForInputOrChangeEvent","is","objectIs","shallowEqual","objA","objB","keysA","keysB","currentKey","getLeafNode","getNodeForCharacterOffset","nodeEnd","nextSibling","containsNode","outerNode","innerNode","contains","compareDocumentPosition","getActiveElementDeep","defaultView","HTMLIFrameElement","contentWindow","hasSelectionCapabilities","contentEditable","skipSelectionChangeEvent","activeElementInst","lastSelection","mouseDown","constructSelectEvent","selectionStart","selectionEnd","anchorNode","getSelection","anchorOffset","focusNode","focusOffset","makePrefixMap","styleProp","eventName","prefixes","vendorPrefixes","animationend","animationiteration","animationstart","transitionrun","transitionstart","transitioncancel","transitionend","prefixedEventNames","getVendorPrefixedEventName","prefixMap","animation","transition","ANIMATION_END","ANIMATION_ITERATION","ANIMATION_START","TRANSITION_RUN","TRANSITION_START","TRANSITION_CANCEL","TRANSITION_END","topLevelEventsToReactNames","simpleEventPluginEvents","registerSimpleEvent","CapturedStacks","WeakMap","createCapturedValueAtFiber","existing","concurrentQueues","concurrentQueuesIndex","concurrentlyUpdatedLanes","finishQueueingConcurrentUpdates","endIndex","markUpdateLaneFromFiberToRoot","enqueueUpdate$1","enqueueConcurrentHookUpdate","getRootForUpdatedFiber","enqueueConcurrentRenderForLane","sourceFiber","isHidden","childLanes","_visibility","nestedUpdateCount","rootWithNestedUpdates","emptyContextObject","FiberNode","pendingProps","elementType","refCleanup","updateQueue","memoizedProps","subtreeFlags","deletions","createFiberImplClass","shouldConstruct","createWorkInProgress","firstContext","resetWorkInProgress","createFiberFromTypeAndProps","fiberTag","isHostHoistableType","createFiberFromFragment","elements","createFiberFromText","createFiberFromPortal","portal","pendingChildren","forkStack","forkStackIndex","treeForkProvider","treeForkCount","idStack","idStackIndex","treeContextProvider","treeContextId","treeContextOverflow","pushTreeFork","totalChildren","pushTreeId","baseIdWithLeadingBit","baseLength","numberOfOverflowBits","pushMaterializedTreeId","popTreeContext","hydrationParentFiber","nextHydratableInstance","hydrationErrors","rootOrSingletonContext","HydrationMismatchException","throwOnHydrationMismatch","queueHydrationError","prepareToHydrateHostInstance","listenToNonDelegatedEvent","mediaEventTypes","suppressHydrationWarning","checkForUnmatchedText","popover","onScroll","onScrollEnd","onClick","onclick","popToNextHostParent","popHydrationState","JSCompiler_temp","shouldSetTextContent","getNextHydratable","isSingletonScope","previousHydratableOnEnteringScopedSingleton","resetHydrationState","upgradeHydrationErrorsToRecoverable","queuedErrors","workInProgressRootRecoverableErrors","valueCursor","currentlyRenderingFiber$1","lastContextDependency","pushProvider","providerFiber","nextValue","popProvider","scheduleContextWorkOnParentPath","propagationRoot","propagateContextChanges","contexts","forcePropagateEntireTree","nextFiber","dependency","propagateParentContextChanges","isInsidePropagationBailout","currentParent","checkIfContextChanged","currentDependencies","memoizedValue","prepareToReadContext","readContext","readContextForConsumer","readContextDuringReconciliation","consumer","AbortControllerLocal","AbortController","signal","aborted","abort","scheduleCallback$2","NormalPriority","CacheContext","createCache","controller","refCount","releaseCache","currentEntangledListeners","currentEntangledPendingCount","currentEntangledLane","currentEntangledActionThenable","entangleAsyncAction","entangledListeners","requestTransitionLane","pingEngtangledActionScope","chainThenableValue","thenableWithOverride","prevOnStartTransitionFinish","resumedCache","peekCacheFromPool","cacheResumedFromPreviousRender","workInProgressRoot","pooledCache","pushTransition","offscreenWorkInProgress","prevCachePool","pool","getSuspendedCache","cacheFromPool","SuspenseException","SuspenseyCommitException","SuspenseActionException","noopSuspenseyCommitThenable","isThenableResolved","noop$3","trackUsedThenable","thenableState","checkIfUseWrappedInAsyncCatch","fulfilledThenable","rejectedThenable","suspendedThenable","getSuspendedThenable","rejectedReason","hasForceUpdate","initializeUpdateQueue","baseState","firstBaseUpdate","lastBaseUpdate","shared","hiddenCallbacks","callbacks","cloneUpdateQueue","createUpdate","enqueueUpdate","executionContext","entangleTransitions","queueLanes","enqueueCapturedUpdate","capturedUpdate","newFirst","newLast","didReadFromEntangledAsyncAction","suspendIfUpdateReadFromEntangledAsyncAction","processUpdateQueue","workInProgress$jscomp$0","instance$jscomp$0","pendingQueue","lastPendingUpdate","firstPendingUpdate","isHiddenUpdate","workInProgressRootRenderLanes","workInProgressRootSkippedLanes","callCallback","commitCallbacks","currentTreeHiddenStackCursor","prevEntangledRenderLanesCursor","pushHiddenContext","entangledRenderLanes","baseLanes","reuseHiddenContextOnStack","popHiddenContext","currentlyRenderingFiber","currentHook","workInProgressHook","didScheduleRenderPhaseUpdate","didScheduleRenderPhaseUpdateDuringThisPass","shouldDoubleInvokeUserFnsInHooksDEV","localIdCounter","thenableIndexCounter$1","thenableState$1","globalClientIdCounter","throwInvalidHookError","areHookInputsEqual","nextDeps","prevDeps","renderWithHooks","secondArg","nextRenderLanes","HooksDispatcherOnMount","HooksDispatcherOnUpdate","renderWithHooksAgain","finishRenderingHooks","ContextOnlyDispatcher","didRenderTooFewHooks","didReceiveUpdate","numberOfReRenders","lastEffect","events","stores","memoCache","HooksDispatcherOnRerender","TransitionAwareHostComponent","maybeThenable","useThenable","checkDidRenderIdHook","didRenderIdHook","bailoutHooks","resetHooksOnUnwind","mountWorkInProgressHook","hook","baseQueue","updateWorkInProgressHook","nextCurrentHook","nextWorkInProgressHook","createFunctionComponentUpdateQueue","basicStateReducer","updateReducer","updateReducerImpl","lastRenderedReducer","baseFirst","newBaseQueueFirst","newBaseQueueLast","didReadFromEntangledAsyncAction$32","revertLane","hasEagerState","eagerState","lastRenderedState","dispatch","rerenderReducer","lastRenderPhaseUpdate","updateSyncExternalStore","isHydrating$jscomp$0","snapshotChanged","updateEffectImpl","subscribeToStore","pushSimpleEffect","createEffectInstance","updateStoreInstance","pushStoreConsistencyCheck","renderedSnapshot","nextSnapshot","checkIfSnapshotChanged","forceStoreRerender","latestGetSnapshot","scheduleUpdateOnFiber","mountStateImpl","initialStateInitializer","updateOptimisticImpl","dispatchActionState","actionQueue","setPendingState","isRenderPhaseUpdate","actionNode","isTransition","runActionStateAction","prevState","handleActionReturnValue","onActionError","error$38","nextState","onActionSuccess","notifyActionListeners","actionStateReducer","mountActionState","initialStateProp","ssrFormState","formState","JSCompiler_inline_result$jscomp$0","inRootOrSingleton","dispatchSetState","dispatchOptimisticSetState","updateActionState","updateActionStateImpl","stateHook","currentStateHook","actionStateActionEffect","rerenderActionState","resource","updateRef","mountEffectImpl","fiberFlags","hookFlags","mountEffect","updateEffect","updateInsertionEffect","updateLayoutEffect","imperativeHandleEffect","updateImperativeHandle","mountDebugValue","updateMemo","nextCreate","mountDeferredValueImpl","requestDeferredLane","updateDeferredValueImpl","prevValue","pendingState","finishedState","dispatchSetStateInternal","requestUpdateLane","noop$2","startHostTransition","formFiber","formData","ensureFormComponentIsStateful","requestFormReset$1","existingStateHook","initialResetState","updateId","updateRefresh","refreshCache","provider","root$41","dispatchReducerAction","enqueueRenderPhaseUpdate","entangleTransitionUpdate","currentState","throwIfDuringRender","identifierPrefix","booleanOrThenable","thenableIndexCounter","unwrapThenable","coerceRef","throwOnInvalidObjectType","returnFiber","newChild","resolveLazy","lazyType","createChildReconciler","shouldTrackSideEffects","deleteChild","childToDelete","deleteRemainingChildren","currentFirstChild","mapRemainingChildren","existingChildren","useFiber","placeChild","newFiber","lastPlacedIndex","placeSingleChild","updateTextNode","updateElement","updateFragment","updatePortal","fragment","createChild","updateSlot","oldFiber","updateFromMap","newIdx","reconcileChildFibersImpl","newChildren","resultingFirstChild","previousNewFiber","nextOldFiber","delete","reconcileChildrenArray","reconcileChildrenIterator","firstChildFiber","reconcileChildFibers","mountChildFibers","suspenseHandlerStackCursor","shellBoundary","pushPrimaryTreeSuspenseHandler","handler","suspenseStackCursor","pushOffscreenSuspenseHandler","reuseSuspenseHandlerOnStack","popSuspenseHandler","findFirstSuspended","row","isSuspenseInstanceFallback","revealOrder","applyDerivedStateFromProps","getDerivedStateFromProps","nextProps","classComponentUpdater","_reactInternals","checkShouldComponentUpdate","oldProps","newProps","nextContext","shouldComponentUpdate","callComponentWillReceiveProps","componentWillReceiveProps","UNSAFE_componentWillReceiveProps","resolveClassComponentProps","baseProps","propName$73","defaultOnUncaughtError","defaultOnCaughtError","defaultOnRecoverableError","logUncaughtError","errorInfo","onUncaughtError","componentStack","e$74","logCaughtError","boundary","onCaughtError","errorBoundary","e$75","createRootErrorUpdate","createClassErrorUpdate","initializeClassErrorUpdate","getDerivedStateFromError","componentDidCatch","legacyErrorBoundariesThatAlreadyFailed","throwException","rootRenderLanes","renderDidSuspendDelayIfPossible","workInProgressRootExitStatus","attachPingListener","transitions","markerInstances","retryQueue","cause","wrapperError","workInProgressRootConcurrentErrors","SelectiveHydrationException","reconcileChildren","nextChildren","updateForwardRef","propsWithoutRef","bailoutOnAlreadyFinishedWork","updateMemoComponent","updateSimpleMemoComponent","checkScheduledUpdateOrContext","prevProps","updateFunctionComponent","updateOffscreenComponent","deferHiddenOffscreenComponent","cachePool","nextBaseLanes","markRef","replayFunctionComponent","updateClassComponent","contextType","getSnapshotBeforeUpdate","UNSAFE_componentWillMount","componentWillMount","componentDidMount","unresolvedOldProps","oldContext","contextType$jscomp$0","UNSAFE_componentWillUpdate","componentWillUpdate","componentDidUpdate","mountHostRootWithoutHydrating","SUSPENDED_MARKER","treeContext","retryLane","mountSuspenseOffscreenState","getRemainingWorkInPrimaryTree","primaryTreeDidDefer","workInProgressDeferredLane","updateSuspenseComponent","showFallback","didSuspend","JSCompiler_temp$jscomp$0","nextInstance","fallback","mountWorkInProgressOffscreenFiber","mountSuspensePrimaryChildren","retrySuspenseComponentWithoutHydrating","dataset","digest","dgst","primaryChildren","offscreenProps","_pendingMarkers","_retryCache","_transitions","scheduleSuspenseWorkOnFiber","initSuspenseListRenderState","isBackwards","lastContentRow","tailMode","renderState","rendering","renderingStartTime","updateSuspenseListComponent","attemptEarlyBailoutIfNoScheduledUpdate","didSuspendBefore","beginWork","lazyComponent","isDehydrated","getResource","getOwnerDocumentFromRootContainer","setInitialProperties","resolveSingletonInstance","canHydrateInstance","canHydrateTextInstance","pooledCacheLanes","markUpdate","preloadResourceAndSuspendIfNeeded","loading","preloadResource","scheduleRetryEffect","workInProgressSuspendedRetryLanes","cutOffTailIfNeeded","hasRenderedATailFallback","lastTailNode","lastTailNode$113","bubbleProperties","completedWork","didBailout","newChildLanes","child$114","completeWork","pendingContext","createElementNS","innerHTML","autoFocus","cache$127","listenToAllSupportedEvents","workInProgressRootRenderTargetTime","unwindWork","unwindInterruptedWork","interruptedWork","commitHookEffectListMount","finishedWork","firstEffect","captureCommitPhaseError","commitHookEffectListUnmount","nearestMountedAncestor$jscomp$0","nearestMountedAncestor","destroy_","commitClassCallbacks","safelyCallComponentWillUnmount","componentWillUnmount","safelyAttachRef","instanceToUse","safelyDetachRef","error$143","commitHostMount","focus","srcSet","srcset","commitHostUpdate","domElement","updateProperties","isHostParent","getHostSibling","insertOrAppendPlacementNodeIntoContainer","before","insertBefore","_reactRootContainer","insertOrAppendPlacementNode","commitHostSingletonAcquisition","singleton","attributes","removeAttributeNode","offscreenSubtreeIsHidden","offscreenSubtreeWasHidden","needsFormReset","PossiblyWeakSet","WeakSet","nextEffect","commitBeforeMutationEffects","eventsEnabled","_enabled","selection","rangeCount","e$20","indexWithinAnchor","indexWithinFocus","selectionInformation","focusedElem","selectionRange","resolvedPrevProps","__reactInternalSnapshotBeforeUpdate","clearContainerSparingly","commitLayoutEffectOnFiber","finishedRoot","recursivelyTraverseLayoutEffects","error$142","commitSuspenseHydrationCallbacks","registerSuspenseInstanceRetry","retryDehydratedSuspenseBoundary","prevOffscreenSubtreeWasHidden","recursivelyTraverseReappearLayoutEffects","detachFiberAfterEffects","hostParent","hostParentIsContainer","recursivelyTraverseDeletionEffects","commitDeletionEffectsOnFiber","deletedFiber","onCommitFiberUnmount","prevHostParent","prevHostParentIsContainer","releaseSingletonInstance","clearSuspenseBoundary","retryIfBlockedOn","getRetryCache","retryCache","attachSuspenseRetryListeners","wakeables","wakeable","retry","resolveRetryWakeable","recursivelyTraverseMutationEffects","root$jscomp$0","parentFiber","commitMutationEffectsOnFiber","currentHoistableRoot","commitReconciliationEffects","hoistableRoot","currentResource","getElementsByTagName","hasAttribute","querySelector","maybeNodes","getHydratableHoistableCache","getAttribute","rel","property","httpEquiv","charSet","mountHoistable","acquireResource","tagCaches","getHoistableRoot","recursivelyResetForms","globalMostRecentFallbackTime","wasHidden","prevOffscreenSubtreeIsHidden","recursivelyTraverseDisappearLayoutEffects","display","hostParentFiber","parent$144","parent$146","reset","finishedRoot$jscomp$0","includeWorkInProgressEffects","commitOffscreenPassiveMountEffects","previousCache","commitCachePassiveMountEffect","recursivelyTraversePassiveMountEffects","committedLanes","committedTransitions","commitPassiveMountOnFiber","_finishedWork$memoize2","onPostCommit","passiveEffectDuration","recursivelyTraverseAtomicPassiveEffects","recursivelyTraverseReconnectPassiveEffects","committedLanes$jscomp$0","committedTransitions$jscomp$0","suspenseyCommitFlag","recursivelyAccumulateSuspenseyCommit","accumulateSuspenseyCommitOnFiber","suspendResource","previousHoistableRoot","detachAlternateSiblings","previousFiber","recursivelyTraversePassiveUnmountEffects","commitPassiveUnmountEffectsInsideOfDeletedTree_begin","commitPassiveUnmountOnFiber","recursivelyTraverseDisconnectPassiveEffects","deletedSubtreeRoot","DefaultAsyncDispatcher","getCacheForType","resourceType","cacheForType","PossiblyWeakMap","workInProgressSuspendedReason","workInProgressThrownValue","workInProgressRootDidSkipSuspendedSiblings","workInProgressRootIsPrerendering","workInProgressRootDidAttachPingListener","workInProgressRootInterleavedUpdatedLanes","workInProgressRootPingedLanes","workInProgressRootDidIncludeRecursiveRenderUpdate","workInProgressTransitions","pendingEffectsStatus","pendingEffectsRoot","pendingFinishedWork","pendingEffectsLanes","pendingEffectsRemainingLanes","pendingPassiveTransitions","pendingRecoverableErrors","suspenseHandler","cancelPendingCommit","prepareFreshStack","markRootSuspended","ensureRootIsScheduled","performWorkOnRoot","forceSync","shouldTimeSlice","exitStatus","renderRootConcurrent","renderRootSync","renderWasConcurrent","isRenderConsistentWithExternalStores","wasRootDehydrated","timeoutHandle","scheduleTimeout","commitRootWhenReady","recoverableErrors","didIncludeRenderPhaseUpdate","didSkipSuspendedSiblings","suspendedCommitReason","completedRenderStartTime","completedRenderEndTime","suspendedState","stylesheets","unsuspend","waitForCommitToBeReady","commitRoot","didAttemptEntireTree","index$4","flushSyncWorkAcrossRoots_impl","resetWorkInProgressStack","cancelTimeout","allEntangledLanes","index$2","handleThrow","thrownValue","pushDispatcher","prevDispatcher","pushAsyncDispatcher","prevAsyncDispatcher","shouldYieldForPrerendering","prevExecutionContext","unitOfWork","throwAndUnwindWorkLoop","workLoopSync","thrownValue$167","performUnitOfWork","replaySuspendedUnitOfWork","hostFiber","completeUnitOfWork","workLoopConcurrentByScheduler","thrownValue$169","suspendedReason","unwindUnitOfWork","skipSiblings","flushPendingEffects","callbackNode","callbackPriority","scheduleCallback$1","flushPassiveEffects","flushMutationEffects","flushLayoutEffects","flushSpawnedWork","rootMutationHasEffect","priorSelectionInformation","curFocusedElem","priorFocusedElem","priorSelectionRange","win","start$jscomp$0","end$jscomp$0","startMarker","endMarker","createRange","setStart","removeAllRanges","addRange","setEnd","scrollLeft","scrollTop","rootHasLayoutEffect","releaseRootPooledCache","onCommitFiberRoot","onRecoverableError","recoverableError","wasDelayedCommit","renderPriority","onPostCommitFiberRoot","captureCommitPhaseErrorOnRoot","rootFiber","pingCache","threadIDs","pingSuspendedRoot","retryTimedOutBoundary","boundaryFiber","firstScheduledRoot","lastScheduledRoot","didScheduleMicrotask","mightHavePendingSyncWork","isFlushingWork","currentEventTransitionLane","scheduleImmediateRootScheduleTask","syncTransitionLanes","onlyLegacy","didPerformSomeWork","root$174","performSyncWorkOnRoot","processRootScheduleInImmediateTask","processRootScheduleInMicrotask","shouldAttemptEagerTransition","scheduleTaskForRootDuringMicrotask","index$3","performWorkOnRootViaSchedulerTask","didTimeout","originalCallbackNode","workInProgressRootRenderLanes$jscomp$0","scheduleMicrotask","coerceFormActionProp","actionProp","createFormDataWithSubmitter","submitter","temp","FormData","extractEvents$1","maybeTargetInst","formAction","i$jscomp$inline_1528","eventName$jscomp$inline_1529","domEventName$jscomp$inline_1530","capitalizedEvent$jscomp$inline_1531","nonDelegatedEvents","eventSystemFlags","_dispatchQueue$i","previousInstance","i$jscomp$0","_dispatchListeners$i","targetElement","listenerSetKey","addTrappedEventListener","listenToNativeEvent","isCapturePhaseListener","listeningMarker","rootContainerElement","targetContainer","listenerWrapper","dispatchDiscreteEvent","dispatchContinuousEvent","capture","passive","dispatchEventForPluginEventSystem","targetInst$jscomp$0","ancestorInst","nodeTag","grandTag","SyntheticEventCtor","inCapturePhase","accumulateTargetOnly","reactEventName","lastHostComponent","_instance","createDispatchListener","parentWindow","getParent","accumulateEnterLeaveListenersForEvent","getTargetInstFunc","handleEventFunc","fallbackData","eventType","targetFiber","captureName","_instance2","_instance3","NORMALIZE_NEWLINES_REGEX","NORMALIZE_NULL_AND_REPLACEMENT_REGEX","normalizeMarkupForTextOrAttribute","markup","serverText","clientText","setProp","formEncType","formMethod","formTarget","encType","__html","muted","setPropOnCustomElement","endsWith","propKey","hasSrc","hasSrcSet","propValue$188","lastProps","lastProp","propKey$205","propKey$221","propKey$226","propKey$231","propKey$236","parentNamespace","dangerouslySetInnerHTML","currentPopstateTransitionEvent","localPromise","queueMicrotask","handleErrorInNextTick","parentInstance","suspenseInstance","possiblePreambleContribution","nextNode","nextNode$jscomp$0","anyProps","readyState","_reactRetry","targetInstance","previousSibling","rootContainerInstance","preloadPropsMap","preconnectsSet","getRootNode","previousDispatcher","flushSyncWork","previousWasRendering","wasRendering","formInst","preinitScript","preinitStyle","preinitModuleScript","globalDocument","preconnectAs","limitedEscapedHref","preloadSelector","getStyleKey","getScriptKey","getStylesheetSelectorFromKey","getScriptSelectorFromKey","adoptPreloadPropsForStylesheet","link","_p","insertStylesheet","scripts","adoptPreloadPropsForScript","currentProps","styles$244","resource$245","hrefLang","preloadStylesheet","stylesheetPropsFromRawProps","rawProps","preloadProps","styleProps","instance$250","linkInstance","nodes","prior","stylesheetProps","scriptProps","keyAttribute","caches","nodeKey","hostContext","itemProp","onLoad","matchMedia","onUnsuspend","insertSuspendedStylesheets","commit","stylesheetTimer","precedencesByRoot","insertStylesheetIntoRoot","precedences","FiberRootNode","hydrate","incompleteTransitions","createFiberRoot","initialChildren","hydrationCallbacks","isStrictMode","transitionCallbacks","getContextForSubtree","parentComponent","updateContainerImpl","markRetryLaneImpl","markRetryLaneIfNotHydrated","attemptContinuousHydration","blockedOn","findInstanceBlockingEvent","return_targetInst","clearIfContinuousEvent","queueIfContinuousEvent","discreteReplayableEvents","findInstanceBlockingTarget","hasScheduledReplayAttempt","queuedFocus","queuedDrag","queuedMouse","queuedPointers","queuedPointerCaptures","queuedExplicitHydrationTargets","accumulateOrCreateContinuousQueuedReplayableEvent","existingQueuedEvent","targetContainers","attemptExplicitHydrationTarget","queuedTarget","attemptReplayContinuousQueuedEvent","queuedEvent","nextBlockedOn","nativeEventClone","attemptReplayContinuousQueuedEventInMap","replayUnblockedEvents","scheduleCallbackIfUnblocked","unblocked","lastScheduledReplayQueue","scheduleReplayQueueIfNeeded","formReplayingQueue","submitterOrAction","unblock","$$reactFormReplay","formProps","ReactDOMRoot","internalRoot","_internalRoot","ReactDOMHydrationRoot","unmount","unstable_scheduleHydration","isomorphicReactPackageVersion$jscomp$inline_1785","componentOrElement","internals$jscomp$inline_2256","bundleType","rendererPackageName","currentDispatcherRef","reconcilerVersion","hook$jscomp$inline_2257","isDisabled","supportsFiber","inject","reactDomClient_production","createRoot","unstable_strictMode","unstable_transitionCallbacks","hydrateRoot","clientModule","g","u","useSyncExternalStoreShim_production_min","shimModule","withSelector_production_min","useSyncExternalStoreWithSelector","hasValue","withSelectorModule","defaultNoopBatch","batch","setBatch","newBatch","getBatch","ContextKey","gT","globalThis","getContext","_gT$ContextKey","contextMap","realContext","ReactReduxContext","createReduxContextHook","useReduxContext","notInitialized","initializeUseSelector","refEquality","createSelectorHook","useDefaultReduxContext","selector","equalityFnOrOptions","equalityFn","stabilityCheck","noopCheck","store","subscription","getServerState","globalStabilityCheck","globalNoopCheck","wrappedSelector","selectedState","addNestedSub","getState","useSelector","z","reactIs_production_min","AsyncMode","ConcurrentMode","ContextProvider","Element","ForwardRef","Memo","Portal","isAsyncMode","isConcurrentMode","isContextConsumer","isContextProvider","isElement","isForwardRef","isFragment","isLazy","isMemo","isProfiler","isSuspense","isValidElementType","typeOf","reactIsModule","reactIs","FORWARD_REF_STATICS","propTypes","MEMO_STATICS","TYPE_STATICS","createListenerCollection","notify","isSubscribed","ContextConsumer","Lazy","SuspenseList","isPortal","isSuspenseList","getModuleId","nullListeners","createSubscription","parentSub","unsubscribe","subscriptionsAmount","selfSubscribed","handleChangeWrapper","onStateChange","trySubscribe","tryUnsubscribe","cleanupListener","removed","notifyNestedSubs","getListeners","useIsomorphicLayoutEffect","serverState","contextValue","previousState","createStoreHook","useStore","createDispatchHook","useDefaultStore","useDispatch","createThunkMiddleware","extraArgument","_ref","thunk","withExtraArgument","compose","composeWithDevTools","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","ADD_TRACK_FROM_URL","CLOSE_WINAMP","OPEN_WINAMP","MINIMIZE_WINAMP","IS_PLAYING","IS_STOPPED","PAUSE","PLAY","SEEK_TO_PERCENT_COMPLETE","SET_BALANCE","SET_BAND_VALUE","SET_FOCUS","SET_BAND_FOCUS","SET_FOCUSED_WINDOW","SET_MEDIA","SET_SCRUB_POSITION","SET_SKIN_DATA","SET_VOLUME","START_WORKING","STEP_MARQUEE","STOP","STOP_WORKING","TOGGLE_DOUBLESIZE_MODE","SET_EQ_AUTO","SET_EQ_ON","SET_EQ_OFF","TOGGLE_LLAMA_MODE","TOGGLE_REPEAT","TOGGLE_SHUFFLE","TOGGLE_TIME_MODE","TOGGLE_VISUALIZER_STYLE","UNSET_FOCUS","UPDATE_TIME_ELAPSED","SET_USER_MESSAGE","UNSET_USER_MESSAGE","SET_PLAYLIST_SCROLL_POSITION","CLICKED_TRACK","CTRL_CLICKED_TRACK","SHIFT_CLICKED_TRACK","SELECT_ALL","SELECT_ZERO","INVERT_SELECTION","REMOVE_ALL_TRACKS","REMOVE_TRACKS","SET_AVAILABLE_SKINS","REVERSE_LIST","RANDOMIZE_LIST","SET_TRACK_ORDER","PLAY_TRACK","BUFFER_TRACK","DRAG_SELECTED","SET_MEDIA_TAGS","SET_MEDIA_DURATION","TOGGLE_WINDOW","CLOSE_WINDOW","MEDIA_TAG_REQUEST_INITIALIZED","MEDIA_TAG_REQUEST_FAILED","NETWORK_CONNECTED","NETWORK_DISCONNECTED","UPDATE_WINDOW_POSITIONS","WINDOW_SIZE_CHANGED","TOGGLE_WINDOW_SHADE_MODE","LOADED","SET_Z_INDEX","DISABLE_MARQUEE","SET_DUMMY_VIZ_DATA","LOADING","CLOSE_REQUESTED","LOAD_SERIALIZED_STATE","RESET_WINDOW_SIZES","BROWSER_WINDOW_SIZE_CHANGED","LOAD_DEFAULT_SKIN","ENABLE_MILKDROP","SET_MILKDROP_DESKTOP","GOT_BUTTERCHURN_PRESETS","GOT_BUTTERCHURN","RESOLVE_PRESET_AT_INDEX","SELECT_PRESET_AT_INDEX","TOGGLE_PRESET_OVERLAY","PRESET_REQUESTED","TOGGLE_RANDOMIZE_PRESETS","TOGGLE_PRESET_CYCLING","SCHEDULE_MILKDROP_MESSAGE","SET_MILKDROP_FULLSCREEN","BANDS","WINDOWS","MAIN","PLAYLIST","EQUALIZER","MILKDROP","LOAD_STYLE","BUFFER","NONE","MEDIA_TAG_REQUEST_STATUS","INITIALIZED","FAILED","COMPLETE","NOT_REQUESTED","UTF8_ELLIPSIS","CHARACTER_WIDTH","WINDOW_RESIZE_SEGMENT_WIDTH","WINDOW_RESIZE_SEGMENT_HEIGHT","WINDOW_WIDTH","TRACK_HEIGHT","LETTERS","DEFAULT_SKIN","baseSkin","VISUALIZERS","OSCILLOSCOPE","BAR","VISUALIZER_ORDER","TIME_MODE","ELAPSED","REMAINING","MEDIA_STATUS","PLAYING","STOPPED","PAUSED","imgFromUrl","img","Image","getTimeObj","minutesFirstDigit","minutesSecondDigit","secondsFirstDigit","secondsSecondDigit","digits","getTimeStr","truncate","parseViscolors","entries","regex","line","rgb","SECTION_REGEX","PROPERTY_REGEX","parseIni","section","clamp","base64FromDataArray","btoa","base64FromArrayBuffer","arrayBuffer","downloadURI","uri","download","click","toPercent","percentToRange","percentToIndex","rebound","oldMin","oldMax","newMin","newMax","oldValue","normalizeEqBand","denormalizeEqBand","merge","segment","newValues","ratio","shuffle","sorted","iteratee","aKey","bKey","moveSelected","isSelected","newArr","replaceAtIndex","newValue","uniqueId","objectForEach","objectMap","modified","objectFilter","predicate","calculateBoundingBox","windows","windowSizes","bottom","findLastIndex","getWindowSize","scrollWidth","offsetWidth","clientWidth","scrollHeight","offsetHeight","clientHeight","getScreenSize","screen","getPos","touch","getX","getY","weakMapMemoize","defaultPlaylistState","trackOrder","currentTrack","lastSelectedIndex","selectedTracks","toggleSetMembership","playlist","newSelectedTracks","clickedIndex","actionIds","ids","trackId","reverse","atIndex","defaultWindowsState","focused","positionsAreRelative","genWindows","open","shade","canResize","canShade","canDouble","hotkey","browserWindowSize","windowOrder","windowId","windowState","absolute","Utils.objectMap","newPosition","positions","serializedState","serializedW","hidden","rest","getSerializedState","defaultState","timeMode","timeElapsed","volume","balance","newMode","elapsed","defaultMemoize_1","defaultMemoize","defaultEqualityCheck","areArgumentsShallowlyEqual","equalityCheck","lastArgs","lastResult","getDependencies","funcs","dep","dependencyTypes","createSelectorCreator","memoize","_len","memoizeOptions","_key","_len2","_key2","recomputations","resultFunc","memoizedResultFunc","resetRecomputations","createSelector_1","defaultSkinGenExColors","itemBackground","itemForeground","windowBackground","buttonText","windowText","divider","playlistSelection","listHeaderBackground","listHeaderText","listHeaderFrameTopAndLeft","listHeaderFrameBottomAndRight","listHeaderFramePressed","listHeaderDeadArea","scrollbarOne","scrollbarTwo","pressedScrollbarOne","pressedScrollbarTwo","scrollbarDeadArea","listTextHighlighted","listTextHighlightedBackground","listTextSelected","listTextSelectedBackground","defaultDisplayState","doubled","marqueeStep","disableMarquee","llama","closed","working","skinImages","images","skinColors","skinCursors","skinPlaylistStyle","skinRegion","visualizerStyle","dummyVizData","playlistScrollPosition","skinGenLetterWidths","skinGenExColors","additionalVisualizers","zIndex","newSkinCursors","newCursors","getVisualizerStyle","createSelector","visualizationStyle","defaultUserInput","bandFocused","scrubPosition","userMessage","userInput","auto","sliders","preamp","equalizer","newSliders","band","network","connected","defaultSettingsState","availableSkins","settings","skins","invariant","condition","argIndex","framesToPop","invariant_1","genMediaTags","musicMetadata","genMediaDuration","audio","durationChange","genArrayBufferFromFileReference","fileReference","genStringFromFileReference","readAsText","promptForFileReferences","accept","directory","fileInput","webkitdirectory","mozdirectory","urlIsBlobUrl","curUrlFromByteArray","Utils.base64FromDataArray","filenameFromUrl","lastSegment","trackName","Utils.weakMapMemoize","defaultName","FileUtils.filenameFromUrl","tracks","mediaTagsRequestStatus","newTrack","albumArtUrl","kbps","khz","getTrackDisplayName","TrackUtils.trackName","TransitionType","defaultMilkdropState","overlay","presetHistory","presets","currentPresetIndex","butterchurn","transitionType","DEFAULT","randomize","cycling","milkdrop","addToHistory","preset","Utils.replaceAtIndex","json","combineReducers","getAsDataURI","noshadeStyle","borderWidth","backgroundColor","Font","_jsx","Hr","Div","Table","Playlist","_jsxs","_Fragment","align","className","border","cellSpacing","cellPadding","face","numberOfTracks","averageTrackLength","playlistLengthMinutes","playlistLengthSeconds","createPlaylistHTML","createPlaylistURL","getBalanceText","direction","getVolumeText","getPositionText","seekToPercent","Utils.getTimeStr","getDoubleSizeModeText","formatHz","hz","ensureSign","roundToTenths","getEqText","db","getPositionDiff","graph","sizeDiff","newGraph","positionDiff","above","neighbors","below","walkRight","nodeSizeDiff","walkDown","generateGraph","bottoms","rights","edges","tops","lefts","isToTheLeft","isToTheRight","isAbove","isBelow","getSliders","getEqfData","Utils.denormalizeEqBand","getTracks","getTrackUrl","getTrackOrder","getTrackCount","getOrderedTracks","getPlaylistTracks","getUserTracks","metaData","getOrderedTrackObjects","getSelectedTrackIds","getSelectedTrackObjects","selectedIds","runningTimeFromTracks","getTotalRunningTime","getSelectedRunningTime","getRunningTimeMessage","totalRunningTime","selectedRunningTime","getCurrentTrackIndex","getCurrentTrackNumber","currentTrackIndex","getCurrentTrackId","getRandomTrackId","nextId","getNextTrackId","trackCount","Utils.clamp","getGenWindows","getWindowOpen","getWindowHidden","getMilkdropWindowEnabled","milkdropWindowEnabled","getWindowShade","getWindowPositions","BASE_WINDOW_HEIGHT","getNumberOfVisibleTracks","getWindowSize_","playlistSize","getOverflowTrackCount","numberOfVisibleTracks","_getPlaylistScrollPosition","getPlaylistScrollPosition","overflowTrackCount","getScrollOffset","Utils.percentToIndex","getVisibleTrackIds","getAllTracksAreVisible","getTrackIsVisibleFunction","visibleTrackIds","getDuration","fromTracks.getTrackDisplayName","getCurrentTrackDisplayName","getName","getMediaStatus","getMediaIsPlaying","getCurrentTrack","getCurrentlyPlayingTrackIdIfLoaded","mediaIsPlaying","getCurrentTrackInfo","getMinimalMediaText","trackNumber","getMediaText","minimalMediaText","getNumberOfTracks","getPlaylistDuration","getPlaylistURL","playlistDuration","getDisplayName","WINDOW_HEIGHT","SHADE_WINDOW_HEIGHT","getWPixelSize","doubledMultiplier","pix","getFocusedWindow","getPositionsAreRelative","getDoubled","getLlamaMode","getZIndex","getWindowSizes","getWindowPixelSize","sizes","getWindowOrder","getNormalizedWindowOrder","getWindowsInfo","getWindowGraph","defaultPlaylistStyle","normal","normalbg","selectedbg","font","getSkinColors","getSkinPlaylistStyle","fromDisplay.getVisualizerStyle","getVolume","getBalance","getShuffle","getRepeat","getChannels","getTimeElapsed","getSerlializedState","fromMedia.getSerializedState","fromEqualizer.getSerializedState","fromDisplay.getSerializedState","fromWindows.getSerializedState","getEqualizerEnabled","getBrowserWindowSize","getOpenWindows","Utils.objectFilter","getStackedLayoutPositions","openWindows","getUserInputFocus","getUserInputScrubPosition","getMarqueeText","defaultText","MarqueeUtils.getBalanceText","MarqueeUtils.getVolumeText","MarqueeUtils.getPositionText","MarqueeUtils.getDoubleSizeModeText","MarqueeUtils.getEqText","mediaText","getKbps","getKhz","getMilkdropMessage","getMilkdropDesktopEnabled","getMilkdropFullscreenEnabled","getButterchurn","getPresetTransitionType","getCurrentPresetIndex","getCurrentPreset","getPresetNames","getPresetOverlayOpen","getPresetsAreCycling","getRandomizePresets","getClosed","getSkinImages","getSkinCursors","getSkinRegion","getSkinLetterWidths","getPreampLineUrl","EQ_PREAMP_LINE","getLineColorsUrl","EQ_GRAPH_LINE_COLORS","getPreampLineImage","Utils.imgFromUrl","getLineColorsImage","getMarqueeStep","getNetworkConnected","getTimeMode","getLoading","getWorking","getAvaliableSkins","SNAP_DISTANCE","box","near","overlapX","overlapY","snap","boxA","boxB","snapDiff","newPos","snapDiffManyToMany","bs","snapWithin","boundingBox","snapWithinDiff","boxes","firstNode","bounding","traceConnection","areConnected","candidates","checkNode","candidate","applyDiff","applyMultipleDiffs","diffs","metaDiff","withWindowGraphIntegrity","Selectors.getWindowGraph","originalSizes","Selectors.getWindowSizes","newSizes","original","newPositions","Selectors.getWindowPositions","updateWindowPositions","toggleDoubleSizeMode","toggleEqualizerShadeMode","toggleMainWindowShadeMode","togglePlaylistShadeMode","closeWindow","setFocusedWindow","setWindowSize","toggleWindow","centerWindowsInContainer","Selectors.getPositionsAreRelative","getBoundingClientRect","centerWindows","centerWindowsInView","scrollX","scrollY","innerWidth","innerHeight","windowsInfo","Selectors.getWindowsInfo","getOpen","Selectors.getWindowOpen","offsetLeft","offsetTop","Utils.calculateBoundingBox","boxHeight","boxWidth","move","ceil","browserWindowSizeChanged","ensureWindowsAreOnScreen","resetWindowSizes","stackWindows","Selectors.getStackedLayoutPositions","setWindowLayout","layout","extraHeight","plusHeight","extraWidth","plusWidth","shadeMode","Utils.getWindowSize","boundingHeight","moveY","moveX","playTrack","Selectors.getMediaStatus","playTrackNow","play","openMediaFileDialog","stop","nextN","nextTrackId","Selectors.getNextTrackId","seekToTime","Selectors.getDuration","seekForward","Selectors.getTimeElapsed","seekBackward","setVolume","adjustVolume","volumeDiff","scrollVolume","setBalance","toggleRepeat","toggleShuffle","toggleTimeMode","BAND_SNAP_DISTANCE","BAND_MID_POINT_VALUE","_snapBandValue","setEqBand","_setEqTo","setEqToMax","setEqToMid","setEqToMin","setPreamp","toggleEq","toggleEqAuto","PRESET_VALUES","HEADER","CONSTANTS","nameStart","nameEnd","valueName","parser_1","PRESET_LENGTH","creator","creator_1","winampEqf","FONT_LOOKUP","$","imageConstFromChar","CHAR_X","CHAR_Y","characterSprites","sprites","BALANCE","CBUTTONS","MONOSTER","NUMBERS","NUMS_EX","PLAYPAUS","PLEDIT","EQ_EX","EQMAIN","POSBAR","SHUFREP","TITLEBAR","VOLUME","GEN","pointPairs","pairedValues","regionParser","regionStr","iniData","numpoints","pointlist","pointCounts","points","pointIndex","validPolygons","numStr","polygon","getFileExtension","getFilenameRegex","getFileFromZip","lastFile","contents","fallbackGetImgFromBlob","URL","createObjectURL","getImgFromBlob","createImageBitmap","ee","getSpriteUrisFromImg","canvas","willReadFrequently","sprite","drawImage","image","toDataURL","getImgFromFilename","getSpriteUrisFromFilename","SKIN_SPRITES","RIFF_MAGIC","arrayStartsWith","matcher","item","getCursorFromFilename","aniData","FileUtils.curUrlFromByteArray","getPlaylistStyle","playlistStyle","ini","Utils.parseIni","colorKey","getGenExColors","getColorAt","getImageData","shallowMerge","objs","CURSORS","genVizColors","viscolor","SkinParserUtils","genImages","imageObjs","genCursors","cursorObjs","cursorName","genRegion","region","genGenTextSprites","getLetters","letter","nextBackground","letterWidths","skinParser","zipFileBuffer","cursors","genTextSprites","genExColors","genLetterWidths","genTextImages","TinyQueue","defaultCompare","_down","tinyqueueModule","_up","best","LoadQueue","threads","_queue","_availableThreads","_run","t1","cropPlaylist","Selectors.getSelectedTrackObjects","selectedTrackIds","Selectors.getSelectedTrackIds","removeSelectedTracks","removeAllTracks","reverseList","randomizeList","sortListByTitle","Selectors.getTracks","Selectors.getTrackOrder","setPlaylistScrollPosition","scrollNTracks","Selectors.getOverflowTrackCount","currentOffset","Selectors.getScrollOffset","scrollPlaylistByDelta","totalPixelHeight","percentDelta","scrollUpFourTracks","scrollDownFourTracks","dragSelected","firstSelected","lastSelected","normalizedOffset","invertSelection","selectZero","selectAll","DURATION_VISIBLE_PRIORITY","META_DATA_VISIBLE_PRIORITY","DURATION_PRIORITY","META_DATA_PRIORITY","loadQueue","addTracksFromReferences","fileReferences","loadStyle","loadMediaFiles","SKIN_FILENAME_MATCHER","EQF_FILENAME_MATCHER","loadFilesFromReferences","setSkinFromBlob","setEqFromFileReference","requireJSZip","alert","skinData","setSkinFromUrl","_openFileDialog","expectedType","firstFileName","openEqfFileDialog","openSkinFileDialog","fetchMediaDuration","trackIsVisible","loadMedia","handleTrackDropEvent","loadMediaFile","Utils.uniqueId","canonicalUrl","fetchMediaTags","queueFetchingMediaTags","requireMusicMetadata","byteArray","setEqFromObject","Utils.normalizeEqBand","downloadPreset","Utils.downloadURI","Utils.base64FromArrayBuffer","downloadHtmlPlaylist","DIR_SUPPORT","addFilesAtIndex","addDirAtIndex","addFilesFromUrl","handleAddUrlEvent","addFilesFromList","handleLoadListEvent","saveFilesToList","handleSaveListEvent","droppedFiles","normalizePresetTypes","butterchurnPresetObject","getPreset","getButterchrunPresetObject","butterchurnPresetUrl","initializePresets","presetOptions","getPresets","importButterchurn","normalizePresets","loadPresets","presetsLength","Selectors.getRandomizePresets","selectRandomPreset","requestPresetAtIndex","IMMEDIATE","appendPresetFileList","fileList","convertPreset","JSON_EXT","MILK_EXT","FileUtils.genStringFromFileReference","selectNextPreset","Selectors.getCurrentPresetIndex","selectPreviousPreset","handlePresetDrop","toggleRandomizePresets","togglePresetCycling","scheduleMilkdropMessage","toggleVisualizerStyle","minimize","setFocus","unsetFocus","focusBand","loadSerializedState","loadDefaultSkin","toggleMilkdropDesktop","Selectors.getMilkdropDesktopEnabled","setMilkdropFullscreen","toggleMilkdropFullscreen","Selectors.getMilkdropFullscreenEnabled","togglePresetOverlay","Selectors.getPresetOverlayOpen","stepMarquee","mediaMiddleware","nextTrack","Selectors.getCurrentTrackId","Selectors.getVolume","Selectors.getBalance","seekToPercentComplete","Selectors.getTrackUrl","loadFromUrl","disableEq","enableEq","Selectors.getEqualizerEnabled","slider","actionsBlacklist","createWebampStore","actionEmitter","customMiddlewares","stateOverrides","extras","middlewares","trigger","enhancer","applyMiddleware","createStore","fullscreenEnabled","fullscreenElement","requestFullscreen","exitFullscreen","fullscreenchange","fullscreenerror","fullscreen","webkit","moz","vendor","fscreen","requestFullscreenFunction","fullscreenPseudoClass","onfullscreenchange","onfullscreenerror","leaveFullScreen","enterFullScreen","FullScreen","onChange","detectFullScreen","isEnabled","useUnmountedRef","unmountedRef","usePromiseValueOrNull","disposed","resolvedValue","useScreenSize","Utils.getScreenSize","useWindowSize","setSize","cursorPositionRef","useCursorPositionRef","useIsHovered","cursorRef","hover","setHover","setNode","domRect","enter","leave","useOnClickAway","handleClickOut","clickOutTarget","useTypedSelector","useActionCreator","actionCreator","useTypedDispatch","hasOwn","classNames","classes","appendClass","parseValue","newClass","ResizeTarget","currentSize","widthOnly","passThroughProps","setMouseDown","mouseStart","setMouseStart","handleMove","Utils.getX","Utils.getY","newSize","handleMouseUp","handleMouseDown","onMouseDown","onTouchStart","FocusTarget","onKeyDown","focusedWindowId","Selectors.getFocusedWindow","Actions.setFocusedWindow","focusHandler","setRef","mutations","mutation","removedNodes","subtree","childList","disconnect","onPointerDown","onFocus","tabIndex","ACTIVE_CLASSNAME","LEFT_MOUSE_NUMBER","WinampButton","requireClicksOriginateLocally","originalOnPointerDown","htmlProps","active","setActive","releasePointerCapture","onRelease","classnames","onPointerEnter","CustomEvent","Text","letters","React.Fragment","CHROME_WIDTH","CHROME_HEIGHT","GenWindow","Actions.setWindowSize","Actions.closeWindow","Selectors.getWindowPixelSize","focusedWindow","windowSize","Selectors.getWindowSize","TRANSITION_TYPE_DURATIONS","USER_PRESET","Visualizer","analyser","Selectors.getVisualizerStyle","playing","Selectors.getMediaIsPlaying","Selectors.getButterchurn","trackTitle","Selectors.getCurrentTrackDisplayName","currentPreset","Selectors.getCurrentPreset","Selectors.getPresetTransitionType","Selectors.getMilkdropMessage","isEnabledVisualizer","canvasRef","visualizer","setVisualizer","_visualizer","createVisualizer","meshWidth","meshHeight","pixelRatio","devicePixelRatio","connectAudio","setRendererSize","hasLoadedPreset","loadPreset","launchSongTitleAnim","lastShownMessage","shouldAnimate","animationFrameRequest","loop","requestAnimationFrame","cancelAnimationFrame","Background","innerRef","ENTRY_HEIGHT","HEIGHT_PADDING","WIDTH_PADDING","LOADING_STYLE","background","OUTER_WRAPPER_STYLE","INNER_WRAPPER_STYLE","whiteSpace","fontSize","presetIndexFromListIndex","listIndex","listIndexFromPresetIndex","PresetOverlay","presetKeys","Selectors.getPresetNames","Actions.requestPresetAtIndex","Actions.togglePresetOverlay","Actions.appendPresetFileList","selectedListIndex","setSelectedListIndex","maxListIndex","renderList","maxVisibleRows","rowsToShow","startIndex","getRangeCenteredOnIndex","presetElms","presetIndex","isCurrent","lineHeight","loadLocalDir","handleFocusedKeyboardInput","handleNode","maxHeight","listStyleType","margin","maxRangeSize","indexToCenter","rangeSize","halfRangeSize","supress","dropEffect","effectAllowed","DropTarget","handleDrop","Actions.droppedFiles","onDrop","onDragStart","onDragEnter","onDragOver","div","Parent","label","LinkNode","Node","ContextMenu","Selectors.getZIndex","ContextMenuWraper","renderContents","openPosition","setOpenPosition","closeMenu","handleGlobalClick","handleRightClick","onContextMenu","MilkdropContextMenu","desktop","toggleDesktop","Actions.toggleMilkdropDesktop","toggleFullscreen","Actions.toggleMilkdropFullscreen","Desktop","React.memo","desktopNode","React.useState","React.useEffect","classList","MILLISECONDS_BETWEEN_PRESET_TRANSITIONS","useKeyHandler","Actions.selectNextPreset","Actions.selectPreviousPreset","toggleRandomize","Actions.toggleRandomizePresets","Actions.scheduleMilkdropMessage","toggleCycling","Actions.togglePresetCycling","Milkdrop","presetsAreCycling","Selectors.getPresetsAreCycling","Actions.handlePresetDrop","setFullscreen","Actions.setMilkdropFullscreen","handleKeyDown","intervalId","setInterval","clearInterval","screenSize","genWindowSize","Fullscreen","onDoubleClick","PlaybackContextMenu","Actions.previous","Actions.play","Actions.pause","Actions.stop","Actions.next","Actions.seekForward","Actions.seekBackward","Actions.nextN","SkinContextMenu","Actions.loadDefaultSkin","Actions.openSkinFileDialog","setSkin","Actions.setSkinFromUrl","Selectors.getAvaliableSkins","skin","OptionsContextMenu","Actions.toggleTimeMode","Actions.toggleDoubleSizeMode","Actions.toggleRepeat","Actions.toggleShuffle","Selectors.getDoubled","Selectors.getTimeMode","Selectors.getRepeat","Selectors.getShuffle","SkinsContextMenu","MainContextMenu","filePickers","networkConnected","Selectors.getNetworkConnected","Selectors.getGenWindows","Actions.close","Actions.openMediaFileDialog","Actions.loadMediaFiles","Actions.toggleWindow","menuOpened","picker","requiresNetwork","filePicker","contextMenuName","abuts","wouldMoveTo","SnapUtils.snap","useHandleMouseDown","propsWindows","Selectors.getWindowHidden","Selectors.getBrowserWindowSize","Actions.updateWindowPositions","draggingState","setDraggingState","moving","stationary","handleMouseMove","proposedDiff","proposedWindows","SnapUtils.applyDiff","proposedBox","SnapUtils.snapDiffManyToMany","withinDiff","SnapUtils.snapWithinDiff","finalDiff","SnapUtils.applyMultipleDiffs","windowPositionDiff","find","movingSet","findAllConnected","SnapUtils.traceConnection","SnapUtils.boundingBox","WindowManager","onBlur","touchAction","basePropertyOf","_basePropertyOf","deburredLetters","deburrLetter","_deburrLetter","freeGlobal","_freeGlobal","freeSelf","_root","_Symbol","arrayMap","_arrayMap","isArray_1","objectProto","nativeObjectToString","symToStringTag","toStringTag","getRawTag","isOwn","unmasked","_getRawTag","_objectToString","nullTag","undefinedTag","baseGetTag","_baseGetTag","isObjectLike","isObjectLike_1","symbolTag","isSymbol_1","INFINITY","symbolProto","symbolToString","baseToString","_baseToString","toString_1","reLatin","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsCombo","reComboMark","deburr","deburr_1","characterClassName","Character","passThrough","MiniTime","toggle","timeObj","showMinus","blinking","ClickedDiv","clicked","setClicked","getNodeOffset","rect","pageXOffset","pageYOffset","ContextMenuTarget","setSelected","renderMenu","FFT","bitrevtable","envelope","equalize","temp1","temp2","cossintable","static","NFREQ","samplesOut","initBitRevTable","initCosSinTable","initEnvelopeTable","initEqualizeTable","bias","invHalfNfreq","log10","samplesIn","power","mult","TWO_PI","sin","HALF_PI","dftsize","theta","PI","cos","timeToFrequencyDomain","inWavedata","outSpectraldata","idx","real","imag","wpr","wpi","wr","wi","hdftsize","tempr","tempi","wtemp","sqrt","VisPaintHandler","_vis","_ctx","vis","prepare","paintFrame","dispose","processFFT","fft","inWaveData","outSpectralData","getByteTimeDomainData","BarPaintHandler","saPeaks","saData2","saData","saFalloff","barPeak","uVar12","falloff","peakFalloff","pushDown","_analyser","_fft","_color","_colorPeak","_bar","_peak","_16h","_bufferLength","_dataArray","colorssmall","colorssmall2","_renderHeight","_smallVis","_pixelDensity","_doubled","_isMWOpen","paintBar","frequencyBinCount","renderHeight","smallVis","pixelDensity","isMWOpen","paintAnalyzer","coloring","paintBarFire","paintBarLine","paintBarNormal","saPeakFalloff","ctx","fillStyle","fillRect","maxFreqIndex","logMaxFreqIndex","targetSize","maxWidth","logScaledIndex","scaledIndex","index1","index2","frac2","frac1","bandwidth","x2","barHeight","peakHeight","peaks","peakY","slice1st","sliceWidth","sliceNumber","WavePaintHandler","_lastX","_lastY","_pixelRatio","paintWav","fftSize","paintOscilloscope","imageSmoothingEnabled","mozImageSmoothingEnabled","webkitImageSmoothingEnabled","msImageSmoothingEnabled","amplitude","colorIndex","yadjust","oscStyle","NoVisualizerHandler","cleared","preRenderBg","bgColor","fgColor","windowShade","bgCanvas","distance","bgCanvasCtx","Vis","Selectors.getSkinColors","audioStatus","Selectors.getWindowShade","Actions.toggleVisualizerStyle","renderWidthBG","setCanvas","painter","sa","canvasCtx","clearRect","animationRequest","ActionButtons","Balance","Actions.setBalance","Actions.setFocus","Actions.unsetFocus","onPointerUp","offsetFromBalance","MainBalance","backgroundPosition","Close","setFocusDouble","mouseUp","ClutterBar","Eject","toggleEqualizer","EqToggleButton","handleClick","windowOpen","togglePlaylist","PlaylistToggleButton","CharacterString","chars","Kbps","Selectors.getKbps","Khz","Selectors.getKhz","SEPARATOR","CHAR_WIDTH","MARQUEE_MAX_LENGTH","mod","isLong","stepOffset","pixels","stringLength","pixelUnits","loopText","padEnd","useStepper","dragging","stepping","setStepping","stepHandle","steppingTimeout","useDragX","mouseDownX","setMouseDownX","dragOffset","setDragOffset","xStart","React.useCallback","Marquee","Selectors.getMarqueeText","Selectors.getMarqueeStep","Actions.stepMarquee","offsetPixels","willChange","MonoStereo","Selectors.getChannels","usePosition","Selectors.getUserInputScrubPosition","Selectors.getUserInputFocus","Position","displayedPosition","setPosition","onInput","Repeat","Shade","Actions.toggleMainWindowShadeMode","Minimize","Actions.minimize","Shuffle","Time","Utils.getTimeObj","Volume","Actions.setVolume","MainVolume","loadMediaAndPlay","Actions.loadMedia","MainWindow","mainShade","Selectors.getLoading","Selectors.getLlamaMode","Selectors.getWorking","draggable","Actions.scrollVolume","onWheel","PlaylistResizeTarget","PlaylistShade","Selectors.getMinimalMediaText","toggleShade","Actions.togglePlaylistShadeMode","focusWindow","addedWidth","trimmedName","nameLength","PlaylistMenuEntry","PlaylistMenu","selected_","PlaylistMenuEnry","AddMenu","Selectors.getTrackCount","Actions.addDirAtIndex","Actions.addFilesAtIndex","Actions.addFilesFromUrl","RemoveMenu","removeSelected","Actions.removeSelectedTracks","removeAll","Actions.removeAllTracks","crop","Actions.cropPlaylist","SelectionMenu","invert","Actions.invertSelection","Actions.selectZero","Actions.selectAll","SortContextMenu","Actions.reverseList","Actions.randomizeList","Actions.sortListByTitle","MiscOptionsContextMenu","Actions.downloadHtmlPlaylist","MiscMenu","ListMenu","Actions.addFilesFromList","Actions.saveFilesToList","rightPad","fillChar","RunningTimeDisplay","runningTimeMessage","Actions.getRunningTimeMessage","PlaylistWindow","TrackCell","handleMoveClick","Selectors.getSkinPlaylistStyle","currentTrackId","Actions.playTrackNow","handleTouchStart","handleSecondTap","TrackTitle","paddedTrackNumber","Selectors.getTrackDisplayName","getNumberLength","TrackList","trackIds","Selectors.getVisibleTrackIds","Selectors.getNumberOfTracks","Actions.dragSelected","Actions.scrollPlaylistByDelta","setMoving","mouseStartY","setMouseStartY","_handleMoveClick","_renderTracks","lastDiff","maxTrackNumberLength","paddedTrackNumForIndex","padStart","userSelect","VerticalSlider","handle","handleHeight","onBeforeChange","onAfterChange","handleRef","handlePointerDown","sliderNode","sliderRect","handleRect","sliderTop","sliderHeight","handleTop","realHandleHeight","baseOffset","spanSize","moveToPosition","handlePointerMove","handleRelease","registerMoveListener","HANDLE_HEIGHT","Handle","PlaylistScrollBar","playlistHeight","Selectors.getPlaylistScrollPosition","allTracksAreVisible","Selectors.getAllTracksAreVisible","Actions.setPlaylistScrollPosition","marginLeft","_maxTrackIndex","selectedWindow","maxTrackIndex","playlistShade","playlistWindowPixelSize","Actions.scrollUpFourTracks","Actions.scrollDownFourTracks","showVisualizer","activateVisualizer","targetCoords","fontFamily","showSpacers","PlaylistActionArea","MAX_VALUE","spriteNumber","spriteOffsets","Band","clickOriginatedInEq","Selectors.getSliders","Actions.focusBand","EqOn","Actions.toggleEq","EqAuto","toggleAuto","Actions.toggleEqAuto","spline","ys","ks","getNaturalKs","maxX","allYs","matrix","zerosMatrix","solve","iMax","vali","NEGATIVE_INFINITY","swapRows","rows","columns","GRAPH_HEIGHT","GRAPH_WIDTH","EqGraph","preampLineImage","Selectors.getPreampLineImage","canvasNode","setCanvasNode","colorPattern","useColorPattern","drawEqLine","lineColorsImage","Selectors.getLineColorsImage","createPattern","preampValue","amplitudes","lastY","yTop","PresetsContextMenu","Actions.openEqfFileDialog","Actions.downloadPreset","Actions.setEqFromObject","builtin","EqTitleButtons","Actions.toggleEqualizerShadeMode","EqualizerShade","eqVolumeClassName","eqBalanceClassName","bandClassName","EqualizerWindow","setPreampValue","Actions.setPreamp","Actions.setEqToMin","Actions.setEqToMid","Actions.setEqToMax","setHertzValue","Actions.setEqBand","setClickOriginatedInEq","onReleaseHz","hertz","imageSelectors","MAIN_BALANCE_BACKGROUND","MAIN_BALANCE_THUMB","MAIN_BALANCE_THUMB_ACTIVE","MAIN_PREVIOUS_BUTTON","MAIN_PREVIOUS_BUTTON_ACTIVE","MAIN_PLAY_BUTTON","MAIN_PLAY_BUTTON_ACTIVE","MAIN_PAUSE_BUTTON","MAIN_PAUSE_BUTTON_ACTIVE","MAIN_STOP_BUTTON","MAIN_STOP_BUTTON_ACTIVE","MAIN_NEXT_BUTTON","MAIN_NEXT_BUTTON_ACTIVE","MAIN_EJECT_BUTTON","MAIN_EJECT_BUTTON_ACTIVE","MAIN_WINDOW_BACKGROUND","MAIN_STEREO","MAIN_STEREO_SELECTED","MAIN_MONO","MAIN_MONO_SELECTED","NO_MINUS_SIGN","MINUS_SIGN","DIGIT_0","DIGIT_1","DIGIT_2","DIGIT_3","DIGIT_4","DIGIT_5","DIGIT_6","DIGIT_7","DIGIT_8","DIGIT_9","NO_MINUS_SIGN_EX","MINUS_SIGN_EX","DIGIT_0_EX","DIGIT_1_EX","DIGIT_2_EX","DIGIT_3_EX","DIGIT_4_EX","DIGIT_5_EX","DIGIT_6_EX","DIGIT_7_EX","DIGIT_8_EX","DIGIT_9_EX","MAIN_PLAYING_INDICATOR","MAIN_PAUSED_INDICATOR","MAIN_STOPPED_INDICATOR","MAIN_NOT_WORKING_INDICATOR","MAIN_WORKING_INDICATOR","PLAYLIST_TOP_TILE","PLAYLIST_TOP_LEFT_CORNER","PLAYLIST_TITLE_BAR","PLAYLIST_TOP_RIGHT_CORNER","PLAYLIST_TOP_TILE_SELECTED","PLAYLIST_TOP_LEFT_SELECTED","PLAYLIST_TITLE_BAR_SELECTED","PLAYLIST_TOP_RIGHT_CORNER_SELECTED","PLAYLIST_LEFT_TILE","PLAYLIST_RIGHT_TILE","PLAYLIST_SCROLL_HANDLE","PLAYLIST_SCROLL_HANDLE_SELECTED","PLAYLIST_BOTTOM_TILE","PLAYLIST_BOTTOM_LEFT_CORNER","PLAYLIST_BOTTOM_RIGHT_CORNER","PLAYLIST_VISUALIZER_BACKGROUND","PLAYLIST_SHADE_BACKGROUND","PLAYLIST_SHADE_BACKGROUND_LEFT","PLAYLIST_SHADE_BACKGROUND_RIGHT","PLAYLIST_SHADE_BACKGROUND_RIGHT_SELECTED","PLAYLIST_ADD_MENU_BAR","PLAYLIST_ADD_URL","PLAYLIST_ADD_URL_SELECTED","PLAYLIST_ADD_DIR","PLAYLIST_ADD_DIR_SELECTED","PLAYLIST_ADD_FILE","PLAYLIST_ADD_FILE_SELECTED","PLAYLIST_REMOVE_MENU_BAR","PLAYLIST_REMOVE_ALL","PLAYLIST_REMOVE_ALL_SELECTED","PLAYLIST_CROP","PLAYLIST_CROP_SELECTED","PLAYLIST_REMOVE_SELECTED","PLAYLIST_REMOVE_SELECTED_SELECTED","PLAYLIST_REMOVE_MISC","PLAYLIST_REMOVE_MISC_SELECTED","PLAYLIST_SELECT_MENU_BAR","PLAYLIST_INVERT_SELECTION","PLAYLIST_INVERT_SELECTION_SELECTED","PLAYLIST_SELECT_ZERO","PLAYLIST_SELECT_ZERO_SELECTED","PLAYLIST_SELECT_ALL","PLAYLIST_SELECT_ALL_SELECTED","PLAYLIST_CLOSE_SELECTED","PLAYLIST_COLLAPSE_SELECTED","PLAYLIST_EXPAND_SELECTED","PLAYLIST_MISC_MENU_BAR","PLAYLIST_MISC_OPTIONS","PLAYLIST_MISC_OPTIONS_SELECTED","PLAYLIST_FILE_INFO","PLAYLIST_FILE_INFO_SELECTED","PLAYLIST_SORT_LIST","PLAYLIST_SORT_LIST_SELECTED","PLAYLIST_LIST_BAR","PLAYLIST_NEW_LIST","PLAYLIST_NEW_LIST_SELECTED","PLAYLIST_LOAD_LIST","PLAYLIST_LOAD_LIST_SELECTED","PLAYLIST_SAVE_LIST","PLAYLIST_SAVE_LIST_SELECTED","EQ_WINDOW_BACKGROUND","EQ_TITLE_BAR","EQ_TITLE_BAR_SELECTED","EQ_SLIDER_BACKGROUND","EQ_SLIDER_THUMB","EQ_SLIDER_THUMB_SELECTED","EQ_ON_BUTTON","EQ_ON_BUTTON_DEPRESSED","EQ_ON_BUTTON_SELECTED","EQ_ON_BUTTON_SELECTED_DEPRESSED","EQ_AUTO_BUTTON","EQ_AUTO_BUTTON_DEPRESSED","EQ_AUTO_BUTTON_SELECTED","EQ_AUTO_BUTTON_SELECTED_DEPRESSED","EQ_GRAPH_BACKGROUND","EQ_PRESETS_BUTTON","EQ_PRESETS_BUTTON_SELECTED","EQ_SHADE_BACKGROUND","EQ_SHADE_BACKGROUND_SELECTED","EQ_SHADE_VOLUME_SLIDER_LEFT","EQ_SHADE_VOLUME_SLIDER_CENTER","EQ_SHADE_VOLUME_SLIDER_RIGHT","EQ_SHADE_BALANCE_SLIDER_LEFT","EQ_SHADE_BALANCE_SLIDER_CENTER","EQ_SHADE_BALANCE_SLIDER_RIGHT","EQ_MAXIMIZE_BUTTON_ACTIVE","EQ_MINIMIZE_BUTTON_ACTIVE","EQ_CLOSE_BUTTON","EQ_CLOSE_BUTTON_ACTIVE","EQ_SHADE_CLOSE_BUTTON","EQ_SHADE_CLOSE_BUTTON_ACTIVE","MAIN_POSITION_SLIDER_BACKGROUND","MAIN_POSITION_SLIDER_THUMB","MAIN_POSITION_SLIDER_THUMB_SELECTED","MAIN_SHUFFLE_BUTTON","MAIN_SHUFFLE_BUTTON_DEPRESSED","MAIN_SHUFFLE_BUTTON_SELECTED","MAIN_SHUFFLE_BUTTON_SELECTED_DEPRESSED","MAIN_REPEAT_BUTTON","MAIN_REPEAT_BUTTON_DEPRESSED","MAIN_REPEAT_BUTTON_SELECTED","MAIN_REPEAT_BUTTON_SELECTED_DEPRESSED","MAIN_EQ_BUTTON","MAIN_EQ_BUTTON_SELECTED","MAIN_EQ_BUTTON_DEPRESSED","MAIN_EQ_BUTTON_DEPRESSED_SELECTED","MAIN_PLAYLIST_BUTTON","MAIN_PLAYLIST_BUTTON_SELECTED","MAIN_PLAYLIST_BUTTON_DEPRESSED","MAIN_PLAYLIST_BUTTON_DEPRESSED_SELECTED","MAIN_TITLE_BAR","MAIN_TITLE_BAR_SELECTED","MAIN_EASTER_EGG_TITLE_BAR","MAIN_EASTER_EGG_TITLE_BAR_SELECTED","MAIN_OPTIONS_BUTTON","MAIN_OPTIONS_BUTTON_DEPRESSED","MAIN_MINIMIZE_BUTTON","MAIN_MINIMIZE_BUTTON_DEPRESSED","MAIN_SHADE_BUTTON","MAIN_SHADE_BUTTON_DEPRESSED","MAIN_CLOSE_BUTTON","MAIN_CLOSE_BUTTON_DEPRESSED","MAIN_CLUTTER_BAR_BACKGROUND","MAIN_CLUTTER_BAR_BACKGROUND_DISABLED","MAIN_CLUTTER_BAR_BUTTON_O_SELECTED","MAIN_CLUTTER_BAR_BUTTON_A_SELECTED","MAIN_CLUTTER_BAR_BUTTON_I_SELECTED","MAIN_CLUTTER_BAR_BUTTON_D_SELECTED","MAIN_CLUTTER_BAR_BUTTON_V_SELECTED","MAIN_SHADE_BACKGROUND","MAIN_SHADE_BACKGROUND_SELECTED","MAIN_SHADE_BUTTON_SELECTED","MAIN_SHADE_BUTTON_SELECTED_DEPRESSED","MAIN_SHADE_POSITION_BACKGROUND","MAIN_SHADE_POSITION_THUMB","MAIN_SHADE_POSITION_THUMB_LEFT","MAIN_SHADE_POSITION_THUMB_RIGHT","MAIN_VOLUME_BACKGROUND","MAIN_VOLUME_THUMB","MAIN_VOLUME_THUMB_SELECTED","GEN_TOP_CENTER_FILL","GEN_TOP_LEFT","GEN_TOP_LEFT_END","GEN_TOP_RIGHT","GEN_TOP_RIGHT_END","GEN_TOP_LEFT_RIGHT_FILL","GEN_TOP_CENTER_FILL_SELECTED","GEN_TOP_LEFT_SELECTED","GEN_TOP_LEFT_END_SELECTED","GEN_TOP_RIGHT_SELECTED","GEN_TOP_RIGHT_END_SELECTED","GEN_TOP_LEFT_RIGHT_FILL_SELECTED","GEN_BOTTOM_LEFT","GEN_BOTTOM_RIGHT","GEN_BOTTOM_FILL","GEN_MIDDLE_LEFT","GEN_MIDDLE_LEFT_BOTTOM","GEN_MIDDLE_RIGHT","GEN_MIDDLE_RIGHT_BOTTOM","GEN_CLOSE_SELECTED","cursorSelectors","CLOSE","EQSLID","EQNORMAL","EQCLOSE","EQTITLE","MAINMENU","MIN","NORMAL","MMENU","PNORMAL","PTBAR","PCLOSE","PWINBUT","PSIZE","PWSSIZE","PWSNORM","PVSCROLL","SONGNAME","VOLBAL","WINBUT","WSNORMAL","WSPOSBAR","Css","ClipPaths","paths","endianness","swap","theByte","unpack","lowerBoundary","upperBoundary","pack","codePointAt","IntParser","signed","lastByteMask_","unpackUnsigned_","unpackSigned_","overflow_","overflowClamp_","unpack_","sign_","RangeError","IEEE754Buffer","ebits","fbits","numBytes","biasP2","ebitsFbits","fbias","exp","fraction","roundToEven","packFloatBits_","significand","leftBits","exponent","unpackString","unpackUTF8","packString","packUTF8","packStringTo","packArrayTo","theType","packer","getParser_","fp","valuesLen","be","throwValueError_","unpackArrayTo","safe","getUnpackLen_","packTo","packArray","unpackArray","validateFloatType","validateIntType","TYPE_ERR","RIFFFile","uInt32","supported_containers","setSignature","readUInt32","chunkId","subChunks","getSubChunksIndex_","chunkData","findChunk","maxSize","getSubChunkIndex_","getChunkId_","getChunkSize_","realChunkSize","parseAni","riff_file_1","byte_data_1","DWORD","mapChunk","words","cbSize","nFrames","nSteps","iWidth","iHeight","iBitCount","nPlanes","iDispRate","bfAttributes","convertAniBinaryToCSS_1","convertAniBinaryToCSS","JIFFIES_PER_MS","aniBinary","ani","readAni","frames","_a","percents","rate","frameIdx","seq","__spread","CSS_PREFIX","mapRegionNamesToIds","windowshade","equalizerws","mapRegionNamesToMatcher","numExIsUsed","FALLBACKS","normalizeCursorSelector","getCssRules","Selectors.getSkinImages","Selectors.getSkinCursors","Selectors.getSkinLetterWidths","Selectors.getSkinRegion","cssRules","imageName","imageUrl","_selector","selectedWidth","cursorSelector","cursorRules","regionName","polygons","getClipPaths","clipPaths","Skin","App","Selectors.getClosed","genWindowsInfo","Actions.browserWindowSizeChanged","webampNode","role","handleWindowResize","renderWindows","getAnalyser","MilkdropWindow","cssText","ContextMenuWrapper","IGNORE_EVENTS_FROM_TAGS","bindHotkeys","currentPos","Emitter","eventListeners","StereoBalanceNode","upMixer","createGain","channelCountMode","channelInterpretation","splitter","createChannelSplitter","leftGain","rightGain","merger","createChannelMerger","rawValue","gain","connect","audioParam","defineProperties","AudioNode","ElementSource","_emitter","_source","_destination","_audio","_stalled","destination","_setStalled","_setStatus","createMediaElementSource","stalled","loadUrl","getStalled","getStatus","_balance","_staticSource","_preamp","_gainNode","_bands","AudioContext","webkitAudioContext","createAnalyser","smoothingTimeConstant","createBiquadFilter","frequency","timeRemaining","percentComplete","seekTime","autoPlay","Disposable","_teardowns","teardowns","teardown","Webamp$1","_actionEmitter","_disposable","browserIsSupported","supportsAudioApi","supportsCanvas","initialTracks","initialSkin","enableHotkeys","enableDoubleSizeMode","__butterchurnOptions","__customMediaClass","importConvertPreset","presetConverterEndpoint","convert","getStore","__customMiddlewares","__initialState","onLine","butterchurnOpen","Actions.initializePresets","handleOnline","handleOffline","_bufferTracks","avaliableSkins","Actions.setWindowLayout","windowLayout","Actions.seekToTime","isShuffleEnabled","isRepeatEnabled","previousTrack","setCurrentTrack","Actions.playTrack","appendTracks","setTracksToPlay","Selectors.getPlaylistTracks","onWillClose","onClose","reopen","Actions.open","onTrackDidChange","previousTrackId","Selectors.getCurrentlyPlayingTrackIdIfLoaded","Selectors.getCurrentTrackInfo","onMinimize","skinIsLoaded","storeHas","renderWhenReady","Actions.centerWindowsInContainer","__loadSerializedState","Actions.loadSerializedState","__getSerializedState","Selectors.getSerlializedState","__onStateChange","Webamp","nextHandle","tasksByHandle","currentlyRunningATask","registerImmediate","clearImmediate","run","runIfPresent","canUsePostMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","installPostMessageImplementation","messagePrefix","installSetTimeoutImplementation","Utils","WebampLazy","musicMetadataBrowser"],"mappings":"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GAClB55C,EAAAuF,QAAkB,MACjB,IAAIs0C,GAAS,EAEb,MAAO,KACDA,IACJA,GAAS,EACTrB,QAAQC,KAAK,0IAGf,EATiB,GAelBz4C,EAAiB24C,OAAA,CAChB,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAsFD34C,EAAcm3C,IAAAqB,QAAQ3pC,OAAS2pC,QAAQrB,KAAG,MAAa,GAkEvD/1C,EAAApB,QAAiBM,gBAAoBN,GAErC,MAAMi3C,WAACA,GAAc71C,EAAOpB,QAM5Bi3C,EAAWnnB,EAAI,SAAU/rB,GACxB,IACC,OAAOmyC,KAAKC,UAAUpyC,EACtB,CAAC,MAAOkZ,GACR,MAAO,+BAAiCA,EAAM86B,OAC9C,4xECzQY+B,QAAGA,CAACC,EAAMC,EAAOl7C,QAAQk7C,QACtC,MAAMC,EAASF,EAAKG,WAAW,KAAO,GAAsB,IAAhBH,EAAKn6C,OAAe,IAAM,KAChEu6C,EAAWH,EAAKh7C,QAAQi7C,EAASF,GACjCK,EAAqBJ,EAAKh7C,QAAQ,MACxC,OAAqB,IAAdm7C,KAA4C,IAAxBC,GAA6BD,EAAWC,2HCLpE,MAAM1f,EAAKp6B,aACL+5C,EAAMn3C,aACN42C,EAAUjyC,kBAEViO,IAACA,GAAOhX,QAEd,IAAIw7C,EAuBJ,SAASC,EAAepoB,GACvB,OAAc,IAAVA,GAIG,CACNA,QACAqoB,UAAU,EACVC,OAAQtoB,GAAS,EACjBuoB,OAAQvoB,GAAS,EAEnB,CAEA,SAASwoB,EAAcC,EAAYC,GAClC,GAAmB,IAAfP,EACH,OAAO,EAGR,GAAIR,EAAQ,cACXA,EAAQ,eACRA,EAAQ,mBACR,OAAO,EAGR,GAAIA,EAAQ,aACX,OAAO,EAGR,GAAIc,IAAeC,QAA8Bp5C,IAAf64C,EACjC,OAAO,EAGR,MAAMh8B,EAAMg8B,GAAc,EAE1B,GAAiB,SAAbxkC,EAAIglC,KACP,OAAOx8B,EAGR,GAAyB,UAArBxf,QAAQ8oC,SAAsB,CAGjC,MAAMmT,EAAYrgB,EAAGsgB,UAAUz7B,MAAM,KACrC,OACCq3B,OAAOmE,EAAU,KAAO,IACxBnE,OAAOmE,EAAU,KAAO,MAEjBnE,OAAOmE,EAAU,KAAO,MAAQ,EAAI,EAGrC,CACP,CAED,GAAI,OAAQjlC,EACX,MAAI,CAAC,SAAU,WAAY,WAAY,YAAa,iBAAkB,aAAamlC,KAAKC,GAAQA,KAAQplC,IAAwB,aAAhBA,EAAIqlC,QAC5G,EAGD78B,EAGR,GAAI,qBAAsBxI,EACzB,MAAO,gCAAgCq3B,KAAKr3B,EAAIslC,kBAAoB,EAAI,EAGzE,GAAsB,cAAlBtlC,EAAIulC,UACP,OAAO,EAGR,GAAI,iBAAkBvlC,EAAK,CAC1B,MAAM/W,EAAUuT,UAAUwD,EAAIwlC,sBAAwB,IAAI/7B,MAAM,KAAK,GAAI,IAEzE,OAAQzJ,EAAIylC,cACX,IAAK,YACJ,OAAOx8C,GAAW,EAAI,EAAI,EAC3B,IAAK,iBACJ,OAAO,EAGT,CAED,MAAI,iBAAiBouC,KAAKr3B,EAAIglC,MACtB,EAGJ,8DAA8D3N,KAAKr3B,EAAIglC,OAIvE,cAAehlC,EAHX,EAODwI,CACR,QAnHIw7B,EAAQ,aACXA,EAAQ,cACRA,EAAQ,gBACRA,EAAQ,eACRQ,EAAa,GACHR,EAAQ,UAClBA,EAAQ,WACRA,EAAQ,eACRA,EAAQ,mBACRQ,EAAa,GAGV,gBAAiBxkC,IAEnBwkC,EADuB,SAApBxkC,EAAI0lC,YACM,EACiB,UAApB1lC,EAAI0lC,YACD,EAE2B,IAA3B1lC,EAAI0lC,YAAY57C,OAAe,EAAIyJ,KAAKiV,IAAIhM,SAASwD,EAAI0lC,YAAa,IAAK,IAwG1FC,gBAAiB,CAChBd,cAND,SAAyBt6C,GAExB,OAAOk6C,EADOI,EAAct6C,EAAQA,GAAUA,EAAOq7C,OAEtD,EAIC9oC,OAAQ2nC,EAAeI,GAAc,EAAMN,EAAIsB,OAAO,KACtD9oC,OAAQ0nC,EAAeI,GAAc,EAAMN,EAAIsB,OAAO,sGCjIvD,MAAMtB,EAAM/5C,aACNyB,EAAOmB,aAMblD,EAAAy3C,KA2NA,SAAc5oC,GACbA,EAAM+sC,YAAc,GAEpB,MAAM/tC,EAAOhM,OAAOgM,KAAK7N,EAAQ47C,aACjC,IAAK,IAAIn8C,EAAI,EAAGA,EAAIoO,EAAKjO,OAAQH,IAChCoP,EAAM+sC,YAAY/tC,EAAKpO,IAAMO,EAAQ47C,YAAY/tC,EAAKpO,GAExD,EAjOAO,EAAAm3C,IAoLA,YAAgB33C,GACf,OAAOV,QAAQ+T,OAAOhI,MAAM9I,EAAKg1C,UAAUv3C,GAAQ,KACpD,EArLAQ,EAAAk3C,WAyJA,SAAoB13C,GACnB,MAAO82C,UAAWtxC,EAAIoyC,UAAEA,GAAazzC,KAErC,GAAIyzC,EAAW,CACd,MAAMxlC,EAAIjO,KAAK0zC,MACTwE,EAAY,OAAcjqC,EAAI,EAAIA,EAAI,OAASA,GAC/CqoC,EAAS,KAAK4B,OAAe72C,SAEnCxF,EAAK,GAAKy6C,EAASz6C,EAAK,GAAG+f,MAAM,MAAMhb,KAAK,KAAO01C,GACnDz6C,EAAKsE,KAAK+3C,EAAY,KAAOz6C,EAAOpB,QAAQu4C,SAAS50C,KAAKkzC,MAAQ,OACpE,MACEr3C,EAAK,GAIP,WACC,GAAIQ,EAAQ47C,YAAYE,SACvB,MAAO,GAER,OAAO,IAAIzP,MAAO0P,cAAgB,GACnC,CATYC,GAAYh3C,EAAO,IAAMxF,EAAK,EAE1C,EArKAQ,EAAAq4C,KA4LA,SAAcb,GACTA,EACH14C,QAAQgX,IAAIojC,MAAQ1B,SAIb14C,QAAQgX,IAAIojC,KAErB,EAnMAl5C,EAAA+sC,KA4MA,WACC,OAAOjuC,QAAQgX,IAAIojC,KACpB,EA7MAl5C,EAAAo3C,UA0IA,WACC,MAAO,WAAYp3C,EAAQ47C,YAC1BK,QAAQj8C,EAAQ47C,YAAYjD,QAC5B0B,EAAIsB,OAAO78C,QAAQ+T,OAAOqpC,GAC5B,EA7IAl8C,EAAkBuF,QAAAxD,EAAK2E,UACtB,OACA,yIAOD1G,EAAA24C,OAAiB,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GAEjC,IAGC,MAAMgC,EAAgB9yC,uBAElB8yC,IAAkBA,EAAc9nC,QAAU8nC,GAAexoB,OAAS,IACrEnyB,EAAiB24C,OAAA,CAChB,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,IACA,KAGF,CAAC,MAAO17B,GACT,CASAjd,EAAA47C,YAAsB/5C,OAAOgM,KAAK/O,QAAQgX,KAAKk3B,OAAOpsC,GAC9C,WAAWusC,KAAKvsC,IACrBu7C,OAAO,CAACr3C,EAAKlE,KAEf,MAAMw7C,EAAOx7C,EACX6kB,UAAU,GACVpY,cACAmL,QAAQ,YAAa,CAACrM,EAAGgS,IAClBA,EAAE0B,eAIX,IAAIya,EAAMx7B,QAAQgX,IAAIlV,GAYtB,OAVC05B,IADG,2BAA2B6S,KAAK7S,KAEzB,6BAA6B6S,KAAK7S,KAE1B,SAARA,EACJ,KAEAsc,OAAOtc,IAGdx1B,EAAIs3C,GAAQ9hB,EACLx1B,GACL,CAAE,GA2FL1D,EAAApB,QAAiB+H,gBAAoB/H,GAErC,MAAMi3C,WAACA,GAAc71C,EAAOpB,QAM5Bi3C,EAAWr1C,EAAI,SAAUmC,GAExB,OADAJ,KAAKi4C,YAAYjD,OAASh1C,KAAKyzC,UACxBr1C,EAAK6C,QAAQb,EAAGJ,KAAKi4C,aAC1Br8B,MAAM,MACN24B,IAAIrmC,GAAOA,EAAIwqC,QACf93C,KAAK,MAOR0yC,EAAWqF,EAAI,SAAUv4C,GAExB,OADAJ,KAAKi4C,YAAYjD,OAASh1C,KAAKyzC,UACxBr1C,EAAK6C,QAAQb,EAAGJ,KAAKi4C,gDChQN,oBAAZ98C,SAA4C,aAAjBA,QAAQ4P,OAA2C,IAApB5P,QAAQyI,SAAoBzI,QAAQq6C,OACxGoD,IAAAv8C,QAAiBM,iBAEjBi8C,IAAAv8C,QAAiBkD,qHCPlBrB,OAAOoK,eAAeyC,OAAS,aAAc,CAAEnC,OAAO,IAKtDmC,OAAA8tC,UAAoB,cCLpB,IAAIC,YAAa94C,gBAAQA,eAAK84C,WAAc,SAAUC,EAASC,EAAYC,EAAGC,GAC1E,OAAO,IAAKD,IAAMA,EAAIxhC,UAAU,SAAUiB,EAASD,GAC/C,SAAS0gC,EAAUvwC,GAAS,IAAMwwC,EAAKF,EAAU34C,KAAKqI,GAAU,CAAC,MAAO1J,GAAKuZ,EAAOvZ,GAAO,CAC3F,SAASm6C,EAASzwC,GAAS,IAAMwwC,EAAKF,EAAiB,MAAEtwC,GAAU,CAAC,MAAO1J,GAAKuZ,EAAOvZ,GAAO,CAC9F,SAASk6C,EAAKpgC,GAAUA,EAAOlH,KAAO4G,EAAQM,EAAOpQ,OAAS,IAAIqwC,EAAE,SAAUvgC,GAAWA,EAAQM,EAAOpQ,MAAS,GAAEgQ,KAAKugC,EAAWE,EAAY,CAC/ID,GAAMF,EAAYA,EAAU98C,MAAM28C,EAASC,GAAc,KAAKz4C,OACtE,EACA,EACArC,OAAOoK,eAAegxC,oBAAS,aAAc,CAAE1wC,OAAO,IACtD,MAAM2wC,SAAS58C,OACf,MAAM68C,kBACFp4C,WAAAA,GACIpB,KAAKw2C,SAAW,EAChBx2C,KAAKy5C,UAAY58C,OAAOS,MAAM,EACjC,CACDo8C,SAAAA,CAAUC,EAAOnD,EAAW,KAAMoD,GAC9B,OAAOd,YAAU94C,UAAM,OAAQ,EAAQ,YACnC,MAAMpD,EAASC,OAAOS,MAAMq8C,EAAM59C,KAC5BA,QAAYiE,KAAK65C,WAAWj9C,EAAQ,EAAG+8C,EAAM59C,IAAKy6C,GACxD,IAAKoD,GAAa79C,EAAM49C,EAAM59C,IAC1B,MAAM,IAAIoD,MAAMo6C,SAAOV,WAC3B,OAAOc,EAAMpxC,IAAI3L,EAAQ,EACrC,EACK,CACDk9C,SAAAA,CAAUH,EAAOnD,EAAWx2C,KAAKw2C,SAAUoD,GACvC,OAAOd,YAAU94C,UAAM,OAAQ,EAAQ,YACnC,MAAMpD,EAASC,OAAOS,MAAMq8C,EAAM59C,KAC5BA,QAAYiE,KAAK+5C,WAAWn9C,EAAQ,EAAG+8C,EAAM59C,IAAKy6C,GACxD,IAAKoD,GAAa79C,EAAM49C,EAAM59C,IAC1B,MAAM,IAAIoD,MAAMo6C,SAAOV,WAC3B,OAAOc,EAAMpxC,IAAI3L,EAAQ,EACrC,EACK,CACDo9C,UAAAA,CAAWL,GACP,OAAOb,YAAU94C,UAAM,OAAQ,EAAQ,YAEnC,UADkBA,KAAK65C,WAAW75C,KAAKy5C,UAAW,EAAGE,EAAM59C,IAAK,OACtD49C,EAAM59C,IACZ,MAAM,IAAIoD,MAAMo6C,SAAOV,WAC3B,OAAOc,EAAMpxC,IAAIvI,KAAKy5C,UAAW,EAC7C,EACK,CACDQ,UAAAA,CAAWN,GACP,OAAOb,YAAU94C,UAAM,OAAQ,EAAQ,YAEnC,UADkBA,KAAK+5C,WAAW/5C,KAAKy5C,UAAW,EAAGE,EAAM59C,MACjD49C,EAAM59C,IACZ,MAAM,IAAIoD,MAAMo6C,SAAOV,WAC3B,OAAOc,EAAMpxC,IAAIvI,KAAKy5C,UAAW,EAC7C,EACK,CACDS,KAAAA,GACI,OAAOpB,YAAU94C,UAAM,OAAQ,EAAQ,YAC/C,EAEK,EAELs5C,oBAAAE,kBAA4BA,ykLCvD5B,IAAIV,EAAa94C,gBAAQA,eAAK84C,WAAc,SAAUC,EAASC,EAAYC,EAAGC,GAC1E,OAAO,IAAKD,IAAMA,EAAIxhC,UAAU,SAAUiB,EAASD,GAC/C,SAAS0gC,EAAUvwC,GAAS,IAAMwwC,EAAKF,EAAU34C,KAAKqI,GAAU,CAAC,MAAO1J,GAAKuZ,EAAOvZ,GAAO,CAC3F,SAASm6C,EAASzwC,GAAS,IAAMwwC,EAAKF,EAAiB,MAAEtwC,GAAU,CAAC,MAAO1J,GAAKuZ,EAAOvZ,GAAO,CAC9F,SAASk6C,EAAKpgC,GAAUA,EAAOlH,KAAO4G,EAAQM,EAAOpQ,OAAS,IAAIqwC,EAAE,SAAUvgC,GAAWA,EAAQM,EAAOpQ,MAAS,GAAEgQ,KAAKugC,EAAWE,EAAY,CAC/ID,GAAMF,EAAYA,EAAU98C,MAAM28C,EAASC,GAAc,KAAKz4C,OACtE,IAEArC,OAAOoK,eAAcjM,EAAU,aAAc,CAAEuM,OAAO,IACtD,MAAMuxC,EAASx9C,aACf,MAAMy9C,EACFh5C,WAAAA,GACIpB,KAAK+X,QAAU,IAAIN,QAAQ,CAACiB,EAASD,KACjCzY,KAAKyY,OAASA,EACdzY,KAAK0Y,QAAUA,GAEtB,EAKLrc,EAAAg+C,YAAsB,gBA2HtBh+C,EAAAi+C,aA1HA,MACIl5C,WAAAA,CAAYP,GAQR,GAPAb,KAAKa,EAAIA,EACTb,KAAKq6C,aAAc,EAKnBr6C,KAAKu6C,UAAY,IACZ15C,EAAE0L,OAAS1L,EAAEgJ,KACd,MAAM,IAAI1K,MAAM,2CAEpBa,KAAKa,EAAEgJ,KAAK,MAAO,IAAM7J,KAAKyY,OAAO,IAAItZ,MAAM9C,EAAQg+C,eACvDr6C,KAAKa,EAAEgJ,KAAK,QAASpI,GAAOzB,KAAKyY,OAAOhX,IACxCzB,KAAKa,EAAEgJ,KAAK,QAAS,IAAM7J,KAAKyY,OAAO,IAAItZ,MAAM,kBACpD,CASDq7C,IAAAA,CAAK59C,EAAQ8C,EAAQzD,GACjB,OAAO68C,EAAU94C,UAAM,OAAQ,EAAQ,YACnC,MAAMy6C,QAAkBz6C,KAAKuM,KAAK3P,EAAQ8C,EAAQzD,GAElD,OADA+D,KAAKu6C,UAAUp6C,KAAKvD,EAAOiH,MAAMnE,EAAQA,EAAS+6C,IAC3CA,CACnB,EACK,CAQDluC,IAAAA,CAAK3P,EAAQ8C,EAAQzD,GACjB,OAAO68C,EAAU94C,UAAM,OAAQ,EAAQ,YACnC,GAAe,IAAX/D,EACA,OAAO,EAEX,GAA8B,IAA1B+D,KAAKu6C,UAAUt+C,QAAgB+D,KAAKq6C,YACpC,MAAM,IAAIl7C,MAAM9C,EAAQg+C,aAE5B,IAAIK,EAAYz+C,EACZw+C,EAAY,EAEhB,KAAOz6C,KAAKu6C,UAAUt+C,OAAS,GAAKy+C,EAAY,GAAG,CAC/C,MAAMC,EAAW36C,KAAKu6C,UAAU1+B,MAC1B++B,EAAUl1C,KAAKiV,IAAIggC,EAAS1+C,OAAQy+C,GAC1CC,EAASh7C,KAAK/C,EAAQ8C,EAAS+6C,EAAW,EAAGG,GAC7CH,GAAaG,EACbF,GAAaE,EACTA,EAAUD,EAAS1+C,QAEnB+D,KAAKu6C,UAAUp6C,KAAKw6C,EAAS92C,MAAM+2C,GAE1C,CAKD,OAHIF,EAAY,IAAM16C,KAAKq6C,cACvBI,UAAmBz6C,KAAKwM,MAAM5P,EAAQ8C,EAAS+6C,EAAWC,KAEvDD,CACnB,EACK,CAQDjuC,KAAAA,CAAM5P,EAAQ8C,EAAQzD,GAClB,OAAO68C,EAAU94C,UAAM,OAAQ,EAAQ,YACnCm6C,EAAOU,IAAI76C,KAAK86C,QAAS,8BACzB,MAAMjB,EAAa75C,KAAKa,EAAE0L,KAAKtQ,GAC/B,OAAI49C,GACAA,EAAWl6C,KAAK/C,EAAQ8C,GACjBm6C,EAAW59C,SAGlB+D,KAAK86C,QAAU,CACXl+C,SACA8C,SACAzD,SACA8+C,SAAU,IAAIX,GAElBp6C,KAAKa,EAAEgJ,KAAK,WAAY,KACpB7J,KAAKg7C,YAEFh7C,KAAK86C,QAAQC,SAAShjC,QAAQa,KAAK5X,IACtChB,KAAK86C,QAAU,KACR95C,IACRqY,MAAM5X,IAEL,MADAzB,KAAK86C,QAAU,KACTr5C,IAG1B,EACK,CACDu5C,OAAAA,GACI,MAAMnB,EAAa75C,KAAKa,EAAE0L,KAAKvM,KAAK86C,QAAQ7+C,QACxC49C,GACAA,EAAWl6C,KAAKK,KAAK86C,QAAQl+C,OAAQoD,KAAK86C,QAAQp7C,QAClDM,KAAK86C,QAAQC,SAASriC,QAAQmhC,EAAW59C,SAGzC+D,KAAKa,EAAEgJ,KAAK,WAAY,KACpB7J,KAAKg7C,WAGhB,CACDviC,MAAAA,CAAOhX,GACHzB,KAAKq6C,aAAc,EACfr6C,KAAK86C,UACL96C,KAAK86C,QAAQC,SAAStiC,OAAOhX,GAC7BzB,KAAK86C,QAAU,KAEtB,SC9IL,IAAIhC,YAAa94C,gBAAQA,eAAK84C,WAAc,SAAUC,EAASC,EAAYC,EAAGC,GAC1E,OAAO,IAAKD,IAAMA,EAAIxhC,UAAU,SAAUiB,EAASD,GAC/C,SAAS0gC,EAAUvwC,GAAS,IAAMwwC,EAAKF,EAAU34C,KAAKqI,GAAU,CAAC,MAAO1J,GAAKuZ,EAAOvZ,GAAO,CAC3F,SAASm6C,EAASzwC,GAAS,IAAMwwC,EAAKF,EAAiB,MAAEtwC,GAAU,CAAC,MAAO1J,GAAKuZ,EAAOvZ,GAAO,CAC9F,SAASk6C,EAAKpgC,GAAUA,EAAOlH,KAAO4G,EAAQM,EAAOpQ,OAAS,IAAIqwC,EAAE,SAAUvgC,GAAWA,EAAQM,EAAOpQ,MAAS,GAAEgQ,KAAKugC,EAAWE,EAAY,CAC/ID,GAAMF,EAAYA,EAAU98C,MAAM28C,EAASC,GAAc,KAAKz4C,OACtE,EACA,EACArC,OAAOoK,eAAe2yC,sBAAS,aAAc,CAAEryC,OAAO,IACtD,MAAM0wC,oBAAsB38C,oBACtB48C,SAASh6C,OACT27C,mBAAqBh3C,IACrBi3C,SAAS/2C,WACT8G,QAAQiwC,SAAO,+BACrB,MAAMC,4BAA4B9B,oBAAoBE,kBAClDp4C,WAAAA,CAAY1E,EAAQ2+C,GAChBC,QACAt7C,KAAKu7C,aAAe,IAAIL,mBAAmBZ,aAAa59C,GACxDsD,KAAKq7C,SAAWA,CACnB,CAQDxB,UAAAA,CAAWj9C,EAAQ8C,EAAS,EAAGzD,EAASW,EAAOX,OAAQu6C,GACnD,OAAOsC,YAAU94C,UAAM,OAAQ,EAAQ,YAGnC,GAAe,IAAX/D,EACA,OAAO,EAEX,GAAIu6C,EAAU,CACV,MAAMgF,EAAYhF,EAAWx2C,KAAKw2C,SAClC,GAAIgF,EAAY,EAEZ,aADMx7C,KAAKy7C,OAAOjF,EAAWx2C,KAAKw2C,UAC3Bx2C,KAAK65C,WAAWj9C,EAAQ8C,EAAQzD,GAEtC,GAAIu/C,EAAY,EACjB,MAAM,IAAIr8C,MAAM,iDAEvB,CACD,IAAIs7C,EACJ,IACIA,QAAkBz6C,KAAKu7C,aAAahvC,KAAK3P,EAAQ8C,EAAQzD,GACzD+D,KAAKw2C,UAAYiE,CACpB,CACD,MAAOh5C,GACH,MAAIA,EAAI2yC,UAAY8G,mBAAmBb,YAC7B,IAAIl7C,MAAMo6C,SAAOV,WAEjBp3C,CACb,CACD,GAAIg5C,EAAYx+C,EACZ,MAAM,IAAIkD,MAAMo6C,SAAOV,WAE3B,OAAO4B,CACnB,EACK,CAUDV,UAAAA,CAAWn9C,EAAQ8C,EAAS,EAAGzD,EAASW,EAAOX,OAAQu6C,EAAUoD,GAC7D,OAAOd,YAAU94C,UAAM,OAAQ,EAAQ,YAGnC,IAAIy6C,EACJ,GAAIjE,EAAU,CACV,MAAMgF,EAAYhF,EAAWx2C,KAAKw2C,SAClC,GAAIgF,EAAY,EAAG,CACf,MAAME,EAAa7+C,OAAOS,MAAMrB,EAASu/C,GAGzC,OAFAf,QAAkBz6C,KAAK+5C,WAAW2B,EAAY,EAAGF,EAAYv/C,OAAQ6B,EAAW87C,GAChF8B,EAAW/7C,KAAK/C,EAAQ8C,EAAQ87C,GACzBf,EAAYe,CACtB,CACI,GAAIA,EAAY,EACjB,MAAM,IAAIr8C,MAAM,iDAEvB,CACD,IACIs7C,QAAkBz6C,KAAKu7C,aAAaf,KAAK59C,EAAQ8C,EAAQzD,EAC5D,CACD,MAAOwF,GACH,MAAIA,EAAI2yC,UAAY8G,mBAAmBb,YAC7B,IAAIl7C,MAAMo6C,SAAOV,WAEjBp3C,CACb,CACD,IAAKm4C,GAAaa,EAAYx+C,EAC1B,MAAM,IAAIkD,MAAMo6C,SAAOV,WAE3B,OAAO4B,CACnB,EACK,CACDgB,MAAAA,CAAOx/C,GACH,OAAO68C,YAAU94C,UAAM,OAAQ,EAAQ,YACnCkL,QAAM,UAAUlL,KAAKw2C,cAAcx2C,KAAKw2C,SAAWv6C,EAAS,KAE5D,MAAM4B,EAAMhB,OAAOS,MAAMrB,GACzB,OAAO+D,KAAK65C,WAAWh8C,EACnC,EACK,EAELo9C,sBAAAG,oBAA8BA,6CC/G1BtC,YAAa94C,gBAAQA,eAAK84C,WAAc,SAAUC,EAASC,EAAYC,EAAGC,GAC1E,OAAO,IAAKD,IAAMA,EAAIxhC,UAAU,SAAUiB,EAASD,GAC/C,SAAS0gC,EAAUvwC,GAAS,IAAMwwC,EAAKF,EAAU34C,KAAKqI,GAAU,CAAC,MAAO1J,GAAKuZ,EAAOvZ,GAAO,CAC3F,SAASm6C,EAASzwC,GAAS,IAAMwwC,EAAKF,EAAiB,MAAEtwC,GAAU,CAAC,MAAO1J,GAAKuZ,EAAOvZ,GAAO,CAC9F,SAASk6C,EAAKpgC,GAAUA,EAAOlH,KAAO4G,EAAQM,EAAOpQ,OAAS,IAAIqwC,EAAE,SAAUvgC,GAAWA,EAAQM,EAAOpQ,MAAS,GAAEgQ,KAAKugC,EAAWE,EAAY,CAC/ID,GAAMF,EAAYA,EAAU98C,MAAM28C,EAASC,GAAc,KAAKz4C,OACtE,EACA,EACArC,OAAOoK,eAAeqzC,kBAAS,aAAc,CAAE/yC,OAAO,IACtD,MAAM2wC,SAAS58C,OACf,MAAMi/C,gBACFx6C,WAAAA,CAAYxE,GACRoD,KAAKpD,OAASA,EACdoD,KAAKw2C,SAAW,EAChBx2C,KAAKq7C,SAAWz+C,EAAOX,MAC1B,CASD49C,UAAAA,CAAWj9C,EAAQ8C,EAAQzD,EAAQu6C,GAC/B,OAAOsC,YAAU94C,UAAM,OAAQ,EAAQ,YAEnC,OADAA,KAAKw2C,SAAWA,GAAYx2C,KAAKw2C,SAC1Bx2C,KAAK+5C,WAAWn9C,EAAQ8C,EAAQzD,EAAQ+D,KAAKw2C,UAAU59B,KAAK6hC,IAC/Dz6C,KAAKw2C,UAAYiE,EACVA,GAEvB,EACK,CAUDV,UAAAA,CAAWn9C,EAAQ8C,EAAQzD,EAAQu6C,EAAUqF,GAAY,GACrD,OAAO/C,YAAU94C,UAAM,OAAQ,EAAQ,YACnCw2C,EAAWA,GAAYx2C,KAAKw2C,SACvBv6C,IACDA,EAASW,EAAOX,QAEpB,MAAM6/C,EAAap2C,KAAKiV,IAAI3a,KAAKpD,OAAOX,OAASu6C,EAAUv6C,GAC3D,IAAK4/C,GAAaC,EAAa7/C,EAC3B,MAAM,IAAIkD,MAAMo6C,SAAOV,WAIvB,OADA74C,KAAKpD,OAAO+C,KAAK/C,EAAQ8C,EAAQ82C,EAAUA,EAAWsF,GAC/CA,CAEvB,EACK,CACDpC,SAAAA,CAAUC,EAAOnD,GACb,OAAOsC,YAAU94C,UAAM,OAAQ,EAAQ,YACnCA,KAAKw2C,SAAWA,GAAYx2C,KAAKw2C,SACjC,IACI,MAAMuF,EAAK/7C,KAAK85C,UAAUH,EAAO35C,KAAKw2C,UAEtC,OADAx2C,KAAKw2C,UAAYmD,EAAM59C,IAChBggD,CACV,CACD,MAAOt6C,GAEH,MADAzB,KAAKw2C,UAAYx2C,KAAKpD,OAAOX,OAASu6C,EAChC/0C,CACT,CACb,EACK,CACDq4C,SAAAA,CAAUH,EAAOnD,EAAWx2C,KAAKw2C,UAC7B,OAAOsC,YAAU94C,UAAM,OAAQ,EAAQ,YACnC,GAAIA,KAAKpD,OAAOX,OAASu6C,EAAWmD,EAAM59C,IACtC,MAAM,IAAIoD,MAAMo6C,SAAOV,WAE3B,OAAOc,EAAMpxC,IAAIvI,KAAKpD,OAAQ45C,EAC1C,EACK,CACDwD,UAAAA,CAAWL,GACP,OAAOb,YAAU94C,UAAM,OAAQ,EAAQ,YACnC,OAAOA,KAAK05C,UAAUC,EAClC,EACK,CACDM,UAAAA,CAAWN,GACP,OAAOb,YAAU94C,UAAM,OAAQ,EAAQ,YACnC,OAAOA,KAAK85C,UAAUH,EAClC,EACK,CAID8B,MAAAA,CAAOx/C,GACH,OAAO68C,YAAU94C,UAAM,OAAQ,EAAQ,YACnC,MAAMg8C,EAAet2C,KAAKiV,IAAI3a,KAAKpD,OAAOX,OAAS+D,KAAKw2C,SAAUv6C,GAElE,OADA+D,KAAKw2C,UAAYwF,EACVA,CACnB,EACK,CACD9B,KAAAA,GACI,OAAOpB,YAAU94C,UAAM,OAAQ,EAAQ,YAC/C,EAEK,EAEL27C,kBAAAC,gBAA0BA,gBC1G1B19C,OAAOoK,eAAe2zC,KAAS,aAAc,CAAErzC,OAAO,IACtD,MAAMqyC,sBAAwBt+C,sBACxBg/C,kBAAoBp8C,kBAQ1B,SAAS28C,WAAWx/C,EAAQgB,GACxB,OAAO,IAAIu9C,sBAAsBG,oBAAoB1+C,EAAQgB,EACjE,CAOA,SAASy+C,WAAWv/C,GAChB,OAAO,IAAI++C,kBAAkBC,gBAAgBh/C,EACjD,CARkBq/C,KAAAC,WAAGA,WASrBD,KAAAE,WAAqBA,gECrBrB/9C,cAAwBoU,GAAU,IAAIA,GAAQ+hC,IAAI6H,GAAaA,EAAU9nC,WAAW,KAEpF,MAAM+nC,yBAA2BA,CAAC9pC,EAAO6f,EAAOxoB,IACxC6Q,OAAOC,gBAAgBnI,EAAM1O,MAAMuuB,EAAOxoB,IAGlDxL,KAAAk+C,aAAuB,CAAC1/C,EAAQ8C,EAAS,KACxC,IAAIsB,EAAIpE,EAAO8C,GACX68C,EAAM,EACNzgD,EAAI,EAER,OAASA,EAAI,GACZygD,GAAO,IACPv7C,GAAKpE,EAAO8C,EAAS5D,GAAKygD,EAG3B,OAAOv7C,GAGwB5C,KAAAo+C,yBAAG5/C,IAClC,GAAIA,EAAOX,OAAS,IACnB,OAAO,EAKR,IAAIwgD,EAAM,IACNC,EAAe,EAEnB,IAAK,IAAI5gD,EAAI,EAAGA,EAAI,IAAKA,IAAK,CAC7B,MAAM6gD,EAAO//C,EAAOd,GACpB2gD,GAAOE,EACPD,GARoB,IAQJC,CAChB,CAID,IAAK,IAAI7gD,EAAI,IAAKA,EAAI,IAAKA,IAAK,CAC/B,MAAM6gD,EAAO//C,EAAOd,GACpB2gD,GAAOE,EACPD,GAhBoB,IAgBJC,CAChB,CAED,MAAMC,EAAUjuC,SAAS0tC,yBAAyBz/C,EAAQ,IAAK,KAAM,GAGrE,OAECggD,IAAYH,GAGZG,IAAaH,GAAOC,GAAgB,IAItCt+C,KAAAi+C,yBAAmCA,0CCxDnC,MAAMQ,cAACA,cAAaP,aAAEA,aAAYE,yBAAEA,yBAAwBH,yBAAEA,0BAA4B1/C,KAEpFmgD,eAAiBD,cAAc,wBAC/BE,iBAAmBF,cAAc,uBACjCG,SAAWH,cAAc,eAEzBI,SAAWtpC,IAChB,KAAMA,aAAiBhP,YAAcgP,aAAiBjB,aAAe7V,OAAOyC,SAASqU,IACpF,MAAM,IAAI/X,UAAU,+GAA+G+X,OAGpI,MAAM/W,EAAS+W,aAAiBhP,WAAagP,EAAQ,IAAIhP,WAAWgP,GAEpE,KAAM/W,GAAUA,EAAOX,OAAS,GAC/B,OAGD,MAAMmjC,EAAQA,CAACvT,EAAQ7mB,KACtBA,EAAU9G,OAAOonB,OAAO,CACvB5lB,OAAQ,GACNsF,GAEH,IAAK,IAAIlJ,EAAI,EAAGA,EAAI+vB,EAAO5vB,OAAQH,IAElC,GAAIkJ,EAAQ82B,MAEX,GAAIjQ,EAAO/vB,MAAQkJ,EAAQ82B,KAAKhgC,GAAKc,EAAOd,EAAIkJ,EAAQtF,SACvD,OAAO,OAEF,GAAImsB,EAAO/vB,KAAOc,EAAOd,EAAIkJ,EAAQtF,QAC3C,OAAO,EAIT,OAAO,GAGFw9C,EAAcA,CAACrxB,EAAQ7mB,IAAYo6B,EAAMyd,cAAchxB,GAAS7mB,GAEtE,GAAIo6B,EAAM,CAAC,IAAM,IAAM,MACtB,MAAO,CACN+d,IAAK,MACLC,KAAM,cAIR,GAAIhe,EAAM,CAAC,IAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,KACpD,MAAO,CACN+d,IAAK,MACLC,KAAM,aAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,KACtB,MAAO,CACN+d,IAAK,MACLC,KAAM,aAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,IAAO,CAAC1/B,OAAQ,IAC5C,MAAO,CACNy9C,IAAK,OACLC,KAAM,cAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,KAC5B,MAAO,CACN+d,IAAK,OACLC,KAAM,cAKR,IACEhe,EAAM,CAAC,GAAM,GAAM,GAAM,KAASA,EAAM,CAAC,GAAM,GAAM,EAAK,OAC3DA,EAAM,CAAC,GAAM,IAAO,CAAC1/B,OAAQ,IAE7B,MAAO,CACNy9C,IAAK,MACLC,KAAM,qBAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAAM,KAC1D,MAAO,CACN+d,IAAK,MACLC,KAAM,uBAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,EAAM,GAAM,IAAM,IAAM,IACpD,MAAO,CACN+d,IAAK,MACLC,KAAM,oBAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,KAC1D,MAAO,CACN+d,IAAK,MACLC,KAAM,qBAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,EAAM,GAAM,GAAM,IAAM,EAAM,KAC1D,MAAO,CACN+d,IAAK,MACLC,KAAM,qBAIR,GACChe,EAAM,CAAC,GAAM,GAAM,GAAM,KACzBA,EAAM,CAAC,GAAM,GAAM,EAAK,KAExB,MAAO,CACN+d,IAAK,MACLC,KAAM,cAIR,GAAIhe,EAAM,CAAC,GAAM,KAChB,MAAO,CACN+d,IAAK,MACLC,KAAM,aAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,MACtB,MAAO,CACN+d,IAAK,MACLC,KAAM,sBAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,KAC5B,MAAO,CACN+d,IAAK,MACLC,KAAM,6BAMR,GAAIhe,EAAM,CAAC,GAAM,GAAM,EAAK,IAAO,CAClC,GACCA,EAAM,CAAC,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,IAAM,KAAO,CAAC1/B,OAAQ,KAEzL,MAAO,CACNy9C,IAAK,OACLC,KAAM,wBAKR,GAAIhe,EAAM0d,eAAgB,CAACp9C,OAAQ,KAClC,MAAO,CACNy9C,IAAK,MACLC,KAAM,2BAIR,GAAIF,EAAY,kDAAmD,CAACx9C,OAAQ,KAC3E,MAAO,CACNy9C,IAAK,MACLC,KAAM,2CAIR,GAAIF,EAAY,yDAA0D,CAACx9C,OAAQ,KAClF,MAAO,CACNy9C,IAAK,MACLC,KAAM,kDAIR,GAAIF,EAAY,0DAA2D,CAACx9C,OAAQ,KACnF,MAAO,CACNy9C,IAAK,MACLC,KAAM,mDAUR,MAAMC,EAAyBA,CAAC5gD,EAAK6gD,EAAU,IAAM7gD,EAAI8gD,UAAU,CAACC,EAAI1hD,EAAGW,IAAQX,GAAKwhD,GAAsB,KAAX7gD,EAAIX,IAA8B,KAAfW,EAAIX,EAAI,IAA8B,IAAfW,EAAIX,EAAI,IAA6B,IAAfW,EAAIX,EAAI,IAE3K,IAEIiP,EAFA0yC,EAAiB,EACjBC,GAAY,EAGhB,EAAG,CACF,MAAMh+C,EAAS+9C,EAAiB,GAyBhC,GAvBKC,IACJA,EAAate,EAAM2d,iBAAkB,CAACr9C,YAAY0/B,EAAM4d,SAAU,CAACt9C,YAG/DqL,IACAmyC,EAAY,QAAS,CAACx9C,WACzBqL,EAAO,CACNoyC,IAAK,OACLC,KAAM,2EAEGF,EAAY,OAAQ,CAACx9C,WAC/BqL,EAAO,CACNoyC,IAAK,OACLC,KAAM,6EAEGF,EAAY,MAAO,CAACx9C,aAC9BqL,EAAO,CACNoyC,IAAK,OACLC,KAAM,uEAKLM,GAAa3yC,EAChB,OAAOA,EAGR0yC,EAAiBJ,EAAuBzgD,EAAQ8C,SACxC+9C,GAAkB,GAG3B,GAAI1yC,EACH,OAAOA,CAER,CAED,GACCq0B,EAAM,CAAC,GAAM,OACE,IAAdxiC,EAAO,IAA4B,IAAdA,EAAO,IAA4B,IAAdA,EAAO,MACnC,IAAdA,EAAO,IAA4B,IAAdA,EAAO,IAA4B,IAAdA,EAAO,IAElD,MAAO,CACNugD,IAAK,MACLC,KAAM,mBAIR,GACChe,EAAM,CAAC,GAAM,GAAM,GAAM,GAAM,GAAM,IAAO,CAAC1/B,OAAQ,IAAKo8B,KAAM,CAAC,IAAM,IAAM,IAAM,IAAM,IAAM,QAC/F0gB,yBAAyB5/C,GAEzB,MAAO,CACNugD,IAAK,MACLC,KAAM,qBAIR,GACChe,EAAM,CAAC,GAAM,GAAM,IAAM,GAAM,GAAM,MACtB,IAAdxiC,EAAO,IAA4B,IAAdA,EAAO,IAE7B,MAAO,CACNugD,IAAK,MACLC,KAAM,gCAIR,GAAIhe,EAAM,CAAC,GAAM,IAAM,IACtB,MAAO,CACN+d,IAAK,KACLC,KAAM,oBAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,MACtB,MAAO,CACN+d,IAAK,MACLC,KAAM,uBAIR,GAAIhe,EAAM,CAAC,GAAM,IAAM,IAAM,IAAM,GAAM,KACxC,MAAO,CACN+d,IAAK,KACLC,KAAM,+BAIR,GAAIhe,EAAM,CAAC,IAAM,IAChB,MAAO,CACN+d,IAAK,MACLC,KAAM,iCAKR,GACChe,EAAM,CAAC,IAAM,IAAM,IAAM,KAAO,CAAC1/B,OAAQ,KACzC0/B,EAAM,CAAC,IAAM,IAAM,GAAM,KAAO,CAAC1/B,OAAQ,KACzC0/B,EAAM,CAAC,IAAM,IAAM,IAAM,KAAO,CAAC1/B,OAAQ,KACzC0/B,EAAM,CAAC,IAAM,IAAM,IAAM,KAAO,CAAC1/B,OAAQ,IAEzC,MAAO,CACNy9C,IAAK,MACLC,KAAM,mBAQR,GACChe,EAAM,CAAC,IAAM,IAAM,IAAM,KAAO,CAAC1/B,OAAQ,KAC5B,GAAZ9C,EAAO,IAAoC,GAAZA,EAAO,IAAqC,GAAbA,EAAO,KAAsC,GAAbA,EAAO,IACrG,CAGD,MAAM+gD,EAAatB,yBAAyBz/C,EAAQ,EAAG,IACvD,OAAQ+gD,GACP,IAAK,OACJ,MAAO,CAACR,IAAK,OAAQC,KAAM,cAC5B,IAAK,OACJ,MAAO,CAACD,IAAK,OAAQC,KAAM,uBAC5B,IAAK,OAAQ,IAAK,OACjB,MAAO,CAACD,IAAK,OAAQC,KAAM,cAC5B,IAAK,OAAQ,IAAK,OACjB,MAAO,CAACD,IAAK,OAAQC,KAAM,uBAC5B,IAAK,OACJ,MAAO,CAACD,IAAK,MAAOC,KAAM,mBAC3B,IAAK,OAAQ,IAAK,OAAQ,IAAK,OAC9B,MAAO,CAACD,IAAK,MAAOC,KAAM,eAC3B,IAAK,OACJ,MAAO,CAACD,IAAK,MAAOC,KAAM,aAC3B,IAAK,OACJ,MAAO,CAACD,IAAK,MAAOC,KAAM,aAC3B,IAAK,OACJ,MAAO,CAACD,IAAK,MAAOC,KAAM,eAC3B,IAAK,OACJ,MAAO,CAACD,IAAK,MAAOC,KAAM,aAC3B,IAAK,OACJ,MAAO,CAACD,IAAK,MAAOC,KAAM,aAC3B,IAAK,OACJ,MAAO,CAACD,IAAK,MAAOC,KAAM,aAC3B,IAAK,OACJ,MAAO,CAACD,IAAK,MAAOC,KAAM,aAC3B,QACC,OAAIO,EAAWpH,WAAW,MACrBoH,EAAWpH,WAAW,OAClB,CAAC4G,IAAK,MAAOC,KAAM,eAGpB,CAACD,IAAK,MAAOC,KAAM,cAGpB,CAACD,IAAK,MAAOC,KAAM,aAE5B,CAED,GAAIhe,EAAM,CAAC,GAAM,GAAM,IAAM,MAC5B,MAAO,CACN+d,IAAK,MACLC,KAAM,cAKR,GAAIhe,EAAM,CAAC,GAAM,GAAM,IAAM,MAAQ,CACpC,MAAMwe,EAAShhD,EAAOge,SAAS,EAAG,MAC5BijC,EAAQD,EAAOL,UAAU,CAACC,EAAI1hD,EAAGW,IAAmB,KAAXA,EAAIX,IAA8B,MAAfW,EAAIX,EAAI,IAE1E,IAAe,IAAX+hD,EAAc,CACjB,MAAMC,EAAaD,EAAQ,EACrBE,EAAchzC,GAAQ,IAAIA,GAAMizC,MAAM,CAAC/vC,EAAGnS,IAAM8hD,EAAOE,EAAahiD,KAAOmS,EAAEqG,WAAW,IAE9F,GAAIypC,EAAY,YACf,MAAO,CACNZ,IAAK,MACLC,KAAM,oBAIR,GAAIW,EAAY,QACf,MAAO,CACNZ,IAAK,OACLC,KAAM,aAGR,CACD,CAGD,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,KAAQ,CACpC,GAAIA,EAAM,CAAC,GAAM,GAAM,IAAO,CAAC1/B,OAAQ,IACtC,MAAO,CACNy9C,IAAK,MACLC,KAAM,iBAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,IAAO,CAAC1/B,OAAQ,IAC5C,MAAO,CACNy9C,IAAK,MACLC,KAAM,kBAKR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,IAAO,CAAC1/B,OAAQ,IAC5C,MAAO,CACNy9C,IAAK,MACLC,KAAM,cAGR,CAGD,GAAIhe,EAAM,CAAC,GAAM,GAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,MAAQ,CAGxE,IAAI1/B,EAAS,GACb,EAAG,CACF,MAAMu+C,EAAa3B,aAAa1/C,EAAQ8C,EAAS,IACjD,GAAI0/B,EAAM,CAAC,IAAM,EAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAM,IAAM,EAAM,IAAM,GAAM,GAAM,GAAM,KAAO,CAAC1/B,WAAU,CAEtH,GAAI0/B,EAAM,CAAC,GAAM,IAAM,IAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,EAAM,IAAM,GAAM,GAAM,GAAM,IAAO,CAAC1/B,OAAQA,EAAS,KAE7H,MAAO,CACNy9C,IAAK,MACLC,KAAM,kBAIR,GAAIhe,EAAM,CAAC,IAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,GAAM,IAAM,IAAM,EAAM,IAAM,GAAM,GAAM,GAAM,IAAO,CAAC1/B,OAAQA,EAAS,KAE7H,MAAO,CACNy9C,IAAK,MACLC,KAAM,kBAIR,KACA,CAED19C,GAAUu+C,CACV,OAAQv+C,EAAS,IAAM9C,EAAOX,QAG/B,MAAO,CACNkhD,IAAK,MACLC,KAAM,yBAEP,CAED,GACChe,EAAM,CAAC,EAAK,EAAK,EAAK,OACtBA,EAAM,CAAC,EAAK,EAAK,EAAK,MAEtB,MAAO,CACN+d,IAAK,MACLC,KAAM,cAKR,IAAK,IAAIhrB,EAAQ,EAAGA,EAAQ,GAAKA,EAASx1B,EAAOX,OAAS,GAAKm2B,IAAS,CACvE,GACCgN,EAAM,CAAC,GAAM,GAAM,IAAO,CAAC1/B,OAAQ0yB,KACnCgN,EAAM,CAAC,IAAM,KAAO,CAAC1/B,OAAQ0yB,EAAO0J,KAAM,CAAC,IAAM,OAEjD,MAAO,CACNqhB,IAAK,MACLC,KAAM,cAIR,GACChe,EAAM,CAAC,IAAM,KAAO,CAAC1/B,OAAQ0yB,EAAO0J,KAAM,CAAC,IAAM,OAEjD,MAAO,CACNqhB,IAAK,MACLC,KAAM,cAIR,GACChe,EAAM,CAAC,IAAM,KAAO,CAAC1/B,OAAQ0yB,EAAO0J,KAAM,CAAC,IAAM,OAEjD,MAAO,CACNqhB,IAAK,MACLC,KAAM,cAIR,GACChe,EAAM,CAAC,IAAM,KAAO,CAAC1/B,OAAQ0yB,EAAO0J,KAAM,CAAC,IAAM,OAEjD,MAAO,CACNqhB,IAAK,MACLC,KAAM,aAGR,CAGD,GAAIhe,EAAM,CAAC,GAAM,IAAM,IAAM,IAAM,GAAM,IAAM,GAAM,KAAO,CAAC1/B,OAAQ,KACpE,MAAO,CACNy9C,IAAK,OACLC,KAAM,cAKR,GAAIhe,EAAM,CAAC,GAAM,IAAM,IAAM,KAI5B,OAAIA,EAAM,CAAC,IAAM,IAAM,IAAM,IAAM,IAAM,IAAM,IAAO,CAAC1/B,OAAQ,KACvD,CACNy9C,IAAK,MACLC,KAAM,aAKJhe,EAAM,CAAC,EAAM,IAAM,IAAM,IAAM,IAAM,IAAM,GAAO,CAAC1/B,OAAQ,KACvD,CACNy9C,IAAK,MACLC,KAAM,aAKJhe,EAAM,CAAC,IAAM,GAAM,GAAM,GAAM,IAAO,CAAC1/B,OAAQ,KAC3C,CACNy9C,IAAK,MACLC,KAAM,aAKJhe,EAAM,CAAC,GAAM,IAAM,IAAM,IAAM,IAAM,GAAM,IAAO,CAAC1/B,OAAQ,KACvD,CACNy9C,IAAK,MACLC,KAAM,aAKJhe,EAAM,CAAC,EAAM,IAAM,IAAM,IAAM,GAAM,IAAM,KAAO,CAAC1/B,OAAQ,KACvD,CACNy9C,IAAK,MACLC,KAAM,aAKD,CACND,IAAK,MACLC,KAAM,mBAIR,GAAIhe,EAAM,CAAC,IAAM,GAAM,GAAM,KAC5B,MAAO,CACN+d,IAAK,OACLC,KAAM,gBAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,KAC5B,MAAO,CACN+d,IAAK,MACLC,KAAM,aAIR,GAAIhe,EAAM,CAAC,IAAM,IAAM,IAAM,MAC5B,MAAO,CACN+d,IAAK,KACLC,KAAM,iBAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,GAAM,GAAM,KACxC,MAAO,CACN+d,IAAK,MACLC,KAAM,aAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,KAC5B,MAAO,CACN+d,IAAK,MACLC,KAAM,mBAIR,GAAIhe,EAAM,CAAC,GAAM,KAChB,MAAO,CACN+d,IAAK,MACLC,KAAM,4BAIR,IACgB,KAAdxgD,EAAO,IAA6B,KAAdA,EAAO,KAC9BwiC,EAAM,CAAC,GAAM,IAAO,CAAC1/B,OAAQ,IAE7B,MAAO,CACNy9C,IAAK,MACLC,KAAM,iCAIR,GAAIhe,EAAM,CAAC,IAAM,GAAM,IAAM,IAAM,MAClC,MAAO,CACN+d,IAAK,MACLC,KAAM,mBAIR,GAAIhe,EAAM,CAAC,EAAM,GAAM,IAAM,MAC5B,MAAO,CACN+d,IAAK,OACLC,KAAM,oBAIR,GACChe,EAAM,CAAC,IAAM,GAAM,GAAM,OAExBA,EAAM,CAAC,EAAM,EAAM,EAAM,GAAO,CAAC1/B,OAAQ,KACzC0/B,EAAM,CAAC,GAAM,GAAM,GAAM,IAAO,CAAC1/B,OAAQ,KAG1C,MAAO,CACNy9C,IAAK,OACLC,KAAM,aAIR,GACChe,EAAM,CAAC,IAAM,GAAM,GAAM,OAExBA,EAAM,CAAC,EAAM,EAAM,EAAM,GAAO,CAAC1/B,OAAQ,KACzC0/B,EAAM,CAAC,GAAM,GAAM,GAAM,IAAO,CAAC1/B,OAAQ,KAG1C,MAAO,CACNy9C,IAAK,QACLC,KAAM,cAIR,GACChe,EAAM,CAAC,GAAM,IAAO,CAAC1/B,OAAQ,OAE5B0/B,EAAM,CAAC,EAAM,EAAM,GAAO,CAAC1/B,OAAQ,KACnC0/B,EAAM,CAAC,EAAM,EAAM,GAAO,CAAC1/B,OAAQ,KACnC0/B,EAAM,CAAC,EAAM,EAAM,GAAO,CAAC1/B,OAAQ,KAGpC,MAAO,CACNy9C,IAAK,MACLC,KAAM,iCAIR,GAAIhe,EAAM,CAAC,EAAM,EAAM,EAAM,EAAM,IAClC,MAAO,CACN+d,IAAK,MACLC,KAAM,YAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,GAAM,IAClC,MAAO,CACN+d,IAAK,MACLC,KAAM,YAIR,GAAIhe,EAAM,CAAC,EAAM,EAAM,EAAM,IAC5B,MAAO,CACN+d,IAAK,MACLC,KAAM,gBAIR,GAAIhe,EAAM,CAAC,EAAM,EAAM,EAAM,IAC5B,MAAO,CACN+d,IAAK,MACLC,KAAM,gBAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,IAC5B,MAAO,CACN+d,IAAK,MACLC,KAAM,eAIR,GAAIhe,EAAM,CAAC,GAAM,KAChB,MAAO,CACN+d,IAAK,KACLC,KAAM,0BAIR,GAAIhe,EAAM,CAAC,IAAM,GAAM,IAAM,GAAM,GAAM,IACxC,MAAO,CACN+d,IAAK,KACLC,KAAM,oBAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,MAC5B,MAAO,CACN+d,IAAK,SACLC,KAAM,yBAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,KAC5B,MAAO,CACN+d,IAAK,MACLC,KAAM,kCAIR,GAAIhe,EAAM,CAAC,GAAM,IAAM,GAAM,KAC5B,MAAO,CACN+d,IAAK,MACLC,KAAM,yCAIR,GACChe,EAAM,CAAC,GAAM,GAAM,GAAM,MACzBA,EAAM,CAAC,GAAM,GAAM,GAAM,KAEzB,MAAO,CACN+d,IAAK,MACLC,KAAM,qCAKR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,GAAM,IAAM,GAAM,GAAM,IAAM,IAAM,GAAM,IAAM,MAClI,MAAO,CACN+d,IAAK,MACLC,KAAM,qBAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,IAAM,GAAM,IAAM,KAC9C,MAAO,CACN+d,IAAK,KACLC,KAAM,8BAIR,GAAIhe,EAAM,CAAC,IAAM,IAAM,IAAM,MAC5B,MAAO,CACN+d,IAAK,MACLC,KAAM,qBAIR,GACChe,EAAM,CAAC,GAAM,OACbA,EAAM,CAAC,GAAM,MAEb,MAAO,CACN+d,IAAK,IACLC,KAAM,0BAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,KAC5B,MAAO,CACN+d,IAAK,KACLC,KAAM,sBAIR,GAAIhe,EAAM,CAAC,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,MACpD,MAAO,CACN+d,IAAK,MACLC,KAAM,qBAIR,GAAIhe,EAAM,CAAC,EAAM,GAAM,GAAM,GAAM,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,IACxF,MAAO,CACN+d,IAAK,MACLC,KAAM,mBAIR,GAAIhe,EAAM,CAAC,IAAO,CAAC1/B,OAAQ,MAAQ0/B,EAAM,CAAC,IAAO,CAAC1/B,OAAQ,OAAS0/B,EAAM,CAAC,IAAO,CAAC1/B,OAAQ,OACzF,MAAO,CACNy9C,IAAK,MACLC,KAAM,cAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,KAC9C,MAAO,CACN+d,IAAK,QACLC,KAAM,yBAIR,GAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,MAC5B,MAAO,CACN+d,IAAK,MACLC,KAAM,aAIR,GAAIhe,EAAM,CAAC,EAAM,EAAM,EAAM,GAAM,IAAM,GAAM,GAAM,GAAM,GAAM,GAAM,IAAM,KAAQ,CAGpF,GAAIA,EAAM,CAAC,IAAM,IAAM,GAAM,IAAO,CAAC1/B,OAAQ,KAC5C,MAAO,CACNy9C,IAAK,MACLC,KAAM,aAIR,GAAIhe,EAAM,CAAC,IAAM,IAAM,IAAM,IAAO,CAAC1/B,OAAQ,KAC5C,MAAO,CACNy9C,IAAK,MACLC,KAAM,aAIR,GAAIhe,EAAM,CAAC,IAAM,IAAM,IAAM,IAAO,CAAC1/B,OAAQ,KAC5C,MAAO,CACNy9C,IAAK,MACLC,KAAM,aAIR,GAAIhe,EAAM,CAAC,IAAM,IAAM,IAAM,IAAO,CAAC1/B,OAAQ,KAC5C,MAAO,CACNy9C,IAAK,MACLC,KAAM,YAGR,CAED,OAAIhe,EAAM,CAAC,GAAM,GAAM,GAAM,KACrB,CACN+d,IAAK,MACLC,KAAM,cAIJF,EAAY,UACR,CACNC,IAAK,MACLC,KAAM,mBAIJhe,EAAM,CAAC,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,IAAO,CAAC1/B,OAAQ,KAC7D,CACNy9C,IAAK,OACLC,KAAM,kCAIJhe,EAAM,CAAC,IAAM,GAAM,GAAM,GAAM,GAAM,GAAM,GAAM,IAAM,GAAM,GAAM,GAAM,KACrE,CACN+d,IAAK,MACLC,KAAM,aAIJhe,EAAM,CAAC,GAAM,GAAM,GAAM,IAAO,CAAC1/B,OAAQ,MACrC,CACNy9C,IAAK,MACLC,KAAM,qBAKJhe,EAAM,CAAC,GAAM,GAAM,MAQnBA,EAAM,CAAC,GAAM,GAAM,GAAM,KAPrB,CACN+d,IAAK,MACLC,KAAM,oBAYJhe,EAAM,CAAC,GAAM,GAAM,GAAM,GAAM,GAAM,KACjC,CACN+d,IAAK,MACLC,KAAM,iBAIJhe,EAAM,CAAC,IAAM,IAAM,GAAM,GAAM,EAAM,EAAM,EAAM,IAC7C,CACN+d,IAAK,MACLC,KAAM,qBAIJhe,EAAM,CAAC,IAAM,IAAM,IAAM,OAAUA,EAAM,CAAC,IAAM,IAAM,IAAM,MACxD,CACN+d,IAAK,OACLC,KAAM,gCAKJhe,EAAM,CAAC,GAAM,GAAM,GAAM,KACrB,CACN+d,IAAK,MACLC,KAAM,eAIJhe,EAAM,CAAC,GAAM,EAAM,EAAM,EAAM,EAAM,GAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,IAAM,EAAM,EAAM,EAAM,EAAM,EAAM,EAAM,KACrH,CACN+d,IAAK,MACLC,KAAM,6BAIJhe,EAAM,CAAC,GAAM,IAAM,IAAM,IAAM,EAAM,EAAM,EAAM,EAAM,IAAM,GAAM,IAAM,IAAM,EAAM,EAAM,EAAM,IAC7F,CACN+d,IAAK,QACLC,KAAM,6BAIJF,EAAY,uBACR,CACNC,IAAK,MACLC,KAAM,eAIJhe,EAAM,CAAC,GAAM,MACT,CACN+d,IAAK,MACLC,KAAM,+BAHR,GAQD3/C,OAAApB,QAAiB4gD,SAEjB/+C,OAAOoK,eAAe20C,SAAU,eAAgB,CAACr0C,MAAO,OAExDq0C,SAASvgD,OAASwhD,gBAAkB,IAAIzmC,QAAQ,CAACiB,QAASD,UAEzD,MAAM/b,OAASyhD,KAAK,UAALA,CAAgB,UAE/BD,eAAer0C,KAAK,WAAY,KAC/B,MAAMu0C,EAAO,IAAI1hD,OAAOwV,YAClBzK,EAAQy2C,eAAe3xC,KAAK9O,OAAOpB,QAAQgiD,eAAiBH,eAAe3xC,OACjF,IACC6xC,EAAKnB,SAAWA,SAASx1C,EACzB,CAAC,MAAO6R,GACRb,OAAOa,EACP,CAED4kC,eAAe19C,QAAQiH,GAEnB/K,OAAO4hD,SACV5lC,QAAQhc,OAAO4hD,SAASJ,eAAgBE,EAAM,SAE9C1lC,QAAQwlC,eAAep1C,KAAKs1C,0EC97B3BG,YAAc,yJACdC,WAAa,kCACbC,YAAc,sCAQdC,WAAa,uBAKbC,YAAc,WAkBdC,kBAAoB,0CACpBC,eAAiB,yCACjBC,WAAa,yFAiBjB,SAAS1L,OAAOjyC,GACd,IAAKA,GAAsB,iBAARA,EACjB,MAAM,IAAIvF,UAAU,4BAGtB,IAAImjD,EAAa59C,EAAI49C,WACjBC,EAAU79C,EAAI69C,QACdC,EAAS99C,EAAI89C,OACbl0C,EAAO5J,EAAI4J,KAEf,IAAKA,IAAS8zC,eAAerV,KAAKz+B,GAChC,MAAM,IAAInP,UAAU,gBAGtB,IAAKojD,IAAYJ,kBAAkBpV,KAAKwV,GACtC,MAAM,IAAIpjD,UAAU,mBAItB,IAAI4W,EAASzH,EAAO,IAAMi0C,EAG1B,GAAIC,EAAQ,CACV,IAAKJ,eAAerV,KAAKyV,GACvB,MAAM,IAAIrjD,UAAU,kBAGtB4W,GAAU,IAAMysC,CACjB,CAGD,GAAIF,GAAoC,iBAAfA,EAIvB,IAHA,IAAIG,EACAC,EAASjhD,OAAOgM,KAAK60C,GAAYK,OAE5BtjD,EAAI,EAAGA,EAAIqjD,EAAOljD,OAAQH,IAAK,CAGtC,GAFAojD,EAAQC,EAAOrjD,IAEV2iD,YAAYjV,KAAK0V,GACpB,MAAM,IAAItjD,UAAU,0BAGtB4W,GAAU,KAAO0sC,EAAQ,IAAMG,QAAQN,EAAWG,GACnD,CAGH,OAAO1sC,CACT,CAUA,SAAS0/B,MAAM1/B,GACb,IAAKA,EACH,MAAM,IAAI5W,UAAU,+BAQtB,GAJsB,iBAAX4W,IACTA,EAAS8sC,eAAe9sC,IAGJ,iBAAXA,EACT,MAAM,IAAI5W,UAAU,8CAGtB,IAKIqB,EACAy1B,EAGA9pB,EATA2H,EAAQiC,EAAOnX,QAAQ,KAOvB8F,EAAMo+C,WANY,IAAXhvC,EACPiC,EAAOmC,OAAO,EAAGpE,GACjBiC,GAKA2sC,EAAS,CAAA,EAKb,IAFAZ,YAAYiB,UAAYjvC,EAEjBmiB,EAAQ6rB,YAAYvM,KAAKx/B,IAAS,CACvC,GAAIkgB,EAAMniB,QAAUA,EAClB,MAAM,IAAI3U,UAAU,4BAGtB2U,GAASmiB,EAAM,GAAGz2B,OAClBgB,EAAMy1B,EAAM,GAAGhpB,cAGE,OAFjBd,EAAQ8pB,EAAM,IAEJ,KAER9pB,EAAQA,EACL+L,OAAO,EAAG/L,EAAM3M,OAAS,GACzB4Y,QAAQ6pC,WAAY,OAGzBS,EAAOliD,GAAO2L,CACf,CAED,IAAe,IAAX2H,GAAgBA,IAAUiC,EAAOvW,OACnC,MAAM,IAAIL,UAAU,4BAKtB,OAFAuF,EAAI49C,WAAaI,EAEVh+C,CACT,CAUA,SAASm+C,eAAen+C,GACtB,MAA6B,mBAAlBA,EAAIs+C,UAENt+C,EAAIs+C,UAAU,gBAGI,iBAAhBt+C,EAAIu+C,QAENv+C,EAAIu+C,SAAWv+C,EAAIu+C,QAAQ,qBAFpC,CAIF,CAUA,SAASL,QAAQ1oB,GACf,IAAIzoB,EAAMuM,OAAOkc,GAGjB,GAAI8nB,YAAYjV,KAAKt7B,GACnB,OAAOA,EAGT,GAAIA,EAAIjS,OAAS,IAAMuiD,WAAWhV,KAAKt7B,GACrC,MAAM,IAAItS,UAAU,2BAGtB,MAAO,IAAMsS,EAAI2G,QAAQ8pC,YAAa,QAAU,GAClD,CAUA,SAASY,UAAU/sC,GACjB,IAAIkgB,EAAQosB,WAAW9M,KAAKx/B,EAAO9I,eAEnC,IAAKgpB,EACH,MAAM,IAAI92B,UAAU,sBAGtB,IAEIqjD,EAFAl0C,EAAO2nB,EAAM,GACbssB,EAAUtsB,EAAM,GAIhBniB,EAAQyuC,EAAQ7V,YAAY,KAYhC,OAXe,IAAX54B,IACF0uC,EAASD,EAAQrqC,OAAOpE,EAAQ,GAChCyuC,EAAUA,EAAQrqC,OAAO,EAAGpE,IAGpB,CACRxF,KAAMA,EACNi0C,QAASA,EACTC,OAAQA,EAIZ,CAvMAU,WAAAvM,OAAiBA,OACjBuM,WAAAzN,MAAgBA,qrGCnEhB,MAAA0N,0CAEW,OACX,MAAA9jD,KAAAc,EACAA,EAAA6f,eAAA3gB,KACAoS,qFAcY,OAAAA,CACZ,CAEK,cAAA2xC,CAAAC,EAAAnlC,EAAA2E,GACD,OAAO3E,GAAAmlC,GAAAA,GAAAxgC,EAECygC,wBAAAA,CAAAC,GAAA,OAAAA,GAAA,MACHvlC,OAAAC,aAAAslC,IAGTA,GAAA,iCAEyBA,OAAA,OAAA,KAAAA,KAGPC,wBAAAA,CAAAC,GAEd,GAAAN,mBAAoBC,QAAAK,EAAiB,OAClC,OAAAA,EAEAC,MAAAA,EAAAP,mBAAAQ,YAAAF,EAAA,KAEH,GAAkB,OAAlBC,EACJ,MAAAhhD,MAAA,uBAlCS,OAAAghD,CACD,qBAEWC,YAAa,CAAA,KAAA,IAAA,KAAA,IAAA,KAAA,KAAA,KAAA,KAAA,IACxB,KAAA,IAAA,KAAA,IAAA,IAAc,QAAM,cAAQ,KAAA,KAAA,KAAA,UAAA,IAC/B,KAAA,IAAA,SAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,QAAA,IAAA,IAAA,IACD,IAAO,IAAA,IAAA,IAAA,IAAkB,IAAI,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IACjC,IAAY,IAAE,IAAI,IAAM,IAAE,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAC1B,IAAA,IAAA,QAAmB,IAAM,YAAc,IAAI,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IAAA,IApB3C,oCA+C0B,2TC1BLxjD,eAAAA,CAAAA,EAAAw1B,EAAAxoB,EAAAhM,SACZw0B,EACI,GAAA,UAAAx0B,EAAA,CACb,4BACgB,GAAA9B,GAAA8N,EAAA,OAAAA,EACI9N,GAAA,EACA,OAAAA,CAER,CACH,KAAA,IAAAc,EAAAd,IAAA,CACJ,GAAAA,GAAA8N,EACL,OAAAA,EAEmB9N,GACd,CACD,OAAOA,CAGE,CACbukD,oBAAAA,CAAmB3xC,GACP,MAAA4xC,EAAA5xC,EAAOrT,QAAW,MAClB,OAAQ,IAARilD,EAAa5xC,EAAGA,EAAAiG,OAAE,EAAA2rC,GAEtBC,gBAAAA,CAAO3jD,SACV+K,EAAA/K,EAAAX,gBACM4+C,KAAA,EAAAlzC,GAAA,8BACX,IAAY7L,IAAAA,EAAA,EAAMA,EAAA6L,EAAA7L,GAAA,EAAA,CAClB,MAAAgkD,EAAAljD,EAAAd,GAEYc,EAAAd,GAAAc,EAAWd,EAAA,GACdc,EAAAd,EAAA,GAAAgkD,CACT,QACYljD,EAEJ4jD,sBAAAA,CAAA5jD,GAAO,IAAA8C,EAAA,SACV,MAAA9C,EAAA,IAAA,MAAAA,EAAA,IACLA,EAAA6jD,KAAAF,UAAA3jD,GACA8C,EAAA,GAGA,MAAA9C,EAAA,IAAA,MAAAA,EAAA,kDAWA8jD,CAAA9jD,EAAAgB,GAMAA,GAFYhB,MAAAA,EAAAA,IAAAA,MAAAA,EAAAA,UAAAA,MAAA,MAAAA,EAAA,OAAAA,wBAEZgB,GAAA,UAAAA,SAAmB6iD,KAAAD,gBAAS5jD,GAEjB,GAAA,SAAAgB,EAEH,OAAMhB,EAAAN,SAAqB,QAGnC,GAAA,eAAAsB,EACA,OAAA+iD,qBAAAf,mBAAAprC,OAAA5X,GAEA,MAAAuC,MAAAvB,EAAA,8BACA,CAEA,iBAAAgjD,CAAA1yC,8DAcY2yC,2BAAAA,CAAUhjD,EAASijD,EAAAC,EAAAhlD,GAC/B,MACSilD,EAAAD,EAAA,MACDn4C,EAAA/K,EAFaijD,KAAKC,EAAA,IAGrBn4C,GAAA,KAAAo4C,QAAAC,EAAA,EAAAD,EACLE,EAAAnlD,EAAAklD,SACAC,EAAA,EACAt4C,IAAA,EAAAo4C,EAAAjlD,EAEAmlD,EAAA,IAEAt4C,IAAAs4C,6CAcIC,eAAAA,GAAgBL,EAAAC,GAChBN,OAAwB,IAAxBA,KAAMI,qBAAkBhjD,EAAAijD,EAAAC,EAAA,GAEvBK,YAAAA,CAAAlzC,GACD,MAAAzR,EAAM,GACR,IAAA,IAAAX,EAAA,EAAA6L,EAAAuG,EAAAjS,OAAAH,EAAA6L,EAAA7L,IAAA,8CArIaW,EAAA0D,KAAkB,IAAAujC,EAAAznC,OAAA,IAAAynC,EAAAA,EAC3B,CACA,OAAKjnC,EAAAmE,KAAA,IACX,EAEA6/C,KAAAY,aAAA,CAPA94C,IAAAA,CAAA1K,EAAAyjD,EAAAC;;ACCYC,KAAG,SAAU5kD,EAAQ8C,EAAQ+hD,EAAMC,EAAMC,GACnD,IAAIziD,EAAGmrB,EACHu3B,EAAiB,EAATD,EAAcD,EAAO,EAC7BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBE,GAAS,EACTjmD,EAAI2lD,EAAQE,EAAS,EAAK,EAC1B3iD,EAAIyiD,GAAQ,EAAI,EAChB5gD,EAAIjE,EAAO8C,EAAS5D,GAOxB,IALAA,GAAKkD,EAELE,EAAI2B,GAAM,IAAOkhD,GAAU,EAC3BlhD,KAAQkhD,EACRA,GAASH,EACFG,EAAQ,EAAG7iD,EAAS,IAAJA,EAAWtC,EAAO8C,EAAS5D,GAAIA,GAAKkD,EAAG+iD,GAAS,GAKvE,IAHA13B,EAAInrB,GAAM,IAAO6iD,GAAU,EAC3B7iD,KAAQ6iD,EACRA,GAASL,EACFK,EAAQ,EAAG13B,EAAS,IAAJA,EAAWztB,EAAO8C,EAAS5D,GAAIA,GAAKkD,EAAG+iD,GAAS,GAEvE,GAAU,IAAN7iD,EACFA,EAAI,EAAI4iD,MACH,IAAI5iD,IAAM2iD,EACf,OAAOx3B,EAAI23B,IAAsBC,KAAdphD,GAAK,EAAI,GAE5BwpB,GAAQ3kB,KAAKw8C,IAAI,EAAGR,GACpBxiD,GAAQ4iD,CACT,CACD,OAAQjhD,GAAK,EAAI,GAAKwpB,EAAI3kB,KAAKw8C,IAAI,EAAGhjD,EAAIwiD,EAC5C,EAEAF,MAAgB,SAAU5kD,EAAQgM,EAAOlJ,EAAQ+hD,EAAMC,EAAMC,GAC3D,IAAIziD,EAAGmrB,EAAGpc,EACN2zC,EAAiB,EAATD,EAAcD,EAAO,EAC7BG,GAAQ,GAAKD,GAAQ,EACrBE,EAAQD,GAAQ,EAChBM,EAAe,KAATT,EAAch8C,KAAKw8C,IAAI,GAAI,IAAMx8C,KAAKw8C,IAAI,GAAI,IAAM,EAC1DpmD,EAAI2lD,EAAO,EAAKE,EAAS,EACzB3iD,EAAIyiD,EAAO,GAAK,EAChB5gD,EAAI+H,EAAQ,GAAgB,IAAVA,GAAe,EAAIA,EAAQ,EAAK,EAAI,EAmC1D,IAjCAA,EAAQlD,KAAKmrC,IAAIjoC,GAEbw5C,MAAMx5C,IAAUA,IAAUq5C,KAC5B53B,EAAI+3B,MAAMx5C,GAAS,EAAI,EACvB1J,EAAI2iD,IAEJ3iD,EAAIwG,KAAKC,MAAMD,KAAK8tC,IAAI5qC,GAASlD,KAAK28C,KAClCz5C,GAASqF,EAAIvI,KAAKw8C,IAAI,GAAIhjD,IAAM,IAClCA,IACA+O,GAAK,IAGLrF,GADE1J,EAAI4iD,GAAS,EACNK,EAAKl0C,EAELk0C,EAAKz8C,KAAKw8C,IAAI,EAAG,EAAIJ,IAEpB7zC,GAAK,IACf/O,IACA+O,GAAK,GAGH/O,EAAI4iD,GAASD,GACfx3B,EAAI,EACJnrB,EAAI2iD,GACK3iD,EAAI4iD,GAAS,GACtBz3B,GAAMzhB,EAAQqF,EAAK,GAAKvI,KAAKw8C,IAAI,EAAGR,GACpCxiD,GAAQ4iD,IAERz3B,EAAIzhB,EAAQlD,KAAKw8C,IAAI,EAAGJ,EAAQ,GAAKp8C,KAAKw8C,IAAI,EAAGR,GACjDxiD,EAAI,IAIDwiD,GAAQ,EAAG9kD,EAAO8C,EAAS5D,GAAS,IAAJuuB,EAAUvuB,GAAKkD,EAAGqrB,GAAK,IAAKq3B,GAAQ,GAI3E,IAFAxiD,EAAKA,GAAKwiD,EAAQr3B,EAClBu3B,GAAQF,EACDE,EAAO,EAAGhlD,EAAO8C,EAAS5D,GAAS,IAAJoD,EAAUpD,GAAKkD,EAAGE,GAAK,IAAK0iD,GAAQ,GAE1EhlD,EAAO8C,EAAS5D,EAAIkD,IAAU,IAAJ6B,CAC5B,GCnFA3C,OAAOoK,eAAeg6C,WAAS,aAAc,CAAE15C,OAAO,IACtD,MAAMuxC,SAASx9C,aACT6kD,QAAUjiD,UAEVgjD,WAAaA,CAACrtC,EAAGjX,EAAGlC,EAAK6V,KAC3B,GAAI3T,EAAIlC,EAAMmZ,EAAEjZ,OAAQ,CACpB,GAAuB,mBAAX2V,EACR,MAAM,IAAIzS,MAAM,2DAGpB,OADAyS,EAAMsD,EAAGjX,GACF,CACV,CACD,OAAOA,GAMXqkD,WAAAE,MAAgB,CACZzmD,IAAK,EACLwM,IAAGA,CAAC1K,EAAKyjD,IACEzjD,EAAI4kD,UAAUnB,GAEzB5gB,GAAAA,CAAIxrB,EAAGjX,EAAGmC,EAAGwR,GACTuoC,SAAOuI,aAAazkD,EAAG,UACvBk8C,SAAOuI,aAAatiD,EAAG,UACvB+5C,SAAOU,GAAGz6C,GAAK,GAAKA,GAAK,KACzB+5C,SAAOU,GAAG58C,GAAK,GACfk8C,SAAOU,GAAG76C,KAAKjE,KAAOmZ,EAAEjZ,QACxB,MAAM0mD,EAAKJ,WAAWrtC,EAAGjX,EAAG+B,KAAKjE,IAAK6V,GAEtC,OADAsD,EAAE0tC,WAAWxiD,EAAGuiD,GACRA,EAAK1kD,EAAK+B,KAAKjE,GAC1B,GAKLumD,WAAAO,UAAoB,CAChB9mD,IAAK,EACLwM,IAAGA,CAAC1K,EAAKyjD,IACEzjD,EAAIilD,aAAaxB,GAE5B5gB,GAAAA,CAAIxrB,EAAGjX,EAAGmC,EAAGwR,GACTuoC,SAAOuI,aAAazkD,EAAG,UACvBk8C,SAAOuI,aAAatiD,EAAG,UACvB+5C,SAAOU,GAAGz6C,GAAK,GAAKA,GAAK,OACzB+5C,SAAOU,GAAG58C,GAAK,GACfk8C,SAAOU,GAAG76C,KAAKjE,KAAOmZ,EAAEjZ,QACxB,MAAM0mD,EAAKJ,WAAWrtC,EAAGjX,EAAG+B,KAAKjE,IAAK6V,GAEtC,OADAsD,EAAE6tC,cAAc3iD,EAAGuiD,GACXA,EAAK1kD,EAAK+B,KAAKjE,GAC1B,GAKLumD,WAAAU,UAAoB,CAChBjnD,IAAK,EACLwM,IAAGA,CAAC1K,EAAKyjD,IACEzjD,EAAIolD,aAAa3B,GAE5B5gB,GAAAA,CAAIxrB,EAAGjX,EAAGmC,EAAGwR,GACTuoC,SAAOuI,aAAazkD,EAAG,UACvBk8C,SAAOuI,aAAatiD,EAAG,UACvB+5C,SAAOU,GAAGz6C,GAAK,GAAKA,GAAK,OACzB+5C,SAAOU,GAAG58C,GAAK,GACfk8C,SAAOU,GAAG76C,KAAKjE,KAAOmZ,EAAEjZ,QACxB,MAAM0mD,EAAKJ,WAAWrtC,EAAGjX,EAAG+B,KAAKjE,IAAK6V,GAEtC,OADAsD,EAAEguC,cAAc9iD,EAAGuiD,GACXA,EAAK1kD,EAAK+B,KAAKjE,GAC1B,GAKLumD,WAAAa,UAAoB,CAChBpnD,IAAK,EACLwM,IAAGA,CAAC1K,EAAKyjD,IACEzjD,EAAIulD,WAAW9B,EAAK,GAE/B5gB,GAAAA,CAAIxrB,EAAGjX,EAAGmC,EAAGwR,GACTuoC,SAAOuI,aAAazkD,EAAG,UACvBk8C,SAAOuI,aAAatiD,EAAG,UACvB+5C,SAAOU,GAAGz6C,GAAK,GAAKA,GAAK,UACzB+5C,SAAOU,GAAG58C,GAAK,GACfk8C,SAAOU,GAAG76C,KAAKjE,KAAOmZ,EAAEjZ,QACxB,MAAM0mD,EAAKJ,WAAWrtC,EAAGjX,EAAG+B,KAAKjE,IAAK6V,GAEtC,OADAsD,EAAEmuC,YAAYjjD,EAAGuiD,EAAI,GACbA,EAAK1kD,EAAK+B,KAAKjE,GAC1B,GAKLumD,WAAAgB,UAAoB,CAChBvnD,IAAK,EACLwM,IAAGA,CAAC1K,EAAKyjD,IACEzjD,EAAI0lD,WAAWjC,EAAK,GAE/B5gB,GAAAA,CAAIxrB,EAAGjX,EAAGmC,EAAGwR,GACTuoC,SAAOuI,aAAazkD,EAAG,UACvBk8C,SAAOuI,aAAatiD,EAAG,UACvB+5C,SAAOU,GAAGz6C,GAAK,GAAKA,GAAK,UACzB+5C,SAAOU,GAAG58C,GAAK,GACfk8C,SAAOU,GAAG76C,KAAKjE,KAAOmZ,EAAEjZ,QACxB,MAAM0mD,EAAKJ,WAAWrtC,EAAGjX,EAAG+B,KAAKjE,IAAK6V,GAEtC,OADAsD,EAAEsuC,YAAYpjD,EAAGuiD,EAAI,GACbA,EAAK1kD,EAAK+B,KAAKjE,GAC1B,GAKLumD,WAAAmB,UAAoB,CAChB1nD,IAAK,EACLwM,IAAGA,CAAC1K,EAAKyjD,IACEzjD,EAAI6lD,aAAapC,GAE5B5gB,GAAAA,CAAIxrB,EAAGjX,EAAGmC,EAAGwR,GACTuoC,SAAOuI,aAAazkD,EAAG,UACvBk8C,SAAOuI,aAAatiD,EAAG,UACvB+5C,SAAOU,GAAGz6C,GAAK,GAAKA,GAAK,YACzB+5C,SAAOU,GAAG58C,GAAK,GACfk8C,SAAOU,GAAG76C,KAAKjE,KAAOmZ,EAAEjZ,QACxB,MAAM0mD,EAAKJ,WAAWrtC,EAAGjX,EAAG+B,KAAKjE,IAAK6V,GAEtC,OADAsD,EAAEyuC,cAAcvjD,EAAGuiD,GACXA,EAAK1kD,EAAK+B,KAAKjE,GAC1B,GAKLumD,WAAAsB,UAAoB,CAChB7nD,IAAK,EACLwM,IAAGA,CAAC1K,EAAKyjD,IACEzjD,EAAIgmD,aAAavC,GAE5B5gB,GAAAA,CAAIxrB,EAAGjX,EAAGmC,EAAGwR,GACTuoC,SAAOuI,aAAazkD,EAAG,UACvBk8C,SAAOuI,aAAatiD,EAAG,UACvB+5C,SAAOU,GAAGz6C,GAAK,GAAKA,GAAK,YACzB+5C,SAAOU,GAAG58C,GAAK,GACfk8C,SAAOU,GAAG76C,KAAKjE,KAAOmZ,EAAEjZ,QACxB,MAAM0mD,EAAKJ,WAAWrtC,EAAGjX,EAAG+B,KAAKjE,IAAK6V,GAEtC,OADAsD,EAAE4uC,cAAc1jD,EAAGuiD,GACXA,EAAK1kD,EAAK+B,KAAKjE,GAC1B,GAKLumD,WAAAyB,KAAe,CACXhoD,IAAK,EACLwM,IAAGA,CAAC1K,EAAKyjD,IACEzjD,EAAImmD,SAAS1C,GAExB5gB,GAAAA,CAAIxrB,EAAGjX,EAAGmC,EAAGwR,GACTuoC,SAAOuI,aAAazkD,EAAG,UACvBk8C,SAAOuI,aAAatiD,EAAG,UACvB+5C,SAAOU,GAAGz6C,IAAM,KAAOA,GAAK,KAC5B+5C,SAAOU,GAAG58C,GAAK,GACfk8C,SAAOU,GAAG76C,KAAKjE,KAAOmZ,EAAEjZ,QACxB,MAAM0mD,EAAKJ,WAAWrtC,EAAGjX,EAAG+B,KAAKjE,IAAK6V,GAEtC,OADAsD,EAAE+uC,UAAU7jD,EAAGuiD,GACPA,EAAK1kD,EAAK+B,KAAKjE,GAC1B,GAKLumD,WAAA4B,SAAmB,CACfnoD,IAAK,EACLwM,IAAGA,CAAC1K,EAAKyjD,IACEzjD,EAAIsmD,YAAY7C,GAE3B5gB,GAAAA,CAAIxrB,EAAGjX,EAAGmC,EAAGwR,GACTuoC,SAAOuI,aAAazkD,EAAG,UACvBk8C,SAAOuI,aAAatiD,EAAG,UACvB+5C,SAAOU,GAAGz6C,IAAM,OAASA,GAAK,OAC9B+5C,SAAOU,GAAG58C,GAAK,GACfk8C,SAAOU,GAAG76C,KAAKjE,KAAOmZ,EAAEjZ,QACxB,MAAM0mD,EAAKJ,WAAWrtC,EAAGjX,EAAG+B,KAAKjE,IAAK6V,GAEtC,OADAsD,EAAEkvC,aAAahkD,EAAGuiD,GACVA,EAAK1kD,EAAK+B,KAAKjE,GAC1B,GAKLumD,WAAA+B,SAAmB,CACftoD,IAAK,EACLwM,IAAGA,CAAC1K,EAAKyjD,IACEzjD,EAAIymD,YAAYhD,GAE3B5gB,GAAAA,CAAIxrB,EAAGjX,EAAGmC,EAAGwR,GACTuoC,SAAOuI,aAAazkD,EAAG,UACvBk8C,SAAOuI,aAAatiD,EAAG,UACvB+5C,SAAOU,GAAGz6C,IAAM,OAASA,GAAK,OAC9B+5C,SAAOU,GAAG58C,GAAK,GACfk8C,SAAOU,GAAG76C,KAAKjE,KAAOmZ,EAAEjZ,QACxB,MAAM0mD,EAAKJ,WAAWrtC,EAAGjX,EAAG+B,KAAKjE,IAAK6V,GAEtC,OADAsD,EAAEqvC,aAAankD,EAAGuiD,GACVA,EAAK1kD,EAAK+B,KAAKjE,GAC1B,GAKLumD,WAAAkC,SAAmB,CACfzoD,IAAK,EACLwM,IAAGA,CAAC1K,EAAKyjD,IACEzjD,EAAI4mD,UAAUnD,EAAK,GAE9B5gB,GAAAA,CAAIxrB,EAAGjX,EAAGmC,EAAGwR,GACTuoC,SAAOuI,aAAazkD,EAAG,UACvBk8C,SAAOuI,aAAatiD,EAAG,UACvB+5C,SAAOU,GAAGz6C,IAAM,SAAYA,GAAK,SACjC+5C,SAAOU,GAAG58C,GAAK,GACfk8C,SAAOU,GAAG76C,KAAKjE,KAAOmZ,EAAEjZ,QACxB,MAAM0mD,EAAKJ,WAAWrtC,EAAGjX,EAAG+B,KAAKjE,IAAK6V,GAEtC,OADAsD,EAAEwvC,WAAWtkD,EAAGuiD,EAAI,GACZA,EAAK1kD,EAAK+B,KAAKjE,GAC1B,GAKLumD,WAAAqC,SAAmB,CACf5oD,IAAK,EACLwM,IAAGA,CAAC1K,EAAKyjD,IACEzjD,EAAI+mD,UAAUtD,EAAK,GAE9B5gB,GAAAA,CAAIxrB,EAAGjX,EAAGmC,EAAGwR,GACTuoC,SAAOuI,aAAazkD,EAAG,UACvBk8C,SAAOuI,aAAatiD,EAAG,UACvB+5C,SAAOU,GAAGz6C,IAAM,SAAYA,GAAK,SACjC+5C,SAAOU,GAAG58C,GAAK,GACfk8C,SAAOU,GAAG76C,KAAKjE,KAAOmZ,EAAEjZ,QACxB,MAAM0mD,EAAKJ,WAAWrtC,EAAGjX,EAAG+B,KAAKjE,IAAK6V,GAEtC,OADAsD,EAAE2vC,WAAWzkD,EAAGuiD,EAAI,GACZA,EAAK1kD,EAAK+B,KAAKjE,GAC1B,GAKLumD,WAAAwC,SAAmB,CACf/oD,IAAK,EACLwM,IAAGA,CAAC1K,EAAKyjD,IACEzjD,EAAIknD,YAAYzD,GAE3B5gB,GAAAA,CAAIxrB,EAAGjX,EAAGmC,EAAGwR,GACTuoC,SAAOuI,aAAazkD,EAAG,UACvBk8C,SAAOuI,aAAatiD,EAAG,UACvB+5C,SAAOU,GAAGz6C,IAAM,YAAcA,GAAK,YACnC+5C,SAAOU,GAAG58C,GAAK,GACfk8C,SAAOU,GAAG76C,KAAKjE,KAAOmZ,EAAEjZ,QACxB,MAAM0mD,EAAKJ,WAAWrtC,EAAGjX,EAAG+B,KAAKjE,IAAK6V,GAEtC,OADAsD,EAAE8vC,aAAa5kD,EAAGuiD,GACVA,EAAK1kD,EAAK+B,KAAKjE,GAC1B,GAKLumD,WAAA2C,SAAmB,CACflpD,IAAK,EACLwM,IAAGA,CAAC1K,EAAKyjD,IACEzjD,EAAIqnD,YAAY5D,GAE3B5gB,GAAAA,CAAIxrB,EAAGjX,EAAGmC,EAAGwR,GACTuoC,SAAOuI,aAAazkD,EAAG,UACvBk8C,SAAOuI,aAAatiD,EAAG,UACvB+5C,SAAOU,GAAGz6C,IAAM,YAAcA,GAAK,YACnC+5C,SAAOU,GAAG58C,GAAK,GACfk8C,SAAOU,GAAG76C,KAAKjE,KAAOmZ,EAAEjZ,QACxB,MAAM0mD,EAAKJ,WAAWrtC,EAAGjX,EAAG+B,KAAKjE,IAAK6V,GAEtC,OADAsD,EAAEiwC,aAAa/kD,EAAGuiD,GACVA,EAAK1kD,EAAK+B,KAAKjE,GAC1B,GAKLumD,WAAA8C,UAAoB,CAChBrpD,IAAK,EACLwM,GAAAA,CAAI1K,EAAKyjD,GACL,OAAO8B,WAAWvlD,EAAKyjD,EAAKthD,KAAKjE,IACpC,EACD2kC,GAAAA,CAAIxrB,EAAGjX,EAAGmC,GACN,OAAOijD,YAAYnuC,EAAG9U,EAAGnC,EAAG+B,KAAKjE,IACpC,GAKLumD,WAAA+C,SAAmB,CACftpD,IAAK,EACLwM,GAAAA,CAAI1K,EAAKyjD,GACL,OAAOmD,UAAU5mD,EAAKyjD,EAAKthD,KAAKjE,IACnC,EACD2kC,GAAAA,CAAIxrB,EAAGosC,EAAKlhD,GACR,OAAOskD,WAAWxvC,EAAG9U,EAAGkhD,EAAKthD,KAAKjE,IACrC,GAKLumD,WAAAgD,UAAoB,CAChBvpD,IAAK,EACLwM,GAAAA,CAAI2M,EAAGosC,GACH,OAAOiC,WAAWruC,EAAGosC,EAAKthD,KAAKjE,IAClC,EACD2kC,GAAAA,CAAIxrB,EAAGjX,EAAGmC,GACN,OAAOojD,YAAYtuC,EAAG9U,EAAGnC,EAAG+B,KAAKjE,IACpC,GAKLumD,WAAAiD,SAAmB,CACfxpD,IAAK,EACLwM,GAAAA,CAAI2M,EAAGosC,GACH,OAAOsD,UAAU1vC,EAAGosC,EAAKthD,KAAKjE,IACjC,EACD2kC,GAAAA,CAAIxrB,EAAGosC,EAAKlhD,GACR,OAAOykD,WAAW3vC,EAAG9U,EAAGkhD,EAAKthD,KAAKjE,IACrC,GAKLumD,WAAAkD,WAAqB,CACjBzpD,IAAK,EACLwM,GAAAA,CAAI2M,EAAGosC,GACH,OAAOE,QAAQj1C,KAAK2I,EAAGosC,GAAK,EAAO,GAAIthD,KAAKjE,IAC/C,EACD2kC,GAAAA,CAAIxrB,EAAGosC,EAAKlhD,GACR,OAAOohD,QAAQt6C,MAAMgO,EAAG9U,EAAGkhD,GAAK,EAAO,GAAIthD,KAAKjE,IACnD,GAKLumD,WAAAmD,WAAqB,CACjB1pD,IAAK,EACLwM,GAAAA,CAAI2M,EAAGosC,GACH,OAAOE,QAAQj1C,KAAK2I,EAAGosC,GAAK,EAAM,GAAIthD,KAAKjE,IAC9C,EACD2kC,GAAAA,CAAIxrB,EAAGosC,EAAKlhD,GACR,OAAOohD,QAAQt6C,MAAMgO,EAAG9U,EAAGkhD,GAAK,EAAM,GAAIthD,KAAKjE,IAClD,GAKLumD,WAAAoD,WAAqB,CACjB3pD,IAAK,EACLwM,IAAGA,CAAC2M,EAAGosC,IACIpsC,EAAEywC,YAAYrE,GAEzB5gB,IAAGA,CAACxrB,EAAGosC,EAAKlhD,IACD8U,EAAE0wC,aAAaxlD,EAAGkhD,IAMjCgB,WAAAuD,WAAqB,CACjB9pD,IAAK,EACLwM,IAAGA,CAAC2M,EAAGosC,IACIpsC,EAAE4wC,YAAYxE,GAEzB5gB,IAAGA,CAACxrB,EAAGosC,EAAKlhD,IACD8U,EAAE6wC,aAAa3lD,EAAGkhD,IAMjCgB,WAAA0D,WAAqB,CACjBjqD,IAAK,EACLwM,IAAGA,CAAC2M,EAAGosC,IACIpsC,EAAE+wC,aAAa3E,GAE1B5gB,IAAGA,CAACxrB,EAAGosC,EAAKlhD,IACD8U,EAAEgxC,cAAc9lD,EAAGkhD,IAMlCgB,WAAA6D,WAAqB,CACjBpqD,IAAK,EACLwM,IAAGA,CAAC2M,EAAGosC,IACIpsC,EAAEkxC,aAAa9E,GAE1B5gB,IAAGA,CAACxrB,EAAGosC,EAAKlhD,IACD8U,EAAEmxC,cAAcjmD,EAAGkhD,IAMlCgB,WAAAgE,WAAqB,CACjBvqD,IAAK,GACLwM,GAAAA,CAAI2M,EAAGosC,GACH,OAAOE,QAAQj1C,KAAK2I,EAAGosC,GAAK,EAAO,GAAIthD,KAAKjE,IAC/C,EACD2kC,GAAAA,CAAIxrB,EAAGosC,EAAKlhD,GACR,OAAOohD,QAAQt6C,MAAMgO,EAAG9U,EAAGkhD,GAAK,EAAO,GAAIthD,KAAKjE,IACnD,GAKLumD,WAAAiE,WAAqB,CACjBxqD,IAAK,GACLwM,GAAAA,CAAI2M,EAAGosC,GACH,OAAOE,QAAQj1C,KAAK2I,EAAGosC,GAAK,EAAM,GAAIthD,KAAKjE,IAC9C,EACD2kC,GAAAA,CAAIxrB,EAAGosC,EAAKlhD,GACR,OAAOohD,QAAQt6C,MAAMgO,EAAG9U,EAAGkhD,GAAK,EAAM,GAAIthD,KAAKjE,IAClD,GAKL,MAAMyqD,WAIFplD,WAAAA,CAAYrF,GACRiE,KAAKjE,IAAMA,CACd,CAEDwM,GAAAA,CAAI1K,EAAKyjD,GACR,EAEagB,WAAAkE,WAAGA,WACrB,MAAMC,WACFrlD,WAAAA,CAAYrF,GACRiE,KAAKjE,IAAMA,CACd,CACDwM,GAAAA,CAAI1K,EAAKyjD,GACL,OAAOzjD,EAAIgG,MAAMy9C,EAAKA,EAAMthD,KAAKjE,IACpC,EAEaumD,WAAAmE,WAAGA,WAIrB,MAAMC,WACFtlD,WAAAA,CAAYrF,EAAK6B,GACboC,KAAKjE,IAAMA,EACXiE,KAAKpC,SAAWA,CACnB,CACD2K,GAAAA,CAAI1K,EAAKyjD,GACL,OAAOzjD,EAAIvB,SAAS0D,KAAKpC,SAAU0jD,EAAKA,EAAMthD,KAAKjE,IACtD,EAEaumD,WAAAoE,WAAGA,WAKrB,MAAMC,eACFvlD,WAAAA,CAAYrF,GACRiE,KAAKjE,IAAMA,CACd,CACD,aAAOyY,CAAO5X,EAAQ0kD,EAAKsF,GACvB,IAAI14C,EAAM,GACV,IAAK,IAAIpS,EAAIwlD,EAAKxlD,EAAI8qD,IAAS9qD,EAC3BoS,GAAOy4C,eAAe5G,kBAAkB4G,eAAe1G,kBAAkBrjD,EAAOd,KAEpF,OAAOoS,CACV,CACD,cAAO2xC,CAAQC,EAAGnlC,EAAK2E,GACnB,OAAO3E,GAAOmlC,GAAKA,GAAKxgC,CAC3B,CACD,wBAAOygC,CAAkBC,GACrB,OAAIA,GAAM,MACCvlC,OAAOC,aAAaslC,IAG3BA,GAAM,MACCvlC,OAAOC,aAA0B,OAAZslC,GAAM,IAA6B,OAAT,KAALA,IAExD,CACD,wBAAOC,CAAkBC,GACrB,GAAIyG,eAAe9G,QAAQK,EAAM,EAAM,KACnC,OAAOA,EAEX,MAAMC,EAAYwG,eAAevG,YAAYF,EAAO,KACpD,GAAkB,OAAdC,EACA,MAAMhhD,MAAM,uBAEhB,OAAOghD,CACV,CACD53C,GAAAA,CAAI1K,EAAKyjD,EAAM,GACX,OAAOqF,eAAenyC,OAAO3W,EAAKyjD,EAAKA,EAAMthD,KAAKjE,IACrD,EAgBL,SAASqnD,WAAWvlD,EAAK6B,EAAQ4b,GAE7BA,KAA4B,EAC5B,IAAIqb,EAAM94B,EAFV6B,KAAoB,GAGhB68C,EAAM,EACNzgD,EAAI,EACR,OAASA,EAAIwf,IAAeihC,GAAO,MAC/B5lB,GAAO94B,EAAI6B,EAAS5D,GAAKygD,EAE7B,OAAO5lB,CACX,CAKA,SAAS0sB,YAAYxlD,EAAK+K,EAAOlJ,EAAQ4b,GACrC1S,GAASA,EAET0S,KAA4B,EAC5B,IAAIihC,EAAM,EACNzgD,EAAI,EAER,IADA+B,EAJA6B,KAAoB,GAIE,IAARkJ,IACL9M,EAAIwf,IAAeihC,GAAO,MAC/B1+C,EAAI6B,EAAS5D,GAAM8M,EAAQ2zC,EAAO,IAEtC,OAAO78C,EAAS4b,CACpB,CAKA,SAASmpC,UAAU5mD,EAAK6B,EAAQ4b,GAE5BA,KAA4B,EAC5B,IAAIqb,EAAM94B,EAFV6B,KAAoB,GAGhB68C,EAAM,EACNzgD,EAAI,EACR,OAASA,EAAIwf,IAAeihC,GAAO,MAC/B5lB,GAAO94B,EAAI6B,EAAS5D,GAAKygD,EAK7B,OAHAA,GAAO,IACH5lB,GAAO4lB,IACP5lB,GAAOjxB,KAAKw8C,IAAI,EAAG,EAAI5mC,IACpBqb,CACX,CAKA,SAAS+tB,WAAW7mD,EAAK+K,EAAOlJ,EAAQ4b,GACpC1S,GAASA,EAET,IAAI9M,EAAI,EACJygD,EAAM,EACNsK,EAAM,EAEV,IADAhpD,EAJA6B,KAAoB,GAIE,IAARkJ,IACL9M,EAAIwf,IAAeihC,GAAO,MAC3B3zC,EAAQ,GAAa,IAARi+C,GAAqC,IAAxBhpD,EAAI6B,EAAS5D,EAAI,KAC3C+qD,EAAM,GAEVhpD,EAAI6B,EAAS5D,IAAO8M,EAAQ2zC,EAAQ,GAAKsK,EAAM,IAEnD,OAAOnnD,EAAS4b,CACpB,CAMA,SAASioC,WAAW1lD,EAAK6B,EAAQ4b,GAE7BA,KAA4B,EAC5B,IAAIqb,EAAM94B,GAFV6B,KAAoB,KAEK4b,GACrBihC,EAAM,EACV,KAAOjhC,EAAa,IAAMihC,GAAO,MAC7B5lB,GAAO94B,EAAI6B,IAAW4b,GAAcihC,EAExC,OAAO5lB,CACX,CAMA,SAAS6sB,YAAY3lD,EAAK+K,EAAOlJ,EAAQ4b,GACrC1S,GAASA,EAGT,IAAI9M,GADJwf,KAA4B,GACP,EACjBihC,EAAM,EAEV,IADA1+C,GAJA6B,KAAoB,GAIP5D,GAAa,IAAR8M,IACT9M,GAAK,IAAMygD,GAAO,MACvB1+C,EAAI6B,EAAS5D,GAAM8M,EAAQ2zC,EAAO,IAEtC,OAAO78C,EAAS4b,CACpB,CAMA,SAASspC,UAAU/mD,EAAK6B,EAAQ4b,GAG5B,IAAIxf,EADJwf,KAA4B,EAExBihC,EAAM,EACN5lB,EAAM94B,GAJV6B,KAAoB,KAIK5D,GACzB,KAAOA,EAAI,IAAMygD,GAAO,MACpB5lB,GAAO94B,EAAI6B,IAAW5D,GAAKygD,EAK/B,OAHAA,GAAO,IACH5lB,GAAO4lB,IACP5lB,GAAOjxB,KAAKw8C,IAAI,EAAG,EAAI5mC,IACpBqb,CACX,CAMA,SAASkuB,WAAWhnD,EAAK+K,EAAOlJ,EAAQ4b,GACpC1S,GAASA,EAET,IAAI9M,EAAIwf,EAAa,EACjBihC,EAAM,EACNsK,EAAM,EAEV,IADAhpD,GAJA6B,KAAoB,GAIP5D,GAAa,IAAR8M,IACT9M,GAAK,IAAMygD,GAAO,MACnB3zC,EAAQ,GAAa,IAARi+C,GAAqC,IAAxBhpD,EAAI6B,EAAS5D,EAAI,KAC3C+qD,EAAM,GAEVhpD,EAAI6B,EAAS5D,IAAO8M,EAAQ2zC,EAAQ,GAAKsK,EAAM,IAEnD,OAAOnnD,EAAS4b,CACpB,CApJsBgnC,WAAAqE,eAAGA,eACzBA,eAAevG,YAAc,CAAC,KAAM,IAAK,KAAM,IAAK,KAAM,KAAM,KAAM,KAAM,IAAK,KAAM,IACnF,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IACzE,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC7E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAC3E,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAqErBkC,WAAAoC,WAAGA,WAeHpC,WAAAiB,WAAGA,WAiBFjB,WAAAkB,YAAGA,YAmBLlB,WAAAsC,UAAGA,UAoBFtC,WAAAuC,WAAGA,gCCroBrB3mD,OAAAoK,eAAAw+C,cAAA,aAAA,CAAAl+C,OAAA,sBAEAxH,WAAAA,oBAUA0yC,IAAAA,CAAAiT,EAAAC,EAAAhiD,GAlBA,uDAAAhF,4UCDak5C,EAAQA,EAAA98C,MAAA28C,EAAAC,eAErB,qDAGAiO,MACOC,EAAA3nD,OACN4nD,EAACjjD,WACI4iD,EAAe1iD,cACf8G,EAJNvO,WAImC,+BAKnCN,EAAA+qD,OAAA,CACA,uBAAA,UAAA,gBAAA,OAAA,SAAA,UACA,OAAA,QAAA,mBAAA,oBAAA,MAAA,SAAA,OACA,SAAA,aAAA,cAAA,MAAA,uBAAA,aACiB,cAAA,UAAA,WAAA,QAAA,YAAA,SAAA,SACjB,YAA2B,eAAA,OAAW,QAAW,OAAA,aAAA,iBACjD,YAAmB,OAAA,OAAW,OAAY,QAAA,gCAC1C,oBAA0B,SAAe,SAAA,+BACzC,aAAiB,WAAW,YAAqB,QAAA,yBACjD,OAAA,uBAA+B,gBAAU,WAAS,SAAQ,kBAC1D,UAAe,WAAA,qBAAiC,sBAAkC,QAAA,SAC9E,YAAA,oBAAuC,QAAA,wBAAiC,YAC5E,OAA4B,YAAA,gBAAa,QAA0B,cAAA,0BAC/D,SAAe,YAAA,aAAU,cAA2B,mBAA6B,mBACrF,wCAA0C,SAAqB,iBAAS,WACxE,SAAA,SAAe,UAAa,QAAA,gBAA6B,SAAA,wBAA4B,SACrF,cAAuB,2BAA4B,QAAA,mBAC/C,SAAQ,eAAe,gBAAA,mBAA+C,YAAoB,YAC9F,aAAiC,aAAA,mBAAsB,cAAkB,aACzE,oBAAkC,QAAA,UAAA,yBAAuC,OACzE,wBAA2B,cAAA,cAAA,YAAA,yBAC3B,6EAiBA,uOAGA,oFACA,YAAA,WACA,aAAA,YAAA,cAAA,eAAA,YAAA,gFAEA,kCAMiB,CACjBrrD,IAAA,IAMAwM,IAAA,CAAA1K,EAAAyjD,KACSz1B,MAAAA,MAAAw7B,EAAQ,GAAA9+C,IAAA1K,EAAAyjD,SACZ,QAAAz1B,EAAA,CACHA,SACFy7B,MAAqB,IAAAD,EAAc,IAAC9+C,WAChCg/C,OAAA,IAAYF,EAAK,IAAA9+C,IAAA1K,EAAAyjD,EAAA,IACrBkG,4BACKC,SAAAJ,EAAA,GAAA9+C,IAAA1K,EAAAyjD,EAAA,IACLt9B,YAAAqjC,EAAA,IAAA9+C,IAAA1K,EAAAyjD,EAAA,IAIQoG,SAAmBP,EAAA3E,MAAAj6C,IAAA1K,EAAAyjD,EAAA,KAE1BqG,MAAAR,EAAA3E,MAAAj6C,IAAA1K,EAAAyjD,EAAA,KAEmBsG,MAAYT,EAAA3E,MAAAj6C,IAAA1K,EAAAyjD,EAAA,MACxB,uBAGiB6F,EAAAT,WACpBtlD,WAAAA,CAAArF,GACLu/C,MAAAv/C,EAAA,SAEA,CAEAwM,GAAAA,CAAA1K,EAAgByjD,GACH,IAAA14C,QAAAL,IAAA1K,EAAAyjD,GAGb,OAFA14C,EAAAs+C,EAAYhT,QAAAmM,cAAmBz3C,GACnBA,EAAAA,EAAA8vC,OACZ9vC,EAAA3M,OAAqB2M,EAAAA,OAAA9K,CACrB,+CAIA+pD,CAAAC,GACA,GAAAA,EAAAzrD,EAAA+qD,OAAAnrD,cACoBI,EAAA+qD,OAAAU,kBAKAhP,EAAA94C,UAAA,OAAA,EAAA,YACP,IAAAgnD,KAAAA,UAAA3L,SAEb,YADiBnwC,EAAA,kEAGjBxL,EAAWM,KAAAgnD,UAAA3L,SAAA0M,EAAAhsD,IACN,GAAAiE,KAAAgnD,UAAAxQ,SAAA92C,EAEL,YADsBwL,EAAA,uCAGrB2gB,MAAAA,aAAAm7B,UAAAtN,UAAAqO,EAAAroD,QACD,CACAwL,uCAAA87C,UAAA3L,SAAA0M,EAAAhsD,KAAA,IAAA,MAAAgyC,IAAA,CAAA,QAAA,SAAA,QAAA,UAAA,QAAA,wGA9BA7iC,EAAA,kJC3BAhN,OAAAoK,eAAA0/C,iBAAA,aAAA,CAAAp/C,OAAA,IAAA,MAAAq/C,gBAAAtrD,kBACAurD,gBA9CW9mD,WAAAA,CAAA+mD,EAAAC,GACXpoD,KAAAmoD,SAAAA,EACAnoD,KAAAooD,OAA2BA,EAEXC,iBAAAA,CAAAC,GAGX,MAAA1sC,EAAA0sC,EAAA5P,OAAA98B,MAAA,cAAAytB,OAAA1S,GACM,KAAAA,GAEHpkB,EAAA,OACH,IAAAg2C,KAAA3sC,EACL4tB,QAAAA,KAAA+e,KAAAnG,MAAAzzC,SAAA45C,EAAA,OAEAA,EAAAN,gBAAAb,OAAAmB,IAEQh2C,EAAApS,KAAMooD,GAEd,OAAAh2C,EAEU82B,OAAA1S,QACL74B,IAAA64B,GACL/1B,KAAA,KAEA4nD,yBAAAA,CAAAC,GAEA,MACA,iBAFAA,EAAAC,qBAIA,aAEWD,CACX,CAEQ,kBAAAE,CAAAz6C,GACR,MAAA06C,EAAAj6C,SAAAT,EAAqC,IAChC,OAAAk0C,MAAAwG,QAAAA,CACL,CAIAC,qBAAAA,CAAAP,GACI1sC,MAAAA,EAAA0sC,EAAAhsD,WAAAsf,MAAA,KACJ,MAAA,CAKA+mC,GAAAh0C,SAAAiN,EAAA,GAAA,KAAA,uMAlDgBktC,OAAAA,CAAAC,8FCtBhBzgD,eAAA0gD,YAAA,aAAA,CAAApgD,OAAA,IACA,MAAMqgD,qBAAqBtsD,iBAI3BusD,aACI5B,MAAK,QACLC,OAAA,SACAC,MAAK,QACLC,KAAA,OAEJzjC,QAAkB,UAEhB2jC,MAAA,QACFC,MAAA,eAEQuB,uBAAAF,qBAAAf,gBALR9mD,WAAAA,2GCVMkH,eAAA8gD,kBAAA,aAAA,CAAAxgD,OAAA,IACN,MAAMqgD,qBAAmCtsD,iBACzCuqD,SAAA3nD,OAIA8pD,aAAA,CAEIC,KAAI,QACJC,KAAA,kCAEAC,KAAA,cACAC,KAAI,QACRC,KAAA,OAIIC,KAAY,eACZC,KAAI,OACJC,KAAI,QACJC,KAAI,UACJC,KAAA,WACA,mBAAiB,SACjBC,KAAI,YACJC,KAAI,YACJC,KAAkB,gBAClBC,KAAI,aACJC,KAAA,kBACAC,KAAI,eACJC,KAAa,WACb,cAAiB,SACrBC,KAAA,YAEIC,KAAA,UACA,gBAAA,WACA,gBAAA,WACA,2BACA,wBACA,WAAa,QACbC,KAAI,QACJC,KAAI,WACJC,KAAI,WACJC,KAAA,QACAC,KAAA,cACAC,KAAA,SACAC,KAAA,mBAEA,qBAAA,gBACA,gCAA4C,gBAChD,8BAAA,cAIA,yCAAA,iBAII,sBAAe,iBACf,cAAgB,SAChBC,KAAiB,WACjBC,KAAI,YACJC,KAAiB,UACjBC,KAAA,YACAC,KAAA,kBACA,eAAA,UACAC,KAAA,OACA,YAAA,OACA,oBAAwD,eACxD,8BAAmC,0BACnC,oCAAkD,sBAClD,4BAAoD,sBACpD,6BAA+D,uBAC/D,mCAAA,4BACA,oCAAgD,6BAChD,2BAAyB,qBACzB,0BAAgD,oBAChD,2BAAiC,qBACjC,mBAAA,cAEA,mBAAA,cACA,4BAAA,uBACA,oBAAe,eACnB,8BAAA,sBACAC,KAAA,UAGIC,KAAA,OACJC,KAAA,OACIC,KAAA,eAEA,gBAAA,WAEA,gBAAmB,WACnB,gBAAY,WAEZ,cAAc,UACd,WAAoB,QACpBC,KAAI,OAGRC,KAAA,SACIC,KAAA,eACAC,KAAA,MAEAC,KAAA,UACAC,KAAA,iBAEA,oBAAA,eACA,iBAAuC,YAEvC,yBAAmC,oBACnC,uBAAA,UACA,2BAA2C,UAC3C,6BAA6D,cAC7D,uBAAuC,gBACvC,uBAAA,iBACA,oBAA+C,eAC/C,qBAAqC,QACrC,wBAAiC,mBAEjC,iCAAqD,4BACrD,sBAAA,iBAEJ,wBAAgD,OAChD,0BAA0B,qBAC1B,qBAAA,gBAEA,iCAEK,aAAA,QAEG,6BAAA,wBACH,6BAAA,uDAEL9C,qBAAAf,gBACA,eAAA8D,CAAAC,GAEA,MAAA,CACAzmC,OAAAymC,EAAAC,MACIC,OAAAF,EAAAE,UAAAF,EAAAE,OAAA,GAAA,IAAAlD,qBAAAf,gBAAAkE,oBAAAtuD,sEAgBJ,OAAAirD,EAAAhb,QACA,OAEiB,2BAAAgb,EAAAngD,MAAAyjD,mBACjBtD,EAAgBhb,IAAM,IAAAgb,EAAAngD,MAAAyjD,iBACtBtD,EAAAngD,MAAAs+C,SAAAhT,QAAAwM,aAAuBqI,EAAAngD,MAAA0jD,WAAA,uCAIvBvD,EAAgBngD,MAASyjD,sBAEb,eACZ,IAAsB,YACbtD,EAAAhb,IAAA,IAAAgb,EAAAngD,MAAAyjD,iBACJtD,EAAAngD,UAAAmgD,EAAAngD,MAAAtI,KAAArE,OAAA8sD,EAAAngD,MAAAtI,KAAAojD,eAAA,2PCxKLuF,MAAAA,qBAAAtsD,iBAKI4vD,UAAA,CACAC,MAAgB,QAChBC,OAAA,SACA,iBAAwB,cACxB,gBAAiB,QACjB,UAAA,OACA,yBAAA,eACA,yBAAsB,eACtBC,YAAA,UACA,iBAAsB,QACtB,eAAmB,OACnB,WAAyB,QACzB,cAAqB,WACrB,YAAA,SACA,oBAAgC,YAChC,gCACA,qBAAyB,aACzB,0BAAwB,kBACxB,uBAAuB,eACvB,YAAA,WACA,eAA0B,YAC1B,gBAAyB,UACzB,cAAA,WACA,cAAA,WACA,uBACA,WAAgB,QAChB,eAAA,QACA,6BAAyB,WACzB,cAAgC,WACpC,iBAAA,eAEI,mBAAA,cACA,sBAA0B,SAC1B,oBAAiB,MACjB,UAAA,OACA,WAAA,QACA,eAAA,gBACA,2BAAA,gBACA,yBAAA,cACA,oCAAqB,iBACrB,qBACA,cAAsB,WACtBC,UAAkB,YAClBC,QAAA,UACA,2BACA,sBAAuB,kBACvB,aAAiB,UACjB,UAAA,OACA,uBAAA,0BACA,+BAA6C,sBAC7C,uBAAA,sBACA,wBAA0D,uBAC1D,8BAA4D,4BAC5D,+BAA2C,6BAC3C,sBAAoB,qBACpB,qBAA2C,oBAC3C,sBAA4B,qBAE5B,cAAA,cACA,uBAAA,uBACA,eAAe,eACf,aAAY,UAEZ,gBAAA,MACAC,KAAA,OAEJ,UAAkB,OAEH,eAAA,UAEL,aAAA,2EAGF,eAAAb,CAAAG,GAEJ,MAAA,CACIA,OAAQla,WAAGka,EAAG,GAAA,EAGtB,CAEA/qD,WAAAA,GACSk6C,MAAA,CAAA,OAAAiR,WAER,OAAAzD,CAAAC,GACmBA,GACpB,wBADoBA,EAAAhb,4EAnBpB,gFCzEqB7vC,OAAAoK,eAAsBjM,EAAA,aAAA,CAAAuM,OAAA,IACrCqgD,MAAAA,EAAAtsD,iBAIiBN,EAAAywD,aAAA,CACnBC,IAAA,QACAC,IAAA,SACAC,IAAA,cACAC,IAAA,QACAC,IAAA,OACAC,IAAA,UAEAC,IAAA,QACAC,IAAA,OACAC,IAAA,QACAC,IAAA,UACAC,IAAA,WACAC,IAAA,eACAC,IAAA,OACAC,IAAA,WACAC,IAAA,YACAC,IAAA,QACAC,IAAA,WACAC,IAAA,WACAC,IAAA,WACAC,IAAc,YACdC,IAAA,8DAIJ,eAAA,WAGA,MAAAC,UAAAnF,EAKAf,sICvCA5/C,eAAA+lD,iBAAA,aAAA,CAAAzlD,OAAA,IACA,MAAMqgD,qBAAqBtsD,iBAI3B2xD,YAAoB,CAChB9B,MAAK,QACL+B,OAAgB,SAChBC,QAAkB,UAClB,eAA6B,cAC7BC,MAAK,QACLC,KAAA,OACAC,aAAA,eACAC,aAA4B,eAC5BC,QAAkB,UAClBC,MAAA,QACAC,KAAA,OACAC,WAAA,OACAC,MAAA,QACA,8BACA,mBAAoB,UACpBC,SAAU,WACVC,OAAgB,SAChBC,UAAsB,YACtBC,UAAsB,YACtBC,KAAY,OACZC,WAAwB,aACxBC,gBAAkC,kBAClCC,aAAA,eACAC,SAAA,WACAC,OAAM,SACNC,UAAA,YAEAC,UAAoB,UACpBC,SAAoB,WACpBC,SAAoB,WACpBC,SAAQ,WACRC,QAAA,UACAC,MAAc,QACdC,MAAc,QACdC,SAAQ,WACRC,SAAU,WACVC,aAAY,eACZC,YAAW,cACXC,IAAA,MACAC,KAAA,OACAC,MAAc,QACdC,8BACAC,wBAAA,gBACAC,sBAAA,cACAC,eAAgB,iBAChBC,OAAgB,SAChBC,SAAoB,WACpBrE,UAAsB,YACtBC,QAAkB,UAClBqE,sBACAC,gBAAkC,kBAClCC,QAAA,UACAC,KAAA,OACAvE,KAAA,OACAwE,oBAA8C,0BAC9CC,2BAA0B,sBAC1BC,oBAAA,sBACAC,qBAA4C,uBAC5CC,0BAAsD,4BACtDC,2BAAA,6BACAC,mBAAkB,qBAClBC,kBAAsC,oBACtCC,mBAAA,qBACAC,YAAA,cAEJC,qBAAgC,uBAE9BC,aAAA,eAEEC,QAAA,wCAGoBhJ,qBAAgBf,8BAGnC,MAAAgK,EAAA,CAAA,EACL,IAAAnJ,MAAAA,KAAAuF,YAEA4D,EAAAnJ,EAAA7sC,eAAAoyC,YAAAvF,sBAbAoJ,aAAAA,CAAApJ,+HCvEMzgD,eAAqCjM,EAAA,aAAA,CAAAuM,OAAA,IACrCqgD,MAAAA,EAAAtsD,oBAKF,OAAA,QACA,OAAA,SACAy1D,KAAA,cAIA,6BAAA,cACA,OAAA,QACA,OAAc,OACd,OAAA,UACAC,KAAA,QACAC,KAAA,OACA,OAAA,QACAC,KAAA,UACA,OAAA,WACA,OAAA,SACAC,KAAA,YACAC,KAAA,YACAC,KAAA,aACAC,KAAA,kBACAC,KAAA,eACA,iCAA4C,WAC5C,kCAAmC,YACnC,gCAA0C,UAC1C,iCAAA,WACA,iCAAA,WACA,gCAA0C,UAC1C,8BAAA,QACA,8BAAA,QACA,OAAA,WACA,iCAA4C,WAC5C,qCAAoC,eACpCC,KAAA,cACAC,KAAA,MACA,6BAAA,OACA,8BAAA,QACA,sCAAA,gBACAC,KAAA,SACAC,KAAA,WACAC,KAAA,YACAC,KAAA,aACAC,KAAA,cACAC,KAAA,YACAC,KAAA,UACAC,KAAA,aACA,iDAAA,gBACA,+CAAA,cACA,0DAAA,iBACA,+BAAA,SACA,iCAA4C,WAC5CC,KAAA,YACA,gCAAiC,UACjC,OAAA,YACAC,KAAA,UACA,gCAAA,UACA,6BAAA,OACA,6BAAA,OACA,8BAAA,UACA,6CAAuE,0BACvE,qDAA2E,sBAC3E,6CAAmE,sBACnE,8CAAqE,uBACrE,oDAAA,4BACA,qDAAkF,6BAClF,4CAAiE,qBACjE,2CAA+D,oBAC/D,4CAAA,qBACA,oCAAA,cAEA,6CAAoD,uBACpD,qCAA0D,eAC9D,oCAAA,sBAEIC,KAAA,QACA,wCAAA,kBACA,gCAAA,UACA,qCAAA,eAEmB,qCAAA,eAIvBtpC,KAAA,cACAupC,KAAA,eAGAr3D,EAAAs3D,QAAA,SANA,MAAAC,UAAA3K,EAMAf,0NClFI2L,aAAc,CACdC,MAAA,QACAC,OAAkB,SAClBC,kBACAC,YAAc,cACdC,cACAC,KAAA,OACAC,aAA4B,eAC5BC,aAAkB,eAClB72B,QAAA,UACA82B,YAAkB,QAClBtF,WAAc,OACduF,MAAA,QACAC,uBAAoB,UACpBC,SAAgB,WAChBC,gBACAtF,UAAsB,YACtBC,UAAY,YACZC,KAAA,OACAC,WAAA,aACAC,gBAA4B,kBAC5BC,aAAA,eACAkF,oBACAC,OAAA,SACJC,UAAA,YAEIC,QAAA,UACAC,SAAoB,WACpBC,SAAoB,WACpBC,oBACAC,kBACAC,MAAc,QACdC,MAAU,QACVC,SAAA,WACAC,SAAA,WACAC,aAAyB,eACzBC,WAAA,cACAC,UAAA,aACAC,YAAgB,cAChBC,OAAU,SACVnF,IAAA,MACAoF,KAAc,OACdC,MAAA,QACAC,8BACAC,cAA0B,gBAC1BC,YAAgC,cAChClF,eAAgB,iBAChBmF,gBACAC,SAAsB,WACtBC,UAAkB,YAClBvJ,kBACAwJ,UAAA,YACAC,gBAAkB,kBAClBC,QAAA,UACAlF,KAAA,OACAvE,KAAA,OACA0J,oBAAA,0BACAC,2BAA0C,sBAC1CjF,oBAAA,sBACAC,qBAAsD,uBACtDC,0BAAwD,4BACxDC,2BAAwC,6BACxCC,mBAAsC,qBACtCC,kBAAwC,oBACxCC,mBAAA,qBACA4E,YAAA,cACAC,wBAAY,uBAChB1E,aAAA,eAEI2E,QAAc,UACdC,MAAA,QACAC,YAAwB,cAC5BC,WAAA,aAEIC,kBAA0B,oBAC1BC,gBAAA,UACAC,oBAAoC,UACpCC,sBAAgC,cAChCC,gBAAA,gBACAC,gBAA4B,iBAC5BC,aAAA,eACAC,cAAgB,QAChBC,iBAAA,mBACAC,0BAAgC,4BAEhCC,eAAwC,iBACxCC,iBAAA,OAEAC,mBAAc,qBACdC,cAAqB,gBACrBC,UAAA,gBAEJC,MAAqB,QAENC,sBAAA,wBAEHC,sBAAA,uDAEP/O,qBAAAf,qCAEG,MAAA,CAEJ1iC,OAAA0mC,EAAAA,EAAAxiD,cAAAwiD,EACIC,OAAAla,WAAkBka,GAAWlD,qBAAAf,gBAAAkE,eAGzB,CAEPhrD,WAAAA,GACJk6C,MAAA,CAAA,UAAAuY,cAED9K,OAAAA,CAAAA,0GAnBAA,EAAAhb,GAAA7jC,EAAA,iGCtGM5B,eAAAjM,EAAA,aAAA,CAAAuM,OAAA,IACA,MAAAqgD,EAA2DtsD,iBAKxCN,EAAA47D,eAAA,CACrBC,KAAA,SACAC,KAAA,OACAC,KAAA,QACAC,KAAA,QACAC,KAAA,QACAC,KAAA,QACAzM,KAAA,UACA0M,KAAA,UACAC,KAAA,iBACAC,KAAA,QACAC,KAAA,SACAC,KAAA,SACAC,KAAA,OACAC,KAAA,YACAC,KAAA,YACAC,KAAA,UACAC,KAAA,aAEkB,WAElBC,KAAA,kBACF,QACFC,KAAA,2BACAjR,uGC5BMhqD,OAAAoK,eAAA8wD,oBAAwD,aAAA,CAAAxwD,OAAA,IAGxD,MAAAywD,cAAA18D,YACAysD,kBAAA7pD,kBACA+5D,eAAAp1D,eACAq1D,kBAAAn1D,8EAGMo1D,kBAAA10D,kBACJ20D,iBAAAx0D,eACR,MAAAy0D,kBACAt4D,WAAAA,QACAu4D,WAAgB,GAEhB,CAAA,IAAAN,cAAAlQ,eACA,IAAAoQ,kBAAAnL,gBAEA,IAAAhF,kBAAAwQ,oBAKKC,eAAAjG,aAAA,IAAAiG,eAAAjG,aAAA,IAAA4F,kBAAAM,gBAAA,IAAAzL,iBAAA0L,eAAA,IAAAT,eAAAU,aACL,IAAAP,iBAAAQ,mBACAlyB,QAAAmyB,IACAl6D,KAAAm6D,kBAAAD,KAUKE,MAAAA,CAAAzG,EAAA5K,GAtCL,GAuCI/oD,KAAA25D,WAAAhG,+OCNJz1D,OAAAoK,eAAA+xD,oBAAA,aAAA,CAAAzxD,OAAA,gEAGAwwD,oBAAAl1D,oBACK+kD,mBAAA7kD,iBA6BL8G,QAAAiwC,SAA+B,4BAAAmf,YAAA,CAAA,QAAA,SAAA,UAAA,UAAA,UAAA,OAAA,MAAA,SAAA,SArBV,MAAAC,kBAChBn5D,WAAAA,CAAAu6B,QACDA,KAASA,EACb37B,KAAAozC,OAAA,CAEA+U,SAAA,IAESnoD,KAAAw6D,OAAA,GACJx6D,KAAAyyC,OAAA,CAIOkV,MAAA,CAAAhF,GAAA,KAAA8X,GAAA,8BAWPz6D,KAAA06D,aAAA,GAIL16D,KAAA26D,eAAA,GACA36D,KAAA46D,UAAA,IAAAxB,oBAAAM,kBAEA,IAAAmB,EAAA,6BAEA76D,KAAA26D,eAAAhH,GAAAkH,IAEiB76D,KAAA26D,eAAAG,WAAA,SACjBH,yBAMAI,MAAAA,GACoB,IAAA,MAAIpH,UAAa6G,OAEb,OAAA,EAEA,OAAA,CACA,CAEPQ,SAAAA,CAAA/9D,EAAA2L,GACjBsC,QAAA,WAAsBjO,OAAA2L,KACtB5I,KAAAozC,UAAwBxqC,EACxB5I,KAAA27B,KAAAjmB,UACA1V,KAAA27B,KAAAjmB,SAAsB,CAAAqxC,SAAA/mD,KAAA+oD,IAAA,CAAAh+C,KAAA,SAAAgjC,GAAA9wC,EAAA2L,WAItBqyD,MAAAA,CAAAtH,EAAAuH,EAA8BtyD,GAC9BsC,QAAAyoD,OAAAA,KAAAuH,OAAAtyD,KAEA4xD,KAAAA,OAA6B7G,KAC7B3zD,KAAAozC,OAAA+U,SAAAhoD,KAAAwzD,GACA3zD,KAAAw6D,OAAuB7G,GAAA,IAEvB3zD,KAAAw6D,OAAA7G,GAAAxzD,KAAA,CAAA4tC,GAAAmtB,EAAAtyD,UACA5I,KAAAm7D,SAAAxH,EAAAuH,EAAAtyD,EAEgB,qBAIhB,MAAA,CACAwqC,YAAAA,OACAonB,OAAAA,KAAAA,QAKiB,OAAA1R,CAAA6K,EAAA5K,YAMjBhb,IACgB,IAAA,SAChB,GAAA/tC,KAAA06D,aAAAnT,SAAAoT,KAAAA,eAAAhH,GAGA,OAAsB3zD,KAAA8oD,QAAA,aAAA,CAAA/a,GAAA,UAAAnlC,MAAAmgD,EAAAngD,QAEN5I,KAAAyyC,OAAI2oB,cAERC,2BAAQ,CAAAttB,GAAA,UAAAnlC,MAAAmgD,EAAAngD,cAGR,IAAA,eACP5I,KAAAyyC,OAAA8U,QAAAmT,KAAAA,aAAAnT,SAAAvnD,KAAA26D,eAAAG,YACL96D,KAAAyyC,OAAA2oB,UAAA,IAAAp7D,KAAAyyC,OAAA2oB,QAAA//D,QAAA0tD,EAAAngD,QAAA,CAGA,MAEe0yD,EAAA,CAAAvtB,GAAA,SAAAnlC,MADK2yD,aADpB9oB,KAAAA,OAAA2oB,aAAAr6D,OAAA,CAAAgoD,EAAAngD,UAIA5I,KAAoBq7D,cAAA,aAAAC,EACR,CAGZ,UACA,QACAvS,EAAAngD,MAAAqgD,mBAAAf,gBAAAG,WAAAU,EAAAngD,OAEQ,UACA,UACAmgD,EAAAngD,mFAEC,MACJ,IAAA,cAEL,YADA5I,KAAAyyC,OAAAkV,MAAA8S,GAAAxR,mBAAAf,gBAAAS,YAAAI,EAAAngD,YAEA,aAGA,YAFA5I,KAAAyyC,OAAA6f,KAAAmI,GAAAxR,mBAAAf,gBAAAS,YAAAI,EAAAngD,QAGiB,IAAA,YACT,OACA,MAAM6xD,OAAAhoB,OAAAsW,EAAAhb,IAAA0sB,GAId,OAFQz6D,KAAAyyC,6EACRzyC,KAAAyyC,OAAAsW,EAAAhb,IAAA0sB,GAAgCA,MAAhCA,EAAgCA,OAAAhoB,OAAAsW,EAAAhb,IAAA0sB,QAEhB,OACH,IAAA,eACI1R,EAAAngD,MAAA+F,SAAAo6C,EAAAngD,MAAA,IACD,MAEP,IAAA,OAET,MAAA6+C,EAAA94C,SAAAo6C,EAAAngD,MAAiC+L,OAAA,EAAA,GAAA,IACjC8yC,IAAArF,MAAAqF,KACAznD,KAAAyyC,OAA+BgV,KAAAA,GAEV,MAEJ,IAAA,uBACjB,yBACa,4BAEb,IAAA,wBACgB,gBACHsB,EAAAngD,MAAA,iBAAAmgD,EAAAngD,MAAA+F,SAAAo6C,EAAAngD,MAAAmgD,IAAAA,EAAAngD,MAEG,MACH,IAAA,wBACJmgD,EAAAngD,MAAA,iBAAAmgD,EAAAngD,MAAAqpC,WAAA8W,EAAAngD,OAAAmgD,EAAAngD,MAET,MACS,IAAA,UAEJmgD,EAAAngD,MAAA,MAAAmgD,EAAAngD,MAKL5I,KAAAq7D,cAAe1H,EAAA5K,urCClNTzgD,eAAAjM,EAAA,aAAA,CAAAuM,OAAA,UACKu+C,EAAAxqD,aAAA4C,WAMXi8D,KA2DAn/D,EAAAm/D,sBAAAn/D,EAAAm/D,oBAAA,CAAA,IA1DCA,EAAA,MAAA,GAAA,QACGA,EAAAA,EAAoB,uCAAA,GAAA,sCACpBA,EAAAA,EAAA,mBAAA,GAAA,kBACAA,EAAAA,EAAA,iBAAA,GAAA,gBACAA,EAAAA,EAAA,gBAAA,GAAA,eACAA,EAAAA,EAAA,gBAAA,GAAA,eACAA,EAAAA,EAAmB,iCAAA,GAAA,gCACnBA,EAAAA,EAAA,sCAAA,GAAA,qCACAA,EAAAA,EAAA,oBAAA,GAAA,mBACAA,EAAAA,EAAA,UAAA,GAAA,YACAA,EAAAA,EAAA,kBAAA,IAAA,iBACAA,EAAAA,EAAA,SAAA,IAAA,WACAA,EAAAA,EAAA,wBAAA,IAAA,uBACAA,EAAAA,EAAA,sBAAA,IAAA,qBACAA,EAAAA,EAAA,oBAAA,IAAA,mBArBOA,EAAAA,EAsBX,sBAAA,IAAA,qBAsCAA,EAAmBA,EAAA,8BAAA,IAAA,wFAEnBA,EAAAA,EAAA,aAAA,IAAA,uIAIA,MAAAC,GAMAA,EAAAC,eAAA,CAECnzD,IAAAA,CAAA1K,EAAAyjD,6CAIDvlD,IAAA,KAQA4/D,OAAA,CACA5/D,IAAA,GACKulD,IAAAA,CAAAA,EAAAA,KACH,CAEFsa,eAAA,IAAAzU,EAAAT,sBAAAn+C,IAAA1K,EAAAyjD,8aA/BAua,cAAA1U,qGC5BoBjpD,OAAAoK,eAAYwzD,cAAA,aAAA,CAAAlzD,OAAA,IACZ,MAAAq+C,YAAAtqD,WACAwqD,QAAA5nD,WACpB2nD,SAAAhjD,OACA63D,UAAA33D,MACwB8G,QAAA+7C,YAAqB,uDAEzBvc,eAAAA,CAAAx1B,EAAAnK,EAAAixD,EAAAC,GAEH,MAAAr+D,EAAAs+D,YAAAC,gBAAAjnD,MACjBjZ,EAAsBiZ,EAAAjZ,WACtByD,EAAA,IACA,GACsB,MAAA08D,EAAAF,YAAAG,wBAAAz+D,SAEF,MAAAyK,EAAA,CAAA,EACpB,OAAA,SAAA0C,GAAkB,MAAAA,EAAA,GAAA,KAAAA,uBAGN,MAAA6rB,EAAAswB,SAAWhT,QAAAwM,aAAAxrC,EAAArR,MAAA,GAAAjG,GAAAiX,QAAA,SAAA,WACP9J,GAChB,IAAA,OACoB,IAAA,WACpB,OACAoJ,EAAA+nD,YAAAI,aAAA1lC,GAC4BziB,EAAA+nD,YAAAK,aAAApoD,GACA,MAC5B,IAAA,MACwB,IAAA,OACxB,IAAA,OACAA,EAAAyiB,EACA,UAC4B,WAC5B,OACA,IAAA,WACwB,OACI,IAAA,OACP,IAAA,OAGDziB,EAAA+nD,YAAUI,WAAAN,EAAEplC,GAChC,MACoB,QACpBziB,EAAA6nD,GAA0BE,EAAAA,4BAAgC,CAAAtlC,GAEtC,MAEpB,IAAA,OACYziB,EAAK+nD,YAAAM,sBAAAtnD,EAAAxV,EAAA,EAAAzD,EAAA2B,GACjBuW,EAAY,CACZsoD,YAAwCtoD,EAAA45B,GAExCnX,iBAAuB0lC,WAAAN,EAAA9U,SAAAhT,QAAAwM,aAAAvsC,EAAA7T,KAAA1C,GAAAiX,QAAA,SAAA,sCAMP,CACA6nD,MAAAA,EAAA,CAAA,YACO,EACHV,GACA,KAAA,EACpBU,EAAAtpB,OAA2B8T,SAAAhT,qBAAoBh/B,EAAArR,MAAAnE,EAAgBA,EAAU,GAAG9B,GAC3D8B,GAAA,EACjB,MAEY,KAAA,EACA,KAAA,EACZ,MAAA2N,EAAA,aAEgBsvD,EAAYzV,SAAAhT,mBAAkBx0C,EAAYzD,EAAQoR,KAE7C+lC,OAAA8T,SAAAhT,QAAAwM,aAA8BxrC,gBACnCxV,EAAei9D,EAAA,EAEZ,MACnB,QACgB,MAAM,IAAAx9D,MAAA,2CAAA68D,GAGtBU,EAAAtpB,OAAsB8oB,YAAA1T,mBAAAkU,EAAAtpB,QACtBspB,EAAA3xD,KAAAgxD,UAAAP,oBAAAtmD,EAAAxV,IACAA,KAEAi9D,EAAsBzV,SAAAhT,QAAA0oB,SAAA1nD,EAAAxV,EAAAzD,EAAA2B,GACtB8+D,EAAsBD,YAAAvV,SAAAhT,QAAAwM,aAAAxrC,EAAArR,MAAAnE,EAAAi9D,GAAA/+D,GACtB8B,EAAiBi9D,EAAMP,EACvBM,EAAAp8D,KAAAzD,OAAAQ,KAAA6X,EAAArR,MAAAnE,EAAAzD,IAEgBkY,EAAAuoD,CAChB,CACA,MACA,IAAA,MACA,IAAA,OACAvoD,EAAAgzC,QAAAvD,UAAAr7C,IAAA2M,EAAA,GACA,UAEY,OASZ,IAHAxV,GAAA,EAEgByU,EAAA,SAEI,MAAA0oD,EAAA3nD,EAAArR,MAAAnE,EAAAA,EAAAwnD,SAAAhT,QAAA0oB,SAAA1nD,EAAAxV,EAAAzD,EAAA2B,IACpB8B,GAAA,EAEoByU,EAAAhU,KAAA+mD,SAAAhT,QAAAwM,aAAAmc,EAAAj/D,GAEpB,CACa,UAED,UACA,WACA,UAEA,OAEA8B,KACZ2I,EAAAy0D,oEAEAp9D,KACAi9D,EAAAzV,SAAsBhT,QAAA0oB,SAAA1nD,EAAAxV,EAAAzD,EAAA2B,GACVyK,EAAAo0D,6BAAa/b,aAAAxrC,EAAArR,MAAAnE,EAAAi9D,GAAA/+D,GACzB8B,EAAAi9D,EAAAP,EAEgB/zD,EAAAuuB,KAAAswB,SAAAhT,QAAoBwM,aAAAxrC,EAAArR,MAAAnE,EAAAzD,GAAA2B,GAAAiX,QAAA,SAAA,IACpCV,EAAsB,CAAA9L,GACtB,UACgB,OAEH8L,EAAA+nD,YAAAM,sBAAAtnD,EAAAxV,EAAAzD,EAAA,cACDkY,EAAA,CAAAk4C,iBAAWl4C,EAAE45B,GAAAue,WAAAn4C,EAAA7T,MACzB,UACgB,OAChB6T,EAAA+nD,YAAsBM,sBAAAtnD,EAAAxV,EAAAzD,EAAA,cACTkY,EAAA,CAAAk4C,iBAAAl4C,EAAA45B,GAAAztC,KAAA6T,EAAA7T,YAEb,IAAA,OACAq8D,EAAAzV,SAAsBhT,QAAA0oB,SAAA1nD,EAAAxV,EAAAzD,EAAA2B,GACbsuD,MAAAA,EAAAhF,SAAAhT,QAAAwM,aAAAxrC,EAAArR,MAAAnE,EAAAi9D,GAAA/+D,GACD8B,EAAAi9D,EAAAT,YAAAG,wBAAAz+D,GAEG,MAAAm/D,EAAA9gE,EAAAyD,aAGXysD,OAAsBj3C,EAAAutC,UAAA/iD,GACNs9D,QAAAD,oBAAoBr9D,EAAA,QAAA5B,GAEpB,UACP,OAAA,CACD6+D,mBAAmBC,SAAA1nD,EAAAxV,EAAAzD,EAAAA,EAAA2B,GACtB,MAAAyiB,EAAA6mC,SAAAhT,QAAAwM,aAAAxrC,EAAArR,MAAAnE,IAAAi9D,GAAA,cACLj9D,EAAAi9D,EAAA,EACAA,EAAAzV,SAAAhT,QAAA0oB,SAAA1nD,EAAAxV,EAAAzD,EAAAyD,EAAA9B,GACAsqC,MAAAA,EAAAgf,SAAAhT,QAAAwM,aAAAxrC,EAAArR,MAAAnE,IAAAi9D,GAAA,gBACAA,EAAA,EACWA,EAAAzV,SAAAhT,QAAA0oB,SAAA1nD,EAAAxV,EAAAzD,EAAAyD,EAAA9B,MAIXmN,KAAuBsV,EACd6nB,WACDu0B,YALMvV,SAAAhT,QAAAwM,aAAAxrC,EAAArR,MAAAnE,IAAAi9D,GAAA,cAMTr8D,KAAA4U,EAAArR,MAAAnE,IAAAzD,IAEL,KACA,CAEA,IAAA,OACA,IAAA,WACA,kBAGA,WACK,IAAA,WACM,WACE,OAEJkY,EAAA+yC,SAAAhT,QAAAwM,aAAAxrC,EAAArR,MAAAnE,EAAAi9D,GAAA/+D,GACD,UACH,OAAA,CAGG++D,EAAWzV,SAAAhT,QAAA0oB,SAAA1nD,EAAAxV,EAAAzD,EAAAA,EAAA2B,GACX,MAAA6+D,EAAAvV,SAAiBhT,QAAAwM,aAAAxrC,EAAArR,MAAAnE,IAAAi9D,GAAA,cACjBj9D,EAASi9D,EAAQ,EACpBA,EAAAzV,SAAAhT,QAAA0oB,SAAA1nD,EAAAxV,EAAAzD,EAAAyD,EAAA9B,GACMuW,EAAA,CAAAsoD,cAAAQ,IAAA/V,SAAAhT,QAAAwM,aAAAxrC,EAAArR,MAAAnE,EAAAzD,EAAAyD,GAAA9B,IAEX,UAEY,OAGZuW,EAAqBe,EAAArR,QAAA5H,GACL,MAGP,QACJiP,QAAA,wCAAAH,UAGLoJ,EAEYq0C,yBAAAA,CAAAC,GAEH,OADOA,EAAAA,EAAOC,qBAGtB,IAAA,kvBAvND,8UChCAtP,GAAAF,EAAAA,EAAa98C,MAAA28C,EAAAC,GAAA,KAAAz4C,WA0BDrC,OAAAoK,eAAM40D,cAAA,aAAA,CAAAt0D,OAAA,IACT,MAAAu+C,QAAAxqD,WACDuqD,SAAA3nD,OACHu8D,cAAA53D,8BAEG,MAAAi5D,YACgBC,wBAAAA,CAAAxgE,GACxBygE,IAAAA,IACAC,EAAA,EACoB,KAAAD,EAAAzgE,EAAIX,OAAE,GACNohE,IAAAC,IACpB1gE,EAAA0gE,GAAA1gE,EAAAygE,IAEAA,GAAAzgE,MAAAA,EAAAygE,IAAA,IAAAzgE,EAAAygE,EAAA,GAAA,EAAA,EAEoBC,WAEpBD,EAAAzgE,EAAyBX,SAEzBW,EAAA0gE,KAAA1gE,EAAAygE,QAEAx5D,QAAgBy5D,0BAEhBl9D,EAAAm9D,GACA,IAAA1xC,SAEA0xC,GACY,KAAA,IACI,CACPxvB,GAAA3tC,EAAA9D,SAAA,QAAA,EAAA,GACDL,yBAAcsM,IAAAnI,EAAA,IAEX,MAEX,KAAA,EACgByrB,EAAA,CACJkiB,GAAA3tC,EAAA9D,SAAO,QAAA,EAAA,GACnBL,OAAkBkrD,QAAAvD,UAAAr7C,IAAAnI,EAAA,GACF++B,MAAAg+B,YAAUK,eAAAp9D,EAAAyD,MAAA,EAAA,MAE1B,MAEK,KAAA,EACMgoB,EAAA,CACXkiB,GAAA3tC,EAAA9D,SAAA,QAAA,EAAA,GACAL,OAAkB8/D,UAAAN,WAAAC,eAAAnzD,IAAAnI,EAAA,GAClB++B,MAAAg+B,YAAAK,eAAAp9D,EAAAyD,MAAA,EAAA,MAGa,MACb,QACA,MAAiC1E,IAAAA,8BAAAo+D,UAEjC1xC,EAEA4xC,2BAAAA,CAAAF,UACaA,GACb,KAAA,EACK,OAAA,EAEmB,KAAA,EACxB,KAAA,EACA,OAAA,WAEA,MAAA,IAAAp+D,MAAkB,qCAGDq+D,qBAAAA,CAAAtoD,UAEjBgE,OAAA,CACiBwkD,uBAAAxW,SAAAhT,QAAAmN,aAAA94C,IAAA2M,EAAA,EAAA,GACjByoD,wBAAoCzW,SAAAhT,QAAAmN,iBAAqBnsC,EAAE,EAAA,GAC/C0oD,UAAA1W,SAAAhT,QAAAmN,aAAA94C,IAAA2M,EAAA,EAAA,IAEHk+B,OAAA,CACJyqB,kBAAA3W,SAAAhT,QAAAmN,aAAA94C,IAAA2M,EAAA,EAAA,GAEL+N,YAAAikC,SAAAhT,QAAAmN,aAAA94C,IAAA2M,EAAA,EAAA,GACA4oD,WAAA5W,SAAAhT,QAAAmN,aAAA94C,IAAA2M,EAAA,EAAA,GACA6oD,kBAAA7W,SAAAhT,QAAAmN,aAAA94C,IAAA2M,EAAA,EAAA,GACA8oD,sBAAA9W,SAAAhT,QAAAmN,aAAA94C,IAAA2M,EAAA,EAAA,KAIK+oD,oBAAAA,CAAApgE,EAAAqgE,EAAAX,EAAAtB,GACI,OAAAsB,GACD,KAAA,EACQzB,OAAAA,cAAU5nB,iBAAar2C,EAAAqgE,EAAAnwB,GAAAwvB,EAAAtB,GACvC,KAAA,EACA,KAAA,SACAiC,EAAA/+B,MAAAiU,OAAA2qB,oBACAlgE,EAAyBs/D,YAAAC,sBAEZc,EAAA/+B,MAAAiU,OAAA4qB,wBAEbngE,EAAAA,EAAAgG,MAAAhG,EAAAA,EAAA5B,uGAMa,+BAgBgB8sD,EAAA0T,GAE7B1T,OAAAA,GAAA0T,EAAuB,IAAUA,EAAU,YAGtCzV,EAAAhiD,UACD8zC,YAAA94C,UAAA,OAAA,EAAA,YAEQA,KAAAgnD,YAEAhnD,KAAA+mD,SAAWA,EAEH/mD,KAAAgF,QAAAA,QACIm5D,QAAAnX,KAAAA,iDACHmX,GAAA,QAAAA,EAAAvC,eAAA,MAAA,IAAAz8D,MAAA,2DAGrB,YADAg/D,UAAAA,EACAn+D,KAAAo+D,WAAAD,SAAAA,EAAA/iE,QAAA4gE,MAAAmC,EAAAh/B,MAAAk/B,iBAEqBr+D,KAAAs+D,sBAEAt+D,KAAAu+D,eAAqB7gE,iDAIzBsC,UAAA,OAAA,EAAA,kBACIw+D,QAAAx+D,KAAAgnD,UAAAtN,UAAAqiB,UAAAN,WAAAgD,gBACrBC,EAAAF,EAAA9gE,KAAAq+D,UAAAN,WAAAgD,eAAA1iE,IAAA,OAAA2iE,EAAA,EAEa1+D,KAAA2+D,wBAAAD,EAAAF,EAAA9gE,MAERsC,KAAAu+D,aAAAv+D,KAAAm+D,UAAAzgE,KAAA8gE,EAAA9gE,QAIDihE,uBAAAA,CAAoBD,EAAAE,qDACxB,MAAYhiE,EAASC,OAAES,MAAAohE,GAEf,aADM1+D,KAAAgnD,UAAUnN,WAAAj9C,EAAA,EAAA8hE,GAChB1+D,KAAOu+D,aAAMv+D,KAAAm+D,UAAAzgE,KAAAkhE,KAGrB,YAAAL,CAAAxB,GACY,OAAAjkB,YAAA94C,UAAA,OAAA,EAAA,YACZpD,MAAAA,EAAAC,OAAAS,MAAAy/D,SAAA/8D,KAAAgnD,UAAAnN,WAAAj9C,IAAAmgE,GACAhU,IAAAA,MAAAA,KAAsB/oD,KAAA6+D,cAAAjiE,GACTmxC,GAAA,SAAAA,EAAAA,GACb,IAAA,MAAAnX,KAAAmyB,EAAAngD,MAAAguB,KACA52B,KAAAi7D,OAAAkC,YAAA2B,uBAAA/V,EAAAhb,GAAAgb,EAAAngD,MAAA6zD,aAAA7lC,QAEYmyB,GAAe,QAAfA,EAAAhb,GACZ,IAAA,MAAAnlC,KAAAmgD,EAAAngD,MACA5I,KAAAi7D,OAAAkC,YAAA2B,uBAAA/V,EAAAhb,GAAAnlC,EAAA6zD,aAAA7zD,EAAAguB,WAEa,GAAAz6B,MAAAK,QAAAusD,EAAAngD,OACb,IAAA,MAAAA,KAAAmgD,EAAAngD,MACY5I,KAAAi7D,OAAAlS,EAAAhb,GAAAnlC,QAIP5I,KAAAi7D,OAAAlS,EAAAhb,GAAAgb,EAAAngD,oYAnLL,MAAAm2D,yMCvBA,SAAA1iE,oDAGM6qD,MAAAA,EAAAvqD,OACNqiE,EAAA,oCAMe,CACfjjE,IAAA,MACQwM,CAAA1K,EAAAyjD,KACR,MAAAvT,EAAAlwC,EAAAvB,SAAAglD,SAAAA,EAAAA,EAAAjlD,EAAA4iE,YAAAljE,KAEQ,IAAAgyC,EAAUrb,MAAAssC,GACb,MAAA,IAAA7/D,MAAA+nD,uCAAAA,EAAAhT,QAAAkN,MAAArT,aAEGA,GAERrN,IAAAA,CAAA9jC,EAAA8C,EAAAquC,KACQ,MAAA7/B,EAAArR,OAAAQ,KAAA0wC,EAAA,iFArBR,4BCiB8C7vC,OAAAoK,eAAA42D,YAAA,aAAA,CAAAt2D,OAAA,IAClC,MAAAu+C,QAAAxqD,WACAw9C,SAAA56C,aACZ4/D,WAAYj7D,aACZk7D,OAEAh+D,WAAAA,CAAkCyqB,EAAAwzC,GAElBr/D,KAAAq/D,OAAAA,EACA,MAAAC,EAAMD,KAAqB,GAC3BllB,SAAAU,GAAAhvB,EAAAwM,WAAeinC,EAAoB,+CAAKA,KAEvCt/D,KAAAjE,IAAA8vB,EAAAwM,gBAEjBipB,GAEa7gD,MAAAA,EAAA5C,EAAAolD,aAAA3B,KAAA,MACJie,EAAA1hE,EAAAolD,aAAA3B,EAAA,EAAA,GAET5wC,EAAe,CACN8uD,YAAA3hE,EAAAolD,aAAA3B,GACDme,gBAAW5hE,EAAAgmD,aAAAvC,EAAA,GACdoe,WAAA7hE,EAAAolD,aAAA3B,EAAA,GACJqe,WAAAl/D,EAAA,EAAA8+D,GAAA75D,KAAAmrC,IAAApwC,GAAA8+D,GAAA9+D,uhBCxCD6H,eAAAs3D,YAAA,aAAA,CAAAh3D,OAAA,IACA,MAAOi3D,WAAeljE,mBAItBmjE,kBAAAD,WAAAz1D,SAEIhJ,WAAAA,CAAAvD,GACIy9C,QACRt7C,KAAYnC,IAAIA,CACX,CACL2O,KAAAA,GAVAxM,KAAAG,UAAAtC,iXCEA,yKAOMshE,WAAA56D,OACAuiD,gBAAYhiD,cAIDo6D,UAAAj6D,sBAEX26D,cAAAt0D,YACA27C,QAAAA,YAAwB,8BAYlBH,MAAAA,mBAAAA,gBAAAiZ,uCAEM//D,UAAA,OAAA,EAAA,YAGlB,GAAkB,qBADlBgnD,UAAAtN,UAAAsmB,IAAArE,SACAsE,QACA,MAAA,IAAA9gE,MAAA,qCACA,MAAA4L,aAA2Bi8C,UAAAtN,UAAAylB,WAAAF,aAE3B,OAAAl0D,GACA,IAAA,OACA/K,KAAA+mD,SAAAiU,UAA2B,aAAAjwD,GAE3B/K,KAAAkgE,cAAqC,EACrC,UACgB,OAChBlgE,KAAA+mD,SAAAiU,UAA+B,uBAClBh7D,KAAAkgE,cAAA,EACb,MAAA,QACA,MAAgB/gE,MAAA,0BAAA4L,QAEhBg8C,SAAAiU,UAAA,YAAAh7D,KAAAkgE,cACoB,IACpB,OAAA,CAAA,MAAAC,aAAAnZ,UAAAtN,UAAAsmB,IAAArE,QAEgDzwD,QAAA,YAAAi1D,EAAAF,+CAC/BxlB,+BAELz6C,KAAOgnD,UAAAvL,OAAK2kB,EAAA3lB,aAIXh5C,GAAAA,EAAA2yC,UAAAmF,SAAAV,UACb,MAAWp3C,KAMS,QAAAipC,CAAA7e,sBACpB7rB,UAAA,OAAiC,EAAA,YACjC6rB,OAAAA,EAAAo0C,aACA,OACA,MAAAxtB,QAAiCzyC,KAAAgnD,UAAAtN,UAAAwlB,IAAAA,UAAAE,OAAAvzC,OAAAq0C,eASjC,OAPAlgE,KAAA+mD,SAAAiU,0BAA2CvoB,EAAAitB,YAC3C1/D,KAAA+mD,SAAAiU,UAA2B,aAAgBvoB,EAAAktB,YAC3C3/D,KAAA+mD,SAAAiU,6BAA2BvoB,EAAA+sB,aACPx/D,KAAA+mD,SAAAiU,UAAAvoB,kBAAAA,EAAAgtB,iBACAz/D,KAAA+mD,SAAAiU,UAAAvoB,WAAAA,EAAAgtB,gBAAAhtB,EAAAktB,YAEpB3/D,KAAA+mD,SAAAiU,UAAAvoB,UAAAA,EAAA/K,iBACA7b,EAAAwM,UACA,IAAA,OACoB,MAAAgoC,QAAArgE,KAAAgnD,UAAAtN,UAAA,IAAAyN,QAAAV,WAAA56B,EAAAwM,YAAAioC,EAAAV,IAAAA,cAAAE,UAAAO,GAECE,EAAAC,UAAAtkB,WAAAokB,gBA3ErBpD,IAAAA,gBA2EqBC,aAAAjrB,WAAA6U,SAAAwZ,EAAAvgE,KAAAgF,iPCTrB,SAAA3I,UAEAiM,eAAAjM,EAAA,aAAA,CAAAuM,OAAA,IACAu+C,MAAAA,EAAAxqD,WACAwiE,EAAA5/D,OAGA,IAAAkhE,2JAAAA,EAMApkE,EAAAokE,WAAApkE,EAAAokE,SAAA,CAAA,+BAJKA,EAAAA,EAAA,OAAA,GAAA,SACHA,EAAAA,EAAA,cAAA,GAAA,gBACFA,EAAAA,EAAA,SAAA,GAAA,WAMApkE,EAAAqkE,iBAAA,CACA3kE,IAAA,GACYwM,IAAA,CAAA1K,EAAAyjD,KACZ,CAEAqf,GAAAxB,EAAUF,YAAA12D,IAAA1K,EAAAyjD,GAERlmD,QAAA+rD,EAAA1D,UAAAl7C,IAAA1K,EAAAyjD,EAAA,GAAA,oBAEmB6F,EAAA1D,UAAiBl7C,IAAK1K,IAAU,GAE5C+iE,YAAAzZ,EAAc1D,UAAOl7C,IAAA1K,EAAAyjD,EAAA,IAE9Buf,eAAA1Z,EAAwB1D,UAAcl7C,IAAA1K,EAAKyjD,EAAA,IAE3Cwf,gBAAA3Z,EAA2B1D,UAAKl7C,IAAK1K,EAAAyjD,EAAA,IAErCyf,kBAAwB5Z,EAAA1D,UAAUl7C,IAAA1K,EAAAyjD,EAAA,IAEjC0f,sBAAA7Z,EAAA1D,UAAAl7C,IAAA1K,EAAAyjD,EAAA,IAGD2f,qBAAA9Z,EAAA1D,UAAAl7C,IAAA1K,EAAAyjD,EAAA,IAEA4f,QAAA,IAAA/Z,EAAAV,eAAAl+C,IAAA1K,EAAAyjD,EAAA,2sBAzCA,+NC3EA,SAAAlI,EAAApgC,GAAAA,EAAAlH,KAAA4G,EAAAM,EAAqDpQ,OAAA,IAAAqwC,EAAA,SAAAvgC,GAAAA,EAAAM,EAAApQ,MAAA,GAAAgQ,KAAAugC,EAAAE,EAAA,CACrDD,GAAAF,EAAAA,EAAA98C,MAAA28C,EAUeC,GAAA,KAAAz4C,SAIf,EAQArC,OAAAoK,eAAA64D,cAAA,aAAA,CAAAv4D,OAAA,IAEA,MAAAq+C,YAAAtqD,WAAAykE,SAAA7hE,mCAiHK46C,SAAA/1C,6BA/GL0iD,gBAAAviD,6GAIA88D,SAAA,iBACKC,oBAAAxa,gBAAAiZ,0BAELzkB,SAAAt/C,WACAgE,KAAAuhE,IAAA,EACA,CAOAC,wBAAAA,CAAAC,GACa,IAAAC,EAAAD,EAAAE,YAAA,EAAAF,EAAAG,gBAAAH,EAAAE,YAAA,GAAA,+BAEbD,EAAsBD,EAAA9B,WASFkC,qBAAAA,CAAA9a,EAAAC,EAAehiD,UACf8zC,YAAA94C,UAAA,OAAA,EAAA,YAAA,GAAAgnD,EAAA3L,UAAA2L,EAAA3L,SAAA2L,EAAAxQ,SAAAsrB,aAAAC,UAAAhmE,IAEpB,YADAmP,QAAA,8CAGa,MAAA82D,QAAAhb,EAAAlN,UAAAgoB,aAAAC,gBACbpB,KAAWU,SAAA,OACNra,EAAAvL,OAAAqmB,aAAAC,UAAAhmE,WACDkmE,UAAsBvoB,UAAgBooB,sBAAiBE,gBACnDE,UAAAnb,EAAAib,EAAAC,EAAA,GAAAj9D,EAAAm9D,iBAIG,GAFHj3D,QAAA,oCAAA87C,EAAAxQ,YAEGwQ,EAAoB3L,SAAqC,CAEpE,MAAAX,EAAAsM,EAAA3L,SAAA2L,EAAAxQ,SACkB55C,EAAAC,OAAgBS,MAAAo9C,GAGV,aAFxBsM,EAAAnN,WAAAj9C,GAEwB0kE,YAAuCc,eAAArb,EAAAnqD,GAAAoI,EAAAm9D,WAE/D,IAKAC,qBAAAA,CAAArb,EAAAnqD,EAAyBq/D,GACD+F,MAAAA,EAAAF,aAAAC,UAASx5D,IAAO3L,EAAWA,EAAQX,OAAA6lE,aAAAC,UAAAhmE,KACtCo+C,SAAAuI,MAAAsf,EAAArB,GAAAU,SAAA,yBAEJrhE,KAAAkiE,UAAAnb,EAAAib,EAAAplE,EAAAA,EAAAX,OAAA+lE,EAAAtkE,KAAAu+D,oBAEGlV,EAAAib,EAAIplE,IAAeq/D,aACvC,EAAAngE,EAAAkmE,EAA8BK,OAAAvmE,IAAO,SAGbgmE,aAAMQ,cAAA/5D,IAAA3L,EAAA8C,mBAC9B4iE,cAAqCvmE,UACrCmrD,SAAAhT,QAAA0oB,SAAAhgE,EAAA8C,EAAA9C,EAAAX,QACA,MAAAgB,EAAAL,EAAAN,SAAAoD,QAAAA,EAAA+mB,UACwB/mB,EAAA+mB,EAAA,EAEQ87C,EAAApjC,MAAAhiB,eAChC2kD,aAAArB,SAAA+B,UAAA,CACA55D,MAEA6Q,EAFA7c,EAAAN,SAAwC,OAAAoD,EAAAA,GAAA6iE,EAAA7kE,MAExCke,MAAA,aAEgC,MAAA+a,KAAAld,EACHstC,EAAAkU,OAAAwH,YAAAxlE,EAAA05B,2BAMD8pC,SAAAp8C,YACH,SACJznB,EAAAiH,MAAAnE,EAAAA,EAAA6iE,EAAA7kE,yBAEAw2C,QAAA0oB,SAAa8F,EAAAphB,EAAAohB,EAAAzmE,QACd,MAAAwgE,EAAAiG,EAAApmE,SAAAglD,OAAAA,EAAA76B,OAEJ,UAChB5pB,OAA0BQ,KAASqlE,EAAwB7+D,MAAAy9C,IAC9CrE,EAAAmkB,SAAA9gE,GAAA,GAAA28C,KACJ,IAAAA,EAAAG,KAAA/hD,QAAA,UAAA,CACJ,MAAAsnE,EAAA,CACOlG,cAAAn8D,OACY8yC,OAAA6J,EAAAG,MAExB19C,GAAA6iE,EAAA7kE,KACgBqpD,EAAAkU,OAAAwH,YAAAxlE,EAAA0lE,kEAShBz3D,yDAAAjO,IAKwB,OAExB,KAAA6kE,aAAArB,SAAAmC,cAEY13D,gCAAoCjO,KACpC,MACZ,QACA,MAAgB,IAASkC,MAA6BojE,yBAAAA,EAAApjC,MAAgBhiB,sBAM3D,OAAA27B,sBAAA,OAAA,EAAA,kFACNqB,SAAAuI,MAAAmgB,EAAAlC,GAAA,OAAA,iBACJ3gE,KAAAuhE,IAAAsB,WAAAA,EACkB,MAAAC,EAAAD,EAAAE,gBAAAjB,aAAApB,iBAAA3kE,IAAA8vB,QAAAi3C,EAAA,EAAA9iE,KAAAgjE,yBAAAF,QAAAG,kmBAnInBjjE,KAAA+mD,SAAAiU,ucC+FIkI,KArDA9hE,WAAAA,CAAa8M,GACTlO,KAAAkO,IAAOA,CACV,CAEG,cAAAi1D,CAAAC,EAAA1jE,EAAA,iEAUR2jE,EAAA3f,aAAAhkD,GAAApD,SAAA,IAAA,mBAC4BoD,KAASpD,SAAA,IAAA,IAEjC+mE,eAAyB3jE,EAAApD,GAAAA,iBACzB+mE,EAAApgB,aAAAvjD,KAAApD,SAAA,IAAA,IAEA+mE,EAAAx/D,MAAAnE,EAAA,GAAAA,EAAA,IAAApD,SAAA,6FAU0B,QAC9B,KAAA4mE,KAAAI,WAAAp1D,IAAA,MAAA,yCACsC,UACjC,KAAAg1D,KAAAK,sBAAAr1D,IAAA,MAAA,kBACD,KAAAg1D,KAAAM,kBAAAt1D,IAAA,MAAA,gBAEA,KAAAg1D,KAAAO,YAAAv1D,IAAA,MAAA,2BASJ,MAAAk1D,EAAAvmE,OAAAS,MAAA,WACI8lE,EAAAzf,cAAch1C,SAAST,EAAArK,MAAA,EAAA,GAAA,IAAA,GACvBu/D,EAAArgB,cAAcp0C,SAAST,EAAArK,MAAA,EAAA,IAAA,IAAA,GAEvBu/D,EAAArgB,cAAWp0C,SAAAT,EAAArK,MAAA,GAAA,IAAA,IAAA,GACXhH,OAAAQ,KAAA6Q,EAAArK,MAAA,GAAA,IAAA,OAAAlE,KAAAyjE,EAAA,GAKJvmE,OAAAQ,KAAA6Q,EAAArK,MAAA,IAAA,OAAAlE,KAAAyjE,EAAA,gDA3GA,OAAAF,KAAAxvD,OAAA1T,KAAAkO,IACA,EAGgBg1D,KAAAQ,aAAO,IAAAR,6CAClBA,KAAAS,WAAAT,IAAAA,KAAA,+DAC+B,IAAAA,KAAA,wCAE/BA,KAAAU,YAAA,IAAAV,KAAA,wCACLA,KAAAW,uBAAA,IAAAX,KAAA,wCACAA,KAAAY,oBAAA,IAAAZ,KAAA,wCAEAA,KAAAa,qBAAA,IAAAb,KAAA,wCACAA,KAAAc,uBAAAd,IAAAA,KAAA,wCACAA,KAAAe,sBAAA,IAAAf,KAAA,sEACwC,wCAC1BA,KAAAgB,oBAA4B,IAAAhB,KAAO,wCAC7BA,KAAAiB,aAAAjB,IAAAA,KAAoB,wCACpBA,KAAAkB,6BAAkClB,IAAAA,6CAClCA,KAAAmB,sBAAoB,IAAInB,KAAU,sEACRA,IAAAA,KAAM,wCACrCA,KAAAoB,iCAAmB,IAAApB,KAAA,wCAC7BA,KAAAqB,sBAAArB,IAAAA,KAAA,wCACLA,KAAAsB,8BAAAtB,IAAAA,KAAA,wCACAA,KAAAuB,wBAAA,IAAAvB,KAAA,wCAEAA,KAAAwB,gCAAA,IAAAxB,KAAA,wCACAA,KAAAyB,uBAAAzB,IAAAA,KAAA,wCACWA,KAAA0B,cAAA1B,IAAAA,KAA2B,wCAE1BA,KAAA2B,+BAAiC,IAAQ3B,KAAA,wCACzCA,KAAA4B,8BAAiC5B,IAAAA,KAAQ,wCACzCA,KAAA6B,2BAAmC,IAAA7B,KAAU,wCAC7CA,KAAA8B,2BAAU9B,IAAAA,KAAoD,wCAC9DA,KAAA+B,uBAA4B,IAAG/B,6CAC/BA,KAAAgC,mBAAyB,IAAShC,KAAA,wCACrCA,KAAAiC,eAAAjC,IAAAA,KAAA,wCACJA,KAAAkC,sBAAAlC,IAAAA,KAAA,wCACLA,KAAAmC,sBAAA,IAAAnC,KAAA,wCACAA,KAAAoC,iCAAA,IAAApC,6CAEAA,KAAAqC,8BAAArC,IAAAA,KAAA,wCACAA,KAAAsC,oBAAA,IAAAtC,KAAA,wCACWA,KAAAuC,gCAAYvC,IAAAA,KAAA,wCAEEA,KAAAwC,oBAAa,wCACbxC,KAAAI,WAAAJ,IAAAA,KAAuB,wCACvBA,KAAAyC,sBAAmB,wCACzBzC,KAAA0C,WAAK,IAAM1C,KAAS,mEAEpBA,IAAAA,KAAA,wCApDnBA,KAAAM,kSCXcqC,UAAA,aAAA,CAAAj9D,OAAA,IACds+C,MAAAA,SAAAvqD,OAEKwqD,QAAA5nD,WACD,MAAAumE,QACJ,uBAAAC,CAAAjqE,GAYK,OAAAgqE,QAAAE,iBAAAlqE,GAEGmqE,uBAAAA,CAAapoE,GAChB,OAAAqpD,SAAAhT,QAAA0M,WAAAsG,SAAAhT,QAAAwM,aAAA7iD,EAAA,WACD,CAEC,yBAAAqoE,CAAAroE,GACJ,MAAAsoE,EAAAtpE,OAAAS,MAAAO,EAAA5B,QAGG,OAFG4B,EAAA8B,KAAAwmE,GAEuBA,EAE1B,oBAAAC,CAAAvoE,EAAA6B,EAAA,GAEA,OAAqB,IAAAomE,QAAAO,cAAAxoE,EAAA6B,GAEvB,qBAAA4mE,CAAAzoE,EAAA6B,EAAA,GAEF,OAAA7B,EAAA6lD,aAAAhkD,iEA5BW,CACH,oBAAA2mE,CAAAxoE,EAAqB6B,EAAA,GAC7B,OAAY7B,EAAAilD,aAAapjD,EACjB,EAEJomE,QAAAE,iBAAqB,CACjBF,QAAAG,iBACHH,QAAAI,mBACDJ,QAAAM,cAlBJN,QAAAQ,kHCAA,SAAAjqE,UAGWiM,eAyBXjM,EAAA,aAAA,CAAAuM,OAAA,YAzBWjM,OACLwqD,EAAA5nD,oBAEAsmE,EAAAzhE,UACN23D,EAAAz3D,UAKAm8D,KAoDEpkE,EAAAokE,WAAApkE,EAAAokE,SAAA,CAAA,IAhDFA,EAAA,cAAA,GAAA,gBAIAA,EAAAA,EAAA,UAAA,GAAA,YAIAA,EAAAA,EAAA,KAAA,GAAA,OArBWA,EAAAA,EAAG,MAAH,GAAA,QAsDPA,EAAAA,EAAA,MAAA,GAAA,QAMCA,EAAAA,EAAA,KAAA,GAAA,OAMDpkE,EAAAkqE,0BAAA,CACJxqE,IAAA,0EAKYkiD,WAAAkJ,EAAA/B,UAAA78C,IAAA1K,EAAAyjD,EAAA,IACIklB,sBAAkDrf,EAAA1D,UAAAl7C,IAAA1K,EAAAyjD,EAAA,OAYlEjlD,EAAkBoqE,kBAAA,CAIlB1qE,IAAA,OACAwM,CAAA1K,EAAAyjD,KACA,CAII+hB,SAAoBqD,EAAAxyB,QAAAivB,QAAA,IAAAhc,EAAAV,WAAAl+C,IAAAA,IAAA1K,EAAAyjD,IACxBrD,WAAoBkJ,EAAA/B,UAAE78C,IAAA1K,EAAAyjD,EAAA,OAGtB,MAAAqlB,EACYvlE,WAAAA,CAAAyqB,YACZA,EAAoBoyB,WAAO5hD,EAAAoqE,kBAA6B1qE,IAExD6qE,cAAAA,CAAA3E,EAA4B5gE,EAAAwlE,EAAOvmE,GACnC,GAAA,eAAAe,EACA4gE,EAAA9hE,KAAA,CAAA4tC,GAAA1sC,EAAAuH,MAAAk+D,EAAA3qB,WAAA77C,SApBA,CAuBA,MAAAymE,gCACA,IAAAA,EAEA,MAAA,IAAA5nE,MAAA,gCAAA0nE,GAEA5E,EAAA9hE,KAAA,CAAA4tC,GAAA1sC,EAAAuH,MAAAm+D,EAAAzmE,IAEU,GAGVjE,EAAAsqE,MAAAA,IAkHYK,yDATA,CACZz+D,GAAAA,CAAY1K,EAAAyjD,GAIA,OAAA,OAUA,MAAAyiB,UAAiB4C,EACjBvlE,WAAAA,CAAAyqB,GACAyvB,MAAAzvB,GAEA,GAAAtjB,CAAA1K,EAAAyjD,GACA,MAAA,QACAolB,EAAAxyB,QAAAivB,QAAAtlE,EAAAyjD,GACZjG,SAAA8L,EAAA/B,UAAA78C,IAAA1K,EAAAyjD,EAAA,IACK2lB,aAAA9f,EAAA/B,UAAA78C,IAAA1K,EAAAyjD,EAAA,IACJ4lB,iBAAA/f,EAAA/B,UAAA78C,IAAA1K,EAAAyjD,EAAA,IACkC6lB,aAAAhgB,EAAA/B,UAAA78C,IAAA1K,EAAQyjD,EAAc,IACzD8lB,aAAAjgB,EAAA/B,UAAA78C,IAAA1K,EAAAyjD,MACA+lB,QAAAlgB,EAAA/B,UAAA78C,IAAA1K,EAAAyjD,EAAA,IACAniB,MAAA,iDAzBYmoC,SAAApgB,EAAUhT,QAAKmN,aAAA94C,IAAA1K,EAAqByjD,EAAA,GAAA,iGAgDpCimB,eAAApgB,EAAA1D,UAAAl7C,IAAA1K,EAAAyjD,EAAA,IAKH,EAEJyiB,EAAAyD,KAAAd,EAAAxyB,QAAA6vB,uBAEcA,qBAAsBA,EAMpC,MAAAC,UAAA2C,EACJvlE,WAAAA,CAAAyqB,WAbY,2HAgCL,EAEAm4C,EAAAwD,KAAAd,EAAAxyB,QAAA8vB,yBAECA,uBAAAA,wBAOThkE,KAAAjE,IAAA,GAfewM,GAAAA,CAAA1K,EAAAyjD,GAkBf,OApBAzjD,EAAA6lD,aAAApC,EAAA,IAoBA,iEAGKmmB,kBAAA5pE,EAAA6lD,aAAApC,EAAA,kOAGL,MAAAomB,EAAAC,EAAAC,gBAAA9rE,6iFA5UA,ySCDAs9C,GAAAF,EAAAA,EAAA98C,MAAA28C,EAAAC,GAAa,KAAAz4C,SAIb,EAEArC,OAAAoK,eAAAu/D,YAAA,aAAA,CAAAj/D,OAAA,uLAiBAk+C,gBAAAiZ,2BAEAjnB,YAAA94C,UAAA,OAAA,EAAA,YAAA,MAAA6rB,aAAAm7B,UAAAtN,UAAAouB,UAAAvB,+BACM16C,EAASw3C,SAAA0E,OAAArB,OAAAxyB,sGAEP,UAEyBl0C,KAAAgoE,kBAAsBn8C,EAAA26C,sBAE1C,CAAA,MAAA/kE,GACbyJ,sCAAAzJ,MAIAumE,iBAAAA,CAAAC,sBACajoE,UAAA,OAAA,EAAA,YAER,IAAAiiE,mBAGgBjiE,KAAAgnD,UAAAtN,UAAAouB,UAAArB,0BAGrBv7D,QAAA,iBAAsB2gB,EAAAw3C,SAAAn1D,KACtB2d,EAAAw3C,SAAAn1D,KACgB45D,KAAAA,UAAA/D,qBAAMyD,KAAwBt5D,IAC9C,MAAgBg6D,QAAAlhB,KAAAA,UAAAtN,cAAAouB,UAAA/D,qBAAAl4C,IAEhB7rB,KAAA+mD,SAAAiU,qBAA8CkN,eAAW,KACzDloE,KAAA+mD,SAAAiU,UAAqC,YAAWuM,gBAChD,MACAO,KAAAA,UAAA9D,uBAAAwD,KAAAt5D,IAEA,MAAAi6D,QAAAnoE,KAAAgnD,UAAAtN,cAAyDouB,UAAA9D,uBAAUn4C,IACnE7rB,KAAA+mD,SAAAiU,UAA4B,aAAoB,OAAYmN,EAAWC,YACvE,MACAN,KAAAA,UAAA7D,sBAAAuD,KAAAt5D,IAEwB,MAAAm6D,aAAArhB,UAAAtN,UAAyC,IAAAouB,UAAkB7D,6BACnFjkE,KAAAsoE,qBAA8BD,EAAAZ,mBAC9B,MACAK,KAAAA,UAAAH,8BAAAH,KAAAt5D,IAEA+zD,QAAAjiE,KAAAgnD,UAAAtN,cAA8BouB,UAAAH,8BAAA97C,IAC9B7rB,KAAAuoE,QAAAtG,GACA,MACA6F,KAAAA,UAAAU,sCAAAhB,KAAAt5D,IAEA+zD,QAAAjiE,KAAAgnD,UAAAtN,cAAAouB,UAAwCU,sCAAA38C,IACxC7rB,KAAAuoE,QAAAtG,GACA,MACAyE,KAAAA,OAAAxyB,QAAAu0B,gBAAAv6D,IAKAw4D,KAAAA,OAAAxyB,sCAAyDhmC,UAGzDlO,KAAAgnD,UAAAvL,OAAA5vB,EAAAoyB,WAAA6pB,UAAArB,kBAAA1qE,KACA,MACoB2qE,KAAAA,OAAAxyB,QAAA0wB,cAAA12D,IAEIhD,QAAA,oBAAA2gB,EAAAoyB,WAAA6pB,UAAArB,kBAAA1qE,WACxBiE,KAAAgnD,UAAmCvL,OAAA5vB,EAAAoyB,WAAA6pB,UAAArB,kBAAA1qE,KAClB,MACJ,QAAAiE,KAAA0oE,SAAAvoE,KAAA,2BAAA0rB,EAAAw3C,SAAAn1D,KAEFhD,QAAA2gB,6BAAAA,EAAAw3C,SAAAn1D,WACNlO,KAAAgnD,UAAAtN,cAAAouB,UAAAd,kBAAAn7C,IAEL,SAAAo8C,EAGK,WAEGhG,GACRA,EAAAl6B,QAAAghB,IACA/oD,KAAA+mD,SAAAkU,OAAAmD,WAAArV,EAAAhb,GAAAgb,EAAAngD,SAIA0/D,oBAAAA,CAAAK,GACA,OAAA7vB,YAAA94C,UAAA,OAAA,EAAgC,6BAIhCA,eAAoC05C,UAASouB,UAAArB,0BAE7C56C,EAAAw3C,SAAAn1D,KAEA,KAAA45D,UAAAc,oCAA6CpB,KAAAt5D,UACflO,KAAAgnD,UAAAtN,UAAA,IAAAouB,UAAAc,oCAAA/8C,IAC9B,MACAi8C,KAAAA,UAAAe,oBAAArB,KAAAt5D,IAEA,MAAA46D,QAAA9oE,KAAAgnD,UAA8BtN,UAAA,IAAAouB,UAAAe,oBAAAh9C,IAC9B7rB,KAAAuoE,QAAAO,GACA,MACAhB,KAAAA,UAAAiB,2BAAAvB,KAAAt5D,IAEA,MAAA86D,QAAAhpE,KAAAgnD,UAA4CtN,UAAA,IAAAouB,UAAAiB,2BAAAl9C,IAC5C7rB,KAAAuoE,QAAAS,GACoB,MAEpB,KAAAtC,OAAAxyB,QAAA0wB,cAAA12D,UAEAlO,KAAAgnD,UAAAvL,OAAA5vB,EAAAoyB,WAAA6pB,UAAArB,kBAAA1qE,KAEA,MACA2qE,KAAAA,OAAqBxyB,QAAAsxB,oBAAAt3D,IACXlO,KAAAgnD,UAAAvL,OAAA5vB,EAAAoyB,WAAA6pB,UAAArB,kBAAC1qE,KACN,MACJ2qE,KAAAA,OAAAxyB,QAAA+0B,6BAAA/6D,UACgBlO,KAAAgnD,UAAAvL,OAAA5vB,EAAAoyB,WAAA6pB,UAAArB,kBAAA1qE,KACjB,8UChGU,MAAAmtE,mBACL9nE,WAAAA,CAAArF,GAEqBiE,KAAAjE,IAAAA,mBAE1BotE,CAAAC,GACA,OAAAppE,KAAAm8C,WAAAt/C,OAAAQ,KAAA+rE,EAAA,UAIS,CAETjtB,iBAAAA,IAGK,OADK+sB,IAAAA,mBAAAtsE,EAAAX,QACLsM,IAAA3L,EAAA,GAGLA,GAAAA,CAAAA,EAAA8C,GAEA,MAAAqL,EAAAgxD,UAAAP,oBAAArU,QAAAvD,UAAAr7C,IAAA3L,EAAA8C,IACA2pE,EAAAliB,QAAAvD,UAAAr7C,IAAA3L,EAAA8C,GAA+B,GACpB0zC,EAAAx2C,EAAAN,SAAA,QAAAoD,GAAA,EAAAA,EAAA2pE,GACDC,EAAAniB,QAAavD,UAAAr7C,IAAA3L,EAAA8C,GAAA2pE,GAEX5M,EAAY7/D,WAAc,QAAQ8C,GAAA,EAAAA,EAAA4pE,GAClCC,EAAApiB,kBAAiB5+C,MAAa7I,GAAK4pE,GAEnCE,EAAAriB,QAAAvD,UAAAr7C,IAAA3L,EAAA8C,GAAA,GACA+pE,EAAAtiB,QAAAvD,UAAAr7C,IAAA3L,EAAA8C,GAAA,GACAgqE,EAAAviB,QAAAvD,UAAAr7C,IAAA3L,EAAA8C,GAAA,GACZiqE,EAAUxiB,QAAAvD,UAAAr7C,IAAA3L,EAAA8C,GAAA,GAER,MAAA,CACFqL,8DArCA2+D,qBAmCK7sE,OAAAQ,KAAAT,EAAAiH,MAAAnE,GAAAA,EAAAA,EAAAiqE,mvBCzEL,qEAEApwB,MAAAA,SAAA58C,OACiBo/D,QAAAx8D,MAAjB29D,gBAAAh5D,0CAMMi3C,SAAA72C,WAgDEwiD,gBAAAviD,+BApDyD,mCAE/DqlE,0BAAA9iB,gBAAAiZ,YAII3+D,WAAAA,GAEAk6C,SAAAt/C,WACAgE,KAAA6pE,UAAA,IAAgB3M,gBAAAC,YAEtB2M,4BAAAA,CAAA9iB,2DAEA,eAAAA,EAAAlN,UAAAiiB,QAAAN,WAAAE,SAAAC,cACA,EACA,CAOW1pB,KAAAA,GACN,OAAAlyC,KAAA+pE,aAAA1wD,MAAA5X,IACL,GAAAA,EAAA2yC,UAAAmF,SAAAV,UAKA,MAAAp3C,gBAKA,UAAAsoE,sBACK/pE,UAAA,OAAA,EAAA,YAIO,4CAFJgnD,iDAAAA,KAAAA,UAAAxQ,gBAEIx2C,KAAAgqE,SAAAhqE,KAAAgF,QAAAilE,iBAAAljB,KAAAA,SAAAgU,SAEI/6D,KAAAkqE,eAChB,CAEiB,MAAAC,EAAA,IAAAliB,gBAAAmiB,kBACDD,EAAAr2B,KAAAiT,KAAAA,wBAAsC/mD,KAAWgF,SAAEktC,QACnDlyC,KAAAkqE,oCAMR,OAAApxB,YAAA94C,UAAA,OAAA,EAAA,8BAtDRgnD,KAAAA,UAsDQlN,UAAAiiB,QAAAN,WAAAE,ojBCvDR,oFAGAxU,QAAA5nD,WACK8qE,SAQCnmE,SARNomE,sBAAOlmE,oBACL+6D,WAAA76D,OACF62C,SAAA52C,WACM2G,QAAAiwC,SAAA,8BAKN,IARKovB,WAUL,SAAAA,GAAAA,EAAAA,EAAA,WAAA,GAAA,wCAMIA,EAAoB,YAAA,GAAA,cA8FxBA,EAAKA,EAAA,UAAA,GAAA,YAlGLA,EAAAA,EAAA,eAAA,GAAA,iBACAA,EAAAA,EAAA,SAAA,GAAA,WACAA,EAAAA,EAAA,QAAA,GAAA,SAIc,CARd,CAQcA,YAAAA,UAAA,CAAA,qEAEVnpE,WAAAA,GACAk6C,SAAAt/C,wBACA,uBAIJ,OAAA,IAAAwuE,uCAGyBxqE,UAAA,OAAA,EAAA,YAEpByqE,GACQ,qBAFEzjB,UAAiBtN,UAAAylB,WAAAF,cAEnB3iE,WAEb,MAAkB,IAAA6C,MAAA,6BAElBurE,EACa,GACDA,aAAA1jB,UAAAtN,UAAAixB,SAAAC,mBAGe5qE,KAAA6qE,eAASH,UACpCA,EAAAI,WAEA,GAAiC9qE,KAAAgnD,UAAY3L,eAAA0L,SAAA3T,OAAAsuB,SAAA,CAC7C,MAAAqJ,EAA8B/qE,KAAAgnD,UAAS3L,SAAwBr7C,KAAAgnD,mBAC/DhnD,KAAA+mD,SAAsBiU,UAAQ+P,UAAAA,EAAAA,OAAAhkB,SAAA3T,OAAAsuB,SACd,gBAIN1hE,KAAA+mD,SAAGkU,OAAA,SAAAltB,EAAAnlC,GAERiiE,cAAAA,CAAAH,GAEGA,OADJx/D,QAAA,oBAAew/D,EAAW3/D,gBAAA2/D,EAAAzuE,UACtByuE,EAAM3/D,MACN,KAAAw/D,UAAmBS,WACf,OAAAhrE,KAAcirE,qBAAWP,EAAAzuE,QACrB,KAAAsuE,UAAAW,QACJlrE,KAAAmrE,SAAAT,EAAAzuE,OACZ,MACAsuE,KAAAA,UAAsBa,YAEtBb,KAAAA,UAAAc,UACY,MACZ,KAAAd,UAAAe,eACY,OAAAtrE,KAAAurE,aAA6Bb,EAAAzuE,QACzB,KAAAsuE,UAAAiB,SAEhB,6BAEgB,OAAAxrE,KAAAyrE,aAAAf,EAAAzuE,QACJ,iEAKP+D,KAAAgnD,UAAAtN,UAAA,IAAAyN,QAAAX,WAAAkkB,EAAAzuE,SAKGgvE,oBAAAA,CAAgBlO,GACxBjkB,OAAAA,YAAuB94C,UAAK,OAAA,EAAS,YACrC,GAAA+8D,IAAA4N,SAAAe,gBAAA3vE,cAAAoD,MAAA,uCAEY,MAAAke,aAAA2pC,UAAAtN,UAAAixB,SAAAe,qGAGZ1rE,KAAA+mD,SAAAiU,UAAA39C,mBAAAA,EAAAsuD,UACgB3rE,KAAmB+mD,SAAaiU,UAAA39C,gBAAAA,EAAAuuD,kEAChD5rE,KAAA+mD,SAAiBiU,UAAS,WAAoB39C,EAAYwuD,eAA2BlM,cAOjF4L,YAAAA,CAAAxO,UACIjkB,YAAA94C,UAAA,OAAA,EAAA,YACR,MAAAM,QAAA0mD,KAAAA,UAAAtN,cAAAyN,QAAAV,WAAAsW,IAAA1wD,EAAA,IAAAy/D,YAAAxrE,GAEmB+L,EAAe0/D,uCAClC,IAAA,QAAmCjwE,EAAAkwE,EAAAlwE,IAAA,CACnC,MACA8f,EADiBvP,EAAW0/D,iBAC5BnwD,MAAA,UAAAq/C,OAAAr/C,EAAAM,GAAAA,cAAAN,EAAApL,OAAA,GAAA5P,KAAA,SAIA6qE,YAAAA,CAAA1O,GAAA,OAAAjkB,YAAA94C,UAAA,OAAA,EAAA,YACK,GAAAgF,KAAAA,QAAAm9D,WApGL,OAAAniE,KAAAgnD,UAoGKvL,OAAAshB,IAkDL,MAAA4F,QAAA3b,KAAAA,UAAAtN,cAAA2wB,SAAAnB,mBAAAnM,IACA/8D,KAAAi7D,gCAAA0H,EAEA,CACA,IAGAsJ,aAAAzB,WAAAA,WACA,MAAAG,UAEAA,SAAAC,YAAA,CAEK7uE,IAAA,eAGD+uE,UAAA5jB,SAAAhT,QAAAmN,aAAA94C,IAAA1K,EAAAyjD,EAAA,GACav2C,KAAAm8C,SAAQhT,QAAA2M,qBAAAhjD,EAAAyjD,EAAA,EAAA,GACbrlD,OAAAkrD,QAAA7D,UAAA/6C,IAAA1K,EAAAyjD,EAAA,MASJqpB,SAAAe,gBAAA,QAEAnjE,IAAA,CAAA1K,EAAAyjD,KACH,CAEL4qB,iBAAA/kB,QAAAnE,UAAAz6C,IAAA1K,EAAAyjD,+uBC9DAh5C,eAAA6jE,YAAA,aAAA,CAAAvjE,OAAA,IAEAu+C,MAAAA,QAAkBxqD,WACNwiE,WAAA5/D,OACZ0nD,YAAU/iD,WACL+iD,QAAAA,8CAEWklB,YAAAxQ,OAAA,OAEhBpzD,IAAA,CAAA1K,EAAAyjD,WACArlD,EAAAkrD,QAAAvD,UAAAr7C,IAAA1K,EAAAyjD,GACA,GAAArlD,EAAA,EAEI,MAAiB,IAAAkD,MAAA,8BACrB,MAAY,CACPlD,SACLoF,KAAA89D,WAAAF,YAAA12D,IAAA1K,EAAAyjD,EAAA,mBAKA6F,QAAAvD,UAAAljB,IAAA7iC,EAAAyjD,EAAA8qB,EAAAnwE,QACKkjE,WAAAF,YAAAv+B,IAAA7iC,EAAAyjD,EAAA,EAAA8qB,EAAA/qE,QAQD8qE,YAAAE,aAAAllB,QAAA7B,UACJ6mB,YAAAG,KAAA,CACKvwE,IAAA,EAELwM,IAAAA,CAAA1K,EAAAyjD,MAEAv2C,KAAA,IAAAo8C,QAAAT,sBAAAn+C,IAAA1K,EAAAyjD,MAQA6qB,YAAAI,KAAkB,KAClB,EACAhkE,IAAAA,CAAA1K,EAAAyjD,KACK,CAELlmD,QAAA+rD,QAAA3E,MAAAj6C,IAAA1K,EAAAyjD,EAAA,uFAWAkrB,gBAIAprE,WAAAA,CAAArF,EAAA0wE,EAAAC,GAEA,QADA3wE,IAAAA,EACAA,EAAA0wE,EACA,MAAA,IAAAttE,MAAAutE,QAAAA,oBAAAD,oBAAA1wE,iBAiBAA,EAAA0wE,yFAKAN,YAAAK,gBAAAA,gBAQA,MAAAG,iBAAeH,gBACfprE,WAAAA,CAAArF,SACAA,EAAiB,GAAA,aACjBA,IAAAA,QAECulD,GACe,MAAA,CAChBlmD,QAAA+rD,QAAA3E,MAAAj6C,IAAA1K,EAAAyjD,EAAA,sKAdAogB,SAAAva,+sFC/NA,SAMA7+C,eAA8DskE,OAAA,aAAA,CAAAhkE,OAAA,IAA/B,MAAA2wC,SAAA58C,OAA+BsqD,YAAA1nD,WAAA4nD,QAAAjjD,WACxDioE,YAAA/nE,oBACA6iD,YAAY,kCACZ,MAAA4lB,KACAzrE,WAAAA,CAAAyqB,EAAAihD,EAAArkC,GAEKzoC,KAAA6rB,OAAAA,uBAEX4c,OAAYA,EACZzoC,KAAA+sE,SAAqB,QACrBC,UAAmBhtE,KAAAyoC,OAASzoC,KAAAyoC,OAAAukC,SAAA,IAAA,IAAAhtE,KAAA6rB,OAAAxqB,kBACfrB,KAAQ6rB,OAAA5vB,QAAM6wE,KAAA,iBAEdpvE,GACR,OAAAo7C,YAAA94C,UAAA,OAAA,EAAA,YAAA,MAAAitE,QAAAjtE,KAAAktE,SAAAlmB,EAAAmmB,6BACSF,QACNnvE,MACRkC,KAAAotE,UAAApmB,EAAAmmB,EAAAzvE,GAAA2b,MAAA5X,IACY,GAAAA,EAAA2yC,UAAAmF,SAAAV,UAIZ,MAAAp3C,EAHYyJ,QAAwB,8CAQpC,EACalL,KAAAotE,UAAApmB,EAAAmmB,EAAAzvE,QADb,aAKaspD,EAAAmmB,sBACFntE,UAAA,OAAA,EAAA,YAEP,MAAQN,EAAUsnD,WAEtBn7B,QAAAm7B,EAAAtN,UAAAyyB,YAAAxQ,QACAmR,EAAwB,IAAAjhD,EAAA5vB,OACxB6wE,IAAAjhD,EAAA5vB,aAAA+qD,EAAAtN,UAAAyyB,YAAAE,iDAGYnhE,QAAc+hE,mBAAAA,EAAAD,sBAAAC,EAAAH,oBAAAptE,UAAAutE,EAAAphD,OAAA5vB,gBAC1BgxE,EAAAviC,SAAAsc,EAAAmmB,GACaF,IAGD,QAAAviC,CAAAsc,EAAAmmB,GACA,OAAAr0B,YAAA94C,UAAgB,OAAA,EAAA,mBAC5BA,KAAW6rB,OAAAxqB,MAEC,IAAA,WACJ,OAER,IAAA,OACgB,IAAA,WACA,WACA,OAEA,IAAA,OACA,IAAA,OACA,OAAArB,KAAAotE,UAAApmB,EAAAmmB,OAAApQ,SAChB,IAAA,OAGA,aADA/V,EAAAtN,UAAAyN,IAAAA,QAAAX,WAAA,IACAxmD,KAAAotE,UAAApmB,EAAAmmB,OAAApQ,QAAA,0WCzEA,EAOA7+D,OAAEoK,eAAA+kE,YAAA,aAAA,CAAAzkE,OAAA,IACFq+C,MAAAA,YAAOtqD,WACDwqD,QAAA5nD,WACQunD,gBAAA5iD,cACR0oE,OAAAxoE,OACA+nE,UAAA7nE,YACS2jD,cAAA1jD,YACT2G,QAAA+7C,YAAA,6BACNwb,UAAA,SACM6K,YAAA,CACNC,KAAA,CACIC,OAAM,EACFp6B,OAAA,QAEHq6B,KAAA,CACDD,OAAM,EACFp6B,OAAA,QAEHs6B,KAAA,CACDF,OAAM,EACFp6B,OAAA,QAIRu6B,KAAU,CACFH,OAAK,EACLp6B,OAAA,sHAgCH0T,gBAAAiZ,YAEoB6N,6BAAAA,CAAAhlE,UACzBu+C,QAAAvC,UAA2Bh8C,EAAA,EAAMA,EAAA3M,QAGb4xE,+BAAAA,CAAAjlE,GACpB,OAAAu+C,QAAA5D,WAAA36C,sBAGA,OAAAkwC,YAAA94C,iBAAA,EAAA,YACAA,KAAA8tE,WAAA,eACAlB,OAAAC,KAAA,CAAAxrE,KAAA,MAAApF,OAAoD+D,KAAAgnD,UAAA3L,WAAA,EAAA,YACpD0yB,EAAAX,UAAAptE,KAAAgnD,UAAAgnB,GAA2Cl1B,YAAA94C,UAAA,OAAA,EAAA,YACP,GAAAguE,EAAAvlC,OACPulC,OAAAA,EAAAvlC,OAAA5c,OAAAxqB,MACR,IAAA,OAErB,IAAwB,OAExB,OAAArB,KAAAiuE,sBAAAD,GACA,IAAA,OACwB,GACxB,SADwBA,EAAAniD,OAAaxqB,KAErC,OAAArB,KAAAkuE,eAAAF,EAAAjR,gBAM4BiR,EAAAniD,OAAAxqB,MAE5B,IAAA,OACiB,MAAA8sE,QAAAnuE,KAAAouE,eAAAJ,EAAAjR,SAGJ,0BAFan8D,KAAU,kBACpCmmD,SAAAiU,UAAAmT,aAAAA,EAAA9kC,OAAAglC,UAAAztE,KAAA,MAEY,IAAA,OAEP,OAAAZ,KAAAsuE,eAAAN,GACK,IAAG,OAER,OAAAhuE,KAAAuuE,eAAAP,OAES,OACNhnB,KAAAA,UAAA3L,UAAAr7C,KAAA+mD,SAAA3T,OAAAsuB,UAAA1hE,KAAA+mD,SAAAiU,UAAA,UAAA,EAAAgT,EAAAjR,QAAA/8D,KAAA+mD,SAAA3T,OAAAsuB,gBAMR1hE,KAAAgnD,UAAAtN,UAAA,IAAAyN,QAAAX,WAAAwnB,EAAAjR,UACI7xD,kCAAsB8iE,EAAAhB,yBAAAgB,EAAAjR,UAClB,GAAA/8D,eAAaq7C,UACbr7C,KAAA+mD,SAAAiU,UAAA8S,UAAAA,KAAAA,WAAAzkC,OAAAglC,UAAAztE,KAAA,KAER,mDAKA4tE,UAAAA,CAAAp6B,GAEoBlpC,QAAA,WAAAkpC,GAEpBp0C,KAAA0oE,SAAAvoE,KAAoBi0C,GAQF65B,qBAAAA,CAAAQ,GAElB,IAAAC,EAAkBD,EAAA5iD,OAAAxqB,cACN+rE,UAAiBpmB,KAAAA,UAAI2nB,GAAQ71B,YAAA94C,UAAA,OAAA,EAAA,mBACzC2uE,EAAA9iD,OAAAxqB,UACa,OACb,OAAArB,KAAA4uE,eAAAF,EAAAC,GAEA,IAAA,OACA,MAAgBttE,QAAMrB,KAAAgnD,UAAAtN,UAAAyyB,IAAAA,UAAA0C,SAAAF,EAAA5R,UACtB2R,GAAA,WACwB,MAExB,IAAA,OACA,MAAAI,QAAA9uE,KAAAgnD,UAAAtN,UAAA,IAAAyyB,UAAA0C,SAAAF,EAAA5R,wBAGA,MAEA,QAC4B,MAAAgS,QAAA/uE,KAAAgnD,UAAAtN,UAA8B,IAAOyN,QAASV,WAAAkoB,EAAA5R,UAC1E/8D,KAAAwuE,WAAAE,0BAAAA,EAAAC,IAAAA,EAAA9iD,OAAAxqB,KAAA,cAAA0tE,EAAAzyE,SAAAyyE,OAAAA,UAAAA,EAAAzyE,SAAA,UAGAmyE,GAAAA,EAAA1R,wBAGqB2R,EAAAD,GACrB,OAAA31B,YAAA94C,UAA0B,OAAA,EAAA,0BACLA,KAACgnD,UAAAtN,UAAA,IAAAyyB,UAAA6C,SAAAP,EAAA5iD,OAAA5vB,OAAAkwE,UAAAxQ,OAAA5/D,SACD,MAArBgP,KAAAhB,IACA,MAAA,IAAA5K,MAAA,8BAAgD4vE,EAAehkE,KAAAhB,cAI/DgB,KAAAA,oBAGwB2jE,OACxB,OACA,IAAA,OACA,QAAuBvnB,QAAA3E,MAAAj6C,IAAAwmE,EAAAnmE,MAAA,GACvB6xD,EAAAtT,QAAA3E,MAAAj6C,IAAAwmE,EAAAnmE,MAAA,GAGwB5I,KAAAi7D,OAAAyT,EAAAO,MAAAxU,GACA,MACxB,IAAA,OACA,MAAAyU,EAAA/nB,QAAA3E,MAAAj6C,IAAAwmE,EAAAnmE,MAAA,GAEAumE,EAAAlnB,cAAAb,OAAA8nB,EAAkD,GAElDlvE,YAAuB0uE,EAAAS,SAQvB,KAAA,OACA,GACAnvE,KAAAi7D,OAAAyT,EAAAK,EAAAnmE,MAAAtM,SAAA,UAEgB,MAChB,KAAA,MACa0D,KAAAgF,QAAAm9D,WACF,WACNlH,OAAAyT,EAAA,CACLt7B,OAAA,aACA9yC,KAAAzD,OAAAQ,KAAA0xE,EAAAnmE,SAGI,MACI,KAAA,GACI,GAAA5I,KAAAgF,QAAAm9D,WAED,MACNniE,KAAAi7D,OAAAyT,EAAA,CACLt7B,OAAA,YAEA9yC,KAAAzD,OAAAQ,KAAA0xE,EAAAnmE,SAEI,MAEQ,KAAA,GACZ5I,YAAiB0uE,EAAWU,UAASxB,uBAAEmB,EAAAnmE,QACvC,MAEI,KAAA,GACI5I,KAAIi7D,OAAKyT,EAAWU,UAAAvB,yBAAAkB,EAAAnmE,QAC5B,MAEgB,KAAA,GACA5I,KAAAi7D,OAAAyT,EAAKK,EAASnmE,MAAoBo7C,SAAA,IACrC,MACJ,KAAA,GAAAhkD,KAAAi7D,OAAAyT,EAAAK,EAAAnmE,MAAAu7C,YAAA,IAEL,oDAGJ,MACgB,qGAQJoqB,cAAAA,CAAAc,GACD,OAAAv2B,YAAA94C,UAAA,OAAA,EAAA,sFACNA,KAAAsvE,WAAAC,KAOWjB,cAAAA,CAAAkB,sBACQxvE,UAAA,OAAS,EAAU,YACvByvE,MAAAA,QAAAzvE,KAAegnD,oBAAa,IAAOmlB,UAAAQ,SAAA6C,EAAAzS,eACtCuS,WAAAG,EACI,EACrB,CAEiBH,UAAAA,CAAAI,oBACJ1vE,KAAA+mD,SAAAiU,UAAA,aAAA0U,EAAAC,iBACb5oB,SAA2B3T,OAAKsuB,UAAA,CAChC,MAAWA,EAAAgO,EAAAhO,SAAAgO,EAAAC,UACN3vE,KAAA+mD,SAAAiU,UAAA,WAAA0G,muBC7QLp5D,eAAAsnE,QAAA,aAAA,CAAAhnE,OAAA,IACO,MAAAu+C,QAAAxqD,8xBCCP,8DAEAw9C,MAAAA,SAAAx9C,aACAwqD,QAAA5nD,WAMAg6C,SAAAr1C,8CAGMomE,sBAAA/lE,oBACAsrE,UAAA/qE,QAENoG,QAAA+7C,YAAA,yCAIM,KAMN6oB,MAAA,CAIAC,iBACA,CAAA,WAAgB,SAEhB,qBAQKC,oBAAA,CACL,KAAA,MAAA,KAAA,KAAA,WAAA,KAAA,MAAA,KAAA,KAAA,MAAA,IAAA,UAAAlyE,OAAAA,GAAA,IAOAmyE,4BAAA,QAKA,CAAA,gBAAA,CAAA,aAAA,eAAA,CAAA,eAAA,aAAA,eAAA,CAAA,eAAA,aAAA,cAAA,eACA,CAAE,eAAA,aA6EM,cAAA,YAAA,cAAA,CAAA,eAAoB,gLASvB,MAAAC,4BACcryE,EAAAyjD,GAGXthD,KAAAmwE,aAAAjpB,sCAAqCrpD,EAAQyjD,EAAA,EAAA,EAAA,GAG7CthD,KAAAowE,MAAKF,gBAAqCG,iBAAAnpB,SAAAhT,QAAA2M,qBAAAhjD,EAAAyjD,EAAA,EAAA,EAAA,IAC1CthD,KAAAmwE,aAA0B,GAAa,IAAbC,KAAAA,MAClCpwE,KAAAswE,gBAAAzyE,EAAAyjD,GAIQthD,KAAAuwE,gBAAA1yE,EAAAyjD,QAGHkvB,kBAAAtpB,SAAAhT,QAAAiN,SAAAtjD,EAAAyjD,EAAA,EAAA,GAELmvB,YAAAA,CAAAC,GACYA,OAAAA,6BAAY1wE,KAAA2wE,8EAEA,IAAA3wE,KAAA5E,kBAAAg1E,wCAGnBpwE,KAAAowE,aAAA,KACkB,0BAAA,CAEX,GAAA,IAAApwE,KAAA5E,eAAA,GAEP,OAAAA,KAAAA,SAAA,WAAAA,QACJ,OAAA,MAID,CACA,GAAA,IAAA4E,KAAA5E,QAEU,OAA0B,GAEhC,GAA0B,IAA1B4E,KAAA5E,SAA0B,WAAAA,QACpB,OAAW,EAEjB,iBAGA,MAAA,CAAA,KAAA,EAAA,EAAmB,QAAAg1E,uBAEnBvyE,EAAAyjD,GACAthD,KAAM4wE,UAAe,OAErB5wE,KAAM6wE,aAAa3pB,SAAEhT,QAAO2M,qBAAoBhjD,EAAKyjD,EAAI,EAAK,EAAA,GAEnDthD,KAAA8wE,wDAA4BjzE,EAAAyjD,EAAA,EAAA,EAAA,GAEvCthD,KAAKmrE,QAAAjkB,SAAiBhT,QAAAiN,SAAOtjD,EAAAyjD,EAAa,EAAE,GAE9CthD,KAAA+wE,WAAA7pB,SAAAhT,QAAAiN,SAAAtjD,EAAAyjD,EAAA,EAAA,GAGEthD,KAAIgxE,iBAAe9pB,SAAAhT,QAAC2M,qBAAAhjD,EAAAyjD,EAAA,EAAA,EAAA,GAIxBthD,KAAAixE,cAAA/pB,SAAAhT,QAAA2M,qBAAAhjD,EAAAyjD,EAAA,EAAA,EAAA,GAEAthD,mBAAoBknD,SAAAhT,QAAAiN,SAAAtjD,EAAAyjD,EAAA,EAAA,2DAKlBthD,KAAAkxE,SAAAhqB,SAAAhT,QAAA2M,qBAAAhjD,EAAAyjD,EAAA,EAAA,EAAA,GACOthD,KAAA5E,QAAA80E,gBAAmBiB,UAAUnxE,KAAAmwE,cAClCnwE,KAAAoxE,4BAAgCC,iBAAAL,kBACnChxE,KAAAsxE,MAAA,KAAAtxE,KAAAowE,MAED,MAAAmB,OAAAC,cAEY,IAAAD,EACZ,gBAA8B,6BAKtB,GAHRvxE,KAAYyxE,QAAsB,OAALF,EAAK,KAAA,IAAAA,EAElCvxE,KAAY2wE,aAAqB3wE,KAAA0xE,mBACJ,MAArB1xE,KAAA2wE,aAER,MAAA,IAAAxxE,MAAyC,kDAIzCtB,EAAAyjD,GAEAp2C,QAAA,mBACIlL,aAAS,sBAAA,EAAA,EACLA,KAAA4wE,UAA4B,aAAA5wE,KAAA5E,QAEpC,MAAAu2E,EAAgBzqB,SAAAhT,QAAA2M,qBAAAhjD,EAAAyjD,EAAA,EAAA,EAAA,GAChBthD,KAAAsxE,MAAA,MAEAtxE,KAAA4xE,aAA0B9B,MAAAC,iBAAA4B,GAC1BzmE,QAAA,sBAA2BlL,sBAAWknD,SAAAhT,QAAA2M,qBAAAhjD,EAAAyjD,EAAA,EAAA,EAAA,GACrBthD,KAAA2wE,aAAAb,MAAAE,oBAAA6B,GAAA3mE,QAAA,iBAAAlL,KAAA2wE,gBACJ,MAAAmB,EAAA5qB,SAAAhT,QAAA2M,qBAAAhjD,EAAAyjD,EAAA,EAAA,EAAA,GACDthD,KAAA+xE,iBAAY9B,4BAAA6B,GACR5mE,QAAA,kBAAAlL,KAAA+xE,iBAAAnxE,KAAA,QAEQZ,KAAAgyE,YAAA9qB,SAAAhT,QAAA2M,qBAAAhjD,EAAAyjD,EAAA,EAAA,EAAA,IAAA,iBAExB,GAA8B,IAA9BthD,KAAA6wE,aACA,OAAA,+BAhMA,OAAA,KACA,MAAAoB,EAAAjyE,KAAA5E,QAAAkB,gBAAA8zE,MAEA,OAAAF,gBAAAgC,cAAAlyE,KAAA6wE,cAAAoB,EACA,oBAGA,OAAA,IAAAjyE,KAAA8wE,kBACyB,KACzBZ,gBAAAiC,yBAAAnyE,KAAA5E,cAAA01E,kBACQ,kBAEIsB,UAAoB,oBACvBC,UAAA,IACInC,gBAAAiB,UAAA,CAAA,IAAA,KAAA,EAAA,GACDjB,gBAAAG,iBAAqB,CAAA,EAAK,EAAA,EAAK,GAClCH,gBAAAmB,YAAA,CAAA,SAAA,eAAA,eAAA,QACTnB,gBAAAgC,cAAA,CACA,MAAa,GAAA,GAAA,GAAA,MAAoB,GAAA,GAAc,GAAA,QAC1C,EAAA,CAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,IACD,EAAA,CAAA,GAAA,GAAa,GAAA,GAAW,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,IACpB,EAAA,CAAA,GAAO,IAAS,GAAA,GAAG,GAAI,GAAoB,GAAA,GAAA,GAAA,GAAA,GAAK,IACnD,EAAA,CAAA,GAAA,IAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,GAAA,6BAE0B,GAAA,GAAA,GAAA,GAAA,IAC1B,EAAA,CAAA,GAAA,IAAA,GAAA,IAAA,GAAA,GAAA,GAAA,IAAA,GAAA,GAAA,GAAA,IACD,aAAuB,IAAA,GAAG,IAAA,GAAA,IAAA,GAAA,GAAA,GAAA,IAC9B,EAAY,CAAA,GAAA,IAAI,OAAY,GAAA,IAAA,GAAA,IAAA,GAAA,GAAA,GAAA,IAChB,GAAA,CAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,GAAA,GAAA,IAEZ,GAAA,CAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,KACA,GAAA,CAAA,GAAA,IAAA,GAAA,IAAA,GAA4B,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,KACZ,GAAA,CAAA,GAAA,IAAA,oCACH,GAAA,CAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,IAAA,GAAA,MAkKbhC,gBAAAiC,yBAAA,2BAEoB,EAAA,CAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MACpB,IAAiB,CAAA,EAAA,MAAA,EAAA,KAAA,EAAA,MAGZjC,gBAAAoC,qBAEL,CAAA,EACA,IAAA,KAAA,MAAA,CAAA,EAAA,IAAA,KAAA,YAMAC,YAAA,WAEAhqE,CAAA1K,EAAAyjD,IACA,IAAA4uB,gBAA8BryE,EAAAyjD,IAK9BkxB,SAAAA,mBAAiCC,GAKxB,MAAA,KAAA,IAAAA,GAAA,4BAUQnI,sBAAAV,kBACjBxoE,WAAAA,GACoBk6C,SAAAt/C,WACJgE,KAAA0yE,WAAA,yBAEQ1yE,KAAA2yE,mBAAA,0BAEA3yE,KAAA4yE,SAAA,GACA5yE,KAAA6yE,sBAAA,wCAEI7yE,KAAA8yE,SAAA,CAE5Bj1E,IAAAhB,OAAAS,MAAAy1E,YACyBh3E,IAAA,GAKD,MAAAiuE,GACxB,OAAAlxB,YAAA94C,UAAA,OAAkC,EAAA,YAClCA,KAAA+mD,SAAAiU,UAAuC,YAAA,cAEP,EACHgY,MAAAA,SAC7BhzE,KAAAkG,eACAlG,KAAAizE,uBAE6B,CAAA,MAAAxxE,GACDA,GAAAA,EAAA2yC,UAAAmF,SAAAV,UAU5B,MAAAp3C,EAT4B,GAAAzB,KAAA6yE,qBAAA,CACH,MAAAK,EAAAlzE,KAAA0yE,WAAA1yE,KAAAmzE,gBACJnzE,KAAA+mD,SAAAiU,UAAA,kBAAAkY,GAAA,MAAAxR,EAAAwR,EAAAlzE,KAAA+mD,SAAA3T,OAAAusB,WAERz0D,QAAA,8BAAAw2D,SAAAA,yCAQb,CACgB,oBAOJtuB,EAAApzC,KAAA+mD,SAAY3T,OACRggC,EAAApzE,KAAA+mD,SAAWyT,OAAA/9C,eAAoB,SAC/C22B,GAAAA,EAAAsuB,UAA6B1hE,KAAAgnD,UAAqB3L,SAAA,CAClC,MAAAg4B,OAAArsB,UAAA3L,SAAAi4B,KAAAA,YAAaF,EAAA,IAAA,GAChBhgC,EAAAw+B,cAAA,MAAAx+B,EAAAw+B,aAAA,IACD5xE,KAAA+mD,SAAAiU,UAAA,UAAA5nB,EAAAigC,EAAAjgC,EAAAsuB,mEAKZ,MAAA2R,EAAgBrzE,KAAOgnD,UAAA3L,SAAAr7C,KAAAszE,YAAAF,EAAA,IAAA,GAEVF,EAAAxtE,KAAAqsC,MAAAshC,EAAArzE,KAAAuzE,YAAAvzE,KAAAmzE,gBACbnzE,KAAA+mD,SAAgBiU,UAAC,kBAAAkY,GACjBxR,MAAAA,EAAyBwR,EAAoB9/B,EAAAusB,WACjCz0D,QAAA,gDAAwBw2D,iBACpB1G,UAAM,WAAA0G,oEAKT,EACb,OAAA,CACY,IAAA8R,EAAA,KACZxzE,KAAA8yE,mBAAqB9yE,KAAoBgnD,UAAAjN,WAAA/5C,KAAA8yE,SAAAj1E,IAAAk1E,EAAAA,WAAA/rB,KAAAA,UAAAxQ,UAAA,QACzCs8B,SAAkB/2E,KAAA,IACD,MAAA,IAAAoD,+CAEApD,cACLoD,MAAKo6C,SAAUV,WACf,OAAA,CACZ46B,GAAAA,KAAA,UAAAX,SAAAj1E,IAAA21E,IAUA,OATAxzE,KAAA0zE,iBAA+B,GAAAxD,gBAAAkC,UAC/BpyE,KAAA0zE,iBAAAZ,GAAAA,KAAAA,SAAAj1E,IAAA21E,SAAAxzE,KAAAgnD,UAAAvL,OAAA+3B,GACAtoE,0BAA2BlL,KAAAgnD,UAAAxQ,+BAAAk8B,cACX1yE,KAAA2zE,iBAAa3zE,KAAA0yE,aAChBxnE,QAAA,qCAAAlL,KAAA0yE,cACD1yE,KAAI0yE,WAAe,EAC/B1yE,KAAAuzE,WAAA,aAEAI,eAAA3zE,KAAA0yE,eAGAe,GAAA,IACwBzzE,KAAA8yE,SAAAj1E,IAAOxC,sCACd,IAAAm4E,EAAA,CACI,GAAAV,KAAAA,SAAA/2E,IAAAiE,KAAA8yE,SAAAj1E,IAAA5B,OACD,MAAA,IAAAkD,MAAAo6C,SAAAV,iBAEpB74C,KAAAgnD,UAAAvL,OAAAq3B,KAAAA,SAAA/2E,KAAA,QAIAy3E,EACAC,GAAA,CAGA,6BASA,OAAA36B,YAAA94C,UAA0B,OAAC,EAAA,YAMnB,IAAA6rB,MALQ7rB,KAAA0yE,aACH1yE,KAAAszE,WAAAtzE,KAAAgnD,UAAAxQ,SAAA,SAERx2C,KAAAgnD,UAAAjN,gBAAA25B,iBAAA,EAAA,GAGO,IACA7nD,EAAA0mD,YAAWhqE,SAAoBmrE,iBAAI,EAG/C,CAAA,MAAAjyE,GAIY,aAHZzB,KAAiBgnD,UAAAvL,UACLz7C,KAAA0oE,SAAAvoE,KAAAsB,gBAAAA,EAAA2yC,UAEA,CACZ,CAOAvoB,SALA7rB,KAAgBgnD,UAAOvL,OAAA,GACvBz7C,KAAA+mD,SAAAiU,UAAAnvC,aAAAA,EAAA+kD,WACa5wE,KAAA+mD,SAAAiU,UAAAnvC,UAAAA,EAAAylD,OACbtxE,KAAA+mD,SAAAiU,UAAgC,YAAY,GAC5Ch7D,KAAA+mD,mBAAkC,aAAAl7B,EAAA8kD,cAClC9kD,EAAWzwB,SAAA,GAAA,IAAAywB,EAAAukD,MACN,OAAAwD,KAAAA,UAAA/nD,GAGL7rB,KAAA+mD,SAAAiU,yDACAh7D,KAAA+mD,SAAgBiU,oBAAanvC,EAAA4lD,SAC7BzxE,KAAA0yE,WAAwB,KACxBxnE,mDAAW87C,KAAAA,UAAAxQ,WAAA3qB,EAAAukD,MAAAvkD,EAAA4lD,QAAA5lD,EAAA8kD,cAGH,MAAAkD,EAAAhoD,EAAqBioD,eACjB,UAAAD,EACZ,MAAA,IAAA10E,MAAA,qBAGA,MAAA40E,EAAuBloD,EAAAmoD,sBACvB9oE,QAAA,qBAAmB6oE,WAEdE,EADMF,EAAA,EACNloD,EAAA4lD,QAAA5lD,EAAA8kD,6BAQL,GALA3wE,KAAAuzE,WAAkB7tE,KAAAC,MAAYsuE,QAClBC,iBAAAroD,EACZ7rB,KAAA0yE,aACA1yE,KAAA4yE,SAAAzyE,KAAA0rB,EAAA4lD,SAE2B,IAA3BzxE,KAAA0yE,WAGoB,OAFpB1yE,KAAAN,mBAA2B3D,UACPiE,KAAAm0E,uBACA,EACA,GAAA,IAAAn0E,KAAA0yE,WAAA,CAEpB,GAAA1yE,KAAAo0E,WAA2Bp0E,KAAA4yE,WAKP,GAHpB5yE,KAAAmzE,gBAAAY,EACA/zE,KAAA+mD,SAAAiU,UAAA,eAAA,OAEoBhU,KAAAA,UAAA3L,SACpB,OAAA,OAEoB,QAAA0L,gBAAY2a,SAChC,OAAA,EAEA,IAAA18D,KAAAA,QAAA08D,SAEA,OAAgB,EAUhB,OALa1hE,KAAAgF,QAAA08D,UAAA,IAAA1hE,KAAA0yE,aACD1yE,KAAAmzE,gBAAOY,EACnB/zE,KAAA6yE,sBAAA,GACK7yE,KAAAN,OAAA,EAELmsB,EAAA2kD,yCACA,UAGQxwE,KAAgBm0E,uBACxB,KAKgBP,SAAAA,CAAA/nD,UAChBitB,YAAqB94C,UAAA,OAAoC,EAAA,YACzC,MAAAnC,EAAAhB,OAAAS,eACH0C,KAAAgnD,UAAAnN,WAAAh8C,KACbm0E,aAAA9qB,SAAAhT,QAAA2M,qBAAAhjD,EAAA,EAAA,EAAA,IACYmC,KAAAgnD,UAAAvL,OAAA5vB,EAAAmmD,YAAA,EAAA,GAEAhyE,KAAA0yE,aAEP1yE,KAAAq0E,kBAAAxoD,EAAAmmD,YACD,MAAAsC,EAAAzoD,EAAA8kD,aAAA,KAEkBc,EAAA,GAFlB4C,IAAA3B,KAAAA,WAAA2B,EAAAA,KAAAA,sBAAA3B,YAEkB4B,EAAA,GAMH,8DALnBt0E,KAAA+mD,SAAkBiU,UAAwB,UAAAyW,GAC1C5lD,EAAgBkmD,kBAChB/xE,KAAW+mD,SAAAiU,UAAA,mBAAAnvC,EAAAkmD,iBAAA91E,QACNiP,QAAA2gB,QAAAA,EAAAmmD,+BAAAP,KAE0B,IAAZzxE,KAAY0yE,+BAG/B55B,YAAW94C,UAAA,OAAA,EAAA,YAGO,OAFbA,KAAAqiB,UAAAriB,KAAAgnD,UAAAhN,WAAAmN,QAAAjD,UACJlkD,KAAAN,QAAA,EACiBM,KAAAm0E,gwDA1PlBn0E,KAAA2yE,2dC3QA,EAqBAz0E,OAAAoK,eAAAisE,eAAA,aAAA,CAAA3rE,OAAA,6CAGAq+C,YAAA/iD,WACKgH,QAAA+7C,YAAA,sCACHutB,UAAA,IAAArtB,QAAAT,WAAA,EAAA,oBAQF3qD,IAAA,EACYwM,IAAAA,CAAA1K,EAAAyjD,KAcZ,0EAYAmzB,SAAA,OAEYlsE,IAAA,CAAA1K,EAAAyjD,KACA,CACAozB,gBAAA,CAAA,MAAA,KAAA,MAAA,MAAAxtB,SAAAhT,QAAA2M,qBAAAhjD,EAAAyjD,EAAA,EAAA,IACZqzB,aAAAztB,SAAAhT,QAAA2M,qBAAAhjD,EAAAyjD,EAAA,EAAA,GAWWszB,aAAA1tB,SAAAhT,QAAA2M,qBAAAhjD,EAAAyjD,EAAA,EAAA,EAAA,GAAA,EAEPuzB,OAAyB3tB,SAAchT,QAAAiN,SAAAtjD,EAAAyjD,EAAA,EAAA,GAAdwzB,iBAAA5tB,SAAchT,QAAA2M,qBAAAhjD,EAAAyjD,EAAA,EAAA,EAAA,MAK9B,MAAAhH,aACDl5C,WAAAA,CAAA4lD,QACAA,UAAAA,4BAGPlO,YAAA94C,UAAA,OAAA,EAAA,YACJ,MAAA/C,QAAA+pD,KAAAA,UAAAtN,UAAA86B,WAAA92E,aAAAq3E,wBAED,MAAA,quBAfA/zE,GAAA,waC3EA,SAAAsH,eAAA0sE,eAAA,aAAA,CAAApsE,OAAA,uDAmDAk+C,gBAAA5iD,cA/CO+wE,IAAA7wE,6CAEP+6D,WAAA56D,OACM0iD,QAAAA,YAAY,6DACHH,gBAAkBiZ,0BAE3BzkB,SAAAt/C,WAAAgE,KAAAk1E,YAAA,CAEW,SAEjBp8B,OAAAA,YAAkB94C,UAAA,OAAsB,cAExC,MAAAsjC,aAAA0jB,UAAAtN,UAAAylB,WAAAF,aAIQ,OAHR9kB,SAAAuI,MAAYpf,EAAY,OAAK,gBACxBtjC,KAAA+mD,SAAAiU,UAAA,aAAA,iBAEGh7D,KAAAm1E,iDAIWn1E,UAAA,OAAK,EAAA,YACd,MAAAo1E,EAAC,IAAAH,IAAA36B,kBAAA0M,iCAEOouB,EAAAC,mBAGlBxpD,OADA3gB,QAAA,qBAAkB2gB,EAAgB5uB,sBAAA4uB,EAAAypD,iBAClCzpD,EAAe5uB,KACC,IAAA,KAChB,MAAgBs4E,QAAAH,EAAAI,iBAAA3pD,EAAAypD,eAEhBt1E,KAAA+mD,SAAAiU,UAA6Bua,kBAAAA,EAAAE,aAC7Bz1E,KAAA+mD,SAAAiU,UAAmCua,aAAAA,EAAAb,iBACnC10E,KAAA+mD,SAAAiU,UAA+C,WAAAua,EAAAE,YAAAF,EAAAb,iBAC/C10E,KAAA+mD,SAAAiU,UAAqCua,mBAAAA,EAAAX,cACrC,MACA,IAAA,KACA50E,KAAAk1E,aAAArpD,EAAAypD,oBAEAt1E,KAAAgnD,UAA6BvL,OAAA5vB,EAAAypD,eACL,UACxB,KAEoB,IAAA,SACA,KACA,IAAA,KACpB,IAAA,WACwBt1E,KAAAgnD,UAAAvL,OAAA5vB,EAAAypD,eAAA,MACxB,IAAA,YAnDAt1E,KAAA+mD,SAmDAiU,UAAAka,YAAAA,KAAAA,iBAAAnuB,SAAA3T,OAAAsuB,oPCtBAp5D,eAAAotE,eAAA,aAAA,CAAA9sE,OAAA,6BAEAs+C,SAAY3nD,OAMZm2E,eAAA/Z,OAAA,4yCCpC0Bz9D,OAAAoK,eAAaqtE,YAAgB,aAAA,CAAA/sE,OAAA,6BAF5C,MAAAgtE,UAGXx0E,WAAAA,CAAA4lD,GAEAhnD,KAAAgnD,UAAAA,+BAQA,IAAAz6C,CAAA+d,GAEAwuB,OAAAA,sBAAA,OAAA,EAAA,YACA,UAAAh7C,IAAAkC,KAAA61E,OAEA71E,KAAA61E,YAAA71E,KAAAgnD,UAAAtN,UAAAyN,QAAA1D,eAEQp7C,EAAArI,KAAgB61E,MACxB,YAAAt2D,KAAA+K,EAAAtqB,KAAAuf,IAAA,IACAlX,KAAA,GAAqBrI,KAAAuf,IACRlX,GAAA,GAAAiiB,GAAA,IAGbtqB,KAAAuf,KAAA,iBACgBvf,KAAA61E,aACAxtE,GAAA,GAAAiiB,GAAA,SAGhBurD,iBAAA7uB,UAAAtN,UAAAyN,QAAA1D,WACAzjD,KAAAuf,MACAlX,SAAAkX,IACoBlX,GAAArI,KAAA61E,QAAA,GAAA71E,KAAAuf,KACHlX,MAAAiiB,GAAA,MAMI,MAAAmxB,CAAAnxB,sBACDtqB,UAAA,OAAA,EAAA,YACH,GAAAA,KAAAuf,IAAA,EAAA,CACJ,MAAAm7B,UAAAn7B,IAERvf,KAAA61E,WAAA/3E,EACDwsB,GAAMowB,EACF16C,KAAAuf,IAAO,CACf,CACgB,MAAAu2D,EAAAxrD,EAAA,GAAAyrD,GAAAzrD,EAAAwrD,GAAA,gBAEA91E,KAAAgnD,UAAAvL,OAAA,EAAAs6B,8WCnDhB,SAAAztE,eAAA0tE,eAAA,aAAA,CAAAptE,OAAA,uDAsCKk+C,gBAAA5iD,cAhCE+xE,IAAA7xE,6CAEDuxE,YAAApxE,YAEA0iD,QAAAA,YAAM,6DACNH,gBAAgBiZ,YAChB3+D,WAAAA,GACNk6C,oBACAt7C,KAAAk1E,YAAkB,EAElB,KAAAhjC,GACA4G,OAAAA,YAAwB94C,UAAI,OAAA,EAAC,YACxB,MAAA6rB,QAAA7rB,KAAAgnD,UAAAtN,UAAAu8B,IAAAta,QACDxhB,SAAKuI,MAAG72B,EAAAyX,UAAA,MAAA,gBACJp4B,QAAA,kBAAqB2gB,EAAEqqD,sBAA6BrqD,EAAAsqD,sBAC5Dn2E,KAAA+mD,SAAkBiU,UAAS,aAAqB,iBAChDh7D,KAAA+mD,SAAkBiU,UAAa,aAAUnvC,EAAO6oD,iBAChD,MAAAxB,QAAArnD,EAAA6mD,WAA6D7mD,GAAAA,EAAUuqD,gBAC3Dp2E,KAAA+mD,SAAAiU,UAAA,kBAAKkY,GACjBlzE,KAAA0hE,SAAAwR,EAAArnD,EAAA6oD,gBAAA10E,KAAA+mD,SAAAiU,UAAA,WAAAh7D,KAAA0hE,UAEgB1hE,KAAUq2E,UAA2B,IAAAV,YAAAC,eAAA5uB,8FACzC,MAAA5rD,QAAa4E,mCACzB+mD,SAAYiU,UAAc,WAAoB5/D,EAAA,KAAMk7E,QAAS,UAC7Dt2E,KAAAu2E,cAA0B1qD,EAAO6mD,oBACG,mDAAA1yE,KAAAgnD,UAAAxQ,YACpC2qB,gBAAAG,YAAAO,oBAAA9a,SAAA/mD,KAAAgnD,UAAAhnD,KAAAgF,WAGAuxE,aAAAA,CAAA7D,GACA55B,OAAAA,sBAAgC,OAAA,cAChC,KAAA45B,KAAA,GAAA,CAAA,MAAAV,QAAAhyE,KAAAq2E,UAAA9pE,KAAA,IACKvM,KAAAk1E,gBAAAlD,QAtCLhyE,KAAAq2E,UAsCK56B,OAAAu2B,seCvCL,SAEiB1pE,eAAAkuE,SAAA,aAAA,CAAA5tE,OAAA,yCACjBrJ,WACQy1E,eAAA9wE,eACD8xE,eAAA5xE,eACLkmE,sBAAAhmE,wCAC6B,+DACbgmE,sBAAAV,2BAEZ,OAAA9wB,YAAA94C,UAAA,OAAA,EAAA,YAEA,IAAAy2E,oBADAzvB,UAAAlN,UAAAqN,IAAAA,QAAAT,WAAA,EAAA,gBAGc,2CAEZ+vB,EAAO,IAAAT,eAAAU,aACH,MAEZ,IAAA,MACgBxrE,QAAA,6BAChBurE,EAAyB,IAA4BzB,eAAA2B,aACrD,MAEiB,QAEjB,MAAA,IAAAx3E,MAAqD,uQCrBrDg8C,SAAA57C,WACAq3E,OAAA1yE,SAMAgH,QAAAiwC,SAAoC,2CACpC07B,aAEAz1E,WAAAA,CAAA2lD,EAAA/hD,4DAIAhF,KAAA82E,aAAA,EACa,CAKD,SAAAC,CAAAlrD,EAAAmrD,GACI,GAAAnrD,EAAAuyC,WAAI6Y,eACpBC,eAAArrD,EAAAmrD,OAEgB,CACH,GAAAnrD,EAAAuyC,WAAA+Y,UAAA,CACb,GAAuB,IAAvBL,KAAAA,aAAuB76E,OACvB,MAAA,IAAAkD,MAAA,oCAEoBa,KAAA82E,aAAA32E,KAAc62E,MAEjBnrD,EAAAuyC,WAAAgZ,WAAAvrD,EAAAuyC,WAAA+Y,UAAA,CAEjB,GAAAL,KAAAA,aAAA76E,OAAA,EAAA,CACa,MAAAo7E,EAAAx6E,OAAAkE,YAAA+1E,cACJ92E,KAAAs3E,cAAAD,GAGAr3E,KAAA82E,aAAAjrD,EAAAuyC,WAAAgZ,aAAAJ,EAEG,CACZ,CACKnrD,EAAAuyC,WAAAgZ,UAELp3E,KAAAwhE,kBAAA31C,WAIkB7rB,KAAAs3E,cAAAz6E,OAAAkE,YAAA+1E,cACL,gBAMbjrD,EAA0BmrD,WACD,oBAGzBO,MAAAA,EAAkBX,OAAAY,aAAAjvE,IAAAyuE,EAAA,GACTO,GAAA,WAAAA,EAAAE,OACT,MAAA,IAAAt4E,MAAA,sCACAo4E,GAAA,IAAAA,EAAAG,WAOA,MAAY,IAAAv4E,MAAM,8DAPlB,oEAAAa,KAAA+mD,SAAsBiU,UAAK2c,aAAAA,EAAAhY,YACtB3/D,KAAA+mD,SAAAiU,UAAA2c,UAAAA,EAAAC,gBAEL53E,KAAA+mD,SAAAiU,UAAA2c,mBAAAA,EAAAvG,aACAlmE,QAAc,uDAAAysE,EAAAhY,WAAAgY,EAAAC,eAAAD,EAAAvG,YACd,EAKAkG,aAAAA,CAAAN,GAGKO,MAAAA,EAAAX,OAAAY,aAAAjvE,IAAAyuE,EAAA,GAELO,GADsBrsE,QAAA,0CAAAqsE,EAAAG,WAAAV,EAAA17D,YAEtB,IADAi8D,EAAAG,WAGY,OAAc13E,KAA2B63E,qBAAAb,EAAAJ,OAAAY,aAAAz7E,KAMrDylE,iBAAAA,CAAA31C,GAEAk7B,KAAAA,SAAA3T,OAAAusB,YAAA9zC,EAAAisD,yBAAA,yEAGQ93E,KAAA+mD,SAAAiU,UAAA,WAAAh7D,KAAA+mD,SAAA3T,OAAA8/B,gBAAAnsB,KAAAA,SAAA3T,OAAAusB,kCAQMqX,EAAAt3E,GAEN,MAAAq4E,EAAA5wB,QAAA1D,UAA0Bl7C,IAACyuE,EAAAt3E,MACrB,EACN,IAAAynD,QAAAT,WAAAqxB,EAAA,SAAAxvE,IAAAyuE,EAAAt3E,GACRA,GAAAq4E,EAES,IAAAC,EAAA7wB,QAAA1D,UAAAl7C,IAAAyuE,EAAAt3E,GAEG,IADZA,GAAY,EACAs4E,KAAiC,GAC7Ct4E,GAAyBM,KAAAi4E,iBAAOjB,EAAAt3E,oBAI/Bs3E,EAAAt3E,SACmBq4E,EAAA5wB,QAAA1D,UAAAl7C,IAAAyuE,EAAAt3E,GACpBU,EAAA,IAAA+mD,QAAAT,WAAAqxB,EAAA,SAAAxvE,IAAAyuE,EAAAt3E,EAAA,4LAlHAwL,quBCDAgtE,KAAA34E,OACA44E,iBAAAj0E,qBASAk0E,mBAAAD,iBAAAtB,aAEAz1E,WAAAA,CAAA2lD,EAAA/hD,EAAAgiD,qDAIAhnD,KAAAq4E,SAAA,CACY,gBAMRxsD,EAAcmrD,GAIF,GADJh3E,KAAA23E,SAAe,IAAAO,KAAAI,SAAAtB,EAAA/6E,QAAAsM,IAAAyuE,EAAA,GACc,aAAzBh3E,KAAA23E,SAAAY,eACA,MAAA,IAAAp5E,MAAY,oCAEhBa,KAAA+mD,SAAAiU,UAAA2c,aAAAA,KAAAA,SAAAa,iBACZx4E,KAAA+mD,SAAAiU,UAAsB,mBAAAh7D,KAAA23E,SAAA/C,cAEjB0C,aAAAA,CAAAN,MAIL,iBAFA7vB,QAAAT,WAAAn+C,EAAAA,SAAAA,IAAAyuE,EAAA,GAGYh3E,KAAA63E,qBAAAb,EAAA,GAEZh3E,KAAsBq4E,QAA0Br4E,KAAAgnD,UAAAxQ,SAOhDgrB,iBAAAA,CAAA31C,oVA9CA,MAAAk/C,49BCEA7/D,QAAA+7C,YAAA,yCASAwxB,oBAAAN,iBAAAtB,aAEAz1E,WAAAA,CAAA2lD,EAAA/hD,EAAAgiD,sDAIAhnD,KAAAq4E,SAAA,CACY,gBAMZxsD,EAAyBmrD,GAChB9rE,gCACJwtE,IAAAA,EAAAC,MAAAhd,OAAApzD,IAAAyuE,EAAA,GAEch3E,KAAA+mD,SAAAiU,UAAA0d,mBAAAA,EAAAE,0DAzBnB54E,KAAA+mD,SAAAiU,8bCTA,SAEiB1yD,eAAsBuwE,qCACvC,MAAA1xB,+BACc5nD,WACR46C,SAACj2C,aACLgjD,SAAA9iD,OACF+6D,WAAO76D,OACD6zE,eAAA5zE,eAIAu0E,aAAQh0E,aACRi0E,cAAA9zE,cACA6hD,gBAAAz7C,cAEAH,QAAA+7C,YAAgB,6BACX,MAAA+xB,aACLv8B,UAAAA,CAAA5+C,EAAAyjD,EAAavlD,OACf8E,EAAA,EACJ,IAAA/E,IAAAA,EAAAwlD,EAAAxlD,EAAAwlD,EAAAvlD,IAAAD,EAEA+E,GAAAhD,EAAA/B,GAEA,OAAA+E,EAEIO,WAAAA,CAAAyqB,GACS7rB,KAAAjE,IAAY8vB,eA6BL,iBAGpBotD,cAAAD,aAAAv8B,IAAA5+C,EAAAyjD,EAAAthD,KAAAjE,OAGA88E,YAAAG,aAAAA,aAKAlyB,MAAAA,kBAAAA,gBAAAiZ,oBAQgC,OAAAjnB,YAAA94C,UAAA,OAAA,EAAA,0CACPgnD,KAAAA,UAAAxQ,cAEJ,IAAA3qB,KAErBA,QAAiB7rB,KAAAgnD,UAAStN,UAAiBw/B,UAAAvd,6BAC9B9vC,EAAAstD,eAAA,OAAA,mCACDttD,kBACQA,EAAAutD,eACOluE,QAAA,sBAAA2gB,EAAAutD,eAAAvtD,EAAAstD,gBACV,MAAAE,QAAAr5E,KAAAgnD,UAAAtN,UAAAs/B,IAAAA,aAAAntD,+BACIwtD,EAA0BJ,6BAC3Bj5E,KAAAgnD,UAAAtN,UAAA,IAAAyN,QAAAV,WAAA4yB,EAAAJ,gBAEI,GADxB/tE,QAAA,0CAAA2gB,EAAAuyC,WAAA6Y,UAAAprD,EAAAuyC,WAAAgZ,SAAAvrD,EAAAuyC,WAAA+Y,WACwBtrD,EAAAuyC,WAAA6Y,UAAA,SACxB9vB,IAAAA,QAAAT,4BAAiD,UAC5B3Y,GACJ,IAAA,UACD7iC,QAAA,oCACHlL,KAAAs5E,iBAAAnB,eAAAtB,aAAA9vB,KAAAA,cAAA/hD,SACF,MACN,IAAA,UACJkG,QAAA,iCACkBlL,KAAAs5E,aAAA,IAAAR,aAAAV,WAAAp4E,KAAA+mD,SAAA/mD,KAAAgF,QAAAhF,KAAAgnD,WACf,MAAO,IAAA,UACY97C,QAAA,kCACRlL,KAAAs5E,aAAAP,IAAAA,cAAAN,iBAAA1xB,SAAA/mD,KAAAgF,QAAAhF,KAAAgnD,WACH,MAAA,QACA,4DAEZhnD,KAAA+mD,mBAA2BuyB,aAAAA,OAAAA,KAAAA,aAAAC,WAE3Bv5E,KAAAs5E,aAAAvC,UAAAlrD,EAAAmrD,EACa,QAAAnrD,EAAAuyC,WAAAgZ,gBAED31E,GACZ,GAAA,gBAAAA,EAAA2yC,QAAA,OAlFkB,GAAA3yC,EAAA2yC,QAAAmC,WAAA,WACHv2C,KAAAw5E,WAAA,EAId,OADIx5E,KAAA0oE,SAAAvoE,KAAA,4EACJH,KAAAs5E,aAAA1nE,QAID,MAAAnQ,MAKAy3E,UAAAvd,OAAA,QAEQpzD,IAAA,CAAA1K,EAAAyjD,KACI,CACZ63B,eAAgBha,WAAAF,YAAA12D,IAAA1K,EAAAyjD,GACAlmD,QAAAyC,EAAA4kD,UAAAnB,EAAA,GAChB8c,WAAA,CACA+Y,UAAAjwB,SAAAhT,QAAAmN,aAAA94C,IAAA1K,EAAAyjD,EAAA,EAAA,GAvBA21B,UAAA/vB,SAsFAhT,QAAAmN,aAAA94C,IAAA1K,EAAAyjD,EAAA,EAAA,uVChHMh5C,eAAAmxE,UAAA,aAAA,CAAA7wE,OAAA,IACN,MAAAu+C,QAAAxqD,WACAwiE,WAAA5/D,OAKAk6E,UAAe9d,OAAA,OAEHpzD,IAAA,CAAA1K,EAAAyjD,KACZ,CAEA2e,QAAAd,WAAAF,YAAA12D,IAAA1K,EAAAyjD,0CAYAo4B,iBAEKt4E,WAAAA,CAAAu4E,GACJ35E,KAAA25E,UAAAA,EACuB35E,KAAAjE,IAAA49E,EAAAthD,UACxBr4B,KAAAjE,KAAA,OAAAA,GAZA,gKCjBAmC,OAAAoK,eAgBAjM,EAAA,aAAA,CAAAuM,OAAA,IAhBA,MAAAuxC,EAAAx9C,iBAKIi9E,KAuCJv9E,EAAAu9E,aAAAv9E,EAAAu9E,WAAA,CAAA,IAtCAA,EAAA,IAAA,GAAA,MAEIA,EAAAA,EAAW,MAAA,GAAA,QACXA,EAAAA,EAAA,WAAA,GAAA,aACAA,EAAAA,EAAA,cAAA,MAAA,gBACAA,EAAAA,EAAW,UAAA,MAAA,YACfA,EAAAA,EAAA,SAAA,KAAA,WAEIA,EAAAA,EAAU,gBAAA,KAAA,kBACVA,EAAAA,EAAU,IAAA,MAAA,MAfdA,EAAAA,EAAA,UAAA,KAAA,gFA2CAA,EAAAA,EAAA,KAAA,IAAA,sBAWAx4E,WAAAA,CAAAyqB,GACAsuB,EAAAU,GAAAhvB,EAAUwM,cAAA,eACLr4B,KAAAjE,IAAA8vB,EAAAwM,UAEL,GAAA9vB,CAAA1K,EAAAyjD,GACA,MAAA,mIAfAu4B,2iBC7CA,4NAUM1a,WAAA9zD,OACAy7C,gBAAYx7C,cAOZs0D,cAAcp0D,oEAaJsuE,mBAAsBhzB,gBAAAiZ,oBAClCjnB,OAAAA,YAAQ94C,UAAA,OAAA,EAAA,YACJ,MAAA+5E,QAAqB/5E,KAAAgnD,UAAUtN,UAAqBsgC,KAAAre,WAC5DzwD,QAAA,OAAkBlL,KAAAgnD,UAAAxQ,4BAAAujC,EAAA9Z,WACD,SAAjB8Z,EAAiB9Z,QAEjB,OAAAjgE,KAAAi6E,iBAAA5gE,MAAA5X,IACYA,GAAAA,EAAA2yC,UAAYmF,OAAAV,UACR,MAAAp3C,GAGD,uCAGGzB,UAAG,OAAA,EAAA,kBAErB+K,QAAkB/K,KAAOgnD,UAAAtN,UAAAylB,WAAAF,gBACbj/D,KAAA+mD,SAAAiU,UAAK,aAASjwD,GAG1B,SAFAA,SAGgB/K,KAAAk6E,gBAGhB,MAAW,IAAA/6E,MAAA,iCAAA4L,OAKX,aAAAmvE,sBACgBl6E,UAAA,OAAW,oCAG3BA,KAA+BgnD,UAAAtN,UAAAsgC,KAAAre,QAG/B,mBAFA9vC,EACA3gB,QAAA,OAAAlL,KAAAgnD,UAAwBxQ,0CAAM3qB,EAAAo0C,WAC9Bp0C,EAAAo0C,aACwB,aACxBjgE,KAAAm6E,gBACA,UACA,OACAn6E,KAAA+mD,SAAwBiU,UAAS,YAAa,GACtBh7D,KAAAo6E,WAAIp6E,KAASgnD,UAAYtN,UAAA2gC,IAAAA,UAAAC,UAAAzuD,IACzB,MAEI,IAAA,OACH,MAAA0uD,QAAAvzB,KAAAA,UAAAtN,cAAA2gC,UAAAG,OAAA3uD,IACzB,IAAA4uD,EAAwBJ,UAAaT,WAAUW,EAACG,YAChDD,IACAvvE,QAA+C,uBAAAqvE,EAAAG,YAC/CD,EAAAF,YAAAA,EAAAG,WAA+C,KAG/C16E,KAAA+mD,SAAAiU,+BAA8Byf,GACVz6E,KAAA+mD,SAAAiU,UAAY,gBAAAuf,EAAAI,gBAChC36E,KAAA+mD,SAAAiU,uBAA+Buf,EAAAK,gBACP56E,KAAA+mD,SAAAiU,UAAAuf,mBAAAA,EAAAM,WACA76E,KAAA+mD,SAAAiU,UAAe,UAAOuf,EAAAV,YAAAU,EAAAK,eAAgC,GACtD56E,KAAA86E,WAAAP,EAAAV,YAExB,UACA,WACwB,OACI,MAAAxZ,QAAArgE,KAAAgnD,UAAAtN,UAAA,IAAAyN,QAAAV,WAAA56B,EAAAwM,YAEJioC,EAAAV,IAAAA,cAAAE,UAAAO,GACAE,EAAAC,UAAAtkB,WAAcokB,SACtC,IAAApD,gBAA6BC,aAAAjrB,WAA+B6U,SAAAwZ,EAAAvgE,KAAAgF,SAC5D,MACwB,IAAA,QAEJ,IAAAhF,KAAA+mD,SAAA3T,OAAA2nC,UACpB/6E,KAAA+mD,SAAAiU,yBAEwB,MAAAkY,EAAAlzE,KAAAo6E,KAAAp6E,KAAAo6E,KAAAY,eAAAnvD,EAAAwM,UAAAr4B,KAAA86E,WACP96E,KAAA+mD,SAAAiU,4BAAAkY,GACDlzE,KAAA+mD,SAAAiU,UAAAkY,WAAAA,OAAAnsB,SAAA3T,OAAAusB,YAAA3/D,KAAA+mD,SAAAiU,UAAAjU,UAAAA,KAAAA,SAAA3T,OAAA6nC,iBAAAj7E,KAAA86E,WAAA/zB,KAAAA,SAAA3T,OAAAusB,kBAEmC3/D,KAAAgnD,UAAAvL,OAAA5vB,EAAAwM,iBAClC,QACJntB,QAAA,sBAAA2gB,EAAAo0C,cAAcp0C,EAAAwM,mBAChBr4B,KAAA0oE,SAAAvoE,KAAA0rB,sBAAAA,EAAAo0C,eACNjgE,KAAAgnD,UAAAvL,OAAA5vB,EAAAwM,WAGLr4B,KAAA6rB,OAAkBwM,UAAA,GAAA,IAClBntB,QAAA,8CAC4BuwC,OAAA,GAER,IAEJ0+B,YAAAA,CAAAe,GAEhB,OAAApiC,YAA0B94C,UAAA,OAAA,EAAA,kFAC1BkL,0DAA2B87C,KAAAA,UAAAxQ,SAAA2kC,GAEhB,SADEA,EAERn7E,KAAAo7E,kBAAAF,EAAA7iD,UAAA,IAGLr4B,KAAA0oE,SAAAvoE,KAAA,gCAAAg7E,GAEgBjwE,QAAA,mCAAgBiwE,GACVn7E,KAAAgnD,UAAAvL,OAAAy/B,EAA4B7iD,UAAU,MAI5D+iD,iBAAAA,CAAiC/iD,GACjC,OAAAygB,YAA2B94C,UAAA,qBACd,KAAAq4B,GAAA,GAAA,CAER,MAAAxM,aAAAm7B,UAAAtN,UAAAsgC,KAAAre,QAnIL0f,EAmIKrB,IAAAA,KAAAN,iBAAA7tD,mRCjFL3tB,uRAEA,ohCAFAo9E,UAAAC,wZC7DA,iEAEAp0B,MAAAA,QAAAxqD,iCAKOwkE,gBAAAj9D,gCAED4iD,gBAAAxiD,cAEAk3E,eAAAj3E,aACA0iD,YAAAniD,WACAmiD,QAAAA,YAAiB,uCAIvBw0B,sBAAA30B,gBAAAiZ,2BAEmBjnB,YAAA94C,UAAA,OAAA,EAAA,sCACP,QAEZA,KAAA07E,qBAGAva,gBAAAG,YAAAO,eAAA7hE,KAAA+mD,SAAA/mD,KAAAgnD,UAAAhnD,KAAAgF,WAKQ02E,kBAAAA,sBACO17E,UAAA,SAAA,kBAGK,gBADOA,KAAAgnD,UAAKlN,UAAMqlB,WAAAF,kCAGfj/D,KAAWgnD,UAAAtN,UAAe8hC,eAA4BD,QAAAI,kBAC7DxhC,SAAAyhC,YAAA/vD,EAAOgwD,QAAA,OAAA,4BACvBhwD,6BAAAA,EAAAiwD,mBAAAN,eAAAD,QAAAI,iBAAA5/E,OACyB,IAAL8vB,EAAAiwD,iBAAK/0B,SAA+B3T,OAAA2oC,aACxD/7E,KAAA+mD,SAAwBiU,UAAS,aAAW,WAC5Ch7D,KAAA+mD,SAAAiU,UAAA,YAAAnvC,EAAAsT,MAAA68C,UAGAh8E,KAAA+mD,SAAAiU,UAAA,gBAAAnvC,EAAAsT,MAAAysC,eAEA//C,EAAAsT,cAEAn/B,KAAA+mD,SAAAiU,UAAA,qBAA8D2V,cAC9D3wE,KAAA+mD,SAAAiU,UAAA,WAAAnvC,EAAAggD,aAAAhgD,EAAAsT,MAAAwxC,eACA3wE,KAAA+mD,SAAAiU,UAAyB,uCACRh7D,KAAA+mD,SAAAiU,UAAAnvC,kBAAAA,EAAAggD,cACjB7rE,KAAA+mD,mBAAiC,eAAAl7B,EAAAsT,MAAA88C,MAAA,MAAA,cAEjCC,EAAArwD,EAAAswD,WAAAX,eAAAD,QAAAI,iBAAA5/E,IAAA,GAEiB,IADG8vB,EACHiwD,iBAEG97E,KAAAo8E,sBAAAvwD,EAAAqwD,kCAKPrwD,EAAAwwD,aAAA,IACGr8E,KAAoBs8E,eAAgBzwD,EAAyBswD,UAClE,QAAAn8E,KAAAgnD,UAAA3L,eAAA2L,UAAA3L,SAAAr7C,KAAAgnD,UAAAxQ,UAAAglC,eAAAD,QAAAI,iBAAA5/E,KACNiE,KAAA+mD,SAAAiU,UAAA,UAAAjU,EAAA/mD,KAAAs8E,cAAAv1B,KAAAA,SAAA3T,OAAAsuB,kCAOO71C,EAAA0wD,sBAEIv8E,UAAA,qBACA,KAAAu8E,EAAAf,eAAaD,QAAAiB,gBAAAzgF,KAAA,eAC7BirD,KAAAA,UAAAtN,UAAA8hC,eAAAD,QAAAiB,iBACsBC,QAACz8E,KAAAgnD,UAAAhN,WAAAjM,EAAA2uC,WAAAv1B,QAAAhE,UAAAgE,QAAA3E,SACP3lD,OAAAS,MAAqB,EAAAm/E,GAAA1uC,EAAAutC,UAAA,EAAA,IAGrCvtC,kBAFAiZ,UAAoBnN,WAAQv5C,EAAA,EAAAA,EAAArE,oDACE8xC,EAAA4uC,WAAArgF,SAAA,sBAAAyxC,EAAA2uC,wBAAAp8E,EAAArE,UAC9B8xC,EAAA4uC,YACA,KAAA,EAEwB,MACxB,KAAA,GACAzxE,QAAA,gBAGA,MAAA0xE,EAAA,GAAwBt8E,EAAAmiD,UAAM,GAC9BkuB,EAAA9kD,EAAAsT,MAAAwxC,aAAAiM,EAAA,EAEAziC,SAAAU,GAAAhvB,EAAAsT,MAAA88C,MAA8B,4CAC9Bj8E,KAAA+mD,SAAAiU,UAAA,aAA6B2V,GACL3wE,KAAA+mD,SAAAiU,UAAA,WAAAnvC,EAAAggD,aAAA8E,GAExB,WACA,GACAzlE,QAAA,6CACoB,MAEpB,KAAA,GACiBlL,KAAA+mD,SAAAiU,UAAA,WAAA16D,GACjB,MACgB,KAAA,GACA4K,QAAA,+BAAA5K,EAAAhE,SAAA,UACI,MACP,QAAA4O,QAAA6iC,qDAAAA,EAAA4uC,WAAArgF,SAAA,+VC9FM4B,OAAAoK,eAAAjM,EAAA,aAAA,CAAAuM,OAAA,IACfu+C,MAAAA,aAEJgY,EAAe5/D,aAsBflD,EAAAwgF,YAAA,QAEAt0E,IAAAA,CAAA1K,EAAAyjD,KACuB,CAAAvT,GAA6BoxB,EAAAF,YAAA12D,IAAA1K,EAAAyjD,GAAA5jD,KAAAypD,EAAA/B,UAAA78C,IAAA1K,EAAAyjD,EAAA,QAO/Cw7B,SACH,CACF/gF,IAAA,y8BClDA,2GAGAo+C,SAAA56C,aACO47C,SAAAj3C,WAEA64E,WAAc34E,uCAEf+2C,QAAAA,SAA2B,qDAKjCmvB,oBAAAV,kBACA,MAAAI,GACA,OAAAlxB,YAAA94C,UAAA,OAAA,EAAA,kBACAg9E,EAAAh9E,KAAAgnD,UAAAxQ,SAAA2pB,aAAAnZ,UAAAtN,UAAAqjC,WAAAF,aACM1iC,SAAAyhC,YAASzb,EAAApyB,UAA+C,yCACjDitB,UAAA,aAAA,YACLjU,SAAAiU,UAAqB,YAAA,SACjBiiB,aAAej2B,UAAUtN,qBAAUojC,UAC/CG,GAAkB,IAAlBA,EAAkBC,gBAOL,OAHgBhyE,QAAA,0BAAqB+xE,EAAAC,mEAElDl9E,KAAAgnD,UAA2CvL,OAAAwhC,EAAAC,gBAAGl2B,KAAAA,UAAAxQ,SAAAwmC,IACjC,IAAA9f,gBAAAC,aAAAjrB,MAAA6U,KAAAA,SAAA/mD,KAAAgnD,UAAAhnD,KAAAgF,SANbkG,QAAA,0BAUA,WAAAiyE,CAAAC,sBACAp9E,UAAA,OAA0B,cACV,KAAAo9E,GAAOL,WAAiBF,YAAA9gF,oBAC3BiE,KAAAgnD,UAAAtN,UAAAqjC,WAAAF,aAER1c,GADMA,QAAAA,sBAAAA,EAAApyB,WAAAoyB,EAAAziE,QAEP,SADCyiE,EAAApyB,IAEG,MAAAsvC,aAAgBr2B,UAAAtN,UAAAqjC,WAAAO,aACZt9E,KAAA+mD,SAAAiU,UAAAqiB,mBAAAA,EAAAE,YACZv9E,KAAA+mD,SAAsBiU,uBAAyBqiB,EAAAG,mBAC/Cx9E,KAAA+mD,SAAgBiU,UAAAqiB,gBAAAA,EAAAzR,eACA5rE,KAAA+mD,SAAAiU,UAAAqiB,kBAAAA,EAAA5H,aAChBz1E,KAAA+mD,mBAA+B,WAAAs2B,EAAA5H,YAAA4H,EAAAG,mBAC/B,MAAA/L,EAAA4L,EAAAzR,cAAAyR,EAAAG,kBAAAH,EAAAE,WACA,YAAAv9E,KAAA+mD,SAAAiU,UAAA,UAAAyW,EAAA,CA1CAzxE,KAAAgnD,UA2CAvL,OAAA0kB,EAAAziE,KAAAq/E,WAAAF,YAAA9gF,4KC7CAojE,WAAA5/D,OAOAk+E,YAAeZ,YAAA,QAEHt0E,IAAA,CAAA1K,EAAAyjD,KACZ,CAEA2e,QAAAd,WAAAF,YAAA12D,IAAA1K,EAAAyjD,uWChBA,gIAKA6d,SAAA/6D,OACO0iD,cAAAxiD,cAEAs7D,YAAAr7D,sCAEDi8D,UAAAv7D,KACAi4D,cAAA7xD,cAEA47C,QAAAA,UAAiD,8BASvDH,MAAAA,qBAAAA,cAAAiZ,oBAEA,OAAAjnB,YAAA94C,UAAA,OAAA,EAAA,YAAA,MAAA6rB,aAAAm7B,UAAAtN,UAAAgkC,cAAAb,aAEY1iC,OAAAyhC,YAAA/vD,EAAAo0C,QAAA,8EAEZ,GACY,QADZl1D,EAKA,OAFA/K,KAAA+mD,SAAAiU,UAAA,aAAA,UAAAjwD,KACA/K,KAAA+mD,SAA0BiU,UAAA,YAAA,GAC1Bh7D,KAAA29E,qDAEA,MAAAx+E,kCAAA4L,IACgB,EAEH,mBACb+tC,OAAAA,+BAAW,YACN,KAAA8kC,GAAAF,cAAAb,YAAA9gF,KAAA,CACD,MAAAokE,QAA8BngE,KAAAgnD,UAAAtN,UAAAgkC,cAAAb,qBAGZ1c,YAAAA,EAAcF,iBACpCjgE,KAAA0qC,SAAAy1B,MACgBud,cAAAb,YAAA9gF,IAAAokE,EAAA9nC,aAKX,QAAAqS,CAAA7e,sBACQ7rB,UAAA,OAAA,EAAA,YAEbkL,QAAA,4BAAkB2gB,EAAAo0C,iBAA4Bp0C,EAAAwM,sBAClCr4B,KAAAgnD,UAAWxQ,gBACvB3qB,UAA0B6sB,YAC1B,OACA,MAAAt9C,aAAA4rD,UAA0BtN,UAAUyN,iBAChBj8C,QAAA,kBAAA9P,KAEpB,UACA,OACoB,MAAAyiF,aAAA72B,UAAAtN,UAAAylB,SAAAF,aAEpB9kB,OAAAyhC,YAAAiC,EAAA,cACA79E,KAAA89E,0BAA0BjyD,EAAAwM,UAAA8mC,SAAAF,YAAAljE,KACN,UACA,MAEpB,MAAAskE,QAAArgE,KAAAgnD,UAAAtN,UAAA,IAAAyN,MAAAV,WAAA56B,EAAAwM,YACAioC,EAA0B,IAAAV,YAAAE,UAAAO,GACVE,EAAAC,UAAAtkB,WAAAokB,SAChB,IAAApD,cAAAC,aAA6CjrB,MAAAlyC,KAAc+mD,SAAQwZ,OAAAv7D,SACnE,MACA,QACoBkG,2BAAA2gB,EAAAo0C,iBAAAp0C,EAAAwM,cAAA,MAEpB,IAAA,qGACar4B,KAAA+mD,SAAAiU,UAAA,WAAAh7D,KAAA+mD,SAAA3T,OAAA8/B,gBAAAnsB,KAAAA,SAAA3T,OAAAusB,kBAGGjlB,EAAA7uB,EAAAwM,WAAsCr4B,KAAAgnD,UAAAxQ,YACtCkE,EAAA,IACHxvC,0CAAAwvC,iBAER16C,KAAAgnD,UAAAvL,OAAAf,MAKLojC,yBAAAA,CAAAF,GACA,OAAA9kC,YAAA94C,UAAgB,yBACmC49E,QAAAA,gDAAAA,WAEnD,MAAAG,QAAA/9E,KAAAgnD,UAAAtN,UAAAgkC,cAAAb,aAEwB3xE,QAAA,2BAAA6yE,EAAA9d,iBAAoC8d,EAAA1lD,sBAC5Dr4B,KAAAgnD,UAAAxQ,gBACAunC,UAA+BrlC,QAC/B,IAAA,KACwB,MAAAinB,QAAK3/D,KAAAgnD,UAAStN,UAAAyN,MAAAvD,WACtC5jD,KAAA+mD,SAAAiU,UAA8B,aAAK2E,SAEnC,IAAA,OACA,MAAAH,QAA+Cx/D,KAAAgnD,UAAAtN,UAAAyN,MAAwBnE,WACvEhjD,KAAA+mD,SAAAiU,UAAA,mBAAAwE,SAEAx/D,KAAAg+E,oBAAAD,EAAuD1lD,UAAA8uB,MAAAnE,UAAAjnD,KAC3B,UACA,OACH,MAAAkiF,SAAAj+E,KAAAgnD,UAAAtN,UAAAylB,SAAAF,cAAAvmB,OACzB7wC,aAA6Bm/C,UAAQtN,UAAUyN,MAAgC3E,OAC/E9a,QAA8B1nC,KAAAgnD,UAAAtN,UAAA,IAAAyN,MAAAT,WAAA7+C,EAAA,UAC9B,QAAAo2E,IAEAj+E,KAAA+mD,SAAAiU,UAAA,YAAA,GACAh7D,KAAA+mD,SAA8BiU,UAAU,gBAAW,IAE3Bh7D,KAAA+mD,SAAAiU,UAAAijB,UAAAA,GAAAA,MAAAv2C,MAExB,MACA,IAAA,OACwB,MAAAw2C,aAAAl3B,UAAAtN,UAA+ByN,MAAAnE,WACvDm7B,QAA8Bn+E,KAAAgnD,UAAAtN,UAAAyN,MAAA3E,OACV47B,aAAAp3B,UAAAtN,UAAAyN,MAAA3E,OACA67B,QAAAr+E,KAAAgnD,UAAAtN,UAAAyN,MAAAvD,WACpB14C,oCACwB,MACP,IAAA,OACjB,MAAAozE,aAAAt3B,UAAAtN,UAAAyN,MAAAnE,WACA93C,QAAoB,iBAAAozE,KACpB,MAEiB,QACDpzE,QAAA,mCAA+B6yE,EAAkB9d,iBAAA8d,EAAwB1lD,oBACzEr4B,KAAAgnD,UAAOvL,OAAAsiC,EAAA1lD,WAEvB,MAAAqiB,EAAAqjC,EAAA1lD,gBAAA2uB,UAAAxQ,SAAAwmC,GAAAtiC,EAAA,IAEgBxvC,QAA0C6yE,sCAAAA,EAAA1lD,wBAAAqiB,2CAE1DkjC,GAAWF,cAAAb,YAAA9gF,IAAAgiF,EAAA1lD,UACNntB,wDAAA0yE,QAEG59E,KAAA+mD,SAAA3T,OAAqB2nC,UAAU/6E,KAAA+mD,SAAA3T,OAAAusB,YAAA5Y,KAAAA,SAAA3T,OAAA6nC,uBAAAl0B,SAAA3T,OAAAw4B,cAAA,CAC3B,MAAA6F,EAAOzxE,KAAA+mD,SAAA3T,OAAAusB,WAAA3/D,KAAA+mD,SAAA3T,OAAA6nC,iBAAAj7E,KAAA+mD,SAAA3T,OAAAw4B,cACnB5rE,KAAA+mD,SAAkBiU,UAAA,UAAAyW,MAIlBuM,mBAAAA,CAAAJ,GAAA,OAAA9kC,YAAA94C,UAAA,OAAA,EAAA,YACAkL,iDAAA0yE,KAlJA,MAAAjS,EAAA,wjBCcA,SAAArjE,eAAAi2E,gBAAA,aAAA,CAAA31E,OAAA,yEAEMyxD,oBAAAj2D,kJAMNo6E,aAAAlzE,aACYmzE,WAAcjzE,iCAE1BkzE,aAAAC,aACAC,gBAAAC,gBAEAC,YAAAC,YACAC,eAAAC,eACA/zE,MAAAiwC,OAAA,iCAEI,MAAA+jC,cACI,WAAA99E,gBAER,GAWgB8wC,YAAAA,CAAA8U,EAAAm4B,EAAaxjD,GACT,OAAAmd,UAAA94C,UAAA,OAAA,EAAA,YAEP,IAAAo/E,EAAAF,cAAAG,uBAAAF,IAAAD,cAAAI,wBAAAH,UAGbj0E,oDAAAi0E,GACK,MAAAthF,EAAAhB,OAAAS,MAAA,YACL0pD,EAAAjN,WAAAl8C,EAAA,EAAAA,EAAAyd,WAAA0rC,EAAAxQ,UAAA,GACA,MAAA+oC,EAAAtiC,SAAAp/C,GAEA,IAAA0hF,EAEY,MAAS,IAAApgF,MAAA,6BAIT,GAFZ+L,mCAAcq0E,EAAAniC,mBAAAmiC,EAAApiC,OACdiiC,EAAyBF,cAAAG,uBAAAE,EAAAniC,OACbgiC,EACA,gBAAY,oCAAAG,EAAAniC,MACZ,OAAAp9C,KAAAgqE,aAEI,CAGJ,OAAAhqE,qBAOIs/E,8BAAAA,CAAAE,GAEJ,IAAAA,EACZ,mBACgBC,aAAAD,GAAA92B,qBAAA82B,GAGJ,IAAA,WACA,OAEA,IAAA,OACA,IAAA,OACA,MAAK,OACjB,IAAA,OACgB,MAAA,QACJ,IAAA,OACA,IAAA,WACZ,OAEA,IAAA,QACgB,IAAA,OACJ,IAAA,WACZ,OAEA,MAAiB,UACD,OAEA,IAAA,OAChB,IAAA,OACgB,MAAA,MAEX,IAAA,cACgB,OAErB,IAAA,WACgB,OAEA,IAAA,WACA,OACA,IAAA,OACA,IAAA,YAEa,mBACb,IAAA,WACA,YACA,QACA,MAAA,WACA,OACI,MAAA,WACP,UACb,OACK,MAAA,cACD,OACI,MAAA,eACR,OACA,MAAA,MACY,IAAA,aACZ,2BAEAE,CAAAC,EAAA36E,GAEW,OAAY8zC,UAAQ94C,UAAA,OAAA,EAAA,sBACvB,IAAA,OAAA,OAAA4/E,IAAAA,aAA2BC,WACnC,IAAe,QAAM,OAAK,IAAA1e,cAAWG,YAChC,IAAA,MAAA,OAAA,IAAAuG,YAAAiY,UACL,IAAA,MAAA,OAAA,IAAAhB,YAAAiB,UACA,IAAA,SAAA,OAAAf,IAAAA,eAAAgB,aACA,IAAA,OAAA,OAAA/T,IAAAA,aAAAzB,WAAA,IAAA,MAAA,OAAA6C,IAAAA,YAAA+B,UAEW,IAAA,OAAiC,OAAAoP,IAAAA,aAAAyB,WACpC,eAAS,OAAA,IAAAxB,WAAAvqC,QACL,IAAA,MAAA,OAAA,IAAA2kC,YAAAK,UACA,IAAA,OAAA,OAAAwF,IAAAA,aAAA5E,WAEJ,IAAA,UAAA,OAAA8E,IAAAA,gBAAAnD,sEAORzR,aAAAA,CAAAhjB,EAAAo4B,EAAAzjD,EAAA,CAAA,UACoBmd,UAAA94C,iBAAW,EAAA,YAC/B,MAAAkgF,QAAAhB,cAAAQ,WAAAN,EAAAzjD,GACwBorB,EAAAsT,IAAAA,oBAAcE,kBAAA5+B,GAEd,aADxBukD,EAAApsC,KAAAiT,EAAAC,EAAArrB,GAAAuW,QACwB6U,EAAAo5B,kBAExB,GAIoBV,mBAAAA,CAAAW,GACpBA,MAAAA,EAAAA,EAAAj3C,YAAyB,KAEL,OAAA,IAAArtC,EAAA,GAAAskF,EAAAv8E,MAAA/H,GAQAujF,6BAAAA,CAAAh/D,wBAIA6xB,MAAA7xB,EAEpB,CAAA,MAAA5e,2CACwB4e,KAIA,MAAAggE,MAAAjjC,EAAA4B,QAAA3jD,+CACxB,OAAA+hD,EAAAryC,MAEiB,IAAA,eACjBs1E,GACA,cACA,OAEA,aACwB,IAAA,OACJ,MAAA,OACpB,IAAA,MAEA,IAAA,gBACwB,MAAA,QACP,IAAA,MACjB,IAAA,MAEA,IAAA,OACA,IAAA,MAEA,MAAA,UACwB,MAExB,IAAA,WACS,QACJ,MAAA,MACJ,IAAA,SAED,IAAA,0QA9MA,MAAA,6XCKA,SAAAC,YAAAziF,EAAAwiB,EAAArb,EAAA,CAAA,wDAYA,SAAKu7E,mBAAAv5B,EAAA3mC,EAAArb,EAAA,CAAA,UALLgiD,EAAA3L,UAAAr2C,EAAAq2C,WAOA2L,EAAA3L,SAAAr2C,EAAAq2C,qDAUQmlC,SAAAA,UAAMC,GACT,MAAAxe,EAAA,CAAA,EANL,IAAAlZ,MAAAA,KAAA03B,GAQAxe,EAAAlZ,EAAAhb,IAAAk0B,EAAAlZ,EAAAhb,KAAA5tC,IAAAA,KAAA4oD,EAAAngD,8IATAqzC,OAAAskC,mBAAAA,mBAaAtkC,OAAAukC,UAAAA,6CCzDA,IAAAE,aAAsBC,eACtBA,eAAaC,OAASC,mBACtBF,eAAaG,MAASC,kBAEtB,IAAIzkF,WAAW4B,OAAOC,UAAU7B,SAC5Bg4C,MAAQ,CACR,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,8BAA8B,EAC9B,wBAAwB,EACxB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,GAG7B,SAASqsC,eAAalkF,GACpB,OACKokF,mBAAmBpkF,IACnBskF,kBAAkBtkF,EAEzB,CAEA,SAASokF,mBAAmBpkF,GAC1B,OACKA,aAAeukF,WACfvkF,aAAewkF,YACfxkF,aAAe2oB,YACf3oB,aAAekI,YACflI,aAAeykF,mBACfzkF,aAAe0oB,aACf1oB,aAAeimC,aACfjmC,aAAe0kF,cACf1kF,aAAe2kF,YAEtB,CAEA,SAASL,kBAAkBtkF,GACzB,OAAO63C,MAAMh4C,WAASJ,KAAKO,GAC7B,CC/BA,IAAIkkF,aAAehkF,aAAyBikF,OAE5CS,mBAAiB,SAA6B5kF,GAC5C,GAAIkkF,aAAalkF,GAAM,CAErB,IAAIoB,EAAMhB,OAAOQ,KAAKZ,EAAIG,QAK1B,OAJIH,EAAI6e,aAAe7e,EAAIG,OAAO0e,aAEhCzd,EAAMA,EAAIgG,MAAMpH,EAAIqkD,WAAYrkD,EAAIqkD,WAAarkD,EAAI6e,aAEhDzd,CACX,CAEI,OAAOhB,OAAOQ,KAAKZ,EAEvB,0BCvBAyB,OAAOoK,eAAeg5E,qBAAS,aAAc,CAAE14E,OAAO,IAItD,MAAMi3D,SAAWljE,aAKjB,MAAM4kF,2BAA2B1hB,SAASz1D,SACtChJ,WAAAA,CAAY1E,GACR4+C,QACAt7C,KAAKy6C,UAAY,EACjBz6C,KAAKgd,OAAStgB,EAAO8kF,WACxB,CACDh1E,KAAAA,GACIxM,KAAKgd,OAAOzQ,OAAOqM,KAAKlI,IAChBA,EAAIoB,KACJ9R,KAAKG,KAAK,OAGVH,KAAKy6C,WAAa/pC,EAAI9H,MAAM3M,OAC5B+D,KAAKG,KAAKuQ,EAAI9H,SAGzB,CACDvG,QAAAA,CAASiX,EAAOlW,GACZpD,KAAKgd,OAAOykE,SAAS7oE,KAAK,KACtBxV,EAAS,QACViW,MAAM5X,IACL2B,EAAS3B,IAEhB,EAEL6/E,qBAAAC,mBAA6BA,+BClC7BrjF,OAAOoK,eAAcjM,EAAU,aAAc,CAAEuM,OAAO,IACtD,MACM84E,EAAKniF,OACLoiF,EAAWz9E,mBACXo9E,EAAuBl9E,qBACvB8G,EAJYvO,WAIM,0BAQxBN,EAA0BulF,gBAAAF,EAAGG,YAe7BxlF,EAAAylF,oBAPA,SAA6BplF,EAAQyiF,EAAan6E,GAC9C,MAAM+8E,EAAK,IAAIT,EAAqBC,mBAAmB7kF,GACvD,OAAOL,EAAQulF,gBAAgBG,EAAI5C,EAAan6E,GAAS4T,KAAKlI,IAC1DxF,EAAM,4CAA4C62E,EAAGtnC,wBAAwBz1C,GAAWA,EAAQq2C,SAAWr2C,EAAQq2C,SAAW,OACvH3qC,GAEf,EAUArU,EAAsBikF,YAAAoB,EAAGpB,YAYzBjkF,EAAA2lF,UALA,SAAmBnvE,EAAM7N,GACrB,OAmDJ,SAA6B6N,GACzB,OAAO,IAAI4E,QAAQ,CAACiB,EAASD,KACzB,MAAMwpE,EAAa,IAAIllE,WACvBklE,EAAWC,UAAYhyE,IACnB,IAAI5P,EAAO4P,EAAMzQ,OAAOuZ,OACpB1Y,aAAgBoS,cAChBpS,EAAOqhF,EAAS,IAAIh9E,WAAWuL,EAAMzQ,OAAOuZ,UAEhDN,EAAQpY,IAEZ2hF,EAAWtyE,QAAU2J,IACjBb,EAAO,IAAItZ,MAAMma,EAAMvO,QAE3Bk3E,EAAWE,QAAU7oE,IACjBb,EAAO,IAAItZ,MAAMma,EAAMvO,QAE3Bk3E,EAAW/kE,kBAAkBrK,IAErC,CArEWuvE,CAAoBvvE,GAAM+F,KAAK/a,GAC3B6jF,EAAGpB,YAAYziF,EAAKgV,EAAK9H,KAAM/F,GAE9C,EAkCA3I,EAAAgmF,aA1BA,SAAsBC,EAAet9E,GACjC,OAAOu9E,MAAMD,GAAe1pE,KAAKkB,IAC7B,MAAMqlE,EAAcrlE,EAAS4lC,QAAQn3C,IAAI,gBAKzC,GAHAuR,EAAS4lC,QAAQ3X,QAAQlc,OAGrB/R,EAAS+gC,GACT,OAAI/gC,EAAS0oE,KACFxiF,KAAK8hF,oBAAoBhoE,EAAS0oE,KAAMrD,EAAan6E,GAAS4T,KAAKlI,IACtEoJ,EAAS0oE,KAAKf,SACP/wE,IAKJoJ,EAASjH,OAAO+F,KAAK/F,GACjB7S,KAAKgiF,UAAUnvE,EAAM7N,IAKpC,MAAM,IAAI7F,MAAM,qBAAqB2a,EAASZ,WAAWY,EAAS2oE,eAG9E,EASApmF,EAA6BkkF,mBAAAmB,EAAGnB,mBA8BhClkF,EAAoBmkF,UAAAkB,EAAGlB,UAMvBnkF,EAAwBqmF,cAAAhB,EAAGgB,0MCpHvBC,qBAAqBl6E,OAAOm6E,IAAI,8BAClCC,sBAAsBp6E,OAAOm6E,IAAI,kBACnC,SAASE,QAAQ/3E,EAAMg4E,EAAQC,GAC7B,IAAI/lF,EAAM,KAGV,QAFA,IAAW+lF,IAAa/lF,EAAM,GAAK+lF,QACnC,IAAWD,EAAO9lF,MAAQA,EAAM,GAAK8lF,EAAO9lF,KACxC,QAAS8lF,EAEX,IAAK,IAAIngE,KADTogE,EAAW,CAAA,EACUD,EACnB,QAAUngE,IAAaogE,EAASpgE,GAAYmgE,EAAOngE,SAChDogE,EAAWD,EAElB,OADAA,EAASC,EAASC,IACX,CACLC,SAAUP,qBACV53E,KAAMA,EACN9N,IAAKA,EACLgmF,SAAK,IAAWF,EAASA,EAAS,KAClCI,MAAOH,EAEX,CACgBI,2BAAAC,SAAGR,sBACRO,2BAAAE,IAAGR,QACdM,2BAAAG,KAAeT,QC9BbU,WAAAnnF,QAAiBM;;;;;;;;;;aCQnB,SAASwD,EAAK2qB,EAAMhoB,GAClB,IAAIyN,EAAQua,EAAK7uB,OACjB6uB,EAAK3qB,KAAK2C,GACVg9C,EAAG,KAAO,EAAIvvC,GAAS,CACrB,IAAIkzE,EAAelzE,EAAQ,IAAO,EAChCk4B,EAAS3d,EAAK24D,GAChB,KAAI,EAAIC,EAAQj7C,EAAQ3lC,IAEnB,MAAMg9C,EADRh1B,EAAK24D,GAAe3gF,EAAQgoB,EAAKva,GAASk4B,EAAUl4B,EAAQkzE,CAEhE,CACH,CACA,SAASjpC,EAAK1vB,GACZ,OAAO,IAAMA,EAAK7uB,OAAS,KAAO6uB,EAAK,EACzC,CACA,SAASjP,EAAIiP,GACX,GAAI,IAAMA,EAAK7uB,OAAQ,OAAO,KAC9B,IAAI0nF,EAAQ74D,EAAK,GACfzhB,EAAOyhB,EAAKjP,MACd,GAAIxS,IAASs6E,EAAO,CAClB74D,EAAK,GAAKzhB,EACVy2C,EAAG,IACD,IAAIvvC,EAAQ,EAAGtU,EAAS6uB,EAAK7uB,OAAQ2nF,EAAa3nF,IAAW,EAC7DsU,EAAQqzE,GAER,CACA,IAAIC,EAAY,GAAKtzE,EAAQ,GAAK,EAChC+rB,EAAOxR,EAAK+4D,GACZC,EAAaD,EAAY,EACzBE,EAAQj5D,EAAKg5D,GACf,GAAI,EAAIJ,EAAQpnD,EAAMjzB,GACpBy6E,EAAa7nF,GAAU,EAAIynF,EAAQK,EAAOznD,IACpCxR,EAAKva,GAASwzE,EACfj5D,EAAKg5D,GAAcz6E,EACnBkH,EAAQuzE,IACPh5D,EAAKva,GAAS+rB,EACfxR,EAAK+4D,GAAax6E,EAClBkH,EAAQszE,OACV,MAAIC,EAAa7nF,GAAU,EAAIynF,EAAQK,EAAO16E,IAE9C,MAAMy2C,EADRh1B,EAAKva,GAASwzE,EAASj5D,EAAKg5D,GAAcz6E,EAAQkH,EAAQuzE,CACjD,CACb,CACF,CACD,OAAOH,CACT,CACA,SAASD,EAAQ5jC,EAAG5qC,GAClB,IAAIg+B,EAAO4M,EAAEkkC,UAAY9uE,EAAE8uE,UAC3B,OAAO,IAAM9wC,EAAOA,EAAO4M,EAAE/R,GAAK74B,EAAE64B,EACtC,CAEA,GADA1xC,EAAuB4nF,kBAAA,EACnB,iBAAoBC,aAAe,mBAAsBA,YAAYC,IAAK,CAC5E,IAAIC,EAAmBF,YACvB7nF,eAAuB,WACrB,OAAO+nF,EAAiBD,MAE5B,KAAO,CACL,IAAIE,EAAY37C,KACd47C,EAAcD,EAAUF,MAC1B9nF,eAAuB,WACrB,OAAOgoF,EAAUF,MAAQG,EAE7B,CACA,IAAIC,EAAY,GACdC,EAAa,GACbC,EAAgB,EAChBC,EAAc,KACdC,EAAuB,EACvBC,GAAmB,EACnBC,GAA0B,EAC1BC,GAAyB,EACzBC,GAAa,EACbC,EAAkB,mBAAsBxuE,WAAaA,WAAa,KAClEyuE,EAAoB,mBAAsBC,aAAeA,aAAe,KACxEC,EAAoB,oBAAuBrhF,aAAeA,aAAe,KAC3E,SAASshF,EAAcC,GACrB,IAAK,IAAIC,EAAQ9qC,EAAKgqC,GAAa,OAASc,GAAS,CACnD,GAAI,OAASA,EAAMliF,SAAUyY,EAAI2oE,OAC5B,MAAIc,EAAMC,WAAaF,GAIvB,MAHHxpE,EAAI2oE,GACDc,EAAMtB,UAAYsB,EAAME,eACzBrlF,EAAKokF,EAAWe,EACf,CACLA,EAAQ9qC,EAAKgqC,EACd,CACH,CACA,SAASiB,EAAcJ,GAGrB,GAFAP,GAAyB,EACzBM,EAAcC,IACTR,EACH,GAAI,OAASrqC,EAAK+pC,GACfM,GAA0B,EACzBa,IACIA,GAAuB,EAAKC,SAC/B,CACH,IAAIC,EAAaprC,EAAKgqC,GACtB,OAASoB,GACPC,EAAmBJ,EAAeG,EAAWL,UAAYF,EAC5D,CACL,CACA,IAkFIM,EAlFAD,GAAuB,EACzBI,GAAiB,EACjBC,EAAgB,EAChBR,GAAa,EACf,SAASS,IACP,QAAOjB,KAEH1oF,EAAQ4nF,eAAiBsB,EAAYQ,EAG3C,CACA,SAASE,IAEP,GADAlB,GAAa,EACTW,EAAsB,CACxB,IAAIL,EAAchpF,EAAQ4nF,eAC1BsB,EAAYF,EACZ,IAAIa,GAAc,EAClB,IACEpmC,EAAG,CACD+kC,GAA0B,EAC1BC,IACIA,GAAyB,EAC3BG,EAAkBa,GACjBA,GAAiB,GACpBlB,GAAmB,EACnB,IAAIuB,EAAwBxB,EAC5B,IACEzvE,EAAG,CAED,IADAkwE,EAAcC,GAEZX,EAAclqC,EAAK+pC,GACnB,OAASG,KAEPA,EAAYc,eAAiBH,GAAeW,MAG9C,CACA,IAAI5iF,EAAWshF,EAAYthF,SAC3B,GAAI,mBAAsBA,EAAU,CAClCshF,EAAYthF,SAAW,KACvBuhF,EAAuBD,EAAY0B,cACnC,IAAIC,EAAuBjjF,EACzBshF,EAAYc,gBAAkBH,GAGhC,GADAA,EAAchpF,EAAQ4nF,eAClB,mBAAsBoC,EAAsB,CAC9C3B,EAAYthF,SAAWijF,EACvBjB,EAAcC,GACda,GAAc,EACd,MAAMhxE,CACP,CACDwvE,IAAgBlqC,EAAK+pC,IAAc1oE,EAAI0oE,GACvCa,EAAcC,EAC9B,MAAqBxpE,EAAI0oE,GACXG,EAAclqC,EAAK+pC,EACpB,CACD,GAAI,OAASG,EAAawB,GAAc,MACnC,CACH,IAAIN,EAAaprC,EAAKgqC,GACtB,OAASoB,GACPC,EACEJ,EACAG,EAAWL,UAAYF,GAE3Ba,GAAc,CACf,CACF,CACD,MAAMpmC,CAChB,CAAkB,QACP4kC,EAAc,KACZC,EAAuBwB,EACvBvB,GAAmB,CACvB,CACDsB,OAAc,CACf,CACP,CAAc,QACRA,EACIP,IACCD,GAAuB,CAC7B,CACF,CACH,CAEA,GAAI,mBAAsBP,EACxBQ,EAAmC,WACjCR,EAAkBc,EACtB,OACK,GAAI,oBAAuBjwE,eAAgB,CAC9C,IAAIS,EAAU,IAAIT,eAChBswE,EAAO7vE,EAAQG,MACjBH,EAAQC,MAAMC,UAAYsvE,EAC1BN,EAAmC,WACjCW,EAAKzvE,YAAY,MAEpB,MACC8uE,EAAmC,WACjCX,EAAgBiB,EAA0B,IAE9C,SAASJ,EAAmBziF,EAAUwuC,GACpCk0C,EAAgBd,EAAgB,WAC9B5hF,EAAS/G,EAAQ4nF,eAClB,EAAEryC,EACL,CACAv1C,EAAAkqF,sBAAgC,EAChClqF,EAAAmqF,2BAAqC,EACrCnqF,EAAAoqF,qBAA+B,EAC/BpqF,EAAAqqF,wBAAkC,EAClCrqF,EAAAsqF,mBAA6B,KAC7BtqF,EAAAuqF,8BAAwC,EACxCvqF,EAAkCwqF,wBAAA,SAAU5vE,GAC1CA,EAAK7T,SAAW,MAElB/G,EAAkCyqF,wBAAA,SAAUC,GAC1C,EAAIA,GAAO,IAAMA,EACblyC,QAAQv7B,MACN,mHAEDysE,EAAgB,EAAIgB,EAAMrhF,KAAKC,MAAM,IAAMohF,GAAO,GAEzD1qF,EAAA2qF,iCAA2C,WACzC,OAAOrC,GAETtoF,EAAwB4qF,cAAA,SAAUC,GAChC,OAAQvC,GACN,KAAK,EACL,KAAK,EACL,KAAK,EACH,IAAIyB,EAAgB,EACpB,MACF,QACEA,EAAgBzB,EAEpB,IAAIwB,EAAwBxB,EAC5BA,EAAuByB,EACvB,IACE,OAAOc,GACX,CAAY,QACRvC,EAAuBwB,CACxB,GAEH9pF,EAAA8qF,sBAAgC,WAC9BpC,GAAa,GAEf1oF,EAAA+qF,yBAAmC,SAAUhB,EAAec,GAC1D,OAAQd,GACN,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACH,MACF,QACEA,EAAgB,EAEpB,IAAID,EAAwBxB,EAC5BA,EAAuByB,EACvB,IACE,OAAOc,GACX,CAAY,QACRvC,EAAuBwB,CACxB,GAEH9pF,EAAoCgrF,0BAAA,SAClCjB,EACAhjF,EACA4B,GAEA,IAAIqgF,EAAchpF,EAAQ4nF,eAQ1B,OAPA,iBAAoBj/E,GAAW,OAASA,EAEnCA,EACC,iBAFAA,EAAUA,EAAQmX,QAEa,EAAInX,EAC/BqgF,EAAcrgF,EACdqgF,EACLrgF,EAAUqgF,EACPe,GACN,KAAK,EACH,IAAIkB,GAAW,EACf,MACF,KAAK,EACHA,EAAU,IACV,MACF,KAAK,EACHA,EAAU,WACV,MACF,KAAK,EACHA,EAAU,IACV,MACF,QACEA,EAAU,IA2Bd,OAxBAlB,EAAgB,CACdr4C,GAAI02C,IACJrhF,SAAUA,EACVgjF,cAAeA,EACfb,UAAWvgF,EACXwgF,eANF8B,EAAUtiF,EAAUsiF,EAOlBtD,WAAY,GAEdh/E,EAAUqgF,GACJe,EAAcpC,UAAYh/E,EAC5B7E,EAAKqkF,EAAY4B,GACjB,OAAS5rC,EAAK+pC,IACZ6B,IAAkB5rC,EAAKgqC,KACtBM,GACIG,EAAkBa,GAAiBA,GAAiB,GACpDhB,GAAyB,EAC9Be,EAAmBJ,EAAezgF,EAAUqgF,MAC5Ce,EAAcpC,UAAYsD,EAC5BnnF,EAAKokF,EAAW6B,GAChBvB,GACED,IACEC,GAA0B,EAC5Ba,IACIA,GAAuB,EAAKC,OAC/BS,GAET/pF,EAAAkrF,qBAA+BvB,EAC/B3pF,EAAgCmrF,sBAAA,SAAUpkF,GACxC,IAAIqkF,EAAsB9C,EAC1B,OAAO,WACL,IAAIwB,EAAwBxB,EAC5BA,EAAuB8C,EACvB,IACE,OAAOrkF,EAAShH,MAAM4D,KAAMhE,UAClC,CAAc,QACR2oF,EAAuBwB,CACxB,2BC9UHuB,UAAArrF,QAAiBM,mGCQfgmF,qBAAqBl6E,OAAOm6E,IAAI,8BAClC+E,oBAAoBl/E,OAAOm6E,IAAI,gBAC/BC,sBAAsBp6E,OAAOm6E,IAAI,kBACjCgF,yBAAyBn/E,OAAOm6E,IAAI,qBACpCiF,sBAAsBp/E,OAAOm6E,IAAI,kBACjCkF,sBAAsBr/E,OAAOm6E,IAAI,kBACjCmF,qBAAqBt/E,OAAOm6E,IAAI,iBAChCoF,yBAAyBv/E,OAAOm6E,IAAI,qBACpCqF,sBAAsBx/E,OAAOm6E,IAAI,kBACjCsF,kBAAkBz/E,OAAOm6E,IAAI,cAC7BuF,kBAAkB1/E,OAAOm6E,IAAI,cAC7BwF,wBAAwB3/E,OAAO4/E,SACjC,SAASC,gBAAcC,GACrB,OAAI,OAASA,GAAiB,iBAAoBA,EAAsB,KAIjE,mBAHPA,EACGH,yBAAyBG,EAAcH,0BACxCG,EAAc,eAC6BA,EAAgB,IAC/D,CACA,IAAIC,qBAAuB,CACvBC,UAAW,WACT,OAAO,CACR,EACDC,mBAAoB,WAAc,EAClCC,oBAAqB,WAAc,EACnCC,gBAAiB,WAAc,GAEjCtjE,SAASpnB,OAAOonB,OAChBujE,YAAc,CAAA,EAChB,SAASC,UAAU3F,EAAO4F,EAASC,GACjChpF,KAAKmjF,MAAQA,EACbnjF,KAAK+oF,QAAUA,EACf/oF,KAAKipF,KAAOJ,YACZ7oF,KAAKgpF,QAAUA,GAAWR,oBAC5B,CAgBA,SAASU,iBAAmB,CAE5B,SAASC,cAAchG,EAAO4F,EAASC,GACrChpF,KAAKmjF,MAAQA,EACbnjF,KAAK+oF,QAAUA,EACf/oF,KAAKipF,KAAOJ,YACZ7oF,KAAKgpF,QAAUA,GAAWR,oBAC5B,CAtBAM,UAAU3qF,UAAUirF,iBAAmB,GACvCN,UAAU3qF,UAAUkrF,SAAW,SAAUC,EAAclmF,GACrD,GACE,iBAAoBkmF,GACpB,mBAAsBA,GACtB,MAAQA,EAER,MAAMnqF,MACJ,0GAEJa,KAAKgpF,QAAQJ,gBAAgB5oF,KAAMspF,EAAclmF,EAAU,WAC7D,EACA0lF,UAAU3qF,UAAUorF,YAAc,SAAUnmF,GAC1CpD,KAAKgpF,QAAQN,mBAAmB1oF,KAAMoD,EAAU,cAClD,EAEA8lF,eAAe/qF,UAAY2qF,UAAU3qF,UAOrC,IAAIqrF,uBAA0BL,cAAchrF,UAAY,IAAI+qF,eAC5DM,uBAAuBpoF,YAAc+nF,cACrC7jE,SAAOkkE,uBAAwBV,UAAU3qF,WACzCqrF,uBAAuBC,sBAAuB,EAC9C,IAAIC,cAAcvtF,MAAMK,QACtBmtF,uBAAuB,CAAEC,EAAG,KAAMC,EAAG,KAAMC,EAAG,KAAMC,EAAG,KAAMC,EAAG,MAChEvtE,iBAAiBve,OAAOC,UAAUse,eACpC,SAASwtE,aAAal/E,EAAM9N,EAAKuE,EAAMgkB,EAAQ0kE,EAAO/G,GAEpD,OADA3hF,EAAO2hF,EAAMF,IACN,CACLC,SAAUP,qBACV53E,KAAMA,EACN9N,IAAKA,EACLgmF,SAAK,IAAWzhF,EAAOA,EAAO,KAC9B2hF,MAAOA,EAEX,CACA,SAASgH,mBAAmBC,EAAYC,GACtC,OAAOJ,aACLG,EAAWr/E,KACXs/E,OACA,OACA,OACA,EACAD,EAAWjH,MAEf,CACA,SAASmH,eAAezhF,GACtB,MACE,iBAAoBA,GACpB,OAASA,GACTA,EAAOq6E,WAAaP,oBAExB,CACA,SAAS4H,OAAOttF,GACd,IAAIutF,EAAgB,CAAE,IAAK,KAAM,IAAK,MACtC,MACE,IACAvtF,EAAI4X,QAAQ,QAAS,SAAU6d,GAC7B,OAAO83D,EAAc93D,EAC3B,EAEA,CACA,IAAI+3D,2BAA6B,OACjC,SAASC,cAAc/0E,EAASpF,GAC9B,MAAO,iBAAoBoF,GAAW,OAASA,GAAW,MAAQA,EAAQ1Y,IACtEstF,OAAO,GAAK50E,EAAQ1Y,KACpBsT,EAAMjU,SAAS,GACrB,CACA,SAASquF,WAAW,CACpB,SAASC,gBAAgB/xE,GACvB,OAAQA,EAASK,QACf,IAAK,YACH,OAAOL,EAASjQ,MAClB,IAAK,WACH,MAAMiQ,EAASO,OACjB,QACE,OACG,iBAAoBP,EAASK,OAC1BL,EAASD,KAAK+xE,SAAQA,WACpB9xE,EAASK,OAAS,UACpBL,EAASD,KACP,SAAUiyE,GACR,YAAchyE,EAASK,SACnBL,EAASK,OAAS,YACnBL,EAASjQ,MAAQiiF,EACrB,EACD,SAAUvxE,GACR,YAAcT,EAASK,SACnBL,EAASK,OAAS,WAAcL,EAASO,OAASE,EACvD,IAEPT,EAASK,QAET,IAAK,YACH,OAAOL,EAASjQ,MAClB,IAAK,WACH,MAAMiQ,EAASO,QAGvB,MAAMP,CACR,CACA,SAASiyE,aAAa/d,EAAUx6D,EAAOw4E,EAAeC,EAAW5nF,GAC/D,IAAI2H,SAAcgiE,EACd,cAAgBhiE,GAAQ,YAAcA,IAAMgiE,EAAW,MAC3D,IAAIke,GAAiB,EACrB,GAAI,OAASle,EAAUke,GAAiB,OAEtC,OAAQlgF,GACN,IAAK,SACL,IAAK,SACL,IAAK,SACHkgF,GAAiB,EACjB,MACF,IAAK,SACH,OAAQle,EAASmW,UACf,KAAKP,qBACL,KAAKgF,oBACHsD,GAAiB,EACjB,MACF,KAAK9C,kBACH,OAEE2C,cADCG,EAAiBle,EAASme,OAEVne,EAASoe,UACxB54E,EACAw4E,EACAC,EACA5nF,IAKd,GAAI6nF,EACF,OACG7nF,EAAWA,EAAS2pE,GACpBke,EACC,KAAOD,EAAY,IAAMN,cAAc3d,EAAU,GAAKie,EACxDtB,cAAYtmF,IACN2nF,EAAgB,GAClB,MAAQE,IACLF,EACCE,EAAep2E,QAAQ41E,2BAA4B,OAAS,KAChEK,aAAa1nF,EAAUmP,EAAOw4E,EAAe,GAAI,SAAU98E,GACzD,OAAOA,CACnB,IACU,MAAQ7K,IACPknF,eAAelnF,KACbA,EAAW+mF,mBACV/mF,EACA2nF,GACG,MAAQ3nF,EAASnG,KACjB8vE,GAAYA,EAAS9vE,MAAQmG,EAASnG,IACnC,IACC,GAAKmG,EAASnG,KAAK4X,QAClB41E,2BACA,OACE,KACRQ,IAEN14E,EAAMpS,KAAKiD,IACf,EAEJ6nF,EAAiB,EACjB,IAAIG,EAAiB,KAAOJ,EAAY,IAAMA,EAAY,IAC1D,GAAItB,cAAY3c,GACd,IAAK,IAAIjxE,EAAI,EAAGA,EAAIixE,EAAS9wE,OAAQH,IAGhCmvF,GAAkBH,aAFpBE,EAAYje,EAASjxE,GAIlByW,EACAw4E,EAJDhgF,EAAOqgF,EAAiBV,cAAcM,EAAWlvF,GAMhDsH,QAEH,GAAoC,mBAA9BtH,EAAIwsF,gBAAcvb,IAC3B,IACEA,EAAWjxE,EAAEI,KAAK6wE,GAAWjxE,EAAI,IAC/BkvF,EAAYje,EAASxsE,QAAQuR,MAK5Bm5E,GAAkBH,aAFpBE,EAAYA,EAAUpiF,MAInB2J,EACAw4E,EAJDhgF,EAAOqgF,EAAiBV,cAAcM,EAAWlvF,KAMhDsH,QAEH,GAAI,WAAa2H,EAAM,CAC1B,GAAI,mBAAsBgiE,EAASn0D,KACjC,OAAOkyE,aACLF,gBAAgB7d,GAChBx6D,EACAw4E,EACAC,EACA5nF,GAGJ,MADAmP,EAAQkI,OAAOsyD,GACT5tE,MACJ,mDACG,oBAAsBoT,EACnB,qBAAuBrU,OAAOgM,KAAK6iE,GAAUnsE,KAAK,MAAQ,IAC1D2R,GACJ,4EAEL,CACD,OAAO04E,CACT,CACA,SAASI,YAAYte,EAAUx0D,EAAMwwE,GACnC,GAAI,MAAQhc,EAAU,OAAOA,EAC7B,IAAI/zD,EAAS,GACXnR,EAAQ,EAIV,OAHAijF,aAAa/d,EAAU/zD,EAAQ,GAAI,GAAI,SAAU21D,GAC/C,OAAOp2D,EAAKrc,KAAK6sF,EAASpa,EAAO9mE,IACrC,GACSmR,CACT,CACA,SAASsyE,gBAAgBC,GACvB,IAAK,IAAMA,EAAQC,QAAS,CAC1B,IAAIpvE,EAAOmvE,EAAQE,SACnBrvE,EAAOA,KACFxD,KACH,SAAU8yE,GACJ,IAAMH,EAAQC,UAAY,IAAMD,EAAQC,UACzCD,EAAQC,QAAU,EAAKD,EAAQE,QAAUC,EAC7C,EACD,SAAUpyE,GACJ,IAAMiyE,EAAQC,UAAY,IAAMD,EAAQC,UACzCD,EAAQC,QAAU,EAAKD,EAAQE,QAAUnyE,EAC7C,IAEF,IAAMiyE,EAAQC,UAAaD,EAAQC,QAAU,EAAKD,EAAQE,QAAUrvE,EACtE,CACD,GAAI,IAAMmvE,EAAQC,QAAS,OAAOD,EAAQE,QAAQv3C,QAClD,MAAMq3C,EAAQE,OAChB,CACA,IAAIE,oBACF,mBAAsBC,YAClBA,YACA,SAAUtyE,GACR,GACE,iBAAoB5U,QACpB,mBAAsBA,OAAOmnF,WAC7B,CACA,IAAI37E,EAAQ,IAAIxL,OAAOmnF,WAAW,QAAS,CACzCC,SAAS,EACTC,YAAY,EACZ33C,QACE,iBAAoB96B,GACpB,OAASA,GACT,iBAAoBA,EAAM86B,QACtB35B,OAAOnB,EAAM86B,SACb35B,OAAOnB,GACbA,MAAOA,IAET,IAAK5U,OAAOsnF,cAAc97E,GAAQ,MAC5C,MAAe,GACL,iBAAoB/U,SACpB,mBAAsBA,QAAQuG,KAG9B,YADAvG,QAAQuG,KAAK,oBAAqB4X,GAGpCu7B,QAAQv7B,MAAMA,EACtB,EACA,SAAS2yE,SAAS,CAClBC,iBAAAC,SAAmB,CACjB53C,IAAK82C,YACLtjD,QAAS,SAAUglC,EAAUqf,EAAaC,GACxChB,YACEte,EACA,WACEqf,EAAYhwF,MAAM4D,KAAMhE,UACzB,EACDqwF,EAEH,EACDxkF,MAAO,SAAUklE,GACf,IAAI/rE,EAAI,EAIR,OAHAqqF,YAAYte,EAAU,WACpB/rE,GACN,GACWA,CACR,EACDsrF,QAAS,SAAUvf,GACjB,OACEse,YAAYte,EAAU,SAAU4B,GAC9B,OAAOA,CACR,IAAK,EAET,EACD4d,KAAM,SAAUxf,GACd,IAAKud,eAAevd,GAClB,MAAM5tE,MACJ,yEAEJ,OAAO4tE,CACR,GAEcmf,iBAAApD,UAAGA,UACJoD,iBAAA7I,SAAGR,sBACHqJ,iBAAAM,SAAG3E,sBACEqE,iBAAA/C,cAAGA,cACN+C,iBAAAO,WAAG7E,yBACLsE,iBAAAQ,SAAGzE,sBACoDiE,iBAAAS,gEACrEhD,uBACFuC,iBAAAU,mBAA6B,CAC3BC,UAAW,KACX5+E,EAAG,SAAUvQ,GACX,OAAOisF,uBAAqBC,EAAEkD,aAAapvF,EAC5C,GAEUwuF,iBAAAa,MAAG,SAAUvxF,GACxB,OAAO,WACL,OAAOA,EAAGY,MAAM,KAAMJ,WAE1B,EACAkwF,iBAAAc,aAAuB,SAAUr3E,EAASotE,EAAQhW,GAChD,GAAI,MAASp3D,EACX,MAAMxW,MACJ,wDAA0DwW,EAAU,KAExE,IAAIwtE,EAAQ79D,SAAO,GAAI3P,EAAQwtE,OAC7BlmF,EAAM0Y,EAAQ1Y,IACditF,OAAQ,EACV,GAAI,MAAQnH,EACV,IAAKngE,UAAa,IAAWmgE,EAAOE,MAAQiH,OAAQ,QACpD,IAAWnH,EAAO9lF,MAAQA,EAAM,GAAK8lF,EAAO9lF,KAC5C8lF,GACGtmE,iBAAevgB,KAAK6mF,EAAQngE,IAC3B,QAAUA,GACV,WAAaA,GACb,aAAeA,GACd,QAAUA,QAAY,IAAWmgE,EAAOE,MACxCE,EAAMvgE,GAAYmgE,EAAOngE,IAChC,IAAIA,EAAW5mB,UAAUC,OAAS,EAClC,GAAI,IAAM2mB,EAAUugE,EAAMpW,SAAWA,OAChC,GAAI,EAAInqD,EAAU,CACrB,IAAK,IAAIqqE,EAAa9wF,MAAMymB,GAAW9mB,EAAI,EAAGA,EAAI8mB,EAAU9mB,IAC1DmxF,EAAWnxF,GAAKE,UAAUF,EAAI,GAChCqnF,EAAMpW,SAAWkgB,CAClB,CACD,OAAOhD,aAAat0E,EAAQ5K,KAAM9N,OAAK,OAAQ,EAAQitF,EAAO/G,EAChE,EACqB+I,iBAAAgB,cAAG,SAAUC,GAchC,OAbAA,EAAe,CACbjK,SAAU6E,qBACVqF,cAAeD,EACfE,eAAgBF,EAChBG,aAAc,EACdC,SAAU,KACVC,SAAU,OAECD,SAAWJ,EACxBA,EAAaK,SAAW,CACtBtK,SAAU4E,sBACV2F,SAAUN,GAELA,CACT,EACAjB,iBAAAj2E,cAAwB,SAAUlL,EAAMg4E,EAAQhW,GAC9C,IAAInqD,EACFugE,EAAQ,CAAE,EACVlmF,EAAM,KACR,GAAI,MAAQ8lF,EACV,IAAKngE,UAAa,IAAWmgE,EAAO9lF,MAAQA,EAAM,GAAK8lF,EAAO9lF,KAAM8lF,EAClEtmE,iBAAevgB,KAAK6mF,EAAQngE,IAC1B,QAAUA,GACV,WAAaA,GACb,aAAeA,IACdugE,EAAMvgE,GAAYmgE,EAAOngE,IAChC,IAAI8qE,EAAiB1xF,UAAUC,OAAS,EACxC,GAAI,IAAMyxF,EAAgBvK,EAAMpW,SAAWA,OACtC,GAAI,EAAI2gB,EAAgB,CAC3B,IAAK,IAAIT,EAAa9wF,MAAMuxF,GAAiB5xF,EAAI,EAAGA,EAAI4xF,EAAgB5xF,IACtEmxF,EAAWnxF,GAAKE,UAAUF,EAAI,GAChCqnF,EAAMpW,SAAWkgB,CAClB,CACD,GAAIliF,GAAQA,EAAK4iF,aACf,IAAK/qE,KAAc8qE,EAAiB3iF,EAAK4iF,kBACvC,IAAWxK,EAAMvgE,KACdugE,EAAMvgE,GAAY8qE,EAAe9qE,IACxC,OAAOqnE,aAAal/E,EAAM9N,OAAK,OAAQ,EAAQ,KAAMkmF,EACvD,EACA+I,iBAAA0B,UAAoB,WAClB,MAAO,CAAExlF,QAAS,KACpB,EACkB8jF,iBAAA2B,WAAG,SAAUC,GAC7B,MAAO,CAAE5K,SAAU8E,yBAAwB8F,OAAQA,EACrD,EACsB5B,iBAAA5B,eAAGA,eACb4B,iBAAA6B,KAAG,SAAU3xE,GACvB,MAAO,CACL8mE,SAAUiF,kBACVgD,SAAU,CAAEK,SAAU,EAAGC,QAASrvE,GAClC8uE,MAAOI,gBAEX,EACAY,iBAAA8B,KAAe,SAAUjjF,EAAM24E,GAC7B,MAAO,CACLR,SAAUgF,kBACVn9E,KAAMA,EACN24E,aAAS,IAAWA,EAAU,KAAOA,EAEzC,EACuBwI,iBAAA+B,gBAAG,SAAUC,GAClC,IAAIC,EAAiBxE,uBAAqBG,EACxCsE,EAAoB,CAAA,EACtBzE,uBAAqBG,EAAIsE,EACzB,IACE,IAAI51E,EAAc01E,IAChBG,EAA0B1E,uBAAqBI,EACjD,OAASsE,GACPA,EAAwBD,EAAmB51E,GAC7C,iBAAoBA,GAClB,OAASA,GACT,mBAAsBA,EAAYI,MAClCJ,EAAYI,KAAKqzE,OAAMN,oBAC1B,CAAC,MAAOryE,GACPqyE,oBAAkBryE,EACtB,CAAY,QACRqwE,uBAAqBG,EAAIqE,CAC1B,CACH,EACAjC,iBAAAoC,yBAAmC,WACjC,OAAO3E,uBAAqBC,EAAE2E,iBAChC,EACWrC,iBAAAsC,IAAG,SAAUC,GACtB,OAAO9E,uBAAqBC,EAAE4E,IAAIC,EACpC,EACAvC,iBAAAwC,eAAyB,SAAU7rD,EAAQ8rD,EAAcC,GACvD,OAAOjF,uBAAqBC,EAAE8E,eAAe7rD,EAAQ8rD,EAAcC,EACrE,EACA1C,iBAAA2C,YAAsB,SAAUzrF,EAAU0rF,GACxC,OAAOnF,uBAAqBC,EAAEiF,YAAYzrF,EAAU0rF,EACtD,EACkB5C,iBAAA6C,WAAG,SAAUC,GAC7B,OAAOrF,uBAAqBC,EAAEmF,WAAWC,EAC3C,EACqB9C,iBAAA+C,cAAG,WAAc,EACtC/C,iBAAAgD,iBAA2B,SAAUtmF,EAAOumF,GAC1C,OAAOxF,uBAAqBC,EAAEsF,iBAAiBtmF,EAAOumF,EACxD,EACAjD,iBAAAkD,UAAoB,SAAUprF,EAAQqrF,EAAYC,GAChD,IAAIC,EAAa5F,uBAAqBC,EACtC,GAAI,mBAAsB0F,EACxB,MAAMnwF,MACJ,kEAEJ,OAAOowF,EAAWH,UAAUprF,EAAQqrF,EACtC,EACAnD,iBAAAsD,MAAgB,WACd,OAAO7F,uBAAqBC,EAAE4F,OAChC,EACAtD,iBAAAuD,oBAA8B,SAAUxM,EAAKj/E,EAAQ8qF,GACnD,OAAOnF,uBAAqBC,EAAE6F,oBAAoBxM,EAAKj/E,EAAQ8qF,EACjE,EACA5C,iBAAAwD,mBAA6B,SAAU1rF,EAAQ8qF,GAC7C,OAAOnF,uBAAqBC,EAAE8F,mBAAmB1rF,EAAQ8qF,EAC3D,EACA5C,iBAAAyD,gBAA0B,SAAU3rF,EAAQ8qF,GAC1C,OAAOnF,uBAAqBC,EAAE+F,gBAAgB3rF,EAAQ8qF,EACxD,EACA5C,iBAAA0D,QAAkB,SAAU5rF,EAAQ8qF,GAClC,OAAOnF,uBAAqBC,EAAEgG,QAAQ5rF,EAAQ8qF,EAChD,EACA5C,iBAAA2D,cAAwB,SAAUC,EAAaC,GAC7C,OAAOpG,uBAAqBC,EAAEiG,cAAcC,EAAaC,EAC3D,EACA7D,iBAAA8D,WAAqB,SAAUD,EAASE,EAAYn8C,GAClD,OAAO61C,uBAAqBC,EAAEoG,WAAWD,EAASE,EAAYn8C,EAChE,EACco4C,iBAAAgE,OAAG,SAAUf,GACzB,OAAOxF,uBAAqBC,EAAEsG,OAAOf,EACvC,EACgBjD,iBAAAiE,SAAG,SAAUxB,GAC3B,OAAOhF,uBAAqBC,EAAEuG,SAASxB,EACzC,EACAzC,iBAAAkE,qBAA+B,SAC7BC,EACAC,EACAC,GAEA,OAAO5G,uBAAqBC,EAAEwG,qBAC5BC,EACAC,EACAC,EAEJ,EACArE,iBAAAsE,cAAwB,WACtB,OAAO7G,uBAAqBC,EAAE4G,eAChC,EACAtE,iBAAA9wF,QAAkB,SC9hBhBq1F,MAAAp0F,QAAiBM,6FCQf+zF,QAAQ/zF,aACZ,SAASg0F,yBAAuB10E,GAC9B,IAAIghD,EAAM,4BAA8BhhD,EACxC,GAAI,EAAIjgB,UAAUC,OAAQ,CACxBghE,GAAO,WAAa2zB,mBAAmB50F,UAAU,IACjD,IAAK,IAAIF,EAAI,EAAGA,EAAIE,UAAUC,OAAQH,IACpCmhE,GAAO,WAAa2zB,mBAAmB50F,UAAUF,GACpD,CACD,MACE,yBACAmgB,EACA,WACAghD,EACA,gHAEJ,CACA,SAASgvB,SAAS,CAClB,IAAI4E,UAAY,CACZ7xF,EAAG,CACDwrB,EAAGyhE,OACH52C,EAAG,WACD,MAAMl2C,MAAMwxF,yBAAuB,KACpC,EACDG,EAAG7E,OACH8E,EAAG9E,OACH+E,EAAG/E,OACH5hE,EAAG4hE,OACHgF,EAAGhF,OACHlC,EAAGkC,OACHiF,EAAGjF,QAELnrF,EAAG,EACHqwF,YAAa,MAEfxJ,oBAAoBl/E,OAAOm6E,IAAI,gBACjC,SAASwO,eAAerkB,EAAUskB,EAAeC,GAC/C,IAAIr0F,EACF,EAAIjB,UAAUC,aAAU,IAAWD,UAAU,GAAKA,UAAU,GAAK,KACnE,MAAO,CACLknF,SAAUyE,oBACV1qF,IAAK,MAAQA,EAAM,KAAO,GAAKA,EAC/B8vE,SAAUA,EACVskB,cAAeA,EACfC,eAAgBA,EAEpB,CACA,IAAI3H,uBACF+G,QAAM/D,gEACR,SAAS4E,uBAAuBC,EAAI79E,GAClC,MAAI,SAAW69E,EAAW,GACtB,iBAAoB79E,EACf,oBAAsBA,EAAQA,EAAQ,QAD/C,CAEF,CC7DA,SAAS89E,aAEP,GAC4C,oBAAnCC,gCAC4C,mBAA5CA,+BAA+BD,SAcxC,IAEEC,+BAA+BD,SAASA,WACzC,CAAC,MAAOhwF,GAGPozC,QAAQv7B,MAAM7X,EACf,CACH,CDoCoEkwF,oBAAAC,6DAClEf,UACFc,oBAAAE,aAAuB,SAAU9kB,EAAU6D,GACzC,IAAI3zE,EACF,EAAIjB,UAAUC,aAAU,IAAWD,UAAU,GAAKA,UAAU,GAAK,KACnE,IACG40E,GACA,IAAMA,EAAUkhB,UACf,IAAMlhB,EAAUkhB,UAChB,KAAOlhB,EAAUkhB,SAEnB,MAAM3yF,MAAMwxF,yBAAuB,MACrC,OAAOS,eAAerkB,EAAU6D,EAAW,KAAM3zE,EACnD,EACiB00F,oBAAAI,UAAG,SAAUv2F,GAC5B,IAAIw2F,EAAqBrI,uBAAqBG,EAC5CmI,EAAyBpB,UAAU/vF,EACrC,IACE,GAAM6oF,uBAAqBG,EAAI,KAAQ+G,UAAU/vF,EAAI,EAAItF,EAAK,OAAOA,GACzE,CAAY,QACPmuF,uBAAqBG,EAAIkI,EACvBnB,UAAU/vF,EAAImxF,EACfpB,UAAU7xF,EAAEwrB,GACf,CACH,EACAmnE,oBAAAO,WAAqB,SAAUC,EAAMntF,GACnC,iBAAoBmtF,IACjBntF,EAEIA,EACC,iBAFAA,EAAUA,EAAQotF,aAGd,oBAAsBptF,EACpBA,EACA,QACF,EACLA,EAAU,KACf6rF,UAAU7xF,EAAE+xF,EAAEoB,EAAMntF,GACxB,EACmB2sF,oBAAAU,YAAG,SAAUF,GAC9B,iBAAoBA,GAAQtB,UAAU7xF,EAAE8xF,EAAEqB,EAC5C,EACAR,oBAAAW,QAAkB,SAAUH,EAAMntF,GAChC,GAAI,iBAAoBmtF,GAAQntF,GAAW,iBAAoBA,EAAQwsF,GAAI,CACzE,IAAIA,EAAKxsF,EAAQwsF,GACfY,EAAcb,uBAAuBC,EAAIxsF,EAAQotF,aACjDG,EACE,iBAAoBvtF,EAAQutF,UAAYvtF,EAAQutF,eAAY,EAC9DC,EACE,iBAAoBxtF,EAAQwtF,cACxBxtF,EAAQwtF,mBACR,EACR,UAAYhB,EACRX,UAAU7xF,EAAE+qF,EACVoI,EACA,iBAAoBntF,EAAQytF,WAAaztF,EAAQytF,gBAAa,EAC9D,CACEL,YAAaA,EACbG,UAAWA,EACXC,cAAeA,IAGnB,WAAahB,GACbX,UAAU7xF,EAAEiyF,EAAEkB,EAAM,CAClBC,YAAaA,EACbG,UAAWA,EACXC,cAAeA,EACfE,MAAO,iBAAoB1tF,EAAQ0tF,MAAQ1tF,EAAQ0tF,WAAQ,GAElE,CACH,EACAf,oBAAAgB,cAAwB,SAAUR,EAAMntF,GACtC,GAAI,iBAAoBmtF,EACtB,GAAI,iBAAoBntF,GAAW,OAASA,GAC1C,GAAI,MAAQA,EAAQwsF,IAAM,WAAaxsF,EAAQwsF,GAAI,CACjD,IAAIY,EAAcb,uBAChBvsF,EAAQwsF,GACRxsF,EAAQotF,aAEVvB,UAAU7xF,EAAEkyF,EAAEiB,EAAM,CAClBC,YAAaA,EACbG,UACE,iBAAoBvtF,EAAQutF,UAAYvtF,EAAQutF,eAAY,EAC9DG,MAAO,iBAAoB1tF,EAAQ0tF,MAAQ1tF,EAAQ0tF,WAAQ,GAE9D,OACI,MAAQ1tF,GAAW6rF,UAAU7xF,EAAEkyF,EAAEiB,EAC5C,EACAR,oBAAAiB,QAAkB,SAAUT,EAAMntF,GAChC,GACE,iBAAoBmtF,GACpB,iBAAoBntF,GACpB,OAASA,GACT,iBAAoBA,EAAQwsF,GAC5B,CACA,IAAIA,EAAKxsF,EAAQwsF,GACfY,EAAcb,uBAAuBC,EAAIxsF,EAAQotF,aACnDvB,UAAU7xF,EAAEgyF,EAAEmB,EAAMX,EAAI,CACtBY,YAAaA,EACbG,UACE,iBAAoBvtF,EAAQutF,UAAYvtF,EAAQutF,eAAY,EAC9DG,MAAO,iBAAoB1tF,EAAQ0tF,MAAQ1tF,EAAQ0tF,WAAQ,EAC3D3nF,KAAM,iBAAoB/F,EAAQ+F,KAAO/F,EAAQ+F,UAAO,EACxDynF,cACE,iBAAoBxtF,EAAQwtF,cACxBxtF,EAAQwtF,mBACR,EACNK,eACE,iBAAoB7tF,EAAQ6tF,eACxB7tF,EAAQ6tF,oBACR,EACNC,YACE,iBAAoB9tF,EAAQ8tF,YAAc9tF,EAAQ8tF,iBAAc,EAClEC,WACE,iBAAoB/tF,EAAQ+tF,WAAa/tF,EAAQ+tF,gBAAa,EAChEC,MAAO,iBAAoBhuF,EAAQguF,MAAQhuF,EAAQguF,WAAQ,GAE9D,CACH,EACArB,oBAAAsB,cAAwB,SAAUd,EAAMntF,GACtC,GAAI,iBAAoBmtF,EACtB,GAAIntF,EAAS,CACX,IAAIotF,EAAcb,uBAAuBvsF,EAAQwsF,GAAIxsF,EAAQotF,aAC7DvB,UAAU7xF,EAAEqrB,EAAE8nE,EAAM,CAClBX,GACE,iBAAoBxsF,EAAQwsF,IAAM,WAAaxsF,EAAQwsF,GACnDxsF,EAAQwsF,QACR,EACNY,YAAaA,EACbG,UACE,iBAAoBvtF,EAAQutF,UAAYvtF,EAAQutF,eAAY,GAEjE,MAAM1B,UAAU7xF,EAAEqrB,EAAE8nE,EACzB,EACwBR,oBAAAuB,iBAAG,SAAUC,GACnCtC,UAAU7xF,EAAEq2C,EAAE89C,EAChB,EACAxB,oBAAAyB,wBAAkC,SAAU53F,EAAIskD,GAC9C,OAAOtkD,EAAGskD,EACZ,EACA6xC,oBAAA0B,aAAuB,SAAUxwD,EAAQ8rD,EAAcC,GACrD,OAAOjF,uBAAqBC,EAAEyJ,aAAaxwD,EAAQ8rD,EAAcC,EACnE,EACA+C,oBAAA2B,cAAwB,WACtB,OAAO3J,uBAAqBC,EAAE2J,yBAChC,EACA5B,oBAAAv2F,QAAkB,SChLhBq2F,aACA+B,SAAAn3F,QAAiBM,6GCpBf82F,UAAY92F,iBACd+zF,MAAQnxF,aACRm0F,WAAWxvF,gBACb,SAASysF,yBAAuB10E,GAC9B,IAAIghD,EAAM,4BAA8BhhD,EACxC,GAAI,EAAIjgB,UAAUC,OAAQ,CACxBghE,GAAO,WAAa2zB,mBAAmB50F,UAAU,IACjD,IAAK,IAAIF,EAAI,EAAGA,EAAIE,UAAUC,OAAQH,IACpCmhE,GAAO,WAAa2zB,mBAAmB50F,UAAUF,GACpD,CACD,MACE,yBACAmgB,EACA,WACAghD,EACA,gHAEJ,CACA,SAAS02B,iBAAiB7wF,GACxB,SACGA,GACA,IAAMA,EAAKgvF,UAAY,IAAMhvF,EAAKgvF,UAAY,KAAOhvF,EAAKgvF,SAE/D,CACA,SAAS8B,uBAAuBC,GAC9B,IAAI/wF,EAAO+wF,EACTC,EAAiBD,EACnB,GAAIA,EAAME,UAAW,KAAOjxF,EAAKkxF,QAAUlxF,EAAOA,EAAKkxF,WAClD,CACHH,EAAQ/wF,EACR,MAEwB,MADrBA,EAAO+wF,GACM10D,SAAkB20D,EAAiBhxF,EAAKkxF,QACnDH,EAAQ/wF,EAAKkxF,aACXH,EACR,CACD,OAAO,IAAM/wF,EAAKimD,IAAM+qC,EAAiB,IAC3C,CACA,SAASG,6BAA6BJ,GACpC,GAAI,KAAOA,EAAM9qC,IAAK,CACpB,IAAImrC,EAAgBL,EAAMM,cAI1B,GAHA,OAASD,IAEP,QADEL,EAAQA,EAAME,aACGG,EAAgBL,EAAMM,gBACvC,OAASD,EAAe,OAAOA,EAAcE,UAClD,CACD,OAAW,IACb,CACA,SAASC,gBAAgBR,GACvB,GAAID,uBAAuBC,KAAWA,EACpC,MAAM10F,MAAMwxF,yBAAuB,KACvC,CACA,SAAS2D,8BAA8BT,GACrC,IAAIE,EAAYF,EAAME,UACtB,IAAKA,EAAW,CAEd,GAAI,QADJA,EAAYH,uBAAuBC,IACX,MAAM10F,MAAMwxF,yBAAuB,MAC3D,OAAOoD,IAAcF,EAAQ,KAAOA,CACrC,CACD,IAAK,IAAI/zC,EAAI+zC,EAAO3+E,EAAI6+E,IAAe,CACrC,IAAIQ,EAAUz0C,EAAEk0C,OAChB,GAAI,OAASO,EAAS,MACtB,IAAIC,EAAUD,EAAQR,UACtB,GAAI,OAASS,EAAS,CAEpB,GAAI,QADJt/E,EAAIq/E,EAAQP,QACI,CACdl0C,EAAI5qC,EACJ,QACD,CACD,KACD,CACD,GAAIq/E,EAAQ5lB,QAAU6lB,EAAQ7lB,MAAO,CACnC,IAAK6lB,EAAUD,EAAQ5lB,MAAO6lB,GAAW,CACvC,GAAIA,IAAY10C,EAAG,OAAOu0C,gBAAgBE,GAAUV,EACpD,GAAIW,IAAYt/E,EAAG,OAAOm/E,gBAAgBE,GAAUR,EACpDS,EAAUA,EAAQC,OACnB,CACD,MAAMt1F,MAAMwxF,yBAAuB,KACpC,CACD,GAAI7wC,EAAEk0C,SAAW9+E,EAAE8+E,OAASl0C,EAAIy0C,EAAWr/E,EAAIs/E,MAC1C,CACH,IAAK,IAAIE,GAAe,EAAIC,EAAUJ,EAAQ5lB,MAAOgmB,GAAW,CAC9D,GAAIA,IAAY70C,EAAG,CACjB40C,GAAe,EACf50C,EAAIy0C,EACJr/E,EAAIs/E,EACJ,KACD,CACD,GAAIG,IAAYz/E,EAAG,CACjBw/E,GAAe,EACfx/E,EAAIq/E,EACJz0C,EAAI00C,EACJ,KACD,CACDG,EAAUA,EAAQF,OACnB,CACD,IAAKC,EAAc,CACjB,IAAKC,EAAUH,EAAQ7lB,MAAOgmB,GAAW,CACvC,GAAIA,IAAY70C,EAAG,CACjB40C,GAAe,EACf50C,EAAI00C,EACJt/E,EAAIq/E,EACJ,KACD,CACD,GAAII,IAAYz/E,EAAG,CACjBw/E,GAAe,EACfx/E,EAAIs/E,EACJ10C,EAAIy0C,EACJ,KACD,CACDI,EAAUA,EAAQF,OACnB,CACD,IAAKC,EAAc,MAAMv1F,MAAMwxF,yBAAuB,KACvD,CACF,CACD,GAAI7wC,EAAEi0C,YAAc7+E,EAAG,MAAM/V,MAAMwxF,yBAAuB,KAC3D,CACD,GAAI,IAAM7wC,EAAEiJ,IAAK,MAAM5pD,MAAMwxF,yBAAuB,MACpD,OAAO7wC,EAAE80C,UAAUxsF,UAAY03C,EAAI+zC,EAAQE,CAC7C,CACA,SAASc,yBAAyB/xF,GAChC,IAAIimD,EAAMjmD,EAAKimD,IACf,GAAI,IAAMA,GAAO,KAAOA,GAAO,KAAOA,GAAO,IAAMA,EAAK,OAAOjmD,EAC/D,IAAKA,EAAOA,EAAK6rE,MAAO,OAAS7rE,GAAQ,CAEvC,GAAI,QADJimD,EAAM8rC,yBAAyB/xF,IACb,OAAOimD,EACzBjmD,EAAOA,EAAK2xF,OACb,CACD,OAAW,IACb,CACA,IAAInvE,OAASpnB,OAAOonB,OAClBwvE,0BAA4BrsF,OAAOm6E,IAAI,iBACvCD,mBAAqBl6E,OAAOm6E,IAAI,8BAChC+E,kBAAoBl/E,OAAOm6E,IAAI,gBAC/BC,oBAAsBp6E,OAAOm6E,IAAI,kBACjCgF,uBAAyBn/E,OAAOm6E,IAAI,qBACpCiF,oBAAsBp/E,OAAOm6E,IAAI,kBACjCmS,oBAAsBtsF,OAAOm6E,IAAI,kBACjCkF,oBAAsBr/E,OAAOm6E,IAAI,kBACjCmF,mBAAqBt/E,OAAOm6E,IAAI,iBAChCoF,uBAAyBv/E,OAAOm6E,IAAI,qBACpCqF,oBAAsBx/E,OAAOm6E,IAAI,kBACjCoS,yBAA2BvsF,OAAOm6E,IAAI,uBACtCsF,gBAAkBz/E,OAAOm6E,IAAI,cAC7BuF,gBAAkB1/E,OAAOm6E,IAAI,cAE3BqS,oBAAsBxsF,OAAOm6E,IAAI,kBAGjCsS,0BAA4BzsF,OAAOm6E,IAAI,6BAEvCwF,sBAAwB3/E,OAAO4/E,SACnC,SAASC,cAAcC,GACrB,OAAI,OAASA,GAAiB,iBAAoBA,EAAsB,KAIjE,mBAHPA,EACGH,uBAAyBG,EAAcH,wBACxCG,EAAc,eAC6BA,EAAgB,IAC/D,CACA,IAAI4M,uBAAyB1sF,OAAOm6E,IAAI,0BACxC,SAASwS,yBAAyBrqF,GAChC,GAAI,MAAQA,EAAM,OAAW,KAC7B,GAAI,mBAAsBA,EACxB,OAAOA,EAAKm4E,WAAaiS,uBACrB,KACApqF,EAAKsqF,aAAetqF,EAAK1J,MAAQ,KACvC,GAAI,iBAAoB0J,EAAM,OAAOA,EACrC,OAAQA,GACN,KAAK83E,oBACH,MAAO,WACT,KAAKgF,oBACH,MAAO,WACT,KAAKD,uBACH,MAAO,aACT,KAAKK,oBACH,MAAO,WACT,KAAK+M,yBACH,MAAO,eACT,KAAKC,oBACH,MAAO,WAEX,GAAI,iBAAoBlqF,EACtB,OAAQA,EAAKm4E,UACX,KAAKyE,kBACH,MAAO,SACT,KAAKI,mBACH,OAAQh9E,EAAKsqF,aAAe,WAAa,YAC3C,KAAKvN,oBACH,OAAQ/8E,EAAK0iF,SAAS4H,aAAe,WAAa,YACpD,KAAKrN,uBACH,IAAIsN,EAAYvqF,EAAK+iF,OAKrB,OAJA/iF,EAAOA,EAAKsqF,eAGTtqF,EAAO,MADNA,EAAOuqF,EAAUD,aAAeC,EAAUj0F,MAAQ,IAC9B,cAAgB0J,EAAO,IAAM,cAC9CA,EACT,KAAKm9E,gBACH,OAEE,QADCoN,EAAYvqF,EAAKsqF,aAAe,MAE7BC,EACAF,yBAAyBrqF,EAAKA,OAAS,OAE/C,KAAKo9E,gBACHmN,EAAYvqF,EAAKogF,SACjBpgF,EAAOA,EAAKmgF,MACZ,IACE,OAAOkK,yBAAyBrqF,EAAKuqF,GAC/C,CAAU,MAAO5mF,GAAG,EAElB,OAAW,IACb,CACA,IAAIg7E,YAAcvtF,MAAMK,QACtBmtF,qBACE+G,MAAM/D,gEACR4I,wBACE7B,WAAS9B,6DACX4D,uBAAyB,CACvB9rE,SAAS,EACTppB,KAAM,KACN+J,OAAQ,KACRw4B,OAAQ,MAEV4yD,WAAa,GACbllF,OAAS,EACX,SAASmlF,aAAavI,GACpB,MAAO,CAAE/kF,QAAS+kF,EACpB,CACA,SAAStxE,IAAI85E,GACX,EAAIplF,QACAolF,EAAOvtF,QAAUqtF,WAAWllF,OAAUklF,WAAWllF,OAAS,KAAOA,QACvE,CACA,SAASpQ,KAAKw1F,EAAQ/sF,GACpB2H,QACAklF,WAAWllF,OAASolF,EAAOvtF,QAC3ButF,EAAOvtF,QAAUQ,CACnB,CACA,IAAIgtF,mBAAqBF,aAAa,MACpCG,wBAA0BH,aAAa,MACvCI,wBAA0BJ,aAAa,MACvCK,6BAA+BL,aAAa,MAC9C,SAASM,kBAAkBnC,EAAOoC,GAIhC,OAHA91F,KAAK21F,wBAAyBG,GAC9B91F,KAAK01F,wBAAyBhC,GAC9B1zF,KAAKy1F,mBAAoB,MACjBK,EAAiBnE,UACvB,OACA,KAAO,GACL+B,GAASA,EAAQoC,EAAiB3/E,mBAC7Bu9E,EAAQA,EAAMqC,cACbC,kBAAkBtC,GAEpB,EACJ,MACF,QACE,GACIA,EAAQoC,EAAiBvuB,QAC1BuuB,EAAmBA,EAAiBC,aAGlCrC,EAAQuC,wBADVH,EAAmBE,kBAAkBF,GACepC,QAErD,OAAQA,GACN,IAAK,MACHA,EAAQ,EACR,MACF,IAAK,OACHA,EAAQ,EACR,MACF,QACEA,EAAQ,GAGlBh4E,IAAI+5E,oBACJz1F,KAAKy1F,mBAAoB/B,EAC3B,CACA,SAASwC,mBACPx6E,IAAI+5E,oBACJ/5E,IAAIg6E,yBACJh6E,IAAIi6E,wBACN,CACA,SAASQ,gBAAgBzC,GACvB,OAASA,EAAMM,eAAiBh0F,KAAK41F,6BAA8BlC,GACnE,IAAI9K,EAAU6M,mBAAmBxtF,QAC7BmuF,EAA2BH,wBAAwBrN,EAAS8K,EAAM9oF,MACtEg+E,IAAYwN,IACTp2F,KAAK01F,wBAAyBhC,GAC/B1zF,KAAKy1F,mBAAoBW,GAC7B,CACA,SAASC,eAAe3C,GACtBgC,wBAAwBztF,UAAYyrF,IACjCh4E,IAAI+5E,oBAAqB/5E,IAAIg6E,0BAChCE,6BAA6B3tF,UAAYyrF,IACtCh4E,IAAIk6E,8BACJU,sBAAsBrJ,cAAgBoI,uBAC3C,CACA,IAAI/4E,iBAAiBve,OAAOC,UAAUse,eACpCi6E,mBAAqBjD,UAAUpM,0BAC/BsP,iBAAmBlD,UAAU5M,wBAC7B+P,YAAcnD,UAAUlM,qBACxBsP,aAAepD,UAAUtM,sBACzBhD,IAAMsP,UAAUxP,aAChB6S,wBAA0BrD,UAAUzM,iCACpC+P,kBAAoBtD,UAAUjN,2BAC9BwQ,qBAAuBvD,UAAU7M,8BACjCqQ,iBAAmBxD,UAAU/M,wBAC7BwQ,YAAczD,UAAUhN,qBACxB0Q,aAAe1D,UAAUlN,sBACzB6Q,MAAQ3D,UAAUjgD,IAClB6jD,8BAAgC5D,UAAU4D,8BAC1CC,WAAa,KACbC,aAAe,KACjB,SAASC,2BAA2BC,GAElC,GADA,mBAAsBL,OAASC,8BAA8BI,GACzDF,cAAgB,mBAAsBA,aAAaG,cACrD,IACEH,aAAaG,cAAcJ,WAAYG,EAC7C,CAAM,MAAOh2F,GACb,CAAA,CACA,IAAIk2F,MAAQjyF,KAAKiyF,MAAQjyF,KAAKiyF,MAAQC,cACpCpkD,IAAM9tC,KAAK8tC,IACX6O,IAAM38C,KAAK28C,IACb,SAASu1C,cAAclpF,GAErB,OAAQ,KADRA,KAAO,GACU,GAAM,IAAO8kC,IAAI9kC,GAAK2zC,IAAO,GAAM,CACtD,CACA,IAAIw1C,mBAAqB,IACvBC,cAAgB,QAClB,SAASC,wBAAwBC,GAC/B,IAAIC,EAA2B,GAARD,EACvB,GAAI,IAAMC,EAAkB,OAAOA,EACnC,OAAQD,GAASA,GACf,KAAM,EACJ,OAAO,EACT,KAAK,EACH,SACF,KAAM,EACJ,OAAO,EACT,OACE,OAAQ,EACV,KAAK,GACH,UACF,KAAO,GACL,OAAO,GACT,QACE,OAAS,GACX,KAAQ,IACN,OAAO,IACT,KAAK,IACL,KAAQ,IACR,KAAK,KACL,KAAK,KACL,KAAS,KACT,KAAK,KACL,KAAK,MACL,KAAU,MACV,KAAK,MACL,KAAK,OACL,YACA,KAAW,OACX,KAAY,QACZ,KAAK,QACH,OAAe,QAARA,EACT,KAAK,QACL,KAAY,QACZ,KAAa,SACb,KAAK,SACH,OAAe,SAARA,EACT,KAAK,SACH,OAAO,SACT,eACE,OAAgB,UAClB,KAAK,UACH,iBACF,KAAc,UACZ,OAAO,UACT,gBACE,OAAQ,EACV,QACE,OAAOA,EAEb,CACA,SAASE,aAAa/7D,EAAMg8D,EAAUC,GACpC,IAAIC,EAAel8D,EAAKk8D,aACxB,GAAI,IAAMA,EAAc,SACxB,IAAIC,EAAY,EACdC,EAAiBp8D,EAAKo8D,eACtBC,EAAcr8D,EAAKq8D,YACrBr8D,EAAOA,EAAKs8D,UACZ,IAAIC,EAAqC,UAAfL,EAqB1B,OApBA,IAAMK,EAEF,KADEL,EAAeK,GAAuBH,GAEnCD,EAAYP,wBAAwBM,GAErC,KADEG,GAAeE,GAEZJ,EAAYP,wBAAwBS,GACrCJ,GAEA,KADEA,EAAuBM,GAAuBv8D,KAE7Cm8D,EAAYP,wBAAwBK,IAE/C,KADEM,EAAsBL,GAAgBE,GAEnCD,EAAYP,wBAAwBW,GACrC,IAAMF,EACHF,EAAYP,wBAAwBS,GACrCJ,GAEA,KADEA,EAAuBC,GAAgBl8D,KAEtCm8D,EAAYP,wBAAwBK,IAC1C,IAAME,EACT,EACA,IAAMH,GACJA,IAAaG,GACb,KAAOH,EAAWI,MAChBA,EAAiBD,GAAaA,KAC/BF,EAAuBD,GAAYA,IAEjC,KAAOI,GAAgD,QAAvBH,GACnCD,EACAG,CACR,CACA,SAASK,0BAA0Bx8D,EAAMy8D,GACvC,YAEGz8D,EAAKk8D,eACFl8D,EAAKo8D,gBAAkBp8D,EAAKq8D,aAC9BI,EAEN,CACA,SAASC,sBAAsBC,EAAMzT,GACnC,OAAQyT,GACN,KAAK,EACL,OACA,KAAM,EACN,KAAK,EACL,QACE,OAAOzT,EAAc,IACvB,QACA,KAAO,GACP,KAAK,IACL,SACA,KAAQ,IACR,KAAK,KACL,UACA,KAAS,KACT,KAAK,KACL,WACA,KAAU,MACV,KAAK,MACL,YACA,KAAW,OACX,KAAW,OACX,KAAK,QACL,KAAK,QACH,OAAOA,EAAc,IAYvB,QACE,OAAQ,EAEd,CACA,SAAS0T,0BACP,IAAID,EAAOjB,mBAGX,QAD4B,SAD5BA,qBAAuB,MACkBA,mBAAqB,KACvDiB,CACT,CACA,SAASE,qBACP,IAAIF,EAAOhB,cAGX,QADuB,UADvBA,gBAAkB,MACmBA,cAAgB,SAC9CgB,CACT,CACA,SAASG,cAAcC,GACrB,IAAK,IAAIC,EAAU,GAAIr9F,EAAI,EAAG,GAAKA,EAAGA,IAAKq9F,EAAQh5F,KAAK+4F,GACxD,OAAOC,CACT,CACA,SAASC,kBAAkBj9D,EAAMk9D,GAC/Bl9D,EAAKk8D,cAAgBgB,EACrB,YAAcA,IACVl9D,EAAKo8D,eAAiB,EAAKp8D,EAAKq8D,YAAc,EAAKr8D,EAAKs8D,UAAY,EAC1E,CACA,SAASa,iBACPn9D,EACAo9D,EACAC,EACAC,EACAC,EACAC,GAEA,IAAIC,EAAyBz9D,EAAKk8D,aAClCl8D,EAAKk8D,aAAemB,EACpBr9D,EAAKo8D,eAAiB,EACtBp8D,EAAKq8D,YAAc,EACnBr8D,EAAKs8D,UAAY,EACjBt8D,EAAK09D,cAAgBL,EACrBr9D,EAAK29D,gBAAkBN,EACvBr9D,EAAK49D,4BAA8BP,EACnCr9D,EAAK69D,oBAAsB,EAC3B,IAAIC,EAAgB99D,EAAK89D,cACvBC,EAAkB/9D,EAAK+9D,gBACvBC,EAAgBh+D,EAAKg+D,cACvB,IACEX,EAAiBI,GAA0BJ,EAC3C,EAAIA,GAEJ,CACA,IAAIY,EAAU,GAAKzC,MAAM6B,GACvBV,EAAO,GAAKsB,EACdH,EAAcG,GAAW,EACzBF,EAAgBE,IAAY,EAC5B,IAAIC,EAAuBF,EAAcC,GACzC,GAAI,OAASC,EACX,IACEF,EAAcC,GAAW,KAAMA,EAAU,EACzCA,EAAUC,EAAqBp+F,OAC/Bm+F,IACA,CACA,IAAI9K,EAAS+K,EAAqBD,GAClC,OAAS9K,IAAWA,EAAOwJ,OAAS,UACrC,CACHU,IAAmBV,CACpB,CACD,IAAMW,GAAea,wBAAwBn+D,EAAMs9D,EAAa,GAChE,IAAME,GACJ,IAAMD,GACN,IAAMv9D,EAAK4sB,MACV5sB,EAAKo8D,gBACJoB,IAAwBC,GAA0BL,GACxD,CACA,SAASe,wBAAwBn+D,EAAMs9D,EAAaK,GAClD39D,EAAKk8D,cAAgBoB,EACrBt9D,EAAKo8D,iBAAmBkB,EACxB,IAAIc,EAAmB,GAAK5C,MAAM8B,GAClCt9D,EAAK29D,gBAAkBL,EACvBt9D,EAAK89D,cAAcM,GAEjB,WADAp+D,EAAK89D,cAAcM,GAED,QAAjBT,CACL,CACA,SAASU,kBAAkBr+D,EAAM29D,GAC/B,IAAIW,EAAsBt+D,EAAK29D,gBAAkBA,EACjD,IAAK39D,EAAOA,EAAK89D,cAAeQ,GAAsB,CACpD,IAAIC,EAAU,GAAK/C,MAAM8C,GACvB3B,EAAO,GAAK4B,EACb5B,EAAOgB,EAAmB39D,EAAKu+D,GAAWZ,IACxC39D,EAAKu+D,IAAYZ,GACpBW,IAAuB3B,CACxB,CACH,CACA,SAAS6B,gCAAgC7B,GACvC,OAAQA,GACN,KAAM,EACJA,EAAO,EACP,MACF,KAAM,EACJA,EAAO,EACP,MACF,QACEA,EAAO,GACP,MACF,KAAK,IACL,KAAK,IACL,KAAS,KACT,KAAK,KACL,KAAK,KACL,UACA,KAAU,MACV,KAAU,MACV,KAAK,MACL,KAAW,OACX,KAAW,OACX,KAAK,OACL,KAAY,QACZ,KAAY,QACZ,KAAK,QACL,KAAY,QACZ,KAAa,SACb,KAAK,SACHA,EAAO,IACP,MACF,KAAK,UACHA,EAAO,UACP,MACF,QACEA,EAAO,EAEX,OAAOA,CACT,CACA,SAAS8B,qBAAqB5C,GAE5B,OAAQ,GADRA,IAAUA,GAEN,EAAIA,EACa,UAARA,EACL,GACA,UACF,EACF,CACN,CACA,SAAS6C,wBACP,IAAIC,EAAiBvF,wBAAwBz0F,EAC7C,OAAI,IAAMg6F,EAAuBA,OAE1B,KADPA,EAAiBp2F,OAAOwL,OACW,GAAK6qF,iBAAiBD,EAAe/vF,KAC1E,CACA,SAASiwF,gBAAgBngC,EAAUr/D,GACjC,IAAIy/F,EAAmB1F,wBAAwBz0F,EAC/C,IACE,OAAQy0F,wBAAwBz0F,EAAI+5D,EAAWr/D,GACnD,CAAG,QACC+5F,wBAAwBz0F,EAAIm6F,CAC7B,CACH,CACA,IAAIC,UAAYx1F,KAAKy1F,SAAS7+F,SAAS,IAAIuH,MAAM,GAC/Cu3F,oBAAsB,gBAAkBF,UACxCG,iBAAmB,gBAAkBH,UACrCI,6BAA+B,oBAAsBJ,UACrDK,yBAA2B,iBAAmBL,UAC9CM,iCAAmC,oBAAsBN,UACzDO,2BAA6B,kBAAoBP,UACjDQ,6BAA+B,oBAAsBR,UACrDS,wBAA0B,iBAAmBT,UAC/C,SAASU,sBAAsB94F,UACtBA,EAAKs4F,4BACLt4F,EAAKu4F,yBACLv4F,EAAKy4F,iCACLz4F,EAAK04F,yCACL14F,EAAK24F,2BACd,CACA,SAASI,2BAA2BC,GAClC,IAAIC,EAAaD,EAAWV,qBAC5B,GAAIW,EAAY,OAAOA,EACvB,IAAK,IAAI3lF,EAAa0lF,EAAW1lF,WAAYA,GAAc,CACzD,GACG2lF,EACC3lF,EAAWklF,+BACXllF,EAAWglF,qBACb,CAEA,GADAhlF,EAAa2lF,EAAWhI,UAEtB,OAASgI,EAAWptB,OACnB,OAASv4D,GAAc,OAASA,EAAWu4D,MAE5C,IACEmtB,EAAaE,0BAA0BF,GACvC,OAASA,GAET,CACA,GAAK1lF,EAAa0lF,EAAWV,qBAAuB,OAAOhlF,EAC3D0lF,EAAaE,0BAA0BF,EACxC,CACH,OAAOC,CACR,CAED3lF,GADA0lF,EAAa1lF,GACWA,UACzB,CACD,OAAW,IACb,CACA,SAAS6lF,oBAAoBn5F,GAC3B,GACGA,EAAOA,EAAKs4F,sBAAwBt4F,EAAKw4F,8BAC1C,CACA,IAAIvyC,EAAMjmD,EAAKimD,IACf,GACE,IAAMA,GACN,IAAMA,GACN,KAAOA,GACP,KAAOA,GACP,KAAOA,GACP,IAAMA,EAEN,OAAOjmD,CACV,CACD,OAAW,IACb,CACA,SAASo5F,oBAAoBC,GAC3B,IAAIpzC,EAAMozC,EAAKpzC,IACf,GAAI,IAAMA,GAAO,KAAOA,GAAO,KAAOA,GAAO,IAAMA,EAAK,OAAOozC,EAAKvH,UACpE,MAAMz1F,MAAMwxF,yBAAuB,IACrC,CACA,SAASyL,qBAAqBjgE,GAC5B,IAAIkgE,EAAYlgE,EAAKu/D,8BAIrB,OAHAW,IACGA,EAAYlgE,EAAKu/D,8BAChB,CAAEY,gBAAiB,IAAIC,IAAOC,iBAAkB,IAAID,MACjDF,CACT,CACA,SAASI,oBAAoB35F,GAC3BA,EAAK64F,0BAA2B,CAClC,CACA,IAAIe,gBAAkB,IAAIC,IACxBC,6BAA+B,CAAA,EACjC,SAASC,sBAAsBC,EAAkBC,GAC/CC,oBAAoBF,EAAkBC,GACtCC,oBAAoBF,EAAmB,UAAWC,EACpD,CACA,SAASC,oBAAoBF,EAAkBC,GAE7C,IADAH,6BAA6BE,GAAoBC,EAE/CD,EAAmB,EACnBA,EAAmBC,EAAa9gG,OAChC6gG,IAEAJ,gBAAgBO,IAAIF,EAAaD,GACrC,CACA,IAAII,2BAA6BvoD,OAC7B,iZAEFwoD,0BAA4B,CAAE,EAC9BC,4BAA8B,GA0D5B9mD,OAAQ2I,OAzDZ,SAASo+C,oBAAoBC,GAC3B,QAAI7gF,iBAAevgB,KAAKkhG,4BAA6BE,KAEjD7gF,iBAAevgB,KAAKihG,0BAA2BG,KAC/CJ,2BAA2B1zD,KAAK8zD,GAC1BF,4BAA4BE,IAAiB,GACvDH,0BAA0BG,IAAiB,GACpC,GACT,CACA,SAASC,qBAAqBz6F,EAAMzB,EAAMuH,GACxC,GAAIy0F,oBAAoBh8F,GACtB,GAAI,OAASuH,EAAO9F,EAAK06F,gBAAgBn8F,OACpC,CACH,cAAeuH,GACb,IAAK,YACL,IAAK,WACL,IAAK,SAEH,YADA9F,EAAK06F,gBAAgBn8F,GAEvB,IAAK,UACH,IAAIo8F,EAAWp8F,EAAKqI,cAAc7F,MAAM,EAAG,GAC3C,GAAI,UAAY45F,GAAY,UAAYA,EAEtC,YADA36F,EAAK06F,gBAAgBn8F,GAI3ByB,EAAK46F,aAAar8F,EAAM,GAAKuH,EAC9B,CACL,CACA,SAAS+0F,0BAA0B76F,EAAMzB,EAAMuH,GAC7C,GAAI,OAASA,EAAO9F,EAAK06F,gBAAgBn8F,OACpC,CACH,cAAeuH,GACb,IAAK,YACL,IAAK,WACL,IAAK,SACL,IAAK,UAEH,YADA9F,EAAK06F,gBAAgBn8F,GAGzByB,EAAK46F,aAAar8F,EAAM,GAAKuH,EAC9B,CACH,CACA,SAASg1F,+BAA+B96F,EAAM6vC,EAAWtxC,EAAMuH,GAC7D,GAAI,OAASA,EAAO9F,EAAK06F,gBAAgBn8F,OACpC,CACH,cAAeuH,GACb,IAAK,YACL,IAAK,WACL,IAAK,SACL,IAAK,UAEH,YADA9F,EAAK06F,gBAAgBn8F,GAGzByB,EAAK+6F,eAAelrD,EAAWtxC,EAAM,GAAKuH,EAC3C,CACH,CAEA,SAASk1F,8BAA8Bz8F,GACrC,QAAI,IAAWi1C,OACb,IACE,MAAMn3C,OACP,CAAC,MAAOuP,GACP,IAAIgkB,EAAQhkB,EAAEylC,MAAMuE,OAAOhmB,MAAM,gBACjC4jB,OAAU5jB,GAASA,EAAM,IAAO,GAChCusB,QACG,EAAIvwC,EAAEylC,MAAM94C,QAAQ,YACjB,kBACC,EAAIqT,EAAEylC,MAAM94C,QAAQ,KACnB,eACA,EACT,CACH,MAAO,KAAOi7C,OAASj1C,EAAO49C,MAChC,CACA,IAAI8+C,SAAU,EACd,SAASC,6BAA6BxiG,EAAIyiG,GACxC,IAAKziG,GAAMuiG,QAAS,MAAO,GAC3BA,SAAU,EACV,IAAIG,EAA4B/+F,MAAMg/F,kBACtCh/F,MAAMg/F,uBAAoB,EAC1B,IACE,IAAIC,EAAiB,CACnBC,4BAA6B,WAC3B,IACE,GAAIJ,EAAW,CACb,IAAIK,EAAO,WACT,MAAMn/F,OACpB,EAMY,GALAjB,OAAOoK,eAAeg2F,EAAKngG,UAAW,QAAS,CAC7C4L,IAAK,WACH,MAAM5K,OACP,IAEC,iBAAoBo/F,SAAWA,QAAQN,UAAW,CACpD,IACEM,QAAQN,UAAUK,EAAM,GACzB,CAAC,MAAO5vF,GACP,IAAI8vF,EAAU9vF,CACf,CACD6vF,QAAQN,UAAUziG,EAAI,GAAI8iG,EACxC,KAAmB,CACL,IACEA,EAAKpiG,MACN,CAAC,MAAOuiG,GACPD,EAAUC,CACX,CACDjjG,EAAGU,KAAKoiG,EAAKngG,UACd,CACb,KAAiB,CACL,IACE,MAAMgB,OACP,CAAC,MAAOu/F,GACPF,EAAUE,CACX,EACAJ,EAAO9iG,MACN,mBAAsB8iG,EAAKjlF,OAC3BilF,EAAKjlF,MAAM,WAAc,EAC5B,CACF,CAAC,MAAOslF,GACP,GAAIA,GAAUH,GAAW,iBAAoBG,EAAOxqD,MAClD,MAAO,CAACwqD,EAAOxqD,MAAOqqD,EAAQrqD,MACjC,CACD,MAAO,CAAC,KAAM,KACf,GAEHiqD,EAAeC,4BAA4BhJ,YACzC,8BACF,IAAIuJ,EAAqB1gG,OAAO2gG,yBAC9BT,EAAeC,4BACf,QAEFO,GACEA,EAAmBhrD,cACnB11C,OAAOoK,eACL81F,EAAeC,4BACf,OACA,CAAEz1F,MAAO,gCAEb,IAAIk2F,EAAwBV,EAAeC,8BACzCU,EAAcD,EAAsB,GACpCE,EAAeF,EAAsB,GACvC,GAAIC,GAAeC,EAAc,CAC/B,IAAIC,EAAcF,EAAYnjF,MAAM,MAClCsjF,EAAeF,EAAapjF,MAAM,MACpC,IACEgjF,EAAqBR,EAAiB,EACtCA,EAAiBa,EAAYhjG,SAC5BgjG,EAAYb,GAAgBe,SAAS,gCAGtCf,IACF,KAEEQ,EAAqBM,EAAajjG,SACjCijG,EAAaN,GAAoBO,SAChC,gCAIFP,IACF,GACER,IAAmBa,EAAYhjG,QAC/B2iG,IAAuBM,EAAajjG,OAEpC,IACEmiG,EAAiBa,EAAYhjG,OAAS,EACpC2iG,EAAqBM,EAAajjG,OAAS,EAC7C,GAAKmiG,GACL,GAAKQ,GACLK,EAAYb,KAAoBc,EAAaN,IAG7CA,IACJ,KAEE,GAAKR,GAAkB,GAAKQ,EAC5BR,IAAkBQ,IAElB,GAAIK,EAAYb,KAAoBc,EAAaN,GAAqB,CACpE,GAAI,IAAMR,GAAkB,IAAMQ,EAChC,MAEKR,IAED,IADAQ,GAEEK,EAAYb,KACVc,EAAaN,GACjB,CACA,IAAIQ,EACF,KACAH,EAAYb,GAAgBvpF,QAAQ,WAAY,QAIlD,OAHArZ,EAAG65F,aACD+J,EAAMD,SAAS,iBACdC,EAAQA,EAAMvqF,QAAQ,cAAerZ,EAAG65F,cACpC+J,CACR,QACI,GAAKhB,GAAkB,GAAKQ,GAErC,KACD,CACJ,CACL,CAAG,QACEb,SAAU,EAAM5+F,MAAMg/F,kBAAoBD,CAC5C,CACD,OAAQA,EAA4B1iG,EAAKA,EAAG65F,aAAe75F,EAAG6F,KAAO,IACjEy8F,8BAA8BI,GAC9B,EACN,CACA,SAASmB,cAAcxL,GACrB,OAAQA,EAAM9qC,KACZ,KAAK,GACL,KAAO,GACP,KAAM,EACJ,OAAO+0C,8BAA8BjK,EAAM9oF,MAC7C,KAAK,GACH,OAAO+yF,8BAA8B,QACvC,QACE,OAAOA,8BAA8B,YACvC,KAAO,GACL,OAAOA,8BAA8B,gBACvC,KAAK,EACL,QACE,OAAOE,6BAA6BnK,EAAM9oF,MAAM,GAClD,KAAO,GACL,OAAOizF,6BAA6BnK,EAAM9oF,KAAK+iF,QAAQ,GACzD,KAAK,EACH,OAAOkQ,6BAA6BnK,EAAM9oF,MAAM,GAClD,KAAO,GACL,OAAO+yF,8BAA8B,YACvC,QACE,MAAO,GAEb,CACA,SAASwB,4BAA4BC,GACnC,IACE,IAAIC,EAAO,GACX,GACGA,GAAQH,cAAcE,GACpBA,EAAiBA,EAAevL,aAC9BuL,GACP,OAAOC,CACR,CAAC,MAAO9wF,GACP,MAAO,6BAA+BA,EAAE0lC,QAAU,KAAO1lC,EAAEylC,KAC5D,CACH,CACA,SAASsrD,iBAAiB72F,GACxB,cAAeA,GACb,IAAK,SACL,IAAK,UACL,IAAK,SACL,IAAK,SACL,IAAK,YAEL,IAAK,SACH,OAAOA,EACT,QACE,MAAO,GAEb,CACA,SAAS82F,YAAYC,GACnB,IAAI50F,EAAO40F,EAAK50F,KAChB,OACG40F,EAAOA,EAAKC,WACb,UAAYD,EAAKj2F,gBAChB,aAAeqB,GAAQ,UAAYA,EAExC,CACA,SAAS80F,iBAAiB/8F,GACxB,IAAIg9F,EAAaJ,YAAY58F,GAAQ,UAAY,QAC/C+/D,EAAa3kE,OAAO2gG,yBAClB/7F,EAAK1B,YAAYjD,UACjB2hG,GAEFC,EAAe,GAAKj9F,EAAKg9F,GAC3B,IACGh9F,EAAK2Z,eAAeqjF,SACrB,IAAuBj9B,GACvB,mBAAsBA,EAAWt6D,KACjC,mBAAsBs6D,EAAW94D,IACjC,CACA,IAAIxB,EAAMs6D,EAAWt6D,IACnBwB,EAAM84D,EAAW94D,IAcnB,OAbA7L,OAAOoK,eAAexF,EAAMg9F,EAAY,CACtClsD,cAAc,EACdrrC,IAAK,WACH,OAAOA,EAAIrM,KAAK8D,KACjB,EACD+J,IAAK,SAAUnB,GACbm3F,EAAe,GAAKn3F,EACpBmB,EAAI7N,KAAK8D,KAAM4I,EAChB,IAEH1K,OAAOoK,eAAexF,EAAMg9F,EAAY,CACtCn2F,WAAYk5D,EAAWl5D,aAElB,CACLq2F,SAAU,WACR,OAAOD,CACR,EACDE,SAAU,SAAUr3F,GAClBm3F,EAAe,GAAKn3F,CACrB,EACDs3F,aAAc,WACZp9F,EAAKq9F,cAAgB,YACdr9F,EAAKg9F,EACb,EAEJ,CACH,CACA,SAASn4C,MAAM7kD,GACbA,EAAKq9F,gBAAkBr9F,EAAKq9F,cAAgBN,iBAAiB/8F,GAC/D,CACA,SAASs9F,qBAAqBt9F,GAC5B,IAAKA,EAAM,OAAO,EAClB,IAAIu9F,EAAUv9F,EAAKq9F,cACnB,IAAKE,EAAS,OAAO,EACrB,IAAIC,EAAYD,EAAQL,WACpBp3F,EAAQ,GAQZ,OAPA9F,IACG8F,EAAQ82F,YAAY58F,GACjBA,EAAKy9F,QACH,OACA,QACFz9F,EAAK8F,QACX9F,EAAO8F,KACS03F,IAAaD,EAAQJ,SAASn9F,IAAO,EACvD,CACA,SAAS09F,iBAAiBC,GAExB,QAAI,KADJA,EAAMA,IAAQ,oBAAuB7qF,SAAWA,cAAW,IAC3B,YAChC,IACE,OAAO6qF,EAAIC,eAAiBD,EAAIje,IACjC,CAAC,MAAOtjF,GACP,OAAOuhG,EAAIje,IACZ,CACH,CACA,IAAIme,oDAAsD,WAC1D,SAASC,+CAA+Ch4F,GACtD,OAAOA,EAAMiM,QACX8rF,oDACA,SAAUE,GACR,MAAO,KAAOA,EAAGvsF,WAAW,GAAGhY,SAAS,IAAM,GAC/C,EAEL,CACA,SAASwkG,YACPnrF,EACA/M,EACAukF,EACA4T,EACAR,EACAS,EACAj2F,EACA1J,GAEAsU,EAAQtU,KAAO,GACf,MAAQ0J,GACR,mBAAsBA,GACtB,iBAAoBA,GACpB,kBAAqBA,EAChB4K,EAAQ5K,KAAOA,EAChB4K,EAAQ6nF,gBAAgB,QACxB,MAAQ50F,EACN,WAAamC,GACV,IAAMnC,GAAS,KAAO+M,EAAQ/M,OAAU+M,EAAQ/M,OAASA,KAC5D+M,EAAQ/M,MAAQ,GAAK62F,iBAAiB72F,IAExC+M,EAAQ/M,QAAU,GAAK62F,iBAAiB72F,KACrC+M,EAAQ/M,MAAQ,GAAK62F,iBAAiB72F,IAE1C,WAAamC,GAAQ,UAAYA,GAAS4K,EAAQ6nF,gBAAgB,SACrE,MAAQ50F,EACJq4F,gBAAgBtrF,EAAS5K,EAAM00F,iBAAiB72F,IAChD,MAAQukF,EACN8T,gBAAgBtrF,EAAS5K,EAAM00F,iBAAiBtS,IAChD,MAAQ4T,GAAoBprF,EAAQ6nF,gBAAgB,SAC1D,MAAQ+C,GACN,MAAQS,IACPrrF,EAAQqrF,iBAAmBA,GAC9B,MAAQT,IACL5qF,EAAQ4qF,QACPA,GAAW,mBAAsBA,GAAW,iBAAoBA,GACpE,MAAQl/F,GACR,mBAAsBA,GACtB,iBAAoBA,GACpB,kBAAqBA,EAChBsU,EAAQtU,KAAO,GAAKo+F,iBAAiBp+F,GACtCsU,EAAQ6nF,gBAAgB,OAC9B,CACA,SAAS0D,UACPvrF,EACA/M,EACAukF,EACAoT,EACAS,EACAj2F,EACA1J,EACA8/F,GAOA,GALA,MAAQp2F,GACN,mBAAsBA,GACtB,iBAAoBA,GACpB,kBAAqBA,IACpB4K,EAAQ5K,KAAOA,GACd,MAAQnC,GAAS,MAAQukF,EAAc,CACzC,IAEK,WAAapiF,GAAQ,UAAYA,IACjC,MAAWnC,EAGd,OACFukF,EACE,MAAQA,EAAe,GAAKsS,iBAAiBtS,GAAgB,GAC/DvkF,EAAQ,MAAQA,EAAQ,GAAK62F,iBAAiB72F,GAASukF,EACvDgU,GAAev4F,IAAU+M,EAAQ/M,QAAU+M,EAAQ/M,MAAQA,GAC3D+M,EAAQw3E,aAAevkF,CACxB,CAED23F,EACE,mBAFFA,EAAU,MAAQA,EAAUA,EAAUS,IAEH,iBAAoBT,KAAaA,EACpE5qF,EAAQ4qF,QAAUY,EAAcxrF,EAAQ4qF,UAAYA,EACpD5qF,EAAQqrF,iBAAmBT,EAC3B,MAAQl/F,GACN,mBAAsBA,GACtB,iBAAoBA,GACpB,kBAAqBA,IACpBsU,EAAQtU,KAAOA,EACpB,CACA,SAAS4/F,gBAAgBn+F,EAAMiI,EAAMnC,GAClC,WAAamC,GAAQy1F,iBAAiB19F,EAAKs+F,iBAAmBt+F,GAC7DA,EAAKqqF,eAAiB,GAAKvkF,IAC1B9F,EAAKqqF,aAAe,GAAKvkF,EAC9B,CACA,SAASy4F,cAAcv+F,EAAMw+F,EAAUC,EAAWC,GAEhD,GADA1+F,EAAOA,EAAKkC,QACRs8F,EAAU,CACZA,EAAW,CAAA,EACX,IAAK,IAAIxlG,EAAI,EAAGA,EAAIylG,EAAUtlG,OAAQH,IACpCwlG,EAAS,IAAMC,EAAUzlG,KAAM,EACjC,IAAKylG,EAAY,EAAGA,EAAYz+F,EAAK7G,OAAQslG,IAC1CzlG,EAAIwlG,EAAS7kF,eAAe,IAAM3Z,EAAKy+F,GAAW34F,OACjD9F,EAAKy+F,GAAWE,WAAa3lG,IAAMgH,EAAKy+F,GAAWE,SAAW3lG,GAC9DA,GAAK0lG,IAAuB1+F,EAAKy+F,GAAWG,iBAAkB,EACtE,KAAS,CAGL,IAFAH,EAAY,GAAK9B,iBAAiB8B,GAClCD,EAAW,KACNxlG,EAAI,EAAGA,EAAIgH,EAAK7G,OAAQH,IAAK,CAChC,GAAIgH,EAAKhH,GAAG8M,QAAU24F,EAGpB,OAFAz+F,EAAKhH,GAAG2lG,UAAW,OACnBD,IAAuB1+F,EAAKhH,GAAG4lG,iBAAkB,IAGnD,OAASJ,GAAYx+F,EAAKhH,GAAG6lG,WAAaL,EAAWx+F,EAAKhH,GAC3D,CACD,OAASwlG,IAAaA,EAASG,UAAW,EAC3C,CACH,CACA,SAASG,eAAejsF,EAAS/M,EAAOukF,GAEpC,MAAQvkF,KACNA,EAAQ,GAAK62F,iBAAiB72F,MACtB+M,EAAQ/M,QAAU+M,EAAQ/M,MAAQA,GAC5C,MAAQukF,GAKVx3E,EAAQw3E,aACN,MAAQA,EAAe,GAAKsS,iBAAiBtS,GAAgB,GAJ7Dx3E,EAAQw3E,eAAiBvkF,IAAU+M,EAAQw3E,aAAevkF,EAK9D,CACA,SAASi5F,aAAalsF,EAAS/M,EAAOukF,EAAcpgB,GAClD,GAAI,MAAQnkE,EAAO,CACjB,GAAI,MAAQmkE,EAAU,CACpB,GAAI,MAAQogB,EAAc,MAAMhuF,MAAMwxF,yBAAuB,KAC7D,GAAIjH,YAAY3c,GAAW,CACzB,GAAI,EAAIA,EAAS9wE,OAAQ,MAAMkD,MAAMwxF,yBAAuB,KAC5D5jB,EAAWA,EAAS,EACrB,CACDogB,EAAepgB,CAChB,CACD,MAAQogB,IAAiBA,EAAe,IACxCvkF,EAAQukF,CACT,CACDA,EAAesS,iBAAiB72F,GAChC+M,EAAQw3E,aAAeA,GACvBpgB,EAAWp3D,EAAQmsF,eACN3U,GACX,KAAOpgB,GACP,OAASA,IACRp3D,EAAQ/M,MAAQmkE,EACrB,CACA,SAASg1B,eAAej/F,EAAM8zB,GAC5B,GAAIA,EAAM,CACR,IAAIorE,EAAal/F,EAAKk/F,WACtB,GACEA,GACAA,IAAel/F,EAAKm/F,WACpB,IAAMD,EAAWlQ,SAGjB,YADAkQ,EAAWE,UAAYtrE,EAG1B,CACD9zB,EAAKg/F,YAAclrE,CACrB,CACA,IAAIurE,gBAAkB,IAAIxF,IACxB,26BAA26B/gF,MACz6B,MAGJ,SAASwmF,iBAAiBzsD,EAAO0sD,EAAWz5F,GAC1C,IAAI05F,EAAmB,IAAMD,EAAUhnG,QAAQ,MAC/C,MAAQuN,GAAS,kBAAqBA,GAAS,KAAOA,EAClD05F,EACE3sD,EAAM4sD,YAAYF,EAAW,IAC7B,UAAYA,EACT1sD,EAAM6sD,SAAW,GACjB7sD,EAAM0sD,GAAa,GACxBC,EACE3sD,EAAM4sD,YAAYF,EAAWz5F,GAC7B,iBAAoBA,GAClB,IAAMA,GACNu5F,gBAAgBM,IAAIJ,GACpB,UAAYA,EACT1sD,EAAM6sD,SAAW55F,EACjB+sC,EAAM0sD,IAAc,GAAKz5F,GAAO8vC,OAClC/C,EAAM0sD,GAAaz5F,EAAQ,IACtC,CACA,SAAS85F,kBAAkB5/F,EAAM6/F,EAAQC,GACvC,GAAI,MAAQD,GAAU,iBAAoBA,EACxC,MAAMxjG,MAAMwxF,yBAAuB,KAErC,GADA7tF,EAAOA,EAAK6yC,MACR,MAAQitD,EAAY,CACtB,IAAK,IAAIP,KAAaO,GACnBA,EAAWnmF,eAAe4lF,IACxB,MAAQM,GAAUA,EAAOlmF,eAAe4lF,KACxC,IAAMA,EAAUhnG,QAAQ,MACrByH,EAAKy/F,YAAYF,EAAW,IAC5B,UAAYA,EACTv/F,EAAK0/F,SAAW,GAChB1/F,EAAKu/F,GAAa,IAC7B,IAAK,IAAIQ,KAAgBF,EACtBN,EAAYM,EAAOE,GAClBF,EAAOlmF,eAAeomF,IACpBD,EAAWC,KAAkBR,GAC7BD,iBAAiBt/F,EAAM+/F,EAAcR,EAC5C,MACC,IAAK,IAAIS,KAAgBH,EACvBA,EAAOlmF,eAAeqmF,IACpBV,iBAAiBt/F,EAAMggG,EAAcH,EAAOG,GACpD,CACA,SAASC,gBAAgBr7B,GACvB,IAAK,IAAMA,EAAQrsE,QAAQ,KAAM,OAAO,EACxC,OAAQqsE,GACN,IAAK,iBACL,IAAK,gBACL,IAAK,YACL,IAAK,gBACL,IAAK,gBACL,IAAK,mBACL,IAAK,iBACL,IAAK,gBACH,OAAO,EACT,QACE,OAAO,EAEb,CACA,IAAIs7B,QAAU,IAAIzG,IAAI,CAClB,CAAC,gBAAiB,kBAClB,CAAC,UAAW,OACZ,CAAC,YAAa,cACd,CAAC,cAAe,eAChB,CAAC,eAAgB,iBACjB,CAAC,oBAAqB,sBACtB,CAAC,aAAc,eACf,CAAC,gBAAiB,kBAClB,CAAC,YAAa,cACd,CAAC,WAAY,aACb,CAAC,WAAY,aACb,CAAC,qBAAsB,uBACvB,CAAC,4BAA6B,+BAC9B,CAAC,eAAgB,iBACjB,CAAC,iBAAkB,mBACnB,CAAC,mBAAoB,qBACrB,CAAC,mBAAoB,qBACrB,CAAC,cAAe,gBAChB,CAAC,WAAY,aACb,CAAC,aAAc,eACf,CAAC,eAAgB,iBACjB,CAAC,aAAc,eACf,CAAC,WAAY,aACb,CAAC,iBAAkB,oBACnB,CAAC,cAAe,gBAChB,CAAC,YAAa,cACd,CAAC,cAAe,gBAChB,CAAC,aAAc,eACf,CAAC,YAAa,cACd,CAAC,6BAA8B,gCAC/B,CAAC,2BAA4B,8BAC7B,CAAC,YAAa,eACd,CAAC,eAAgB,kBACjB,CAAC,iBAAkB,mBACnB,CAAC,gBAAiB,kBAClB,CAAC,gBAAiB,kBAClB,CAAC,YAAa,cACd,CAAC,YAAa,cACd,CAAC,cAAe,gBAChB,CAAC,mBAAoB,qBACrB,CAAC,oBAAqB,sBACtB,CAAC,aAAc,eACf,CAAC,WAAY,YACb,CAAC,gBAAiB,kBAClB,CAAC,kBAAmB,oBACpB,CAAC,iBAAkB,mBACnB,CAAC,YAAa,cACd,CAAC,cAAe,gBAChB,CAAC,wBAAyB,0BAC1B,CAAC,yBAA0B,2BAC3B,CAAC,kBAAmB,oBACpB,CAAC,mBAAoB,qBACrB,CAAC,gBAAiB,kBAClB,CAAC,iBAAkB,mBACnB,CAAC,mBAAoB,qBACrB,CAAC,gBAAiB,kBAClB,CAAC,cAAe,gBAChB,CAAC,aAAc,eACf,CAAC,iBAAkB,mBACnB,CAAC,gBAAiB,kBAClB,CAAC,kBAAmB,oBACpB,CAAC,oBAAqB,sBACtB,CAAC,qBAAsB,uBACvB,CAAC,cAAe,gBAChB,CAAC,eAAgB,iBACjB,CAAC,aAAc,gBACf,CAAC,cAAe,gBAChB,CAAC,WAAY,aACb,CAAC,eAAgB,iBACjB,CAAC,gBAAiB,kBAClB,CAAC,eAAgB,iBACjB,CAAC,WAAY,cACb,CAAC,cAAe,iBAChB,CAAC,cAAe,iBAChB,CAAC,cAAe,gBAChB,CAAC,cAAe,gBAChB,CAAC,aAAc,eACf,CAAC,UAAW,cAEd0G,qBACE,2HACJ,SAASC,YAAYjmC,GACnB,OAAOgmC,qBAAqBz5D,KAAK,GAAKyzB,GAClC,8FACAA,CACN,CACA,IAAIkmC,sBAAwB,KAC5B,SAASC,eAAeC,GAItB,OAHAA,EAAcA,EAAY5jG,QAAU4jG,EAAYC,YAAc5+F,QAClD6+F,0BACTF,EAAcA,EAAYE,yBACrB,IAAKF,EAAYvR,SAAWuR,EAAYjtF,WAAaitF,CAC/D,CACA,IAAIG,cAAgB,KAClBC,aAAe,KACjB,SAASC,qBAAqBjkG,GAC5B,IAAIkkG,EAAmB1H,oBAAoBx8F,GAC3C,GAAIkkG,IAAqBlkG,EAASkkG,EAAiB/O,WAAY,CAC7D,IAAIzR,EAAQ1jF,EAAO47F,mBAAqB,KACxCv7C,EAAG,OAAUrgD,EAASkkG,EAAiB/O,UAAY+O,EAAiB54F,MAClE,IAAK,QAYH,GAXA+1F,YACErhG,EACA0jF,EAAMv6E,MACNu6E,EAAMgK,aACNhK,EAAMgK,aACNhK,EAAMod,QACNpd,EAAM6d,eACN7d,EAAMp4E,KACNo4E,EAAM9hF,MAERsiG,EAAmBxgB,EAAM9hF,KACrB,UAAY8hF,EAAMp4E,MAAQ,MAAQ44F,EAAkB,CACtD,IAAKxgB,EAAQ1jF,EAAQ0jF,EAAM/sE,YAAc+sE,EAAQA,EAAM/sE,WAQvD,IAPA+sE,EAAQA,EAAMygB,iBACZ,eACEhD,+CACE,GAAK+C,GAEP,oBAGFA,EAAmB,EACnBA,EAAmBxgB,EAAMlnF,OACzB0nG,IACA,CACA,IAAIE,EAAY1gB,EAAMwgB,GACtB,GAAIE,IAAcpkG,GAAUokG,EAAU1Q,OAAS1zF,EAAO0zF,KAAM,CAC1D,IAAI2Q,EAAaD,EAAUxI,mBAAqB,KAChD,IAAKyI,EAAY,MAAM3kG,MAAMwxF,yBAAuB,KACpDmQ,YACE+C,EACAC,EAAWl7F,MACXk7F,EAAW3W,aACX2W,EAAW3W,aACX2W,EAAWvD,QACXuD,EAAW9C,eACX8C,EAAW/4F,KACX+4F,EAAWziG,KAEd,CACF,CACD,IACEsiG,EAAmB,EACnBA,EAAmBxgB,EAAMlnF,OACzB0nG,KAECE,EAAY1gB,EAAMwgB,IACPxQ,OAAS1zF,EAAO0zF,MAAQiN,qBAAqByD,EAC5D,CACD,MAAM/jD,EACR,IAAK,WACH8hD,eAAeniG,EAAQ0jF,EAAMv6E,MAAOu6E,EAAMgK,cAC1C,MAAMrtC,EACR,IAAK,SAED,OADD6jD,EAAmBxgB,EAAMv6E,QAEtBy4F,cAAc5hG,IAAU0jF,EAAMme,SAAUqC,GAAkB,GAEnE,CACH,CACA,IAAII,sBAAuB,EAC3B,SAASC,iBAAiBxoG,EAAIskD,EAAG5qC,GAC/B,GAAI6uF,qBAAsB,OAAOvoG,EAAGskD,EAAG5qC,GACvC6uF,sBAAuB,EACvB,IAEE,OAD+BvoG,EAAGskD,EAEtC,CAAG,QACC,GACIikD,sBAAuB,GACzB,OAASP,eAAiB,OAASC,gBAGhCQ,kBACDT,gBACI1jD,EAAI0jD,cACLhoG,EAAKioG,aACLA,aAAeD,cAAgB,KAChCE,qBAAqB5jD,GACrBtkD,IAEF,IAAKskD,EAAI,EAAGA,EAAItkD,EAAGS,OAAQ6jD,IAAK4jD,qBAAqBloG,EAAGskD,GAC7D,CACH,CACA,SAASokD,YAAY/H,EAAMW,GACzB,IAAIlI,EAAYuH,EAAKvH,UACrB,GAAI,OAASA,EAAW,OAAW,KACnC,IAAIzR,EAAQyR,EAAUyG,mBAAqB,KAC3C,GAAI,OAASlY,EAAO,OAAW,KAC/ByR,EAAYzR,EAAM2Z,GAClBh9C,EAAG,OAAQg9C,GACT,IAAK,UACL,IAAK,iBACL,IAAK,gBACL,IAAK,uBACL,IAAK,cACL,IAAK,qBACL,IAAK,cACL,IAAK,qBACL,IAAK,YACL,IAAK,mBACL,IAAK,gBACF3Z,GAASA,EAAMwe,YAEbxe,IACC,YAFAgZ,EAAOA,EAAKpxF,OAGZ,UAAYoxF,GACZ,WAAaA,GACb,aAAeA,IAEnBA,GAAQhZ,EACR,MAAMrjC,EACR,QACEq8C,GAAO,EAEX,GAAIA,EAAM,OAAO,KACjB,GAAIvH,GAAa,mBAAsBA,EACrC,MAAMz1F,MACJwxF,yBAAuB,IAAKmM,SAAyBlI,IAEzD,OAAOA,CACT,CACA,IAAIuP,cACA,oBAAuBz/F,aACvB,IAAuBA,OAAOkR,eAC9B,IAAuBlR,OAAOkR,SAASK,eAEzCmuF,+BAAgC,EAClC,GAAID,YACF,IACE,IAAIn/F,QAAU,GACd9G,OAAOoK,eAAetD,QAAS,UAAW,CACxCuD,IAAK,WACH67F,+BAAgC,CACjC,IAEH1/F,OAAO2/F,iBAAiB,OAAQr/F,QAASA,SACzCN,OAAO4/F,oBAAoB,OAAQt/F,QAASA,QAC7C,CAAC,MAAO9F,GACPklG,+BAAgC,CACjC,CACH,IAAIjoE,OAAO,KACTooE,UAAY,KACZC,aAAe,KACjB,SAASC,UACP,GAAID,aAAc,OAAOA,aACzB,IAAIpyE,EAGFxoB,EAFA86F,EAAaH,UACbI,EAAcD,EAAWzoG,OAEzB2oG,EAAW,UAAWzoE,OAAOA,OAAKvzB,MAAQuzB,OAAK2lE,YAC/C+C,EAAYD,EAAS3oG,OACvB,IACEm2B,EAAQ,EACRA,EAAQuyE,GAAeD,EAAWtyE,KAAWwyE,EAASxyE,GACtDA,KAEF,IAAI0yE,EAASH,EAAcvyE,EAC3B,IACExoB,EAAM,EACNA,GAAOk7F,GACPJ,EAAWC,EAAc/6F,KAASg7F,EAASC,EAAYj7F,GACvDA,KAEF,OAAQ46F,aAAeI,EAAS/gG,MAAMuuB,EAAO,EAAIxoB,EAAM,EAAIA,OAAM,EACnE,CACA,SAASm7F,iBAAiB1B,GACxB,IAAI2B,EAAU3B,EAAY2B,QAM1B,MALA,aAAc3B,EAEV,KADEA,EAAcA,EAAY4B,WACP,KAAOD,IAAY3B,EAAc,IACrDA,EAAc2B,EACnB,KAAO3B,IAAgBA,EAAc,IAC9B,IAAMA,GAAe,KAAOA,EAAcA,EAAc,CACjE,CACA,SAAS6B,0BACP,OAAO,CACT,CACA,SAASC,2BACP,OAAO,CACT,CACA,SAASC,qBAAqBC,GAC5B,SAASC,EACPC,EACAC,EACAzJ,EACAsH,EACAoC,GAQA,IAAK,IAAI7iF,KANT5iB,KAAK0lG,WAAaH,EAClBvlG,KAAK2lG,YAAc5J,EACnB/7F,KAAK+K,KAAOy6F,EACZxlG,KAAKqjG,YAAcA,EACnBrjG,KAAKP,OAASgmG,EACdzlG,KAAK4lG,cAAgB,KACAP,EACnBA,EAAU5oF,eAAemG,KACrB2iF,EAAYF,EAAUziF,GACvB5iB,KAAK4iB,GAAY2iF,EACdA,EAAUlC,GACVA,EAAYzgF,IASpB,OARA5iB,KAAK6lG,oBACH,MAAQxC,EAAYyC,iBAChBzC,EAAYyC,kBACZ,IAAOzC,EAAY7qF,aAErB0sF,wBACAC,yBACJnlG,KAAK+lG,qBAAuBZ,yBACjBnlG,IACZ,CAuBD,OAtBAslB,OAAOggF,EAAmBnnG,UAAW,CACnC6nG,eAAgB,WACdhmG,KAAK8lG,kBAAmB,EACxB,IAAI51F,EAAQlQ,KAAKqjG,YACjBnzF,IACGA,EAAM81F,eACH91F,EAAM81F,iBACN,kBAAqB91F,EAAMsI,cAAgBtI,EAAMsI,aAAc,GAClExY,KAAK6lG,mBAAqBX,wBAC9B,EACDe,gBAAiB,WACf,IAAI/1F,EAAQlQ,KAAKqjG,YACjBnzF,IACGA,EAAM+1F,gBACH/1F,EAAM+1F,kBACN,kBAAqB/1F,EAAMg2F,eAC1Bh2F,EAAMg2F,cAAe,GACzBlmG,KAAK+lG,qBAAuBb,wBAChC,EACDiB,QAAS,WAAc,EACvBC,aAAclB,0BAETI,CACT,CACA,IAAIe,eAAiB,CACjBC,WAAY,EACZxa,QAAS,EACTC,WAAY,EACZwa,UAAW,SAAUr2F,GACnB,OAAOA,EAAMq2F,WAAa79D,KAAKy7C,KAChC,EACD2hB,iBAAkB,EAClBU,UAAW,GAEbC,eAAiBrB,qBAAqBiB,gBACtCK,iBAAmBphF,OAAO,CAAA,EAAI+gF,eAAgB,CAAEM,KAAM,EAAGC,OAAQ,IACjEC,iBAAmBzB,qBAAqBsB,kBACxCI,cACAC,cACAC,eACAC,oBAAsB3hF,OAAO,CAAA,EAAIohF,iBAAkB,CACjDQ,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,QAAS,EACTC,MAAO,EACPC,MAAO,EACPC,QAAS,EACTC,SAAU,EACVC,OAAQ,EACRC,QAAS,EACTC,iBAAkBC,sBAClBC,OAAQ,EACRC,QAAS,EACTC,cAAe,SAAU93F,GACvB,YAAO,IAAWA,EAAM83F,cACpB93F,EAAM+3F,cAAgB/3F,EAAMozF,WAC1BpzF,EAAMg4F,UACNh4F,EAAM+3F,YACR/3F,EAAM83F,aACX,EACDG,UAAW,SAAUj4F,GACnB,MAAI,cAAeA,EAAcA,EAAMi4F,WACvCj4F,IAAU82F,iBACPA,gBAAkB,cAAgB92F,EAAMnF,MACnC+7F,cAAgB52F,EAAMg3F,QAAUF,eAAeE,QAChDH,cAAgB72F,EAAMi3F,QAAUH,eAAeG,SAC/CJ,cAAgBD,cAAgB,EACpCE,eAAiB92F,GACb42F,cACR,EACDsB,UAAW,SAAUl4F,GACnB,MAAO,cAAeA,EAAQA,EAAMk4F,UAAYrB,aACjD,IAEHsB,oBAAsBjD,qBAAqB6B,qBAC3CqB,mBAAqBhjF,OAAO,GAAI2hF,oBAAqB,CAAEsB,aAAc,IACrEC,mBAAqBpD,qBAAqBkD,oBAC1CG,oBAAsBnjF,OAAO,CAAE,EAAEohF,iBAAkB,CAAEsB,cAAe,IACpEU,oBAAsBtD,qBAAqBqD,qBAC3CE,wBAA0BrjF,OAAO,GAAI+gF,eAAgB,CACnDuC,cAAe,EACfC,YAAa,EACbC,cAAe,IAEjBC,wBAA0B3D,qBAAqBuD,yBAC/CK,wBAA0B1jF,OAAO,CAAE,EAAE+gF,eAAgB,CACnD4C,cAAe,SAAU/4F,GACvB,MAAO,kBAAmBA,EACtBA,EAAM+4F,cACNvkG,OAAOukG,aACZ,IAEHC,wBAA0B9D,qBAAqB4D,yBAC/CG,0BAA4B7jF,OAAO,CAAE,EAAE+gF,eAAgB,CAAE/lG,KAAM,IAC/D8oG,0BAA4BhE,qBAAqB+D,2BACjDE,aAAe,CACbC,IAAK,SACLC,SAAU,IACVC,KAAM,YACNC,GAAI,UACJC,MAAO,aACPC,KAAM,YACNC,IAAK,SACLC,IAAK,KACLC,KAAM,cACNC,KAAM,cACNC,OAAQ,aACRC,gBAAiB,gBAEnBC,eAAiB,CACf,EAAG,YACH,EAAG,MACH,GAAI,QACJ,GAAI,QACJ,GAAI,QACJ,GAAI,UACJ,GAAI,MACJ,GAAI,QACJ,GAAI,WACJ,GAAI,SACJ,GAAI,IACJ,GAAI,SACJ,GAAI,WACJ,GAAI,MACJ,GAAI,OACJ,GAAI,YACJ,GAAI,UACJ,GAAI,aACJ,GAAI,YACJ,GAAI,SACJ,GAAI,SACJ,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,MACL,IAAK,MACL,IAAK,MACL,IAAK,UACL,IAAK,aACL,IAAK,QAEPC,kBAAoB,CAClBC,IAAK,SACLC,QAAS,UACTC,KAAM,UACNC,MAAO,YAEX,SAASC,oBAAoBC,GAC3B,IAAIpH,EAAcrjG,KAAKqjG,YACvB,OAAOA,EAAYuE,iBACfvE,EAAYuE,iBAAiB6C,MAC5BA,EAASN,kBAAkBM,OACxBpH,EAAYoH,EAEtB,CACA,SAAS5C,wBACP,OAAO2C,mBACT,CACA,IAAIE,uBAAyBplF,OAAO,GAAIohF,iBAAkB,CACtDzpG,IAAK,SAAUomG,GACb,GAAIA,EAAYpmG,IAAK,CACnB,IAAIA,EAAMosG,aAAahG,EAAYpmG,MAAQomG,EAAYpmG,IACvD,GAAI,iBAAmBA,EAAK,OAAOA,CACpC,CACD,MAAO,aAAeomG,EAAYt4F,KAE9B,MADEs4F,EAAc0B,iBAAiB1B,IACZ,QAAU5oF,OAAOC,aAAa2oF,GACnD,YAAcA,EAAYt4F,MAAQ,UAAYs4F,EAAYt4F,KACxDm/F,eAAe7G,EAAY2B,UAAY,eACvC,EACP,EACD/oF,KAAM,EACN0uF,SAAU,EACVnD,QAAS,EACTC,SAAU,EACVC,OAAQ,EACRC,QAAS,EACTiD,OAAQ,EACRC,OAAQ,EACRjD,iBAAkBC,sBAClB5C,SAAU,SAAU/0F,GAClB,MAAO,aAAeA,EAAMnF,KAAOg6F,iBAAiB70F,GAAS,CAC9D,EACD80F,QAAS,SAAU90F,GACjB,MAAO,YAAcA,EAAMnF,MAAQ,UAAYmF,EAAMnF,KACjDmF,EAAM80F,QACN,CACL,EACD8F,MAAO,SAAU56F,GACf,MAAO,aAAeA,EAAMnF,KACxBg6F,iBAAiB70F,GACjB,YAAcA,EAAMnF,MAAQ,UAAYmF,EAAMnF,KAC5CmF,EAAM80F,QACN,CACP,IAEH+F,uBAAyB3F,qBAAqBsF,wBAC9CM,sBAAwB1lF,OAAO,CAAE,EAAE2hF,oBAAqB,CACtDgE,UAAW,EACX1hC,MAAO,EACPC,OAAQ,EACR0hC,SAAU,EACVC,mBAAoB,EACpBC,MAAO,EACPC,MAAO,EACPC,MAAO,EACPC,YAAa,EACbC,UAAW,IAEbC,sBAAwBrG,qBAAqB4F,uBAC7CU,oBAAsBpmF,OAAO,CAAE,EAAEohF,iBAAkB,CACjDiF,QAAS,EACTC,cAAe,EACfC,eAAgB,EAChBnE,OAAQ,EACRC,QAAS,EACTH,QAAS,EACTC,SAAU,EACVG,iBAAkBC,wBAEpBiE,oBAAsB1G,qBAAqBsG,qBAC3CK,yBAA2BzmF,OAAO,CAAE,EAAE+gF,eAAgB,CACpD2F,aAAc,EACdnD,YAAa,EACbC,cAAe,IAEjBmD,yBAA2B7G,qBAAqB2G,0BAChDG,oBAAsB5mF,OAAO,CAAE,EAAE2hF,oBAAqB,CACpDkF,OAAQ,SAAUj8F,GAChB,MAAO,WAAYA,EACfA,EAAMi8F,OACN,gBAAiBj8F,GACdA,EAAMk8F,YACP,CACP,EACDC,OAAQ,SAAUn8F,GAChB,MAAO,WAAYA,EACfA,EAAMm8F,OACN,gBAAiBn8F,GACdA,EAAMo8F,YACP,eAAgBp8F,GACbA,EAAMq8F,WACP,CACT,EACDC,OAAQ,EACRC,UAAW,IAEbC,oBAAsBtH,qBAAqB8G,qBAC3CS,qBAAuBrnF,OAAO,CAAA,EAAI+gF,eAAgB,CAChDuG,SAAU,EACVC,SAAU,IAEZC,qBAAuB1H,qBAAqBuH,sBAC5CI,aAAe,CAAC,EAAG,GAAI,GAAI,IAC3BC,uBAAyB7I,aAAa,qBAAsBz/F,OAC5DuoG,aAAe,KACjB9I,aACE,iBAAkBvuF,WACjBq3F,aAAer3F,SAASq3F,cAC3B,IAAIC,qBAAuB/I,aAAa,cAAez/F,SAAWuoG,aAChEE,2BACEhJ,eACE6I,wBACCC,cAAgB,EAAIA,cAAgB,IAAMA,cAC/CG,cAAgB3yF,OAAOC,aAAa,IACpC2yF,kBAAmB,EACrB,SAASC,yBAAyBC,EAAclK,GAC9C,OAAQkK,GACN,IAAK,QACH,OAAQ,IAAMR,aAAa1xG,QAAQgoG,EAAY2B,SACjD,IAAK,UACH,OAAU,MAAK3B,EAAY2B,QAC7B,IAAK,WACL,IAAK,YACL,IAAK,WACH,OAAO,EACT,QACE,OAAO,EAEb,CACA,SAASwI,uBAAuBnK,GAE9B,MAAO,iBADPA,EAAcA,EAAYuD,SACgB,SAAUvD,EAChDA,EAAY/iG,KACZ,IACN,CACA,IAAImtG,aAAc,EAClB,SAASC,0BAA0BH,EAAclK,GAC/C,OAAQkK,GACN,IAAK,iBACH,OAAOC,uBAAuBnK,GAChC,IAAK,WACH,OAAI,KAAOA,EAAYyH,YACvBuC,kBAAmB,EACZD,eACT,IAAK,YACH,OACGG,EAAelK,EAAY/iG,QACX8sG,eAAiBC,iBAAmB,KAAOE,EAEhE,QACE,OAAO,KAEb,CACA,SAASI,4BAA4BJ,EAAclK,GACjD,GAAIoK,YACF,MAAO,mBAAqBF,IACxBP,wBACAM,yBAAyBC,EAAclK,IACrCkK,EAAe9I,UAChBD,aAAeD,UAAYpoE,OAAO,KAClCsxE,aAAc,EACfF,GACA,KACN,OAAQA,GACN,IAAK,QAgBL,QACE,OAAO,KAfT,IAAK,WACH,KACIlK,EAAYmE,SAAWnE,EAAYqE,QAAUrE,EAAYsE,UAC1DtE,EAAYmE,SAAWnE,EAAYqE,OACpC,CACA,GAAIrE,EAAYuK,MAAQ,EAAIvK,EAAYuK,KAAK3xG,OAC3C,OAAOonG,EAAYuK,KACrB,GAAIvK,EAAYyH,MAAO,OAAOrwF,OAAOC,aAAa2oF,EAAYyH,MAC/D,CACD,OAAO,KACT,IAAK,iBACH,OAAOqC,4BAA8B,OAAS9J,EAAYwH,OACtD,KACAxH,EAAY/iG,KAItB,CACA,IAAIutG,oBAAsB,CACxBn6D,OAAO,EACP3vB,MAAM,EACN+pF,UAAU,EACV,kBAAkB,EAClB5hD,OAAO,EACP6hD,OAAO,EACPC,QAAQ,EACRC,UAAU,EACVC,OAAO,EACP5kE,QAAQ,EACR6kE,KAAK,EACLv3E,MAAM,EACNE,MAAM,EACNmmC,KAAK,EACLmxC,MAAM,GAER,SAASC,mBAAmB1O,GAC1B,IAAIC,EAAWD,GAAQA,EAAKC,UAAYD,EAAKC,SAASl2F,cACtD,MAAO,UAAYk2F,IACbiO,oBAAoBlO,EAAK50F,MAC3B,aAAe60F,CAGrB,CACA,SAAS0O,+BACPC,EACApS,EACAkH,EACA5jG,GAEA+jG,cACIC,aACEA,aAAatjG,KAAKV,GACjBgkG,aAAe,CAAChkG,GAClB+jG,cAAgB/jG,EAErB,GADA08F,EAAOqS,4BAA4BrS,EAAM,aAChClgG,SACLonG,EAAc,IAAIoD,eAClB,WACA,SACA,KACApD,EACA5jG,GAEF8uG,EAAcpuG,KAAK,CAAE+P,MAAOmzF,EAAar4F,UAAWmxF,IACxD,CACA,IAAIsS,gBAAkB,KACpBC,oBAAsB,KACxB,SAASC,gBAAgBJ,GACvBK,qBAAqBL,EAAe,EACtC,CACA,SAASM,sBAAsB9S,GAE7B,GAAIqE,qBADalE,oBAAoBH,IACC,OAAOA,CAC/C,CACA,SAAS+S,4BAA4BvB,EAAcxR,GACjD,GAAI,WAAawR,EAAc,OAAOxR,CACxC,CACA,IAAIgT,uBAAwB,EAC5B,GAAI5K,YAAW,CACb,IAAI6K,oCACJ,GAAI7K,YAAW,CACb,IAAI8K,8BAAgC,YAAar5F,SACjD,IAAKq5F,8BAA+B,CAClC,IAAIC,0BAA4Bt5F,SAASK,cAAc,OACvDi5F,0BAA0BxR,aAAa,UAAW,WAClDuR,8BACE,mBAAsBC,0BAA0BC,OACnD,CACDH,oCAAsCC,6BAC1C,MAASD,qCAAsC,EAC7CD,sBACEC,uCACEp5F,SAASq3F,cAAgB,EAAIr3F,SAASq3F,aAC5C,CACA,SAASmC,6BACPX,kBACGA,gBAAgBY,YAAY,mBAAoBC,sBAChDZ,oBAAsBD,gBAAkB,KAC7C,CACA,SAASa,qBAAqBjM,GAC5B,GACE,UAAYA,EAAY2I,cACxB6C,sBAAsBH,qBACtB,CACA,IAAIH,EAAgB,GACpBD,+BACEC,EACAG,oBACArL,EACAD,eAAeC,IAEjBW,iBAAiB2K,gBAAiBJ,EACnC,CACH,CACA,SAASgB,kCAAkChC,EAAc9tG,EAAQs8F,GAC/D,YAAcwR,GACT6B,6BAEAV,oBAAsB3S,GADtB0S,gBAAkBhvG,GAEH+vG,YAAY,mBAAoBF,uBAChD,aAAe/B,GAAgB6B,4BACrC,CACA,SAASK,mCAAmClC,GAC1C,GACE,oBAAsBA,GACtB,UAAYA,GACZ,YAAcA,EAEd,OAAOsB,sBAAsBH,oBACjC,CACA,SAASgB,2BAA2BnC,EAAcxR,GAChD,GAAI,UAAYwR,EAAc,OAAOsB,sBAAsB9S,EAC7D,CACA,SAAS4T,mCAAmCpC,EAAcxR,GACxD,GAAI,UAAYwR,GAAgB,WAAaA,EAC3C,OAAOsB,sBAAsB9S,EACjC,CACA,SAAS6T,GAAGlhG,EAAGgjC,GACb,OAAQhjC,IAAMgjC,IAAM,IAAMhjC,GAAK,EAAIA,GAAM,EAAIgjC,IAAQhjC,GAAMA,GAAKgjC,GAAMA,CACxE,CACA,IAAIm+D,SAAW,mBAAsB3xG,OAAO0xG,GAAK1xG,OAAO0xG,GAAKA,GAC7D,SAASE,aAAaC,EAAMC,GAC1B,GAAIH,SAASE,EAAMC,GAAO,OAAO,EACjC,GACE,iBAAoBD,GACpB,OAASA,GACT,iBAAoBC,GACpB,OAASA,EAET,OAAO,EACT,IAAIC,EAAQ/xG,OAAOgM,KAAK6lG,GACtBG,EAAQhyG,OAAOgM,KAAK8lG,GACtB,GAAIC,EAAMh0G,SAAWi0G,EAAMj0G,OAAQ,OAAO,EAC1C,IAAKi0G,EAAQ,EAAGA,EAAQD,EAAMh0G,OAAQi0G,IAAS,CAC7C,IAAIC,EAAaF,EAAMC,GACvB,IACGzzF,iBAAevgB,KAAK8zG,EAAMG,KAC1BN,SAASE,EAAKI,GAAaH,EAAKG,IAEjC,OAAO,CACV,CACD,OAAO,CACT,CACA,SAASC,YAAYttG,GACnB,KAAOA,GAAQA,EAAKk/F,YAAcl/F,EAAOA,EAAKk/F,WAC9C,OAAOl/F,CACT,CACA,SAASutG,0BAA0Bl0E,EAAMz8B,GACvC,IAES4wG,EAFLxtG,EAAOstG,YAAYj0E,GAEvB,IADAA,EAAO,EACWr5B,GAAQ,CACxB,GAAI,IAAMA,EAAKgvF,SAAU,CAEvB,GADAwe,EAAUn0E,EAAOr5B,EAAKg/F,YAAY7lG,OAC9BkgC,GAAQz8B,GAAU4wG,GAAW5wG,EAC/B,MAAO,CAAEoD,KAAMA,EAAMpD,OAAQA,EAASy8B,GACxCA,EAAOm0E,CACR,CACDxwD,EAAG,CACD,KAAOh9C,GAAQ,CACb,GAAIA,EAAKytG,YAAa,CACpBztG,EAAOA,EAAKytG,YACZ,MAAMzwD,CACP,CACDh9C,EAAOA,EAAKsT,UACb,CACDtT,OAAO,CACR,CACDA,EAAOstG,YAAYttG,EACpB,CACH,CACA,SAAS0tG,aAAaC,EAAWC,GAC/B,SAAOD,IAAaC,KAChBD,IAAcC,KAEZD,GAAa,IAAMA,EAAU3e,YAE3B4e,GAAa,IAAMA,EAAU5e,SAC3B0e,aAAaC,EAAWC,EAAUt6F,YAClC,aAAcq6F,EACZA,EAAUE,SAASD,KACnBD,EAAUG,4BAC0C,GAA/CH,EAAUG,wBAAwBF,KAGrD,CACA,SAASG,qBAAqBxf,GAO5B,IACE,IAAI17E,EAAU6qF,kBAPhBnP,EACE,MAAQA,GACR,MAAQA,EAAc+P,eACtB,MAAQ/P,EAAc+P,cAAc0P,YAChCzf,EAAc+P,cAAc0P,YAC5BpsG,QAEyCkR,UAC7CD,aAAmB07E,EAAc0f,mBAEjC,CACA,IACE,IAAIxa,EACF,iBAAoB5gF,EAAQq7F,cAAcrG,SAASxY,IACtD,CAAC,MAAO1wF,GACP80F,GAA2B,CAC5B,CACD,IAAIA,EAEJ5gF,MAAAA,EAAU6qF,kBAFoBnP,EAAgB17E,EAAQq7F,eAEbp7F,SAC1C,CACD,OAAOD,CACT,CACA,SAASs7F,yBAAyBtR,GAChC,IAAIC,EAAWD,GAAQA,EAAKC,UAAYD,EAAKC,SAASl2F,cACtD,OACEk2F,IACE,UAAYA,IACX,SAAWD,EAAK50F,MACf,WAAa40F,EAAK50F,MAClB,QAAU40F,EAAK50F,MACf,QAAU40F,EAAK50F,MACf,aAAe40F,EAAK50F,OACtB,aAAe60F,GACf,SAAWD,EAAKuR,gBAEtB,CACA,IAAIC,yBACAhN,aAAa,iBAAkBvuF,UAAY,IAAMA,SAASq3F,aAC5DvM,cAAgB,KAChB0Q,kBAAoB,KACpBC,cAAgB,KAChBC,WAAY,EACd,SAASC,qBAAqBhD,EAAelL,EAAaoC,GACxD,IAAIhF,EACFgF,EAAkB/gG,SAAW+gG,EACzBA,EAAkB7vF,SAClB,IAAM6vF,EAAkB3T,SACtB2T,EACAA,EAAkBrE,cAC1BkQ,WACE,MAAQ5Q,eACRA,gBAAkBF,iBAAiBC,KAEnC,mBADEA,EAAMC,gBACmBuQ,yBAAyBxQ,GAC/CA,EAAM,CAAEruE,MAAOquE,EAAI+Q,eAAgB5nG,IAAK62F,EAAIgR,cAK5ChR,EAAM,CACLiR,YALAjR,GACCA,EAAIW,eAAiBX,EAAIW,cAAc0P,aACxCpsG,QACAitG,gBAEgBD,WAChBE,aAAcnR,EAAImR,aAClBC,UAAWpR,EAAIoR,UACfC,YAAarR,EAAIqR,aAEtBT,eAAiBvB,aAAauB,cAAe5Q,KAC1C4Q,cAAgB5Q,EAElB,GADCA,EAAM+N,4BAA4B4C,kBAAmB,aAC9Cn1G,SACJonG,EAAc,IAAIoD,eAClB,WACA,SACA,KACApD,EACAoC,GAEF8I,EAAcpuG,KAAK,CAAE+P,MAAOmzF,EAAar4F,UAAWy1F,IACnD4C,EAAY5jG,OAASihG,gBAC9B,CACA,SAASqR,cAAcC,EAAWC,GAChC,IAAIC,EAAW,GAIf,OAHAA,EAASF,EAAUtoG,eAAiBuoG,EAAUvoG,cAC9CwoG,EAAS,SAAWF,GAAa,SAAWC,EAC5CC,EAAS,MAAQF,GAAa,MAAQC,EAC/BC,CACT,CACA,IAAIC,eAAiB,CACjBC,aAAcL,cAAc,YAAa,gBACzCM,mBAAoBN,cAAc,YAAa,sBAC/CO,eAAgBP,cAAc,YAAa,kBAC3CQ,cAAeR,cAAc,aAAc,iBAC3CS,gBAAiBT,cAAc,aAAc,mBAC7CU,iBAAkBV,cAAc,aAAc,oBAC9CW,cAAeX,cAAc,aAAc,kBAE7CY,mBAAqB,CAAE,EACvBh9D,MAAQ,GASV,SAASi9D,2BAA2BX,GAClC,GAAIU,mBAAmBV,GAAY,OAAOU,mBAAmBV,GAC7D,IAAKE,eAAeF,GAAY,OAAOA,EACvC,IACED,EADEa,EAAYV,eAAeF,GAE/B,IAAKD,KAAaa,EAChB,GAAIA,EAAUp2F,eAAeu1F,IAAcA,KAAar8D,MACtD,OAAQg9D,mBAAmBV,GAAaY,EAAUb,GACtD,OAAOC,CACT,CAjBA9N,cACIxuD,MAAQ//B,SAASK,cAAc,OAAO0/B,MACxC,mBAAoBjxC,gBACVytG,eAAeC,aAAaU,iBAC7BX,eAAeE,mBAAmBS,iBAClCX,eAAeG,eAAeQ,WACvC,oBAAqBpuG,eACZytG,eAAeO,cAAcK,YAWxC,IAAIC,cAAgBJ,2BAA2B,gBAC7CK,oBAAsBL,2BAA2B,sBACjDM,gBAAkBN,2BAA2B,kBAC7CO,eAAiBP,2BAA2B,iBAC5CQ,iBAAmBR,2BAA2B,mBAC9CS,kBAAoBT,2BAA2B,oBAC/CU,eAAiBV,2BAA2B,iBAC5CW,2BAA6B,IAAIhX,IACjCiX,wBACE,mnBAAmnB53F,MACjnB,KAGN,SAAS63F,oBAAoBlG,EAAchI,GACzCgO,2BAA2BxpG,IAAIwjG,EAAchI,GAC7C1I,sBAAsB0I,EAAW,CAACgI,GACpC,CAJAiG,wBAAwBrzG,KAAK,aAK7B,IAAIuzG,eAAiB,IAAIC,QACzB,SAASC,2BAA2BhrG,EAAO4c,GACzC,GAAI,iBAAoB5c,GAAS,OAASA,EAAO,CAC/C,IAAIirG,EAAWH,eAAenrG,IAAIK,GAClC,YAAI,IAAWirG,EAAiBA,GAChCruF,EAAS,CACP5c,MAAOA,EACP4c,OAAQA,EACR2uB,MAAOmrD,4BAA4B95E,IAErCkuF,eAAe3pG,IAAInB,EAAO4c,GACnBA,EACR,CACD,MAAO,CACL5c,MAAOA,EACP4c,OAAQA,EACR2uB,MAAOmrD,4BAA4B95E,GAEvC,CACA,IAAIsuF,iBAAmB,GACrBC,sBAAwB,EACxBC,yBAA2B,EAC7B,SAASC,kCACP,IACE,IAAIC,EAAWH,sBACbj4G,EAAKk4G,yBAA2BD,sBAAwB,EAC1Dj4G,EAAIo4G,GAEJ,CACA,IAAIrgB,EAAQigB,iBAAiBh4G,GAC7Bg4G,iBAAiBh4G,KAAO,KACxB,IAAIgb,EAAQg9F,iBAAiBh4G,GAC7Bg4G,iBAAiBh4G,KAAO,KACxB,IAAIwzF,EAASwkB,iBAAiBh4G,GAC9Bg4G,iBAAiBh4G,KAAO,KACxB,IAAIg9F,EAAOgb,iBAAiBh4G,GAE5B,GADAg4G,iBAAiBh4G,KAAO,KACpB,OAASgb,GAAS,OAASw4E,EAAQ,CACrC,IAAI5lE,EAAU5S,EAAM4S,QACpB,OAASA,EACJ4lE,EAAO/uF,KAAO+uF,GACbA,EAAO/uF,KAAOmpB,EAAQnpB,KAAQmpB,EAAQnpB,KAAO+uF,GACnDx4E,EAAM4S,QAAU4lE,CACjB,CACD,IAAMwJ,GAAQqb,8BAA8BtgB,EAAOvE,EAAQwJ,EAC5D,CACH,CACA,SAASsb,gBAAgBvgB,EAAO/8E,EAAOw4E,EAAQwJ,GAC7Cgb,iBAAiBC,yBAA2BlgB,EAC5CigB,iBAAiBC,yBAA2Bj9F,EAC5Cg9F,iBAAiBC,yBAA2BzkB,EAC5CwkB,iBAAiBC,yBAA2Bjb,EAC5Ckb,0BAA4Blb,EAC5BjF,EAAMmE,OAASc,EAEf,QADAjF,EAAQA,EAAME,aACKF,EAAMmE,OAASc,EACpC,CACA,SAASub,4BAA4BxgB,EAAO/8E,EAAOw4E,EAAQwJ,GAEzD,OADAsb,gBAAgBvgB,EAAO/8E,EAAOw4E,EAAQwJ,GAC/Bwb,uBAAuBzgB,EAChC,CACA,SAAS0gB,+BAA+B1gB,EAAOiF,GAE7C,OADAsb,gBAAgBvgB,EAAO,KAAM,KAAMiF,GAC5Bwb,uBAAuBzgB,EAChC,CACA,SAASsgB,8BAA8BK,EAAallB,EAAQwJ,GAC1D0b,EAAYxc,OAASc,EACrB,IAAI/E,EAAYygB,EAAYzgB,UAC5B,OAASA,IAAcA,EAAUiE,OAASc,GAC1C,IAAK,IAAI2b,GAAW,EAAIhsE,EAAS+rE,EAAYxgB,OAAQ,OAASvrD,GAC3DA,EAAOisE,YAAc5b,EAEpB,QADC/E,EAAYtrD,EAAOsrD,aACGA,EAAU2gB,YAAc5b,GAC/C,KAAOrwD,EAAOsgB,MAEZ,QADEyrD,EAAc/rE,EAAOmsD,YAC2B,EAA1B4f,EAAYG,cAAoBF,GAAW,IACpED,EAAc/rE,EACdA,EAASA,EAAOurD,OACrB,OAAO,IAAMwgB,EAAYzrD,KACnBtgB,EAAS+rE,EAAY5f,UACvB6f,GACE,OAASnlB,IACPmlB,EAAW,GAAK9c,MAAMmB,GAGxB,QADC/E,GADAygB,EAAc/rE,EAAO0xD,eACGsa,IAEpBD,EAAYC,GAAY,CAACnlB,GAC1ByE,EAAU5zF,KAAKmvF,GAClBA,EAAOwJ,KAAc,UAAPA,GACjBrwD,GACA,IACN,CACA,SAAS6rE,uBAAuBE,GAC9B,GAAI,GAAKI,kBACP,MACIA,kBAAoB,EACrBC,sBAAwB,KACzB11G,MAAMwxF,yBAAuB,MAEjC,IAAK,IAAIloD,EAAS+rE,EAAYxgB,OAAQ,OAASvrD,GACpBA,GAAxB+rE,EAAc/rE,GAA+BurD,OAChD,OAAQ,IAAKwgB,EAAYzrD,IAAMyrD,EAAY5f,UAAY,IACzD,CACA,IAAIkgB,mBAAqB,CAAA,EACzB,SAASC,UAAUhsD,EAAKisD,EAAc/3G,EAAK67B,GACzC94B,KAAK+oD,IAAMA,EACX/oD,KAAK/C,IAAMA,EACX+C,KAAKy0F,QACHz0F,KAAK2uE,MACL3uE,KAAKg0F,OACLh0F,KAAK40F,UACL50F,KAAK+K,KACL/K,KAAKi1G,YACH,KACJj1G,KAAKuQ,MAAQ,EACbvQ,KAAKk1G,WAAal1G,KAAKijF,IAAM,KAC7BjjF,KAAKg1G,aAAeA,EACpBh1G,KAAK+8F,aACH/8F,KAAKm0F,cACLn0F,KAAKm1G,YACLn1G,KAAKo1G,cACH,KACJp1G,KAAK84B,KAAOA,EACZ94B,KAAKq1G,aAAer1G,KAAKm/B,MAAQ,EACjCn/B,KAAKs1G,UAAY,KACjBt1G,KAAK00G,WAAa10G,KAAKg4F,MAAQ,EAC/Bh4F,KAAK+zF,UAAY,IACnB,CACA,SAASwhB,qBAAqBxsD,EAAKisD,EAAc/3G,EAAK67B,GACpD,WAAWi8E,UAAUhsD,EAAKisD,EAAc/3G,EAAK67B,EAC/C,CACA,SAAS08E,gBAAgB1sB,GAEvB,UADAA,EAAYA,EAAU3qF,aACE2qF,EAAUM,iBACpC,CACA,SAASqsB,qBAAqBrtG,EAAS4sG,GACrC,IAAIzV,EAAiBn3F,EAAQ2rF,UAkC7B,OAjCA,OAASwL,IACHA,EAAiBgW,qBACjBntG,EAAQ2gD,IACRisD,EACA5sG,EAAQnL,IACRmL,EAAQ0wB,OAEMm8E,YAAc7sG,EAAQ6sG,YACrC1V,EAAex0F,KAAO3C,EAAQ2C,KAC9Bw0F,EAAe3K,UAAYxsF,EAAQwsF,UACnC2K,EAAexL,UAAY3rF,EAC3BA,EAAQ2rF,UAAYwL,IACnBA,EAAeyV,aAAeA,EAC/BzV,EAAex0F,KAAO3C,EAAQ2C,KAC9Bw0F,EAAepgE,MAAQ,EACvBogE,EAAe8V,aAAe,EAC9B9V,EAAe+V,UAAY,MAChC/V,EAAepgE,MAAwB,SAAhB/2B,EAAQ+2B,MAC/BogE,EAAemV,WAAatsG,EAAQssG,WACpCnV,EAAevH,MAAQ5vF,EAAQ4vF,MAC/BuH,EAAe5wB,MAAQvmE,EAAQumE,MAC/B4wB,EAAe6V,cAAgBhtG,EAAQgtG,cACvC7V,EAAepL,cAAgB/rF,EAAQ+rF,cACvCoL,EAAe4V,YAAc/sG,EAAQ+sG,YACrCH,EAAe5sG,EAAQ20F,aACvBwC,EAAexC,aACb,OAASiY,EACL,KACA,CAAEhd,MAAOgd,EAAahd,MAAO0d,aAAcV,EAAaU,cAC9DnW,EAAe9K,QAAUrsF,EAAQqsF,QACjC8K,EAAehvF,MAAQnI,EAAQmI,MAC/BgvF,EAAetc,IAAM76E,EAAQ66E,IAC7Bsc,EAAe2V,WAAa9sG,EAAQ8sG,WAC7B3V,CACT,CACA,SAASoW,oBAAoBpW,EAAgB3G,GAC3C2G,EAAepgE,OAAS,SACxB,IAAI/2B,EAAUm3F,EAAexL,UA4B7B,OA3BA,OAAS3rF,GACHm3F,EAAemV,WAAa,EAC7BnV,EAAevH,MAAQY,EACvB2G,EAAe5wB,MAAQ,KACvB4wB,EAAe8V,aAAe,EAC9B9V,EAAe6V,cAAgB,KAC/B7V,EAAepL,cAAgB,KAC/BoL,EAAe4V,YAAc,KAC7B5V,EAAexC,aAAe,KAC9BwC,EAAe3K,UAAY,OAC1B2K,EAAemV,WAAatsG,EAAQssG,WACrCnV,EAAevH,MAAQ5vF,EAAQ4vF,MAC/BuH,EAAe5wB,MAAQvmE,EAAQumE,MAC/B4wB,EAAe8V,aAAe,EAC9B9V,EAAe+V,UAAY,KAC3B/V,EAAe6V,cAAgBhtG,EAAQgtG,cACvC7V,EAAepL,cAAgB/rF,EAAQ+rF,cACvCoL,EAAe4V,YAAc/sG,EAAQ+sG,YACrC5V,EAAex0F,KAAO3C,EAAQ2C,KAC9B6tF,EAAcxwF,EAAQ20F,aACtBwC,EAAexC,aACd,OAASnE,EACL,KACA,CACEZ,MAAOY,EAAYZ,MACnB0d,aAAc9c,EAAY8c,eAE/BnW,CACT,CACA,SAASqW,4BACP7qG,EACA9N,EACA+3G,EACA9qB,EACApxD,EACAk/D,GAEA,IAAI6d,EAAW,EAEf,GADA3rB,EAAQn/E,EACJ,mBAAsBA,EAAMyqG,gBAAgBzqG,KAAU8qG,EAAW,WAC5D,iBAAoB9qG,EAC3B8qG,EAAWC,oBACT/qG,EACAiqG,EACApf,mBAAmBxtF,SAEjB,GACA,SAAW2C,GAAQ,SAAWA,GAAQ,SAAWA,EAC/C,GACA,OAEN+0C,EAAG,OAAQ/0C,GACT,KAAKkqF,oBACH,OACGlqF,EAAOwqG,qBAAqB,GAAIP,EAAc/3G,EAAK67B,IAC9Cm8E,YAAchgB,oBACnBlqF,EAAKitF,MAAQA,EACdjtF,EAEJ,KAAK83E,oBACH,OAAOkzB,wBAAwBf,EAAajoC,SAAUj0C,EAAMk/D,EAAO/6F,GACrE,KAAK2qF,uBACHiuB,EAAW,EACX/8E,GAAQ,GACR,MACF,KAAK+uD,oBACH,OACG98E,EAAOwqG,qBAAqB,GAAIP,EAAc/3G,EAAY,EAAP67B,IAC9Cm8E,YAAcptB,oBACnB98E,EAAKitF,MAAQA,EACdjtF,EAEJ,KAAKk9E,oBACH,OACGl9E,EAAOwqG,qBAAqB,GAAIP,EAAc/3G,EAAK67B,IAC9Cm8E,YAAchtB,oBACnBl9E,EAAKitF,MAAQA,EACdjtF,EAEJ,KAAKiqF,yBACH,OACGjqF,EAAOwqG,qBAAqB,GAAIP,EAAc/3G,EAAK67B,IAC9Cm8E,YAAcjgB,yBACnBjqF,EAAKitF,MAAQA,EACdjtF,EAEJ,QACE,GAAI,iBAAoBA,GAAQ,OAASA,EACvC,OAAQA,EAAKm4E,UACX,KAAK6R,oBACL,KAAKhN,mBACH8tB,EAAW,GACX,MAAM/1D,EACR,KAAKgoC,oBACH+tB,EAAW,EACX,MAAM/1D,EACR,KAAKkoC,uBACH6tB,EAAW,GACX,MAAM/1D,EACR,KAAKooC,gBACH2tB,EAAW,GACX,MAAM/1D,EACR,KAAKqoC,gBACH0tB,EAAW,GACX3rB,EAAQ,KACR,MAAMpqC,EAEZ+1D,EAAW,GACXb,EAAe71G,MACbwxF,yBAAuB,IAAK,OAAS5lF,EAAO,cAAgBA,EAAM,KAEpEm/E,EAAQ,KAMd,OAJAjtF,EAAMs4G,qBAAqBM,EAAUb,EAAc/3G,EAAK67B,IACpDm8E,YAAclqG,EAClB9N,EAAI8N,KAAOm/E,EACXjtF,EAAI+6F,MAAQA,EACL/6F,CACT,CACA,SAAS84G,wBAAwBC,EAAUl9E,EAAMk/D,EAAO/6F,GAGtD,OAFA+4G,EAAWT,qBAAqB,EAAGS,EAAU/4G,EAAK67B,IACzCk/D,MAAQA,EACVge,CACT,CACA,SAASC,oBAAoB71F,EAAS0Y,EAAMk/D,GAG1C,OAFA53E,EAAUm1F,qBAAqB,EAAGn1F,EAAS,KAAM0Y,IACzCk/D,MAAQA,EACT53E,CACT,CACA,SAAS81F,sBAAsBC,EAAQr9E,EAAMk/D,GAa3C,OAZAl/D,EAAOy8E,qBACL,EACA,OAASY,EAAOppC,SAAWopC,EAAOppC,SAAW,GAC7CopC,EAAOl5G,IACP67B,IAEGk/D,MAAQA,EACbl/D,EAAK87D,UAAY,CACfvD,cAAe8kB,EAAO9kB,cACtB+kB,gBAAiB,KACjB9kB,eAAgB6kB,EAAO7kB,gBAElBx4D,CACT,CACA,IAAIu9E,UAAY,GACdC,eAAiB,EACjBC,iBAAmB,KACnBC,cAAgB,EAChBC,QAAU,GACVC,aAAe,EACfC,oBAAsB,KACtBC,cAAgB,EAChBC,oBAAsB,GACxB,SAASC,aAAavX,EAAgBwX,GACpCV,UAAUC,kBAAoBE,cAC9BH,UAAUC,kBAAoBC,iBAC9BA,iBAAmBhX,EACnBiX,cAAgBO,CAClB,CACA,SAASC,WAAWzX,EAAgBwX,EAAexmG,GACjDkmG,QAAQC,gBAAkBE,cAC1BH,QAAQC,gBAAkBG,oBAC1BJ,QAAQC,gBAAkBC,oBAC1BA,oBAAsBpX,EACtB,IAAI0X,EAAuBL,cAC3BrX,EAAiBsX,oBACjB,IAAIK,EAAa,GAAKvf,MAAMsf,GAAwB,EACpDA,KAA0B,GAAKC,GAC/B3mG,GAAS,EACT,IAAItU,EAAS,GAAK07F,MAAMof,GAAiBG,EACzC,GAAI,GAAKj7G,EAAQ,CACf,IAAIk7G,EAAuBD,EAAcA,EAAa,EACtDj7G,GACEg7G,GACE,GAAKE,GAAwB,GAC/B76G,SAAS,IACX26G,IAAyBE,EACzBD,GAAcC,EACdP,cACG,GAAM,GAAKjf,MAAMof,GAAiBG,EAClC3mG,GAAS2mG,EACVD,EACFJ,oBAAsB56G,EAASsjG,CAChC,MACEqX,cACE,GAAK36G,EAAWsU,GAAS2mG,EAAcD,EACvCJ,oBAAsBtX,CAC7B,CACA,SAAS6X,uBAAuB7X,GAC9B,OAASA,EAAevL,SACrB8iB,aAAavX,EAAgB,GAAIyX,WAAWzX,EAAgB,EAAG,GACpE,CACA,SAAS8X,eAAe9X,GACtB,KAAOA,IAAmBgX,kBACvBA,iBAAmBF,YAAYC,gBAC7BD,UAAUC,gBAAkB,KAC5BE,cAAgBH,YAAYC,gBAC5BD,UAAUC,gBAAkB,KACjC,KAAO/W,IAAmBoX,qBACvBA,oBAAsBF,UAAUC,cAC9BD,QAAQC,cAAgB,KACxBG,oBAAsBJ,UAAUC,cAChCD,QAAQC,cAAgB,KACxBE,cAAgBH,UAAUC,cAC1BD,QAAQC,cAAgB,IAC/B,CACA,IAAIY,qBAAuB,KACzBC,uBAAyB,KACzBpW,aAAc,EACdqW,gBAAkB,KAClBC,wBAAyB,EACzBC,2BAA6Bv4G,MAAMwxF,yBAAuB,MAC5D,SAASgnB,yBAAyB9jB,GAGhC,MADA+jB,oBAAoBhE,2BADRz0G,MAAMwxF,yBAAuB,IAAK,KACQkD,IAChD6jB,0BACR,CACA,SAASG,6BAA6BhkB,GACpC,IAAIh0F,EAAWg0F,EAAMe,UACnB7pF,EAAO8oF,EAAM9oF,KACbo4E,EAAQ0Q,EAAMuhB,cAGhB,OAFAv1G,EAASu7F,qBAAuBvH,EAChCh0F,EAASw7F,kBAAoBlY,EACrBp4E,GACN,IAAK,SACH+sG,0BAA0B,SAAUj4G,GACpCi4G,0BAA0B,QAASj4G,GACnC,MACF,IAAK,SACL,IAAK,SACL,IAAK,QACHi4G,0BAA0B,OAAQj4G,GAClC,MACF,IAAK,QACL,IAAK,QACH,IAAKkL,EAAO,EAAGA,EAAOgtG,gBAAgB97G,OAAQ8O,IAC5C+sG,0BAA0BC,gBAAgBhtG,GAAOlL,GACnD,MACF,IAAK,SACHi4G,0BAA0B,QAASj4G,GACnC,MACF,IAAK,MACL,IAAK,QACL,IAAK,OACHi4G,0BAA0B,QAASj4G,GACnCi4G,0BAA0B,OAAQj4G,GAClC,MACF,IAAK,UACHi4G,0BAA0B,SAAUj4G,GACpC,MACF,IAAK,QACHi4G,0BAA0B,UAAWj4G,GACrCqhG,UACErhG,EACAsjF,EAAMv6E,MACNu6E,EAAMgK,aACNhK,EAAMod,QACNpd,EAAM6d,eACN7d,EAAMp4E,KACNo4E,EAAM9hF,MACN,GAEFsmD,MAAM9nD,GACN,MACF,IAAK,SACHi4G,0BAA0B,UAAWj4G,GACrC,MACF,IAAK,WACHi4G,0BAA0B,UAAWj4G,GACnCgiG,aAAahiG,EAAUsjF,EAAMv6E,MAAOu6E,EAAMgK,aAAchK,EAAMpW,UAC9DplB,MAAM9nD,GAGX,iBADDkL,EAAOo4E,EAAMpW,WAEX,iBAAoBhiE,GACpB,iBAAoBA,GACtBlL,EAASiiG,cAAgB,GAAK/2F,IAC9B,IAAOo4E,EAAM60B,0BACbC,sBAAsBp4G,EAASiiG,YAAa/2F,IACvC,MAAQo4E,EAAM+0B,UACZJ,0BAA0B,eAAgBj4G,GAC3Ci4G,0BAA0B,SAAUj4G,IACtC,MAAQsjF,EAAMg1B,UAAYL,0BAA0B,SAAUj4G,GAC9D,MAAQsjF,EAAMi1B,aACZN,0BAA0B,YAAaj4G,GACzC,MAAQsjF,EAAMk1B,UAAYx4G,EAASy4G,QAAU3tB,QAC5C9qF,GAAW,GACXA,GAAW,EAChBA,GAAY83G,yBAAyB9jB,EACvC,CACA,SAAS0kB,oBAAoB1kB,GAC3B,IAAKyjB,qBAAuBzjB,EAAMG,OAAQsjB,sBACxC,OAAQA,qBAAqBvuD,KAC3B,KAAK,EACL,QAEE,YADA0uD,wBAAyB,GAE3B,QACA,KAAM,EAEJ,YADAA,wBAAyB,GAE3B,QACEH,qBAAuBA,qBAAqBtjB,OAEpD,CACA,SAASwkB,kBAAkB3kB,GACzB,GAAIA,IAAUyjB,qBAAsB,OAAO,EAC3C,IAAKnW,YAAa,OAAOoX,oBAAoB1kB,GAASsN,aAAc,GAAK,EACzE,IACEsX,EADE1vD,EAAM8qC,EAAM9qC,IAYhB,IAVK0vD,EAAkB,IAAM1vD,GAAO,KAAOA,MACpC0vD,EAAkB,IAAM1vD,KAExB0vD,IACG,UAFLA,EAAkB5kB,EAAM9oF,OAEW,WAAa0tG,IAC7CC,qBAAqB7kB,EAAM9oF,KAAM8oF,EAAMuhB,gBAC7CqD,GAAmBA,GAErBA,GAAmBlB,wBAA0BI,yBAAyB9jB,GACtE0kB,oBAAoB1kB,GAChB,KAAO9qC,EAAK,CAGd,KADA8qC,EAAQ,QADRA,EAAQA,EAAMM,eACWN,EAAMO,WAAa,MAChC,MAAMj1F,MAAMwxF,yBAAuB,MAC/C7wC,EAAG,CAED,IADA+zC,EAAQA,EAAM0c,YACTxnD,EAAM,EAAG8qC,GAAS,CACrB,GAAI,IAAMA,EAAM/B,SACd,GAAqC,QAA/B2mB,EAAkB5kB,EAAMvzF,MAAkC,CAC9D,GAAI,IAAMyoD,EAAK,CACbwuD,uBAAyBoB,kBAAkB9kB,EAAM0c,aACjD,MAAMzwD,CACP,CACDiJ,GACD,KACE,MAAQ0vD,GACP,OAASA,GACT,OAASA,GACT1vD,IACN8qC,EAAQA,EAAM0c,WACf,CACDgH,uBAAyB,IAC1B,CACF,MACG,KAAKxuD,GACDA,EAAMwuD,uBACRqB,iBAAiB/kB,EAAM9oF,OACjB8oF,EAAQglB,4CACTA,4CAA8C,KAC9CtB,uBAAyB1jB,GACzB0jB,uBAAyBxuD,GAC7BwuD,uBAAyBD,qBACtBqB,kBAAkB9kB,EAAMe,UAAU2b,aAClC,KACV,OAAO,CACT,CACA,SAASuI,sBACPvB,uBAAyBD,qBAAuB,KAChDnW,aAAc,CAChB,CACA,SAAS4X,sCACP,IAAIC,EAAexB,gBASnB,OARA,OAASwB,IACN,OAASC,oCACLA,oCAAsCD,EACvCC,oCAAoC94G,KAAK/D,MACvC68G,oCACAD,GAELxB,gBAAkB,MACdwB,CACT,CACA,SAASpB,oBAAoBt+F,GAC3B,OAASk+F,gBACJA,gBAAkB,CAACl+F,GACpBk+F,gBAAgBr3G,KAAKmZ,EAC3B,CACA,IAAI4/F,YAAcxjB,aAAa,MAC7ByjB,0BAA4B,KAC5BC,sBAAwB,KAC1B,SAASC,aAAaC,EAAevwB,EAASwwB,GAC5Cp5G,KAAK+4G,YAAanwB,EAAQqE,eAC1BrE,EAAQqE,cAAgBmsB,CAC1B,CACA,SAASC,YAAYzwB,GACnBA,EAAQqE,cAAgB8rB,YAAY9wG,QACpCyT,IAAIq9F,YACN,CACA,SAASO,gCAAgChxE,EAAQmwD,EAAa8gB,GAC5D,KAAO,OAASjxE,GAAU,CACxB,IAAIsrD,EAAYtrD,EAAOsrD,UAOvB,IANCtrD,EAAOisE,WAAa9b,KAAiBA,GAChCnwD,EAAOisE,YAAc9b,EACvB,OAAS7E,IAAcA,EAAU2gB,YAAc9b,IAC/C,OAAS7E,IACRA,EAAU2gB,WAAa9b,KAAiBA,IACxC7E,EAAU2gB,YAAc9b,GACzBnwD,IAAWixE,EAAiB,MAChCjxE,EAASA,EAAOurD,MACjB,CACH,CACA,SAAS2lB,wBACPpa,EACAqa,EACAhhB,EACAihB,GAEA,IAAIhmB,EAAQ0L,EAAe5wB,MAE3B,IADA,OAASklB,IAAUA,EAAMG,OAASuL,GAC3B,OAAS1L,GAAS,CACvB,IAAI9lF,EAAO8lF,EAAMkJ,aACjB,GAAI,OAAShvF,EAAM,CACjB,IAAI+rG,EAAYjmB,EAAMllB,MACtB5gE,EAAOA,EAAK2nG,aACZ51D,EAAG,KAAO,OAAS/xC,GAAQ,CACzB,IAAIgsG,EAAahsG,EACjBA,EAAO8lF,EACP,IAAK,IAAI/3F,EAAI,EAAGA,EAAI89G,EAAS39G,OAAQH,IACnC,GAAIi+G,EAAWhxB,UAAY6wB,EAAS99G,GAAI,CACtCiS,EAAKiqF,OAASY,EAEd,QADAmhB,EAAahsG,EAAKgmF,aACMgmB,EAAW/hB,OAASY,GAC5C6gB,gCACE1rG,EAAKimF,OACL4E,EACA2G,GAEFsa,IAA6BC,EAAY,MACzC,MAAMh6D,CACP,CACH/xC,EAAOgsG,EAAWx5G,IACnB,CACP,MAAe,GAAA,KAAOszF,EAAM9qC,IAAK,CAE3B,GAAI,QADJ+wD,EAAYjmB,EAAMG,QACM,MAAM70F,MAAMwxF,yBAAuB,MAC3DmpB,EAAU9hB,OAASY,EAEnB,QADA7qF,EAAO+rG,EAAU/lB,aACChmF,EAAKiqF,OAASY,GAChC6gB,gCAAgCK,EAAWlhB,EAAa2G,GACxDua,EAAY,IAClB,MAAWA,EAAYjmB,EAAMllB,MACzB,GAAI,OAASmrC,EAAWA,EAAU9lB,OAASH,OAEzC,IAAKimB,EAAYjmB,EAAO,OAASimB,GAAa,CAC5C,GAAIA,IAAcva,EAAgB,CAChCua,EAAY,KACZ,KACD,CAED,GAAI,QADJjmB,EAAQimB,EAAUrlB,SACE,CAClBZ,EAAMG,OAAS8lB,EAAU9lB,OACzB8lB,EAAYjmB,EACZ,KACD,CACDimB,EAAYA,EAAU9lB,MACvB,CACHH,EAAQimB,CACT,CACH,CACA,SAASE,8BACP5xG,EACAm3F,EACA3G,EACAihB,GAEAzxG,EAAU,KACV,IACE,IAAIqgC,EAAS82D,EAAgB0a,GAA6B,EAC1D,OAASxxE,GAET,CACA,IAAKwxE,EACH,GAA0B,OAAfxxE,EAAOtJ,MAAiB86E,GAA6B,OACvD,GAAsB,OAAfxxE,EAAOtJ,MAAiB,MAC1C,GAAI,KAAOsJ,EAAOsgB,IAAK,CACrB,IAAImxD,EAAgBzxE,EAAOsrD,UAC3B,GAAI,OAASmmB,EAAe,MAAM/6G,MAAMwxF,yBAAuB,MAE/D,GAAI,QADJupB,EAAgBA,EAAc9E,eACF,CAC1B,IAAIrsB,EAAUtgD,EAAO19B,KACrB8kG,SAASpnE,EAAOusE,aAAapsG,MAAOsxG,EAActxG,SAC/C,OAASR,EAAUA,EAAQjI,KAAK4oF,GAAY3gF,EAAU,CAAC2gF,GAC3D,CACP,MAAW,GAAItgD,IAAWstD,6BAA6B3tF,QAAS,CAE1D,GAAI,QADJ8xG,EAAgBzxE,EAAOsrD,WACK,MAAM50F,MAAMwxF,yBAAuB,MAC/DupB,EAAc/lB,cAAcA,gBAC1B1rD,EAAO0rD,cAAcA,gBACpB,OAAS/rF,EACNA,EAAQjI,KAAKs2F,uBACZruF,EAAU,CAACquF,uBACnB,CACDhuD,EAASA,EAAOurD,MACjB,CACD,OAAS5rF,GACPuxG,wBACEpa,EACAn3F,EACAwwF,EACAihB,GAEJta,EAAepgE,OAAS,MAC1B,CACA,SAASg7E,sBAAsBC,GAC7B,IACEA,EAAsBA,EAAoB1E,aAC1C,OAAS0E,GAET,CACA,IACGvK,SACCuK,EAAoBrxB,QAAQqE,cAC5BgtB,EAAoBC,eAGtB,OAAO,EACTD,EAAsBA,EAAoB75G,IAC3C,CACD,OAAO,CACT,CACA,SAAS+5G,qBAAqB/a,GAC5B4Z,0BAA4B5Z,EAC5B6Z,sBAAwB,KAExB,QADA7Z,EAAiBA,EAAexC,gBACJwC,EAAemW,aAAe,KAC5D,CACA,SAAS6E,YAAYxxB,GACnB,OAAOyxB,uBAAuBrB,0BAA2BpwB,EAC3D,CACA,SAAS0xB,gCAAgCC,EAAU3xB,GAEjD,OADA,OAASowB,2BAA6BmB,qBAAqBI,GACpDF,uBAAuBE,EAAU3xB,EAC1C,CACA,SAASyxB,uBAAuBE,EAAU3xB,GACxC,IAAIngF,EAAQmgF,EAAQqE,cAEpB,GADArE,EAAU,CAAEA,QAASA,EAASsxB,cAAezxG,EAAOrI,KAAM,MACtD,OAAS64G,sBAAuB,CAClC,GAAI,OAASsB,EAAU,MAAMv7G,MAAMwxF,yBAAuB,MAC1DyoB,sBAAwBrwB,EACxB2xB,EAAS3d,aAAe,CAAE/E,MAAO,EAAG0d,aAAc3sB,GAClD2xB,EAASv7E,OAAS,MACnB,MAAMi6E,sBAAwBA,sBAAsB74G,KAAOwoF,EAC5D,OAAOngF,CACT,CACA,IAAI+xG,qBACA,oBAAuBC,gBACnBA,gBACA,WACE,IAAI5vG,EAAY,GACd6vG,EAAU76G,KAAK66G,OAAS,CACtBC,SAAS,EACTzW,iBAAkB,SAAUt5F,EAAM8S,GAChC7S,EAAU7K,KAAK0d,EAChB,GAEL7d,KAAK+6G,MAAQ,WACXF,EAAOC,SAAU,EACjB9vG,EAAU+8B,QAAQ,SAAUlqB,GAC1B,OAAOA,GACrB,EACA,CACS,EACPm9F,mBAAqBvnB,UAAUpM,0BAC/B4zB,eAAiBxnB,UAAU/M,wBAC3Bw0B,aAAe,CACbh4B,SAAU6E,mBACVyF,SAAU,KACVD,SAAU,KACVH,cAAe,KACfC,eAAgB,KAChBC,aAAc,GAElB,SAAS6tB,cACP,MAAO,CACLC,WAAY,IAAIT,qBAChBr6G,KAAM,IAAIi8F,IACV8e,SAAU,EAEd,CACA,SAASC,aAAavuB,GACpBA,EAAMsuB,WACN,IAAMtuB,EAAMsuB,UACVL,mBAAmBC,eAAgB,WACjCluB,EAAMquB,WAAWL,OACvB,EACA,CACA,IAAIQ,0BAA4B,KAC9BC,6BAA+B,EAC/BC,qBAAuB,EACvBC,+BAAiC,KACnC,SAASC,oBAAoB5I,EAAYl6F,GACvC,GAAI,OAAS0iG,0BAA2B,CACtC,IAAIK,EAAsBL,0BAA4B,GACtDC,6BAA+B,EAC/BC,qBAAuBI,wBACvBH,+BAAiC,CAC/BxiG,OAAQ,UACRtQ,WAAO,EACPgQ,KAAM,SAAUF,GACdkjG,EAAmBz7G,KAAKuY,EACzB,EAEJ,CAGD,OAFA8iG,+BACA3iG,EAASD,KAAKkjG,0BAA2BA,2BAClCjjG,CACT,CACA,SAASijG,4BACP,GACE,MAAQN,8BACR,OAASD,0BACT,CACA,OAASG,iCACNA,+BAA+BxiG,OAAS,aAC3C,IAAIlO,EAAYuwG,0BAChBA,0BAA4B,KAC5BE,qBAAuB,EACvBC,+BAAiC,KACjC,IAAK,IAAI5/G,EAAI,EAAGA,EAAIkP,EAAU/O,OAAQH,KAAK,EAAIkP,EAAUlP,KAC1D,CACH,CACA,SAASigH,mBAAmBljG,EAAUG,GACpC,IAAIhO,EAAY,GACdgxG,EAAuB,CACrB9iG,OAAQ,UACRtQ,MAAO,KACPwQ,OAAQ,KACRR,KAAM,SAAUF,GACd1N,EAAU7K,KAAKuY,EAChB,GAeL,OAbAG,EAASD,KACP,WACEojG,EAAqB9iG,OAAS,YAC9B8iG,EAAqBpzG,MAAQoQ,EAC7B,IAAK,IAAIld,EAAI,EAAGA,EAAIkP,EAAU/O,OAAQH,KAAK,EAAIkP,EAAUlP,IAAIkd,EAC9D,EACD,SAAUM,GAGR,IAFA0iG,EAAqB9iG,OAAS,WAC9B8iG,EAAqB5iG,OAASE,EACzBA,EAAQ,EAAGA,EAAQtO,EAAU/O,OAAQqd,KACxC,EAAItO,EAAUsO,SAAQ,EACzB,GAEI0iG,CACT,CACA,IAAIC,4BAA8BtyB,qBAAqBI,EACvDJ,qBAAqBI,EAAI,SAAUgpB,EAAYv6F,GAC7C,iBAAoBA,GAClB,OAASA,GACT,mBAAsBA,EAAYI,MAClC+iG,oBAAoB5I,EAAYv6F,GAClC,OAASyjG,6BACPA,4BAA4BlJ,EAAYv6F,EAC5C,EACA,IAAI0jG,aAAexmB,aAAa,MAChC,SAASymB,oBACP,IAAIC,EAAiCF,aAAa9zG,QAClD,cAAgBg0G,EACZA,EACAC,mBAAmBC,WACzB,CACA,SAASC,eAAeC,EAAyBC,GAE3Ct8G,KAAK+7G,aADT,OAASO,EACcP,aAAa9zG,QACbq0G,EAAcC,KACvC,CACA,SAASC,oBACP,IAAIC,EAAgBT,oBACpB,OAAW,OAAKS,EACZ,KACA,CAAEn0E,OAAQyyE,aAAa9tB,cAAesvB,KAAME,EAClD,CACA,IAAIC,kBAAoB19G,MAAMwxF,yBAAuB,MACnDmsB,yBAA2B39G,MAAMwxF,yBAAuB,MACxDosB,wBAA0B59G,MAAMwxF,yBAAuB,MACvDqsB,4BAA8B,CAAEpkG,KAAM,WAAY,GACpD,SAASqkG,mBAAmBpkG,GAE1B,MAAO,eADPA,EAAWA,EAASK,SACe,aAAeL,CACpD,CACA,SAASqkG,SACT,CAAA,SAASC,kBAAkBC,EAAevkG,EAAUtI,GAKlD,YAHA,KADAA,EAAQ6sG,EAAc7sG,IAElB6sG,EAAcj9G,KAAK0Y,GACnBtI,IAAUsI,IAAaA,EAASD,KAAKskG,OAAQA,QAAUrkG,EAAWtI,GAC9DsI,EAASK,QACf,IAAK,YACH,OAAOL,EAASjQ,MAClB,IAAK,WACH,MAEEy0G,8BADED,EAAgBvkG,EAASO,QAE3BgkG,EAEJ,QACE,GAAI,iBAAoBvkG,EAASK,OAAQL,EAASD,KAAKskG,OAAQA,YAC1D,CAEH,GAAI,QADJE,EAAgBf,qBACc,IAAMe,EAAcpjB,oBAChD,MAAM76F,MAAMwxF,yBAAuB,OACrCysB,EAAgBvkG,GACFK,OAAS,UACvBkkG,EAAcxkG,KACZ,SAAUiyE,GACR,GAAI,YAAchyE,EAASK,OAAQ,CACjC,IAAIokG,EAAoBzkG,EACxBykG,EAAkBpkG,OAAS,YAC3BokG,EAAkB10G,MAAQiiF,CAC3B,CACF,EACD,SAAUvxE,GACR,GAAI,YAAcT,EAASK,OAAQ,CACjC,IAAIqkG,EAAmB1kG,EACvB0kG,EAAiBrkG,OAAS,WAC1BqkG,EAAiBnkG,OAASE,CAC3B,CACF,EAEJ,CACD,OAAQT,EAASK,QACf,IAAK,YACH,OAAOL,EAASjQ,MAClB,IAAK,WACH,MAEEy0G,8BADED,EAAgBvkG,EAASO,QAE3BgkG,EAIN,MADAI,kBAAoB3kG,EACdgkG,kBAEZ,CACA,IAAIW,kBAAoB,KACxB,SAASC,uBACP,GAAI,OAASD,kBAAmB,MAAMr+G,MAAMwxF,yBAAuB,MACnE,IAAI93E,EAAW2kG,kBAEf,OADAA,kBAAoB,KACb3kG,CACT,CACA,SAASwkG,8BAA8BK,GACrC,GACEA,IAAmBb,mBACnBa,IAAmBX,wBAEnB,MAAM59G,MAAMwxF,yBAAuB,KACvC,CACA,IAAIgtB,gBAAiB,EACrB,SAASC,sBAAsB/pB,GAC7BA,EAAMshB,YAAc,CAClB0I,UAAWhqB,EAAMM,cACjB2pB,gBAAiB,KACjBC,eAAgB,KAChBC,OAAQ,CAAEt0F,QAAS,KAAMsuE,MAAO,EAAGimB,gBAAiB,MACpDC,UAAW,KAEf,CACA,SAASC,iBAAiB/1G,EAASm3F,GACjCn3F,EAAUA,EAAQ+sG,YAClB5V,EAAe4V,cAAgB/sG,IAC5Bm3F,EAAe4V,YAAc,CAC5B0I,UAAWz1G,EAAQy1G,UACnBC,gBAAiB11G,EAAQ01G,gBACzBC,eAAgB31G,EAAQ21G,eACxBC,OAAQ51G,EAAQ41G,OAChBE,UAAW,MAEjB,CACA,SAASE,aAAatlB,GACpB,MAAO,CAAEA,KAAMA,EAAM/vC,IAAK,EAAGwiC,QAAS,KAAMnoF,SAAU,KAAM7C,KAAM,KACpE,CACA,SAAS89G,cAAcxqB,EAAOvE,EAAQwJ,GACpC,IAAIqc,EAActhB,EAAMshB,YACxB,GAAI,OAASA,EAAa,OAAW,KAErC,GADAA,EAAcA,EAAY6I,OACI,EAAnBM,iBAAuB,CAChC,IAAI50F,EAAUyrF,EAAYzrF,QAO1B,OANA,OAASA,EACJ4lE,EAAO/uF,KAAO+uF,GACbA,EAAO/uF,KAAOmpB,EAAQnpB,KAAQmpB,EAAQnpB,KAAO+uF,GACnD6lB,EAAYzrF,QAAU4lE,EACtBA,EAASglB,uBAAuBzgB,GAChCsgB,8BAA8BtgB,EAAO,KAAMiF,GACpCxJ,CACR,CAED,OADA8kB,gBAAgBvgB,EAAOshB,EAAa7lB,EAAQwJ,GACrCwb,uBAAuBzgB,EAChC,CACA,SAAS0qB,oBAAoBpiF,EAAM03D,EAAOiF,GAExC,GAAI,QADJjF,EAAQA,EAAMshB,eACUthB,EAAQA,EAAMmqB,OAAuB,QAAPllB,GAAkB,CACtE,IAAI0lB,EAAa3qB,EAAMmE,MAEvBc,GADA0lB,GAAcriF,EAAKk8D,aAEnBxE,EAAMmE,MAAQc,EACd0B,kBAAkBr+D,EAAM28D,EACzB,CACH,CACA,SAAS2lB,sBAAsBlf,EAAgBmf,GAC7C,IAAI5nG,EAAQyoF,EAAe4V,YACzB/sG,EAAUm3F,EAAexL,UAC3B,GACE,OAAS3rF,GACyB0O,KAAhC1O,EAAUA,EAAQ+sG,aACpB,CACA,IAAIwJ,EAAW,KACbC,EAAU,KAEZ,GAAI,QADJ9nG,EAAQA,EAAMgnG,iBACM,CAClB,EAAG,CACD,IAAIn0E,EAAQ,CACVmvD,KAAMhiF,EAAMgiF,KACZ/vC,IAAKjyC,EAAMiyC,IACXwiC,QAASz0E,EAAMy0E,QACfnoF,SAAU,KACV7C,KAAM,MAER,OAASq+G,EACJD,EAAWC,EAAUj1E,EACrBi1E,EAAUA,EAAQr+G,KAAOopC,EAC9B7yB,EAAQA,EAAMvW,IACtB,OAAe,OAASuW,GAClB,OAAS8nG,EACJD,EAAWC,EAAUF,EACrBE,EAAUA,EAAQr+G,KAAOm+G,CACpC,MAAWC,EAAWC,EAAUF,EAS5B,OARA5nG,EAAQ,CACN+mG,UAAWz1G,EAAQy1G,UACnBC,gBAAiBa,EACjBZ,eAAgBa,EAChBZ,OAAQ51G,EAAQ41G,OAChBE,UAAW91G,EAAQ81G,gBAErB3e,EAAe4V,YAAcr+F,EAE9B,CAED,QADAyoF,EAAiBzoF,EAAMinG,gBAElBjnG,EAAMgnG,gBAAkBY,EACxBnf,EAAeh/F,KAAOm+G,EAC3B5nG,EAAMinG,eAAiBW,CACzB,CACA,IAAIG,iCAAkC,EACtC,SAASC,8CACP,GAAID,gCAAiC,CAEnC,GAAI,OAD0BnD,+BACQ,MADRA,8BAE/B,CACH,CACA,SAASqD,mBACPC,EACA77B,EACA87B,EACArmB,GAEAimB,iCAAkC,EAClC,IAAI/nG,EAAQkoG,EAAwB7J,YACpCwI,gBAAiB,EACjB,IAAIG,EAAkBhnG,EAAMgnG,gBAC1BC,EAAiBjnG,EAAMinG,eACvBmB,EAAepoG,EAAMknG,OAAOt0F,QAC9B,GAAI,OAASw1F,EAAc,CACzBpoG,EAAMknG,OAAOt0F,QAAU,KACvB,IAAIy1F,EAAoBD,EACtBE,EAAqBD,EAAkB5+G,KACzC4+G,EAAkB5+G,KAAO,KACzB,OAASw9G,EACJD,EAAkBsB,EAClBrB,EAAex9G,KAAO6+G,EAC3BrB,EAAiBoB,EACjB,IAAI/2G,EAAU42G,EAAwBjrB,UACtC,OAAS3rF,KAEN82G,GADC92G,EAAUA,EAAQ+sG,aACI4I,kBACPA,IACd,OAASmB,EACL92G,EAAQ01G,gBAAkBsB,EAC1BF,EAAa3+G,KAAO6+G,EACxBh3G,EAAQ21G,eAAiBoB,GAC/B,CACD,GAAI,OAASrB,EAAiB,CAC5B,IAAIlR,EAAW91F,EAAM+mG,UAIrB,IAHAE,EAAiB,EACjB31G,EAAUg3G,EAAqBD,EAAoB,KACnDD,EAAepB,IACZ,CACD,IAAIzkB,GAAkC,UAArB6lB,EAAapmB,KAC5BumB,EAAiBhmB,IAAe6lB,EAAapmB,KAC/C,GACEumB,GACKC,8BAAgCjmB,KAAgBA,GAChDT,EAAcS,KAAgBA,EACnC,CACA,IAAMA,GACJA,IAAeoiB,uBACdoD,iCAAkC,GACrC,OAASz2G,IACNA,EAAUA,EAAQ7H,KACjB,CACEu4F,KAAM,EACN/vC,IAAKm2D,EAAan2D,IAClBwiC,QAAS2zB,EAAa3zB,QACtBnoF,SAAU,KACV7C,KAAM,OAEZu/C,EAAG,CACD,IAAIy/C,EAAiByf,EACnB1vB,EAAS4vB,EACX7lB,EAAalW,EACb,IAAItjF,EAAWo/G,EACf,OAAQ3vB,EAAOvmC,KACb,KAAM,EAEJ,GAAI,mBADJw2C,EAAiBjQ,EAAO/D,SACkB,CACxCqhB,EAAWrN,EAAerjG,KAAK2D,EAAU+sG,EAAUvT,GACnD,MAAMv5C,CACP,CACD8sD,EAAWrN,EACX,MAAMz/C,EACR,KAAK,EACHy/C,EAAepgE,OAAiC,MAAxBogE,EAAepgE,MAAkB,IAC3D,KAAK,EAMH,GAAI,OAJJk6D,EACE,mBAFFkG,EAAiBjQ,EAAO/D,SAGlBgU,EAAerjG,KAAK2D,EAAU+sG,EAAUvT,GACxCkG,GAC4C,MAAMz/C,EACxD8sD,EAAWtnF,OAAO,CAAE,EAAEsnF,EAAUvT,GAChC,MAAMv5C,EACR,KAAK,EACH69D,gBAAiB,EAEtB,CAED,QADAtkB,EAAa6lB,EAAa97G,YAEtB47G,EAAwB7/E,OAAS,GACnCkgF,IAAmBL,EAAwB7/E,OAAS,MAEpD,QADCkgF,EAAiBvoG,EAAMonG,WAEnBpnG,EAAMonG,UAAY,CAAC7kB,GACpBgmB,EAAel/G,KAAKk5F,GAC3B,MACEgmB,EAAiB,CAChBvmB,KAAMO,EACNtwC,IAAKm2D,EAAan2D,IAClBwiC,QAAS2zB,EAAa3zB,QACtBnoF,SAAU87G,EAAa97G,SACvB7C,KAAM,MAEN,OAAS6H,GACHg3G,EAAqBh3G,EAAUi3G,EAChCF,EAAoBvS,GACpBxkG,EAAUA,EAAQ7H,KAAO8+G,EAC7BtB,GAAkB1kB,EAEvB,GAAI,QADJ6lB,EAAeA,EAAa3+G,MAE1B,IAA4C,QAAtC2+G,EAAepoG,EAAMknG,OAAOt0F,SAChC,MAGGw1F,GADFG,EAAiBH,GACe3+G,KAC9B8+G,EAAe9+G,KAAO,KACtBuW,EAAMinG,eAAiBsB,EACvBvoG,EAAMknG,OAAOt0F,QAAU,IAAK,CACpC,CACD,OAASthB,IAAY+2G,EAAoBvS,GACzC91F,EAAM+mG,UAAYsB,EAClBroG,EAAMgnG,gBAAkBsB,EACxBtoG,EAAMinG,eAAiB31G,EACvB,OAAS01G,IAAoBhnG,EAAMknG,OAAOhmB,MAAQ,GAClDunB,gCAAkCxB,EAClCiB,EAAwBhnB,MAAQ+lB,EAChCiB,EAAwB7qB,cAAgByY,CACzC,CACH,CACA,SAAS4S,aAAap8G,EAAU2lF,GAC9B,GAAI,mBAAsB3lF,EACxB,MAAMjE,MAAMwxF,yBAAuB,IAAKvtF,IAC1CA,EAASlH,KAAK6sF,EAChB,CACA,SAAS02B,gBAAgBtK,EAAapsB,GACpC,IAAIm1B,EAAY/I,EAAY+I,UAC5B,GAAI,OAASA,EACX,IACE/I,EAAY+I,UAAY,KAAM/I,EAAc,EAC5CA,EAAc+I,EAAUjiH,OACxBk5G,IAEAqK,aAAatB,EAAU/I,GAAcpsB,EAC3C,CACA,IAAI22B,6BAA+BhqB,aAAa,MAC9CiqB,+BAAiCjqB,aAAa,GAChD,SAASkqB,kBAAkB/rB,EAAO9K,GAEhC5oF,KAAKw/G,+BADL9rB,EAAQgsB,sBAER1/G,KAAKu/G,6BAA8B32B,GACnC82B,qBAAuBhsB,EAAQ9K,EAAQ+2B,SACzC,CACA,SAASC,4BACP5/G,KAAKw/G,+BAAgCE,sBACrC1/G,KAAKu/G,6BAA8BA,6BAA6Bt3G,QAClE,CACA,SAAS43G,mBACPH,qBAAuBF,+BAA+Bv3G,QACtDyT,IAAI6jG,8BACJ7jG,IAAI8jG,+BACN,CACA,IAAI/mB,YAAc,EAChBqnB,wBAA0B,KAC1BC,YAAc,KACdC,mBAAqB,KACrBC,8BAA+B,EAC/BC,4CAA6C,EAC7CC,qCAAsC,EACtCC,eAAiB,EACjBC,uBAAyB,EACzBC,gBAAkB,KAClBC,sBAAwB,EAC1B,SAASC,wBACP,MAAMxhH,MAAMwxF,yBAAuB,KACrC,CACA,SAASiwB,mBAAmBC,EAAUC,GACpC,GAAI,OAASA,EAAU,OAAO,EAC9B,IAAK,IAAIhlH,EAAI,EAAGA,EAAIglH,EAAS7kH,QAAUH,EAAI+kH,EAAS5kH,OAAQH,IAC1D,IAAK+zG,SAASgR,EAAS/kH,GAAIglH,EAAShlH,IAAK,OAAO,EAClD,OAAO,CACT,CACA,SAASilH,gBACP34G,EACAm3F,EACAzW,EACA3F,EACA69B,EACAC,GAsBA,OApBAroB,YAAcqoB,EACdhB,wBAA0B1gB,EAC1BA,EAAepL,cAAgB,KAC/BoL,EAAe4V,YAAc,KAC7B5V,EAAevH,MAAQ,EACvBrO,qBAAqBC,EACnB,OAASxhF,GAAW,OAASA,EAAQ+rF,cACjC+sB,uBACAC,wBACNb,qCAAsC,EACtCW,EAAkBn4B,EAAU3F,EAAO69B,GACnCV,qCAAsC,EACtCD,6CACGY,EAAkBG,qBACjB7hB,EACAzW,EACA3F,EACA69B,IAEJK,qBAAqBj5G,GACd64G,CACT,CACA,SAASI,qBAAqBj5G,GAC5BuhF,qBAAqBC,EAAI03B,sBACzB,IAAIC,EAAuB,OAASrB,aAAe,OAASA,YAAY3/G,KAMxE,GALAq4F,YAAc,EACdunB,mBAAqBD,YAAcD,wBAA0B,KAC7DG,8BAA+B,EAC/BI,uBAAyB,EACzBC,gBAAkB,KACdc,EAAsB,MAAMpiH,MAAMwxF,yBAAuB,MAC7D,OAASvoF,GACPo5G,kBAEA,QADEp5G,EAAUA,EAAQ20F,eAElBod,sBAAsB/xG,KACrBo5G,kBAAmB,EAC1B,CACA,SAASJ,qBAAqB7hB,EAAgBzW,EAAW3F,EAAO69B,GAC9Df,wBAA0B1gB,EAC1B,IAAIkiB,EAAoB,EACxB,EAAG,CAID,GAHApB,6CAA+CI,gBAAkB,MACjED,uBAAyB,EACzBH,4CAA6C,EACzC,IAAMoB,EAAmB,MAAMtiH,MAAMwxF,yBAAuB,MAGhE,GAFA8wB,GAAqB,EACrBtB,mBAAqBD,YAAc,KAC/B,MAAQ3gB,EAAe4V,YAAa,CACtC,IAAIpoC,EAAWwyB,EAAe4V,YAC9BpoC,EAAS20C,WAAa,KACtB30C,EAAS40C,OAAS,KAClB50C,EAAS60C,OAAS,KAClB,MAAQ70C,EAAS80C,YAAc90C,EAAS80C,UAAUtxG,MAAQ,EAC3D,CACDo5E,qBAAqBC,EAAIk4B,0BACzB/0C,EAAW+b,EAAU3F,EAAO69B,EAC7B,OAAQX,4CACT,OAAOtzC,CACT,CACA,SAASg1C,+BACP,IAAIxyB,EAAa5F,qBAAqBC,EACpCo4B,EAAgBzyB,EAAWY,WAAW,GAQxC,OAPA6xB,EACE,mBAAsBA,EAAcppG,KAChCqpG,YAAYD,GACZA,EACNzyB,EAAaA,EAAWY,WAAW,IAClC,OAAS+vB,YAAcA,YAAY/rB,cAAgB,QAAU5E,IAC3D0wB,wBAAwB9gF,OAAS,MAC7B6iF,CACT,CACA,SAASE,uBACP,IAAIC,EAAkB,IAAM5B,eAE5B,OADAA,eAAiB,EACV4B,CACT,CACA,SAASC,aAAah6G,EAASm3F,EAAgBvH,GAC7CuH,EAAe4V,YAAc/sG,EAAQ+sG,YACrC5V,EAAepgE,QAAU,KACzB/2B,EAAQ4vF,QAAUA,CACpB,CACA,SAASqqB,mBAAmB9iB,GAC1B,GAAI6gB,6BAA8B,CAChC,IACE7gB,EAAiBA,EAAepL,cAChC,OAASoL,GAET,CACA,IAAIzoF,EAAQyoF,EAAezoF,MAC3B,OAASA,IAAUA,EAAM4S,QAAU,MACnC61E,EAAiBA,EAAeh/F,IACjC,CACD6/G,8BAA+B,CAChC,CACDxnB,YAAc,EACdunB,mBAAqBD,YAAcD,wBAA0B,KAC7DI,4CAA6C,EAC7CG,uBAAyBD,eAAiB,EAC1CE,gBAAkB,IACpB,CACA,SAAS6B,0BACP,IAAIC,EAAO,CACTpuB,cAAe,KACf0pB,UAAW,KACX2E,UAAW,KACX1rG,MAAO,KACPvW,KAAM,MAKR,OAHA,OAAS4/G,mBACJF,wBAAwB9rB,cAAgBgsB,mBAAqBoC,EAC7DpC,mBAAqBA,mBAAmB5/G,KAAOgiH,EAC7CpC,kBACT,CACA,SAASsC,2BACP,GAAI,OAASvC,YAAa,CACxB,IAAIwC,EAAkBzC,wBAAwBlsB,UAC9C2uB,EACE,OAASA,EAAkBA,EAAgBvuB,cAAgB,IACjE,MAASuuB,EAAkBxC,YAAY3/G,KACrC,IAAIoiH,EACF,OAASxC,mBACLF,wBAAwB9rB,cACxBgsB,mBAAmB5/G,KACzB,GAAI,OAASoiH,EACVxC,mBAAqBwC,EACnBzC,YAAcwC,MACd,CACH,GAAI,OAASA,EAAiB,CAC5B,GAAI,OAASzC,wBAAwBlsB,UACnC,MAAM50F,MAAMwxF,yBAAuB,MACrC,MAAMxxF,MAAMwxF,yBAAuB,KACpC,CAED+xB,EAAkB,CAChBvuB,eAFF+rB,YAAcwC,GAEevuB,cAC3B0pB,UAAWqC,YAAYrC,UACvB2E,UAAWtC,YAAYsC,UACvB1rG,MAAOopG,YAAYppG,MACnBvW,KAAM,MAER,OAAS4/G,mBACJF,wBAAwB9rB,cAAgBgsB,mBACvCuC,EACDvC,mBAAqBA,mBAAmB5/G,KAAOmiH,CACrD,CACD,OAAOvC,kBACT,CACA,SAASyC,qCACP,MAAO,CAAElB,WAAY,KAAMC,OAAQ,KAAMC,OAAQ,KAAMC,UAAW,KACpE,CACA,SAASI,YAAYppG,GACnB,IAAItI,EAAQiwG,uBAcZ,OAbAA,wBAA0B,EAC1B,OAASC,kBAAoBA,gBAAkB,IAC/C5nG,EAAWskG,kBAAkBsD,gBAAiB5nG,EAAUtI,GACxDA,EAAQ0vG,wBACR,QACG,OAASE,mBACN5vG,EAAM4jF,cACNgsB,mBAAmB5/G,QACrBgQ,EAAQA,EAAMwjF,UACfpK,qBAAqBC,EACpB,OAASr5E,GAAS,OAASA,EAAM4jF,cAC7B+sB,uBACAC,yBACDtoG,CACT,CACA,SAAS21E,IAAIC,GACX,GAAI,OAASA,GAAU,iBAAoBA,EAAQ,CACjD,GAAI,mBAAsBA,EAAO71E,KAAM,OAAOqpG,YAAYxzB,GAC1D,GAAIA,EAAOvL,WAAa6E,mBAAoB,OAAOwyB,YAAY9rB,EAChE,CACD,MAAMtvF,MAAMwxF,yBAAuB,IAAKl2E,OAAOg0E,IACjD,CACA,SAAS3B,aAAapvF,GACpB,IAAImkH,EAAY,KACd1M,EAAc8K,wBAAwB9K,YAExC,GADA,OAASA,IAAgB0M,EAAY1M,EAAY0M,WAC7C,MAAQA,EAAW,CACrB,IAAIz5G,EAAU63G,wBAAwBlsB,UACtC,OAAS3rF,IAEP,QADEA,EAAUA,EAAQ+sG,eAGlB,OADE/sG,EAAUA,EAAQy5G,aAEjBA,EAAY,CACXvhH,KAAM8H,EAAQ9H,KAAKi0C,IAAI,SAAUhiC,GAC/B,OAAOA,EAAM1O,OAC3B,GACY0M,MAAO,KAEhB,CAOD,GANA,MAAQsxG,IAAcA,EAAY,CAAEvhH,KAAM,GAAIiQ,MAAO,IACrD,OAAS4kG,IACLA,EAAcyN,qCACf3C,wBAAwB9K,YAAcA,GACzCA,EAAY0M,UAAYA,OAEpB,KADJ1M,EAAc0M,EAAUvhH,KAAKuhH,EAAUtxG,QAErC,IACE4kG,EAAc0M,EAAUvhH,KAAKuhH,EAAUtxG,OAASpU,MAAMuB,GAAO0K,EAAU,EACvEA,EAAU1K,EACV0K,IAEA+sG,EAAY/sG,GAAW8sF,0BAE3B,OADA2sB,EAAUtxG,QACH4kG,CACT,CACA,SAAS0N,kBAAkB5/G,EAAO4/B,GAChC,MAAO,mBAAsBA,EAASA,EAAO5/B,GAAS4/B,CACxD,CACA,SAASigF,cAAc/yB,GAErB,OAAOgzB,kBADIN,2BACoBvC,YAAanwB,EAC9C,CACA,SAASgzB,kBAAkBR,EAAMn6G,EAAS2nF,GACxC,IAAIj5E,EAAQyrG,EAAKzrG,MACjB,GAAI,OAASA,EAAO,MAAM3X,MAAMwxF,yBAAuB,MACvD75E,EAAMksG,oBAAsBjzB,EAC5B,IAAIyyB,EAAYD,EAAKC,UACnBtD,EAAepoG,EAAM4S,QACvB,GAAI,OAASw1F,EAAc,CACzB,GAAI,OAASsD,EAAW,CACtB,IAAIS,EAAYT,EAAUjiH,KAC1BiiH,EAAUjiH,KAAO2+G,EAAa3+G,KAC9B2+G,EAAa3+G,KAAO0iH,CACrB,CACD76G,EAAQo6G,UAAYA,EAAYtD,EAChCpoG,EAAM4S,QAAU,IACjB,CAED,GADAw1F,EAAeqD,EAAK1E,UAChB,OAAS2E,EAAWD,EAAKpuB,cAAgB+qB,MACxC,CAEH,IAAIgE,EAAqBD,EAAY,KACnCE,EAAmB,KACnB7zB,EAHFlnF,EAAUo6G,EAAUjiH,KAIlB6iH,GAAqC,EACvC,EAAG,CACD,IAAI/pB,GAA4B,UAAf/J,EAAOwJ,KACxB,GACEO,IAAe/J,EAAOwJ,MACjBwmB,8BAAgCjmB,KAAgBA,GAChDT,YAAcS,KAAgBA,EACnC,CACA,IAAIgqB,EAAa/zB,EAAO+zB,WACxB,GAAI,IAAMA,EACR,OAASF,IACNA,EAAmBA,EAAiB5iH,KACnC,CACEu4F,KAAM,EACNuqB,WAAY,EACZxgF,OAAQysD,EAAOzsD,OACfygF,cAAeh0B,EAAOg0B,cACtBC,WAAYj0B,EAAOi0B,WACnBhjH,KAAM,OAEV84F,IAAeoiB,uBACZ2H,GAAqC,YAClCxqB,YAAcyqB,KAAgBA,EAAY,CAClD/zB,EAASA,EAAO/uF,KAChB8iH,IAAe5H,uBACZ2H,GAAqC,GACxC,QACD,CACE/pB,EAAa,CACZP,KAAM,EACNuqB,WAAY/zB,EAAO+zB,WACnBxgF,OAAQysD,EAAOzsD,OACfygF,cAAeh0B,EAAOg0B,cACtBC,WAAYj0B,EAAOi0B,WACnBhjH,KAAM,MAEN,OAAS4iH,GACHD,EAAoBC,EAAmB9pB,EACxC4pB,EAAY/D,GACZiE,EAAmBA,EAAiB5iH,KAAO84F,EAC/C4mB,wBAAwBjoB,OAASqrB,EACjC9D,gCAAkC8D,CAAW,CAClDhqB,EAAa/J,EAAOzsD,OACpBy9E,qCACEvwB,EAAQmvB,EAAc7lB,GACxB6lB,EAAe5vB,EAAOg0B,cAClBh0B,EAAOi0B,WACPxzB,EAAQmvB,EAAc7lB,EAC3B,MACEgqB,EAAa,CACZvqB,KAAMO,EACNgqB,WAAY/zB,EAAO+zB,WACnBxgF,OAAQysD,EAAOzsD,OACfygF,cAAeh0B,EAAOg0B,cACtBC,WAAYj0B,EAAOi0B,WACnBhjH,KAAM,MAEN,OAAS4iH,GACHD,EAAoBC,EAAmBE,EACxCJ,EAAY/D,GACZiE,EAAmBA,EAAiB5iH,KAAO8iH,EAC/CpD,wBAAwBjoB,OAASqB,EACjCkmB,gCAAkClmB,EACvC/J,EAASA,EAAO/uF,IACjB,OAAQ,OAAS+uF,GAAUA,IAAWlnF,GAIvC,GAHA,OAAS+6G,EACJF,EAAY/D,EACZiE,EAAiB5iH,KAAO2iH,GAE1BrT,SAASqP,EAAcqD,EAAKpuB,iBAC3BqtB,kBAAmB,EACrB4B,GAC+C,QAA3CrzB,EAAU2rB,iCAEd,MAAM3rB,EACRwyB,EAAKpuB,cAAgB+qB,EACrBqD,EAAK1E,UAAYoF,EACjBV,EAAKC,UAAYW,EACjBrsG,EAAM0sG,kBAAoBtE,CAC3B,CAED,OADA,OAASsD,IAAc1rG,EAAMkhF,MAAQ,GAC9B,CAACuqB,EAAKpuB,cAAer9E,EAAM2sG,SACpC,CACA,SAASC,gBAAgB3zB,GACvB,IAAIwyB,EAAOE,2BACT3rG,EAAQyrG,EAAKzrG,MACf,GAAI,OAASA,EAAO,MAAM3X,MAAMwxF,yBAAuB,MACvD75E,EAAMksG,oBAAsBjzB,EAC5B,IAAI0zB,EAAW3sG,EAAM2sG,SACnBE,EAAwB7sG,EAAM4S,QAC9BkjF,EAAW2V,EAAKpuB,cAClB,GAAI,OAASwvB,EAAuB,CAClC7sG,EAAM4S,QAAU,KAChB,IAAI4lE,EAAUq0B,EAAwBA,EAAsBpjH,KAC5D,GAAIqsG,EAAW7c,EAAQ6c,EAAUtd,EAAOzsD,QAAWysD,EAASA,EAAO/uF,WAC5D+uF,IAAWq0B,GAClB9T,SAASjD,EAAU2V,EAAKpuB,iBAAmBqtB,kBAAmB,GAC9De,EAAKpuB,cAAgByY,EACrB,OAAS2V,EAAKC,YAAcD,EAAK1E,UAAYjR,GAC7C91F,EAAM0sG,kBAAoB5W,CAC3B,CACD,MAAO,CAACA,EAAU6W,EACpB,CACA,SAASG,wBAAwBvzB,EAAWC,EAAaC,GACvD,IAAIsD,EAAQosB,wBACVsC,EAAOE,2BACPoB,EAAuB1iB,YACzB,GAAI0iB,EAAsB,CACxB,QAAI,IAAWtzB,EAAmB,MAAMpxF,MAAMwxF,yBAAuB,MACrEJ,EAAoBA,GACxB,MAASA,EAAoBD,IAC3B,IAAIwzB,GAAmBjU,UACpBqQ,aAAeqC,GAAMpuB,cACtB5D,GAOF,GALAuzB,IACIvB,EAAKpuB,cAAgB5D,EAAqBixB,kBAAmB,GACjEe,EAAOA,EAAKzrG,MAEZitG,iBAAiB,KAAM,EADVC,iBAAiBlzG,KAAK,KAAM+iF,EAAO0uB,EAAMlyB,GACpB,CAACA,IAEjCkyB,EAAKjyB,cAAgBA,GACrBwzB,GACC,OAAS3D,oBAA6D,EAAvCA,mBAAmBhsB,cAAcprC,IACjE,CAcA,GAbA8qC,EAAM10D,OAAS,KACf8kF,iBACE,EACAC,uBACAC,oBAAoBrzG,KAClB,KACA+iF,EACA0uB,EACAhyB,EACAD,GAEF,MAEE,OAAS+rB,mBAAoB,MAAMl9G,MAAMwxF,yBAAuB,MACpEkzB,GACuB,IAAdjrB,aACPwrB,0BAA0BvwB,EAAOvD,EAAaC,EACjD,CACD,OAAOA,CACT,CACA,SAAS6zB,0BAA0BvwB,EAAOvD,EAAa+zB,GACrDxwB,EAAM10D,OAAS,MACf00D,EAAQ,CAAEvD,YAAaA,EAAa1nF,MAAOy7G,GAE3C,QADA/zB,EAAc2vB,wBAAwB9K,cAEhC7kB,EAAcsyB,qCACf3C,wBAAwB9K,YAAc7kB,EACtCA,EAAYsxB,OAAS,CAAC/tB,IAEvB,QADEwwB,EAAmB/zB,EAAYsxB,QAE5BtxB,EAAYsxB,OAAS,CAAC/tB,GACvBwwB,EAAiBlkH,KAAK0zF,EAChC,CACA,SAASswB,oBAAoBtwB,EAAOsI,EAAMmoB,EAAch0B,GACtD6L,EAAKvzF,MAAQ07G,EACbnoB,EAAK7L,YAAcA,EACnBi0B,uBAAuBpoB,IAASqoB,mBAAmB3wB,EACrD,CACA,SAASmwB,iBAAiBnwB,EAAOsI,EAAM9L,GACrC,OAAOA,EAAU,WACfk0B,uBAAuBpoB,IAASqoB,mBAAmB3wB,EACvD,EACA,CACA,SAAS0wB,uBAAuBpoB,GAC9B,IAAIsoB,EAAoBtoB,EAAK7L,YAC7B6L,EAAOA,EAAKvzF,MACZ,IACE,IAAI2wG,EAAYkL,IAChB,OAAQ5U,SAAS1T,EAAMod,EACxB,CAAC,MAAOjgG,GACP,OAAO,CACR,CACH,CACA,SAASkrG,mBAAmB3wB,GAC1B,IAAI13D,EAAOo4E,+BAA+B1gB,EAAO,GACjD,OAAS13D,GAAQuoF,sBAAsBvoF,EAAM03D,EAAO,EACtD,CACA,SAAS8wB,eAAeh2B,GACtB,IAAI4zB,EAAOD,0BACX,GAAI,mBAAsB3zB,EAAc,CACtC,IAAIi2B,EAA0Bj2B,EAE9B,GADAA,EAAei2B,IACXtE,oCAAqC,CACvC9oB,4BAA2B,GAC3B,IACEotB,GACR,CAAO,QACCptB,4BAA2B,EAC5B,CACF,CACF,CASD,OARA+qB,EAAKpuB,cAAgBouB,EAAK1E,UAAYlvB,EACtC4zB,EAAKzrG,MAAQ,CACX4S,QAAS,KACTsuE,MAAO,EACPyrB,SAAU,KACVT,oBAAqBH,kBACrBW,kBAAmB70B,GAEd4zB,CACT,CACA,SAASsC,qBAAqBtC,EAAMn6G,EAAS0nF,EAAaC,GAExD,OADAwyB,EAAK1E,UAAY/tB,EACVizB,kBACLR,EACArC,YACA,mBAAsBnwB,EAAUA,EAAU8yB,kBAE9C,CACA,SAASiC,oBACPjxB,EACAkxB,EACAC,EACA37B,EACAkC,GAEA,GAAI05B,oBAAoBpxB,GAAQ,MAAM10F,MAAMwxF,yBAAuB,MAEnE,GAAI,QADJkD,EAAQkxB,EAAYliF,QACA,CAClB,IAAIqiF,EAAa,CACf35B,QAASA,EACT1oD,OAAQgxD,EACRtzF,KAAM,KACN4kH,cAAc,EACdjsG,OAAQ,UACRtQ,MAAO,KACPwQ,OAAQ,KACRpO,UAAW,GACX4N,KAAM,SAAUiF,GACdqnG,EAAWl6G,UAAU7K,KAAK0d,EAC3B,GAEH,OAAS8rE,qBAAqBG,EAC1Bk7B,GAAgB,GACfE,EAAWC,cAAe,EAC/B97B,EAAS67B,GAET,QADAF,EAAkBD,EAAYr7F,UAExBw7F,EAAW3kH,KAAOwkH,EAAYr7F,QAAUw7F,EAC1CE,qBAAqBL,EAAaG,KAChCA,EAAW3kH,KAAOykH,EAAgBzkH,KACnCwkH,EAAYr7F,QAAUs7F,EAAgBzkH,KAAO2kH,EACnD,CACH,CACA,SAASE,qBAAqBL,EAAajiH,GACzC,IAAI+/B,EAAS//B,EAAK+/B,OAChB0oD,EAAUzoF,EAAKyoF,QACf85B,EAAYN,EAAY9hH,MAC1B,GAAIH,EAAKqiH,aAAc,CACrB,IAAIh3B,EAAiBxE,qBAAqBG,EACxCsE,EAAoB,CAAE,EACxBzE,qBAAqBG,EAAIsE,EACzB,IACE,IAAI51E,EAAcqqB,EAAOwiF,EAAW95B,GAClC8C,EAA0B1E,qBAAqBI,EACjD,OAASsE,GACPA,EAAwBD,EAAmB51E,GAC7C8sG,wBAAwBP,EAAajiH,EAAM0V,EAC5C,CAAC,MAAOc,GACPisG,cAAcR,EAAajiH,EAAMwW,EACvC,CAAK,QACCqwE,qBAAqBG,EAAIqE,CAC1B,CACF,MACC,IAEIm3B,wBAAwBP,EAAajiH,EADtCqrF,EAAiBtrD,EAAOwiF,EAAW95B,GAErC,CAAC,MAAOi6B,GACPD,cAAcR,EAAajiH,EAAM0iH,EAClC,CACL,CACA,SAASF,wBAAwBP,EAAajiH,EAAM0V,GAClD,OAASA,GACT,iBAAoBA,GACpB,mBAAsBA,EAAYI,KAC9BJ,EAAYI,KACV,SAAU6sG,GACRC,gBAAgBX,EAAajiH,EAAM2iH,EACpC,EACD,SAAUnsG,GACR,OAAOisG,cAAcR,EAAajiH,EAAMwW,EACzC,GAEHosG,gBAAgBX,EAAajiH,EAAM0V,EACzC,CACA,SAASktG,gBAAgBX,EAAaG,EAAYO,GAChDP,EAAWhsG,OAAS,YACpBgsG,EAAWt8G,MAAQ68G,EACnBE,sBAAsBT,GACtBH,EAAY9hH,MAAQwiH,EAEpB,QADAP,EAAaH,EAAYr7F,YAErB+7F,EAAYP,EAAW3kH,QACX2kH,EACTH,EAAYr7F,QAAU,MACrB+7F,EAAYA,EAAUllH,KACvB2kH,EAAW3kH,KAAOklH,EACnBL,qBAAqBL,EAAaU,IAC1C,CACA,SAASF,cAAcR,EAAaG,EAAY5rG,GAC9C,IAAIjQ,EAAO07G,EAAYr7F,QAEvB,GADAq7F,EAAYr7F,QAAU,KAClB,OAASrgB,EAAM,CACjBA,EAAOA,EAAK9I,KACZ,GACG2kH,EAAWhsG,OAAS,WAClBgsG,EAAW9rG,OAASE,EACrBqsG,sBAAsBT,GACrBA,EAAaA,EAAW3kH,WACtB2kH,IAAe77G,EACvB,CACD07G,EAAYliF,OAAS,IACvB,CACA,SAAS8iF,sBAAsBT,GAC7BA,EAAaA,EAAWl6G,UACxB,IAAK,IAAIlP,EAAI,EAAGA,EAAIopH,EAAWjpH,OAAQH,KAAK,EAAIopH,EAAWppH,KAC7D,CACA,SAAS8pH,mBAAmB/Y,EAAUD,GACpC,OAAOA,CACT,CACA,SAASiZ,iBAAiBhjF,EAAQijF,GAChC,GAAI3kB,YAAa,CACf,IAAI4kB,EAAe1J,mBAAmB2J,UACtC,GAAI,OAASD,EAAc,CACzBjmE,EAAG,CACD,IAAIy2C,EAA2B0pB,wBAC/B,GAAI9e,YAAa,CACf,GAAIoW,uBAAwB,CAC1BriG,EAAG,CAED,IADA,IAAI+wG,EAAoC1O,uBAElC2O,EAAoBzO,uBACxB,IAAMwO,EAAkCn0B,UAExC,CACA,IAAKo0B,EAAmB,CACtBD,EAAoC,KACpC,MAAM/wG,CACP,CAID,GAAI,QAHJ+wG,EAAoCtN,kBAClCsN,EAAkC1V,cAEY,CAC9C0V,EAAoC,KACpC,MAAM/wG,CACP,CACF,CAED+wG,EACE,QAFFC,EAAoBD,EAAkC3lH,OAEtB,MAAQ4lH,EAClCD,EACA,IACP,CACD,GAAIA,EAAmC,CACrC1O,uBAAyBoB,kBACvBsN,EAAkC1V,aAEpCha,EACE,OAAS0vB,EAAkC3lH,KAC7C,MAAMw/C,CACP,CACF,CACD63D,yBAAyBphB,EAC1B,CACDA,GAA2B,CAC5B,CACDA,IAA6BuvB,EAAmBC,EAAa,GAC9D,CACF,CAyCD,OAxCAA,EAAezD,2BACFnuB,cAAgB4xB,EAAalI,UAAYiI,EACtDvvB,EAA2B,CACzB7sE,QAAS,KACTsuE,MAAO,EACPyrB,SAAU,KACVT,oBAAqB4C,mBACrBpC,kBAAmBsC,GAErBC,EAAajvG,MAAQy/E,EACrBwvB,EAAeI,iBAAiBr1G,KAC9B,KACAmvG,wBACA1pB,GAEFA,EAAyBktB,SAAWsC,EACpCxvB,EAA2BouB,gBAAe,GAC1CuB,EAAoBE,2BAA2Bt1G,KAC7C,KACAmvG,yBACA,EACA1pB,EAAyBz/E,OAG3BmvG,EAAoC,CAClChjH,MAAO6iH,EACPrC,SAAU,KACV5gF,OAAQA,EACRnZ,QAAS,OALX6sE,EAA2B+rB,2BAOFxrG,MAAQmvG,EACjCF,EAAejB,oBAAoBh0G,KACjC,KACAmvG,wBACAgG,EACAC,EACAH,GAEFE,EAAkCxC,SAAWsC,EAC7CxvB,EAAyBpC,cAAgBtxD,EAClC,CAACijF,EAAkBC,GAAc,EAC1C,CACA,SAASM,kBAAkBxjF,GAEzB,OAAOyjF,sBADS7D,2BACwBvC,YAAar9E,EACvD,CACA,SAASyjF,sBAAsBC,EAAWC,EAAkB3jF,GAO1D,GANA2jF,EAAmBzD,kBACjBwD,EACAC,EACAZ,oBACA,GACFW,EAAYzD,cAAcD,mBAAmB,GAE3C,iBAAoB2D,GACpB,OAASA,GACT,mBAAsBA,EAAiB5tG,KAEvC,IACE,IAAI3V,EAAQg/G,YAAYuE,EACzB,CAAC,MAAO93G,GACP,GAAIA,IAAMmuG,kBAAmB,MAAME,wBACnC,MAAMruG,CACP,MACEzL,EAAQujH,EAEb,IAAIzB,GADJyB,EAAmB/D,4BACgB3rG,MACjC2sG,EAAWsB,EAAYtB,SASzB,OARA5gF,IAAW2jF,EAAiBryB,gBACxB8rB,wBAAwB9gF,OAAS,KACnC8kF,iBACE,EACAC,uBACAuC,wBAAwB31G,KAAK,KAAMi0G,EAAaliF,GAChD,OAEG,CAAC5/B,EAAOwgH,EAAU8C,EAC3B,CACA,SAASE,wBAAwB1B,EAAaliF,GAC5CkiF,EAAYliF,OAASA,CACvB,CACA,SAAS6jF,oBAAoB7jF,GAC3B,IAAI0jF,EAAY9D,2BACd+D,EAAmBtG,YACrB,GAAI,OAASsG,EACX,OAAOF,sBAAsBC,EAAWC,EAAkB3jF,GAC5D4/E,2BACA8D,EAAYA,EAAUpyB,cAEtB,IAAIsvB,GADJ+C,EAAmB/D,4BACa3rG,MAAM2sG,SAEtC,OADA+C,EAAiBryB,cAAgBtxD,EAC1B,CAAC0jF,EAAW9C,GAAU,EAC/B,CACA,SAASQ,iBAAiBl7D,EAAKozC,EAAMn4F,EAAQqrF,GAa3C,OAZAtmC,EAAM,CAAEA,IAAKA,EAAK/kD,OAAQA,EAAQ8qF,KAAMO,EAAY8M,KAAMA,EAAM57F,KAAM,MAEtE,QADA47F,EAAO8jB,wBAAwB9K,eAE3BhZ,EAAOymB,qCACR3C,wBAAwB9K,YAAchZ,GAEzC,QADAn4F,EAASm4F,EAAKulB,YAETvlB,EAAKulB,WAAa34D,EAAIxoD,KAAOwoD,GAC5BsmC,EAAarrF,EAAOzD,KACrByD,EAAOzD,KAAOwoD,EACdA,EAAIxoD,KAAO8uF,EACX8M,EAAKulB,WAAa34D,GAChBA,CACT,CACA,SAASm7D,uBACP,MAAO,CAAEtiH,aAAS,EAAQ+kH,cAAU,EACtC,CACA,SAASC,YACP,OAAOnE,2BAA2BtuB,aACpC,CACA,SAAS0yB,gBAAgBC,EAAYC,EAAW/iH,EAAQqrF,GACtD,IAAIkzB,EAAOD,0BACXjzB,OAAa,IAAWA,EAAa,KAAOA,EAC5C4wB,wBAAwB9gF,OAAS2nF,EACjCvE,EAAKpuB,cAAgB8vB,iBACnB,EAAI8C,EACJ7C,uBACAlgH,EACAqrF,EAEJ,CACA,SAAS00B,iBAAiB+C,EAAYC,EAAW/iH,EAAQ8qF,GACvD,IAAIyzB,EAAOE,2BACX3zB,OAAO,IAAWA,EAAO,KAAOA,EAChC,IAAIqN,EAAOomB,EAAKpuB,cAAcgI,KAC9B,OAAS+jB,aACT,OAASpxB,GACT8xB,mBAAmB9xB,EAAMoxB,YAAY/rB,cAAcrF,MAC9CyzB,EAAKpuB,cAAgB8vB,iBAAiB8C,EAAW5qB,EAAMn4F,EAAQ8qF,IAC9DmxB,wBAAwB9gF,OAAS2nF,EAClCvE,EAAKpuB,cAAgB8vB,iBACpB,EAAI8C,EACJ5qB,EACAn4F,EACA8qF,GAER,CACA,SAASk4B,YAAYhjH,EAAQqrF,GAC3Bw3B,gBAAgB,QAAS,EAAG7iH,EAAQqrF,EACtC,CACA,SAAS43B,aAAajjH,EAAQqrF,GAC5B00B,iBAAiB,KAAM,EAAG//G,EAAQqrF,EACpC,CACA,SAAS63B,sBAAsBljH,EAAQ8qF,GACrC,OAAOi1B,iBAAiB,EAAG,EAAG//G,EAAQ8qF,EACxC,CACA,SAASq4B,mBAAmBnjH,EAAQ8qF,GAClC,OAAOi1B,iBAAiB,EAAG,EAAG//G,EAAQ8qF,EACxC,CACA,SAASs4B,uBAAuBpjH,EAAQi/E,GACtC,GAAI,mBAAsBA,EAAK,CAC7Bj/E,EAASA,IACT,IAAIkxG,EAAajyB,EAAIj/E,GACrB,OAAmB,WACjB,mBAAsBkxG,EAAaA,IAAejyB,EAAI,KAC5D,CACG,CACD,GAAI,MAASA,EACX,OACGj/E,EAASA,IACTi/E,EAAI76E,QAAUpE,EACf,WACEi/E,EAAI76E,QAAU,IACf,CAEP,CACA,SAASi/G,uBAAuBpkC,EAAKj/E,EAAQ8qF,GAC3CA,EAAO,MAASA,EAA0BA,EAAK/tF,OAAO,CAACkiF,IAAQ,KAC/D8gC,iBAAiB,EAAG,EAAGqD,uBAAuBt2G,KAAK,KAAM9M,EAAQi/E,GAAM6L,EACzE,CACA,SAASw4B,kBAAkB,CAC3B,SAAS9mG,eAAepd,EAAU0rF,GAChC,IAAIyzB,EAAOE,2BACX3zB,OAAO,IAAWA,EAAO,KAAOA,EAChC,IAAIu2B,EAAY9C,EAAKpuB,cACrB,OAAI,OAASrF,GAAQ8xB,mBAAmB9xB,EAAMu2B,EAAU,IAC/CA,EAAU,IACnB9C,EAAKpuB,cAAgB,CAAC/wF,EAAU0rF,GACzB1rF,EACT,CACA,SAASmkH,WAAWC,EAAY14B,GAC9B,IAAIyzB,EAAOE,2BACX3zB,OAAO,IAAWA,EAAO,KAAOA,EAChC,IAAIu2B,EAAY9C,EAAKpuB,cACrB,GAAI,OAASrF,GAAQ8xB,mBAAmB9xB,EAAMu2B,EAAU,IACtD,OAAOA,EAAU,GAEnB,GADAA,EAAYmC,IACRlH,oCAAqC,CACvC9oB,4BAA2B,GAC3B,IACEgwB,GACN,CAAK,QACChwB,4BAA2B,EAC5B,CACF,CAED,OADA+qB,EAAKpuB,cAAgB,CAACkxB,EAAWv2B,GAC1Bu2B,CACT,CACA,SAASoC,uBAAuBlF,EAAM35G,EAAOumF,GAC3C,YAAI,IAAWA,GAAqC,WAAdyJ,YAC5B2pB,EAAKpuB,cAAgBvrF,GAC/B25G,EAAKpuB,cAAgBhF,EACrBozB,EAAOmF,sBACPzH,wBAAwBjoB,OAASuqB,EACjChD,gCAAkCgD,EAC3BpzB,EACT,CACA,SAASw4B,wBAAwBpF,EAAMqF,EAAWh/G,EAAOumF,GACvD,OAAI0gB,SAASjnG,EAAOg/G,GAAmBh/G,EACnC,OAAS82G,6BAA6Bt3G,SAErCm6G,EAAOkF,uBAAuBlF,EAAM35G,EAAOumF,GAC5C0gB,SAAS0S,EAAMqF,KAAepG,kBAAmB,GACjDe,GAEqB,GAAd3pB,aAEX2pB,EAAOmF,sBACPzH,wBAAwBjoB,OAASuqB,EACjChD,gCAAkCgD,EAC3BqF,IAJGpG,kBAAmB,EAAMe,EAAKpuB,cAAgBvrF,EAK1D,CACA,SAASqlF,gBAAgB4F,EAAO/8E,EAAO+wG,EAAcC,EAAe1kH,GAClE,IAAI63F,EAAmB1F,wBAAwBz0F,EAC/Cy0F,wBAAwBz0F,EACtB,IAAMm6F,GAAoB,EAAIA,EAAmBA,EAAmB,EACtE,IAAI9M,EAAiBxE,qBAAqBG,EACxCsE,EAAoB,CAAA,EACtBzE,qBAAqBG,EAAIsE,EACzBg4B,2BAA2BvyB,GAAO,EAAI/8E,EAAO+wG,GAC7C,IACE,IAAIrvG,EAAcpV,IAChBirF,EAA0B1E,qBAAqBI,EAGjD,GAFA,OAASsE,GACPA,EAAwBD,EAAmB51E,GAE3C,OAASA,GACT,iBAAoBA,GACpB,mBAAsBA,EAAYI,KAMlCmvG,yBACEl0B,EACA/8E,EAN6BilG,mBAC7BvjG,EACAsvG,GAMAE,kBAAkBn0B,SAGpBk0B,yBACEl0B,EACA/8E,EACAgxG,EACAE,kBAAkBn0B,GAEvB,CAAC,MAAOv6E,GACPyuG,yBACEl0B,EACA/8E,EACA,CAAE8B,KAAM,WAAc,EAAEM,OAAQ,WAAYE,OAAQE,GACpD0uG,oBAEN,CAAG,QACEzyB,wBAAwBz0F,EAAIm6F,EAC1BtR,qBAAqBG,EAAIqE,CAC7B,CACH,CACA,SAAS85B,SAAS,CAClB,SAASC,oBAAoBC,EAAWN,EAAchlF,EAAQulF,GAC5D,GAAI,IAAMD,EAAUp/D,IAAK,MAAM5pD,MAAMwxF,yBAAuB,MAC5D,IAAI75E,EAAQuxG,8BAA8BF,GAAWrxG,MACrDm3E,gBACEk6B,EACArxG,EACA+wG,EACAryB,uBACA,OAAS3yD,EACLolF,OACA,WAEE,OADAK,mBAAmBH,GACZtlF,EAAOulF,EACf,EAET,CACA,SAASC,8BAA8BF,GACrC,IAAII,EAAoBJ,EAAUh0B,cAClC,GAAI,OAASo0B,EAAmB,OAAOA,EAcvC,IAAIC,EAAoB,CAAA,EAiBxB,OA9BAD,EAAoB,CAClBp0B,cAAeqB,uBACfqoB,UAAWroB,uBACXgtB,UAAW,KACX1rG,MAAO,CACL4S,QAAS,KACTsuE,MAAO,EACPyrB,SAAU,KACVT,oBAAqBH,kBACrBW,kBAAmBhuB,wBAErBj1F,KAAM,OAGUA,KAAO,CACvB4zF,cAAeq0B,EACf3K,UAAW2K,EACXhG,UAAW,KACX1rG,MAAO,CACL4S,QAAS,KACTsuE,MAAO,EACPyrB,SAAU,KACVT,oBAAqBH,kBACrBW,kBAAmBgF,GAErBjoH,KAAM,MAER4nH,EAAUh0B,cAAgBo0B,EAE1B,QADAJ,EAAYA,EAAUp0B,aACCo0B,EAAUh0B,cAAgBo0B,GAC1CA,CACT,CACA,SAASD,mBAAmBH,GAE1BJ,yBAAyBI,EADHE,8BAA8BF,GAAW5nH,KAAKuW,MACf,CAAE,EAAEkxG,oBAC3D,CACA,SAASz0B,0BACP,OAAOgnB,YAAY9jB,sBACrB,CACA,SAASgyB,WACP,OAAOhG,2BAA2BtuB,aACpC,CACA,SAASu0B,gBACP,OAAOjG,2BAA2BtuB,aACpC,CACA,SAASw0B,aAAa90B,GACpB,IAAK,IAAI+0B,EAAW/0B,EAAMG,OAAQ,OAAS40B,GAAY,CACrD,OAAQA,EAAS7/D,KACf,KAAO,GACP,KAAM,EACJ,IAAI+vC,EAAOkvB,oBAEPa,EAAUxK,cAAcuK,EAD5B/0B,EAAQuqB,aAAatlB,GACwBA,GAM7C,OALA,OAAS+vB,IACNnE,sBAAsBmE,EAASD,EAAU9vB,GAC1CylB,oBAAoBsK,EAASD,EAAU9vB,IACzC8vB,EAAW,CAAE77B,MAAOouB,oBACpBtnB,EAAMtI,QAAUq9B,GAGpBA,EAAWA,EAAS50B,MACrB,CACH,CACA,SAAS80B,sBAAsBj1B,EAAO/8E,EAAO+rB,GAC3C,IAAIi2D,EAAOkvB,oBACXnlF,EAAS,CACPi2D,KAAMA,EACNuqB,WAAY,EACZxgF,OAAQA,EACRygF,eAAe,EACfC,WAAY,KACZhjH,KAAM,MAER0kH,oBAAoBpxB,GAChBk1B,yBAAyBjyG,EAAO+rB,GAEhC,QADEA,EAASwxE,4BAA4BxgB,EAAO/8E,EAAO+rB,EAAQi2D,MAE1D4rB,sBAAsB7hF,EAAQgxD,EAAOiF,GACtCkwB,yBAAyBnmF,EAAQ/rB,EAAOgiF,GAChD,CACA,SAASqtB,iBAAiBtyB,EAAO/8E,EAAO+rB,GAEtCklF,yBAAyBl0B,EAAO/8E,EAAO+rB,EAD5BmlF,oBAEb,CACA,SAASD,yBAAyBl0B,EAAO/8E,EAAO+rB,EAAQi2D,GACtD,IAAIxJ,EAAS,CACXwJ,KAAMA,EACNuqB,WAAY,EACZxgF,OAAQA,EACRygF,eAAe,EACfC,WAAY,KACZhjH,KAAM,MAER,GAAI0kH,oBAAoBpxB,GAAQk1B,yBAAyBjyG,EAAOw4E,OAC3D,CACH,IAAIyE,EAAYF,EAAME,UACtB,GACE,IAAMF,EAAMmE,QACX,OAASjE,GAAa,IAAMA,EAAUiE,QACG,QAAxCjE,EAAYj9E,EAAMksG,qBAEpB,IACE,IAAIiG,EAAenyG,EAAM0sG,kBACvBD,EAAaxvB,EAAUk1B,EAAcpmF,GAGvC,GAFAysD,EAAOg0B,eAAgB,EACvBh0B,EAAOi0B,WAAaA,EAChB1T,SAAS0T,EAAY0F,GACvB,OACE7U,gBAAgBvgB,EAAO/8E,EAAOw4E,EAAQ,GACtC,OAAS+sB,oBAAsBpI,mCAC/B,CAEL,CAAC,MAAO36F,GACR,CAGH,GAAI,QADJupB,EAASwxE,4BAA4BxgB,EAAO/8E,EAAOw4E,EAAQwJ,IAEzD,OACE4rB,sBAAsB7hF,EAAQgxD,EAAOiF,GACrCkwB,yBAAyBnmF,EAAQ/rB,EAAOgiF,IACxC,CAEL,CACD,OAAO,CACT,CACA,SAASstB,2BAA2BvyB,EAAOq1B,EAAqBpyG,EAAO+rB,GASrE,GARAA,EAAS,CACPi2D,KAAM,EACNuqB,WAAYxH,wBACZh5E,OAAQA,EACRygF,eAAe,EACfC,WAAY,KACZhjH,KAAM,MAEJ0kH,oBAAoBpxB,IACtB,GAAIq1B,EAAqB,MAAM/pH,MAAMwxF,yBAAuB,WAQ1D,QANDu4B,EAAsB7U,4BACrBxgB,EACA/8E,EACA+rB,EACA,KAGE6hF,sBAAsBwE,EAAqBr1B,EAAO,EAC1D,CACA,SAASoxB,oBAAoBpxB,GAC3B,IAAIE,EAAYF,EAAME,UACtB,OACEF,IAAUosB,yBACT,OAASlsB,GAAaA,IAAcksB,uBAEzC,CACA,SAAS8I,yBAAyBjyG,EAAOw4E,GACvC+wB,2CAA6CD,8BAC3C,EACF,IAAI12F,EAAU5S,EAAM4S,QACpB,OAASA,EACJ4lE,EAAO/uF,KAAO+uF,GACbA,EAAO/uF,KAAOmpB,EAAQnpB,KAAQmpB,EAAQnpB,KAAO+uF,GACnDx4E,EAAM4S,QAAU4lE,CAClB,CACA,SAAS05B,yBAAyB7sF,EAAMrlB,EAAOgiF,GAC7C,GAAkB,QAAPA,EAAiB,CAC1B,IAAI0lB,EAAa1nG,EAAMkhF,MAEvBc,GADA0lB,GAAcriF,EAAKk8D,aAEnBvhF,EAAMkhF,MAAQc,EACd0B,kBAAkBr+D,EAAM28D,EACzB,CACH,CACA,IAAIwoB,sBAAwB,CACxB/G,YAAaA,YACb/rB,IAAKA,IACLK,YAAa8xB,sBACb5xB,WAAY4xB,sBACZvxB,UAAWuxB,sBACXlxB,oBAAqBkxB,sBACrBhxB,gBAAiBgxB,sBACjBjxB,mBAAoBixB,sBACpB/wB,QAAS+wB,sBACT3wB,WAAY2wB,sBACZzwB,OAAQywB,sBACRxwB,SAAUwwB,sBACV1xB,cAAe0xB,sBACfzxB,iBAAkByxB,sBAClBnwB,cAAemwB,sBACfvwB,qBAAsBuwB,sBACtBnxB,MAAOmxB,sBACPptB,wBAAyBotB,sBACzBttB,aAAcstB,sBACdjyB,eAAgBiyB,sBAChB9wB,cAAe8wB,sBACf7zB,aAAc6zB,sBACdpyB,gBAAiBoyB,uBAEnBO,uBAAyB,CACvB3G,YAAaA,YACb/rB,IAAKA,IACLK,YAAa,SAAUzrF,EAAU0rF,GAK/B,OAJAwzB,0BAA0BnuB,cAAgB,CACxC/wF,OACA,IAAW0rF,EAAO,KAAOA,GAEpB1rF,CACR,EACD2rF,WAAYwrB,YACZnrB,UAAW43B,YACXv3B,oBAAqB,SAAUxM,EAAKj/E,EAAQ8qF,GAC1CA,EAAO,MAASA,EAA0BA,EAAK/tF,OAAO,CAACkiF,IAAQ,KAC/D4jC,gBACE,QACA,EACAO,uBAAuBt2G,KAAK,KAAM9M,EAAQi/E,GAC1C6L,EAEH,EACDa,gBAAiB,SAAU3rF,EAAQ8qF,GACjC,OAAO+3B,gBAAgB,QAAS,EAAG7iH,EAAQ8qF,EAC5C,EACDY,mBAAoB,SAAU1rF,EAAQ8qF,GACpC+3B,gBAAgB,EAAG,EAAG7iH,EAAQ8qF,EAC/B,EACDc,QAAS,SAAU43B,EAAY14B,GAC7B,IAAIyzB,EAAOD,0BACXxzB,OAAO,IAAWA,EAAO,KAAOA,EAChC,IAAIyqB,EAAYiO,IAChB,GAAIlH,oCAAqC,CACvC9oB,4BAA2B,GAC3B,IACEgwB,GACV,CAAS,QACChwB,4BAA2B,EAC5B,CACF,CAED,OADA+qB,EAAKpuB,cAAgB,CAAColB,EAAWzqB,GAC1ByqB,CACR,EACDvpB,WAAY,SAAUD,EAASE,EAAYn8C,GACzC,IAAIyuE,EAAOD,0BACX,QAAI,IAAWxuE,EAAM,CACnB,IAAI66C,EAAe76C,EAAKm8C,GACxB,GAAIqwB,oCAAqC,CACvC9oB,4BAA2B,GAC3B,IACE1jD,EAAKm8C,EACjB,CAAW,QACCuH,4BAA2B,EAC5B,CACF,CACT,MAAa7I,EAAesB,EAetB,OAdAsyB,EAAKpuB,cAAgBouB,EAAK1E,UAAYlvB,EACtCoB,EAAU,CACRrmE,QAAS,KACTsuE,MAAO,EACPyrB,SAAU,KACVT,oBAAqBjzB,EACrByzB,kBAAmB70B,GAErB4zB,EAAKzrG,MAAQi5E,EACbA,EAAUA,EAAQ0zB,SAAWqF,sBAAsBh4G,KACjD,KACAmvG,wBACAlwB,GAEK,CAACwyB,EAAKpuB,cAAepE,EAC7B,EACDG,OAAQ,SAAUf,GAGhB,OADAA,EAAe,CAAE/mF,QAAS+mF,GADfmzB,0BAEEnuB,cAAgBhF,CAC9B,EACDgB,SAAU,SAAUxB,GAElB,IAAI73E,GADJ63E,EAAeg2B,eAAeh2B,IACL73E,MACvB2sG,EAAW0C,iBAAiBr1G,KAAK,KAAMmvG,wBAAyBnpG,GAElE,OADAA,EAAM2sG,SAAWA,EACV,CAAC90B,EAAawF,cAAesvB,EACrC,EACDx0B,cAAeq4B,gBACfp4B,iBAAkB,SAAUtmF,EAAOumF,GAEjC,OAAOs4B,uBADInF,0BACyB15G,EAAOumF,EAC5C,EACDqB,cAAe,WACb,IAAI+1B,EAAY5B,gBAAe,GAS/B,OARA4B,EAAYt4B,gBAAgBn9E,KAC1B,KACAmvG,wBACAsG,EAAUzvG,OACV,GACA,GAEFwrG,0BAA0BnuB,cAAgBoyB,EACnC,EAAC,EAAIA,EACb,EACDn2B,qBAAsB,SAAUC,EAAWC,EAAaC,GACtD,IAAIsD,EAAQosB,wBACVsC,EAAOD,0BACT,GAAInhB,YAAa,CACf,QAAI,IAAW5Q,EACb,MAAMpxF,MAAMwxF,yBAAuB,MACrCJ,EAAoBA,GAC5B,KAAa,CAEL,GADAA,EAAoBD,IAChB,OAAS+rB,mBACX,MAAMl9G,MAAMwxF,yBAAuB,MACE,IAAhC2uB,+BACL8E,0BAA0BvwB,EAAOvD,EAAaC,EACjD,CACDgyB,EAAKpuB,cAAgB5D,EACrB,IAAI4L,EAAO,CAAEvzF,MAAO2nF,EAAmBD,YAAaA,GAkBpD,OAjBAiyB,EAAKzrG,MAAQqlF,EACb6qB,YAAYhD,iBAAiBlzG,KAAK,KAAM+iF,EAAOsI,EAAM9L,GAAY,CAC/DA,IAEFwD,EAAM10D,OAAS,KACf8kF,iBACE,EACAC,uBACAC,oBAAoBrzG,KAClB,KACA+iF,EACAsI,EACA5L,EACAD,GAEF,MAEKC,CACR,EACDf,MAAO,WACL,IAAI+yB,EAAOD,0BACT6G,EAAmB9M,mBAAmB8M,iBACxC,GAAIhoB,YAAa,CACf,IAAI5K,EAA2BsgB,oBAM/BsS,EACE,IAAWA,EAAmB,KALhC5yB,GADuBqgB,gBAGE,GAAM,GAAKjf,MAHbif,eAGuC,IAC1Dt6G,SAAS,IAAMi6F,GAInB,GADAA,EAA2BgqB,oBAExB4I,GAAoB,IAAM5yB,EAAyBj6F,SAAS,KAC/D6sH,GAAoB,GACrB,MAEIA,EACC,IACAA,EACA,KAJH5yB,EAA2BmqB,yBAKCpkH,SAAS,IAClC,IACN,OAAQimH,EAAKpuB,cAAgBg1B,CAC9B,EACD51B,wBAAyBA,wBACzBF,aAAcwyB,iBACdn3B,eAAgBm3B,iBAChBh2B,cAAe,SAAUC,GACvB,IAAIyyB,EAAOD,0BACXC,EAAKpuB,cAAgBouB,EAAK1E,UAAY/tB,EACtC,IAAIh5E,EAAQ,CACV4S,QAAS,KACTsuE,MAAO,EACPyrB,SAAU,KACVT,oBAAqB,KACrBQ,kBAAmB,MAUrB,OARAjB,EAAKzrG,MAAQA,EACbyrG,EAAO6D,2BAA2Bt1G,KAChC,KACAmvG,yBACA,EACAnpG,GAEFA,EAAM2sG,SAAWlB,EACV,CAACzyB,EAAayyB,EACtB,EACDz1B,aAAcA,aACdyB,gBAAiB,WACf,OAAQ+zB,0BAA0BnuB,cAAgBw0B,aAAa73G,KAC7D,KACAmvG,wBAEH,GAEHkB,wBAA0B,CACxB5G,YAAaA,YACb/rB,IAAKA,IACLK,YAAaruE,eACbuuE,WAAYwrB,YACZnrB,UAAW63B,aACXx3B,oBAAqB43B,uBACrB33B,mBAAoBw3B,sBACpBv3B,gBAAiBw3B,mBACjBv3B,QAAS23B,WACTv3B,WAAY8yB,cACZ5yB,OAAQ02B,UACRz2B,SAAU,WACR,OAAO2yB,cAAcD,kBACtB,EACD5zB,cAAeq4B,gBACfp4B,iBAAkB,SAAUtmF,EAAOumF,GAEjC,OAAOw4B,wBADIlF,2BAGTvC,YAAY/rB,cACZvrF,EACAumF,EAEH,EACDqB,cAAe,WACb,IAAI44B,EAAoBtG,cAAcD,mBAAmB,GACvDzwF,EAAQqwF,2BAA2BtuB,cACrC,MAAO,CACL,kBAAqBi1B,EACjBA,EACAnH,YAAYmH,GAChBh3F,EAEH,EACDg+D,qBAAsBwzB,wBACtBp0B,MAAOi5B,SACPl1B,wBAAyBA,wBACzBF,aAAcgzB,kBACd33B,eAAgB23B,kBAChBx2B,cAAe,SAAUC,EAAaC,GAEpC,OAAO80B,qBADIpC,2BACuBvC,YAAapwB,EAAaC,EAC7D,EACDjD,aAAcA,aACdyB,gBAAiBm6B,eAEnB5G,0BAA4B,CAC1BvH,YAAaA,YACb/rB,IAAKA,IACLK,YAAaruE,eACbuuE,WAAYwrB,YACZnrB,UAAW63B,aACXx3B,oBAAqB43B,uBACrB33B,mBAAoBw3B,sBACpBv3B,gBAAiBw3B,mBACjBv3B,QAAS23B,WACTv3B,WAAY0zB,gBACZxzB,OAAQ02B,UACRz2B,SAAU,WACR,OAAOuzB,gBAAgBb,kBACxB,EACD5zB,cAAeq4B,gBACfp4B,iBAAkB,SAAUtmF,EAAOumF,GACjC,IAAIozB,EAAOE,2BACX,OAAW,OAAKvC,YACZuH,uBAAuBlF,EAAM35G,EAAOumF,GACpCw4B,wBACEpF,EACArC,YAAY/rB,cACZvrF,EACAumF,EAEP,EACDqB,cAAe,WACb,IAAI44B,EAAoB1F,gBAAgBb,mBAAmB,GACzDzwF,EAAQqwF,2BAA2BtuB,cACrC,MAAO,CACL,kBAAqBi1B,EACjBA,EACAnH,YAAYmH,GAChBh3F,EAEH,EACDg+D,qBAAsBwzB,wBACtBp0B,MAAOi5B,SACPl1B,wBAAyBA,wBACzBF,aAAcqzB,oBACdh4B,eAAgBg4B,oBAChB72B,cAAe,SAAUC,EAAaC,GACpC,IAAIwyB,EAAOE,2BACX,OAAI,OAASvC,YACJ2E,qBAAqBtC,EAAMrC,YAAapwB,EAAaC,IAC9DwyB,EAAK1E,UAAY/tB,EACV,CAACA,EAAayyB,EAAKzrG,MAAM2sG,UACjC,EACD32B,aAAcA,aACdyB,gBAAiBm6B,eAEnBtL,cAAgB,KAChBiM,qBAAuB,EACzB,SAASC,eAAezwG,GACtB,IAAItI,EAAQ84G,qBAGZ,OAFAA,sBAAwB,EACxB,OAASjM,gBAAkBA,cAAgB,IACpCD,kBAAkBC,cAAevkG,EAAUtI,EACpD,CACA,SAASg5G,UAAUhqB,EAAgB5pF,GACjCA,EAAUA,EAAQwtE,MAAMF,IACxBsc,EAAetc,SAAM,IAAWttE,EAAUA,EAAU,IACtD,CACA,SAAS6zG,yBAAyBC,EAAaC,GAC7C,GAAIA,EAASxmC,WAAa4R,0BACxB,MAAM31F,MAAMwxF,yBAAuB,MAErC,MADA84B,EAAcvrH,OAAOC,UAAU7B,SAASJ,KAAKwtH,GACvCvqH,MACJwxF,yBACE,GACA,oBAAsB84B,EAClB,qBAAuBvrH,OAAOgM,KAAKw/G,GAAU9oH,KAAK,MAAQ,IAC1D6oH,GAGV,CACA,SAASE,YAAYC,GAEnB,OAAO91E,EADI81E,EAAS1+B,OACR0+B,EAASz+B,SACvB,CACA,SAAS0+B,sBAAsBC,GAC7B,SAASC,EAAYN,EAAaO,GAChC,GAAIF,EAAwB,CAC1B,IAAIxU,EAAYmU,EAAYnU,UAC5B,OAASA,GACHmU,EAAYnU,UAAY,CAAC0U,GAAkBP,EAAYtqF,OAAS,IAClEm2E,EAAUn1G,KAAK6pH,EACpB,CACF,CACD,SAASC,EAAwBR,EAAaS,GAC5C,IAAKJ,EAAwB,YAC7B,KAAO,OAASI,GACdH,EAAYN,EAAaS,GACtBA,EAAoBA,EAAkBz1B,QAC3C,OAAW,IACZ,CACD,SAAS01B,EAAqBD,GAC5B,IAAK,IAAIE,EAAmB,IAAI7tB,IAAO,OAAS2tB,GAC9C,OAASA,EAAkBjtH,IACvBmtH,EAAiBrgH,IAAImgH,EAAkBjtH,IAAKitH,GAC5CE,EAAiBrgH,IAAImgH,EAAkB35G,MAAO25G,GAC/CA,EAAoBA,EAAkBz1B,QAC3C,OAAO21B,CACR,CACD,SAASC,EAASx2B,EAAOmhB,GAIvB,OAHAnhB,EAAQ4hB,qBAAqB5hB,EAAOmhB,IAC9BzkG,MAAQ,EACdsjF,EAAMY,QAAU,KACTZ,CACR,CACD,SAASy2B,EAAWC,EAAUC,EAAiBpgF,GAE7C,OADAmgF,EAASh6G,MAAQ65B,EACZ0/E,EAGD,QADJ1/E,EAAWmgF,EAASx2B,YAGf3pD,EAAWA,EAAS75B,OACVi6G,GACLD,EAASprF,OAAS,SAAWqrF,GAC/BpgF,GAERmgF,EAASprF,OAAS,SACXqrF,IAVGD,EAASprF,OAAS,QAAUqrF,EAWvC,CACD,SAASC,EAAiBF,GAIxB,OAHAT,GACE,OAASS,EAASx2B,YACjBw2B,EAASprF,OAAS,UACdorF,CACR,CACD,SAASG,EAAejB,EAAarhH,EAAS05F,EAAa9J,GACzD,OAAI,OAAS5vF,GAAW,IAAMA,EAAQ2gD,MAEjC3gD,EAAU6tG,oBAAoBnU,EAAa2nB,EAAY3wF,KAAMk/D,IACrDhE,OAASy1B,EAClBrhH,KAEJA,EAAUiiH,EAASjiH,EAAS05F,IACpB9N,OAASy1B,EACVrhH,EACR,CACD,SAASuiH,EAAclB,EAAarhH,EAASuN,EAASqiF,GACpD,IAAIid,EAAct/F,EAAQ5K,KAC1B,OAAIkqG,IAAgBpyB,oBACX+nC,EACLnB,EACArhH,EACAuN,EAAQwtE,MAAMpW,SACdirB,EACAriF,EAAQ1Y,KAGV,OAASmL,IACRA,EAAQ6sG,cAAgBA,GACtB,iBAAoBA,GACnB,OAASA,GACTA,EAAY/xB,WAAaiF,iBACzBwhC,YAAY1U,KAAiB7sG,EAAQ2C,OAIvCw+G,UADCnhH,EAAUiiH,EAASjiH,EAASuN,EAAQwtE,OAClBxtE,GAClBvN,EAAQ4rF,OAASy1B,EAClBrhH,IAUJmhH,UARAnhH,EAAUwtG,4BACRjgG,EAAQ5K,KACR4K,EAAQ1Y,IACR0Y,EAAQwtE,MACR,KACAsmC,EAAY3wF,KACZk/D,GAEiBriF,GACnBvN,EAAQ4rF,OAASy1B,EACVrhH,EACR,CACD,SAASyiH,EAAapB,EAAarhH,EAAS+tG,EAAQne,GAClD,OACE,OAAS5vF,GACT,IAAMA,EAAQ2gD,KACd3gD,EAAQwsF,UAAUvD,gBAAkB8kB,EAAO9kB,eAC3CjpF,EAAQwsF,UAAUtD,iBAAmB6kB,EAAO7kB,iBAGzClpF,EAAU8tG,sBAAsBC,EAAQsT,EAAY3wF,KAAMk/D,IAClDhE,OAASy1B,EAClBrhH,KAEJA,EAAUiiH,EAASjiH,EAAS+tG,EAAOppC,UAAY,KACvCinB,OAASy1B,EACVrhH,EACR,CACD,SAASwiH,EAAenB,EAAarhH,EAAS0iH,EAAU9yB,EAAO/6F,GAC7D,OAAI,OAASmL,GAAW,IAAMA,EAAQ2gD,MAEjC3gD,EAAU2tG,wBACT+U,EACArB,EAAY3wF,KACZk/D,EACA/6F,IAEO+2F,OAASy1B,EAClBrhH,KAEJA,EAAUiiH,EAASjiH,EAAS0iH,IACpB92B,OAASy1B,EACVrhH,EACR,CACD,SAAS2iH,EAAYtB,EAAaC,EAAU1xB,GAC1C,GACG,iBAAoB0xB,GAAY,KAAOA,GACxC,iBAAoBA,GACpB,iBAAoBA,EAEpB,OACGA,EAAWzT,oBACV,GAAKyT,EACLD,EAAY3wF,KACZk/D,IAEQhE,OAASy1B,EACnBC,EAEJ,GAAI,iBAAoBA,GAAY,OAASA,EAAU,CACrD,OAAQA,EAASxmC,UACf,KAAKP,mBACH,OASE4mC,UARCvxB,EAAQ4d,4BACP8T,EAAS3+G,KACT2+G,EAASzsH,IACTysH,EAASvmC,MACT,KACAsmC,EAAY3wF,KACZk/D,GAEe0xB,GAChB1xB,EAAMhE,OAASy1B,EAChBzxB,EAEJ,KAAKrQ,kBACH,OACG+hC,EAAWxT,sBACVwT,EACAD,EAAY3wF,KACZk/D,IAEQhE,OAASy1B,EACnBC,EAEJ,KAAKvhC,gBAGH,OAAO4iC,EAAYtB,EADnBC,GAAW51E,EADA41E,EAASx+B,OACJw+B,EAASv+B,UACiB6M,GAE9C,GAAItO,YAAYggC,IAAaphC,cAAcohC,GACzC,OACGA,EAAW3T,wBACV2T,EACAD,EAAY3wF,KACZk/D,EACA,OAEQhE,OAASy1B,EACnBC,EAEJ,GAAI,mBAAsBA,EAAS9wG,KACjC,OAAOmyG,EAAYtB,EAAaH,eAAeI,GAAW1xB,GAC5D,GAAI0xB,EAASxmC,WAAa6E,mBACxB,OAAOgjC,EACLtB,EACAhP,gCAAgCgP,EAAaC,GAC7C1xB,GAEJwxB,yBAAyBC,EAAaC,EACvC,CACD,OAAO,IACR,CACD,SAASsB,EAAWvB,EAAawB,EAAUvB,EAAU1xB,GACnD,IAAI/6F,EAAM,OAASguH,EAAWA,EAAShuH,IAAM,KAC7C,GACG,iBAAoBysH,GAAY,KAAOA,GACxC,iBAAoBA,GACpB,iBAAoBA,EAEpB,OAAW,OAAKzsH,EACZ,KACAytH,EAAejB,EAAawB,EAAU,GAAKvB,EAAU1xB,GAC3D,GAAI,iBAAoB0xB,GAAY,OAASA,EAAU,CACrD,OAAQA,EAASxmC,UACf,KAAKP,mBACH,OAAO+mC,EAASzsH,MAAQA,EACpB0tH,EAAclB,EAAawB,EAAUvB,EAAU1xB,GAC/C,KACN,KAAKrQ,kBACH,OAAO+hC,EAASzsH,MAAQA,EACpB4tH,EAAapB,EAAawB,EAAUvB,EAAU1xB,GAC9C,KACN,KAAK7P,gBACH,OAGE6iC,EAAWvB,EAAawB,EADvBvB,GADAzsH,EAAMysH,EAASx+B,OACAw+B,EAASv+B,UACmB6M,GAGlD,GAAItO,YAAYggC,IAAaphC,cAAcohC,GACzC,OAAW,OAAKzsH,EACZ,KACA2tH,EAAenB,EAAawB,EAAUvB,EAAU1xB,EAAO,MAC7D,GAAI,mBAAsB0xB,EAAS9wG,KACjC,OAAOoyG,EACLvB,EACAwB,EACA3B,eAAeI,GACf1xB,GAEJ,GAAI0xB,EAASxmC,WAAa6E,mBACxB,OAAOijC,EACLvB,EACAwB,EACAxQ,gCAAgCgP,EAAaC,GAC7C1xB,GAEJwxB,yBAAyBC,EAAaC,EACvC,CACD,OAAO,IACR,CACD,SAASwB,EACPd,EACAX,EACA0B,EACAzB,EACA1xB,GAEA,GACG,iBAAoB0xB,GAAY,KAAOA,GACxC,iBAAoBA,GACpB,iBAAoBA,EAEpB,OAEEgB,EAAejB,EADdW,EAAmBA,EAAiB7hH,IAAI4iH,IAAW,KACN,GAAKzB,EAAU1xB,GAEjE,GAAI,iBAAoB0xB,GAAY,OAASA,EAAU,CACrD,OAAQA,EAASxmC,UACf,KAAKP,mBACH,OAKEgoC,EAAclB,EAJbW,EACCA,EAAiB7hH,IACf,OAASmhH,EAASzsH,IAAMkuH,EAASzB,EAASzsH,MACvC,KACsCysH,EAAU1xB,GAE3D,KAAKrQ,kBACH,OAKEkjC,EAAapB,EAJZW,EACCA,EAAiB7hH,IACf,OAASmhH,EAASzsH,IAAMkuH,EAASzB,EAASzsH,MACvC,KACqCysH,EAAU1xB,GAE1D,KAAK7P,gBAGH,OAAO+iC,EACLd,EACAX,EACA0B,EAJFzB,GAAW51E,EADA41E,EAASx+B,OACJw+B,EAASv+B,UAMvB6M,GAGN,GAAItO,YAAYggC,IAAaphC,cAAcohC,GACzC,OAEEkB,EAAenB,EADdW,EAAmBA,EAAiB7hH,IAAI4iH,IAAW,KACNzB,EAAU1xB,EAAO,MAEnE,GAAI,mBAAsB0xB,EAAS9wG,KACjC,OAAOsyG,EACLd,EACAX,EACA0B,EACA7B,eAAeI,GACf1xB,GAEJ,GAAI0xB,EAASxmC,WAAa6E,mBACxB,OAAOmjC,EACLd,EACAX,EACA0B,EACA1Q,gCAAgCgP,EAAaC,GAC7C1xB,GAEJwxB,yBAAyBC,EAAaC,EACvC,CACD,OAAW,IACZ,CA4KD,SAAS0B,EACP3B,EACAS,EACAR,EACA1xB,GAOA,GALA,iBAAoB0xB,GAClB,OAASA,GACTA,EAAS3+G,OAAS83E,qBAClB,OAAS6mC,EAASzsH,MACjBysH,EAAWA,EAASvmC,MAAMpW,UACzB,iBAAoB28C,GAAY,OAASA,EAAU,CACrD,OAAQA,EAASxmC,UACf,KAAKP,mBACH7iC,EAAG,CACD,IAAK,IAAI7iD,EAAMysH,EAASzsH,IAAK,OAASitH,GAAqB,CACzD,GAAIA,EAAkBjtH,MAAQA,EAAK,CAEjC,IADAA,EAAMysH,EAAS3+G,QACH83E,qBACV,GAAI,IAAMqnC,EAAkBnhE,IAAK,CAC/BkhE,EACER,EACAS,EAAkBz1B,UAEpBuD,EAAQqyB,EACNH,EACAR,EAASvmC,MAAMpW,WAEXinB,OAASy1B,EACfA,EAAczxB,EACd,MAAMl4C,CACP,OAEDoqE,GAAAA,EAAkBjV,cAAgBh4G,GACjC,iBAAoBA,GACnB,OAASA,GACTA,EAAIimF,WAAaiF,iBACjBwhC,YAAY1sH,KAASitH,EAAkBn/G,KACzC,CACAk/G,EACER,EACAS,EAAkBz1B,SAGpB80B,UADAvxB,EAAQqyB,EAASH,EAAmBR,EAASvmC,OAC5BumC,GACjB1xB,EAAMhE,OAASy1B,EACfA,EAAczxB,EACd,MAAMl4C,CACP,CACDmqE,EAAwBR,EAAaS,GACrC,KAChB,CAAqBH,EAAYN,EAAaS,GAChCA,EAAoBA,EAAkBz1B,OACvC,CACDi1B,EAAS3+G,OAAS83E,sBACZmV,EAAQ+d,wBACR2T,EAASvmC,MAAMpW,SACf08C,EAAY3wF,KACZk/D,EACA0xB,EAASzsH,MAEJ+2F,OAASy1B,EACfA,EAAczxB,IASfuxB,UAREvxB,EAAQ4d,4BACR8T,EAAS3+G,KACT2+G,EAASzsH,IACTysH,EAASvmC,MACT,KACAsmC,EAAY3wF,KACZk/D,GAEe0xB,GAChB1xB,EAAMhE,OAASy1B,EACfA,EAAczxB,EACpB,CACD,OAAOyyB,EAAiBhB,GAC1B,KAAK9hC,kBACH7nC,EAAG,CACD,IAAK7iD,EAAMysH,EAASzsH,IAAK,OAASitH,GAAqB,CACrD,GAAIA,EAAkBjtH,MAAQA,EAC5B,CAAA,GACE,IAAMitH,EAAkBnhE,KACxBmhE,EAAkBt1B,UAAUvD,gBAC1Bq4B,EAASr4B,eACX64B,EAAkBt1B,UAAUtD,iBAC1Bo4B,EAASp4B,eACX,CACA24B,EACER,EACAS,EAAkBz1B,UAEpBuD,EAAQqyB,EAASH,EAAmBR,EAAS38C,UAAY,KACnDinB,OAASy1B,EACfA,EAAczxB,EACd,MAAMl4C,CACxB,CACkBmqE,EAAwBR,EAAaS,GACrC,KACD,CACEH,EAAYN,EAAaS,GAC9BA,EAAoBA,EAAkBz1B,OACvC,EACDuD,EAAQke,sBAAsBwT,EAAUD,EAAY3wF,KAAMk/D,IACpDhE,OAASy1B,EACfA,EAAczxB,CACf,CACD,OAAOyyB,EAAiBhB,GAC1B,KAAKthC,gBACH,OAGEijC,EACE3B,EACAS,EAHDR,GADAzsH,EAAMysH,EAASx+B,OACAw+B,EAASv+B,UAKvB6M,GAIR,GAAItO,YAAYggC,GACd,OAnSN,SACED,EACAS,EACAmB,EACArzB,GAEA,IACE,IAAIszB,EAAsB,KACxBC,EAAmB,KACnBN,EAAWf,EACXiB,EAAUjB,EAAoB,EAC9BsB,EAAe,KACjB,OAASP,GAAYE,EAASE,EAAYpvH,OAC1CkvH,IACA,CACAF,EAAS16G,MAAQ46G,GACXK,EAAeP,EAAYA,EAAW,MACvCO,EAAeP,EAASx2B,QAC7B,IAAI81B,EAAWS,EACbvB,EACAwB,EACAI,EAAYF,GACZnzB,GAEF,GAAI,OAASuyB,EAAU,CACrB,OAASU,IAAaA,EAAWO,GACjC,KACD,CACD1B,GACEmB,GACA,OAASV,EAASx2B,WAClBg2B,EAAYN,EAAawB,GAC3Bf,EAAoBI,EAAWC,EAAUL,EAAmBiB,GAC5D,OAASI,EACJD,EAAsBf,EACtBgB,EAAiB92B,QAAU81B,EAChCgB,EAAmBhB,EACnBU,EAAWO,CACZ,CACD,GAAIL,IAAWE,EAAYpvH,OACzB,OACEguH,EAAwBR,EAAawB,GACrC9pB,aAAe2V,aAAa2S,EAAa0B,GACzCG,EAEJ,GAAI,OAASL,EAAU,CACrB,KAAOE,EAASE,EAAYpvH,OAAQkvH,IAEhC,QADDF,EAAWF,EAAYtB,EAAa4B,EAAYF,GAASnzB,MAEpDkyB,EAAoBI,EACpBW,EACAf,EACAiB,GAEF,OAASI,EACJD,EAAsBL,EACtBM,EAAiB92B,QAAUw2B,EAC/BM,EAAmBN,GAE1B,OADA9pB,aAAe2V,aAAa2S,EAAa0B,GAClCG,CACR,CACD,IACEL,EAAWd,EAAqBc,GAChCE,EAASE,EAAYpvH,OACrBkvH,IASE,QAPDK,EAAeN,EACdD,EACAxB,EACA0B,EACAE,EAAYF,GACZnzB,MAGG8xB,GACC,OAAS0B,EAAaz3B,WACtBk3B,EAASQ,OACP,OAASD,EAAavuH,IAAMkuH,EAASK,EAAavuH,KAErDitH,EAAoBI,EACnBkB,EACAtB,EACAiB,GAEF,OAASI,EACJD,EAAsBE,EACtBD,EAAiB92B,QAAU+2B,EAC/BD,EAAmBC,GAM1B,OALA1B,GACEmB,EAASljF,QAAQ,SAAU4mC,GACzB,OAAOo7C,EAAYN,EAAa96C,EACxC,GACIwyB,aAAe2V,aAAa2S,EAAa0B,GAClCG,CACR,CAqMYI,CACLjC,EACAS,EACAR,EACA1xB,GAEJ,GAAI1P,cAAcohC,GAAW,CAE3B,GAAI,mBADJzsH,EAAMqrF,cAAcohC,IACW,MAAMvqH,MAAMwxF,yBAAuB,MAElE,OA9MN,SACE84B,EACAS,EACAmB,EACArzB,GAEA,GAAI,MAAQqzB,EAAa,MAAMlsH,MAAMwxF,yBAAuB,MAC5D,IACE,IAAI26B,EAAsB,KACxBC,EAAmB,KACnBN,EAAWf,EACXiB,EAAUjB,EAAoB,EAC9BsB,EAAe,KACfpyE,EAAOiyE,EAAY9qH,OACrB,OAAS0qH,IAAa7xE,EAAKtnC,KAC3Bq5G,IAAU/xE,EAAOiyE,EAAY9qH,OAC7B,CACA0qH,EAAS16G,MAAQ46G,GACXK,EAAeP,EAAYA,EAAW,MACvCO,EAAeP,EAASx2B,QAC7B,IAAI81B,EAAWS,EAAWvB,EAAawB,EAAU7xE,EAAKxwC,MAAOovF,GAC7D,GAAI,OAASuyB,EAAU,CACrB,OAASU,IAAaA,EAAWO,GACjC,KACD,CACD1B,GACEmB,GACA,OAASV,EAASx2B,WAClBg2B,EAAYN,EAAawB,GAC3Bf,EAAoBI,EAAWC,EAAUL,EAAmBiB,GAC5D,OAASI,EACJD,EAAsBf,EACtBgB,EAAiB92B,QAAU81B,EAChCgB,EAAmBhB,EACnBU,EAAWO,CACZ,CACD,GAAIpyE,EAAKtnC,KACP,OACEm4G,EAAwBR,EAAawB,GACrC9pB,aAAe2V,aAAa2S,EAAa0B,GACzCG,EAEJ,GAAI,OAASL,EAAU,CACrB,MAAQ7xE,EAAKtnC,KAAMq5G,IAAU/xE,EAAOiyE,EAAY9qH,OAE5C,QADD64C,EAAO2xE,EAAYtB,EAAarwE,EAAKxwC,MAAOovF,MAEvCkyB,EAAoBI,EAAWlxE,EAAM8wE,EAAmBiB,GAC1D,OAASI,EACJD,EAAsBlyE,EACtBmyE,EAAiB92B,QAAUr7C,EAC/BmyE,EAAmBnyE,GAE1B,OADA+nD,aAAe2V,aAAa2S,EAAa0B,GAClCG,CACR,CACD,IACEL,EAAWd,EAAqBc,IAC/B7xE,EAAKtnC,KACNq5G,IAAU/xE,EAAOiyE,EAAY9qH,OAG3B,QADD64C,EAAO8xE,EAAcD,EAAUxB,EAAa0B,EAAQ/xE,EAAKxwC,MAAOovF,MAE5D8xB,GACC,OAAS1wE,EAAK26C,WACdk3B,EAASQ,OAAO,OAASryE,EAAKn8C,IAAMkuH,EAAS/xE,EAAKn8C,KACnDitH,EAAoBI,EAAWlxE,EAAM8wE,EAAmBiB,GACzD,OAASI,EACJD,EAAsBlyE,EACtBmyE,EAAiB92B,QAAUr7C,EAC/BmyE,EAAmBnyE,GAM1B,OALA0wE,GACEmB,EAASljF,QAAQ,SAAU4mC,GACzB,OAAOo7C,EAAYN,EAAa96C,EACxC,GACIwyB,aAAe2V,aAAa2S,EAAa0B,GAClCG,CACR,CAmIYK,CACLlC,EACAS,EAHFR,EAAWzsH,EAAIf,KAAKwtH,GAKlB1xB,EAEH,CACD,GAAI,mBAAsB0xB,EAAS9wG,KACjC,OAAOwyG,EACL3B,EACAS,EACAZ,eAAeI,GACf1xB,GAEJ,GAAI0xB,EAASxmC,WAAa6E,mBACxB,OAAOqjC,EACL3B,EACAS,EACAzP,gCAAgCgP,EAAaC,GAC7C1xB,GAEJwxB,yBAAyBC,EAAaC,EACvC,CACD,MAAQ,iBAAoBA,GAAY,KAAOA,GAC7C,iBAAoBA,GACpB,iBAAoBA,GAChBA,EAAW,GAAKA,EAClB,OAASQ,GAAqB,IAAMA,EAAkBnhE,KACjDkhE,EAAwBR,EAAaS,EAAkBz1B,UACvDuD,EAAQqyB,EAASH,EAAmBR,IAC9B11B,OAASy1B,EACfA,EAAczxB,IACdiyB,EAAwBR,EAAaS,IACrClyB,EAAQie,oBAAoByT,EAAUD,EAAY3wF,KAAMk/D,IAClDhE,OAASy1B,EACfA,EAAczxB,GACnByyB,EAAiBhB,IACjBQ,EAAwBR,EAAaS,EAC1C,CACD,OAAiBT,SAAAA,EAAaS,EAAmBR,EAAU1xB,GACzD,IACEqxB,qBAAuB,EACvB,IAAIuC,EAAkBR,EACpB3B,EACAS,EACAR,EACA1xB,GAGF,OADAolB,cAAgB,KACTwO,CACR,CAAC,MAAOl9G,GACP,GAAIA,IAAMmuG,mBAAqBnuG,IAAMquG,wBAAyB,MAAMruG,EACpE,IAAImlF,EAAQ0hB,qBAAqB,GAAI7mG,EAAG,KAAM+6G,EAAY3wF,MAG1D,OAFA+6D,EAAMmE,MAAQA,EACdnE,EAAMG,OAASy1B,EACR51B,CACb,CAEA,CACA,CACA,IAAIg4B,qBAAuBhC,uBAAsB,GAC/CiC,iBAAmBjC,uBAAsB,GACzCkC,2BAA6Br2B,aAAa,MAC1Cs2B,cAAgB,KAClB,SAASC,+BAA+BC,GACtC,IAAI9jH,EAAU8jH,EAAQn4B,UACtB5zF,KAAKgsH,oBAAmD,EAA9BA,oBAAoB/jH,SAC9CjI,KAAK4rH,2BAA4BG,GACjC,OAASF,gBACN,OAAS5jH,GAAW,OAASs3G,6BAA6Bt3G,SAEvD,OAASA,EAAQ+rF,iBADhB63B,cAAgBE,EAEzB,CACA,SAASE,6BAA6Bv4B,GACpC,GAAI,KAAOA,EAAM9qC,KACf,GACG5oD,KAAKgsH,oBAAqBA,oBAAoB/jH,SAC/CjI,KAAK4rH,2BAA4Bl4B,GACjC,OAASm4B,cACT,CACA,IAAI5jH,EAAUyrF,EAAME,UACpB,OAAS3rF,GACP,OAASA,EAAQ+rF,gBAChB63B,cAAgBn4B,EACpB,OACIw4B,6BACT,CACA,SAASA,8BACPlsH,KAAKgsH,oBAAqBA,oBAAoB/jH,SAC9CjI,KAAK4rH,2BAA4BA,2BAA2B3jH,QAC9D,CACA,SAASkkH,mBAAmBz4B,GAC1Bh4E,IAAIkwG,4BACJC,gBAAkBn4B,IAAUm4B,cAAgB,MAC5CnwG,IAAIswG,oBACN,CACA,IAAIA,oBAAsBz2B,aAAa,GACvC,SAAS62B,mBAAmBC,GAC1B,IAAK,IAAI1pH,EAAO0pH,EAAK,OAAS1pH,GAAQ,CACpC,GAAI,KAAOA,EAAKimD,IAAK,CACnB,IAAI9lD,EAAQH,EAAKqxF,cACjB,GACE,OAASlxF,IAET,QADEA,EAAQA,EAAMmxF,aAEd,OAASnxF,EAAM3C,MACfmsH,2BAA2BxpH,IAE7B,OAAOH,CACf,MAAe,GAAA,KAAOA,EAAKimD,UAAO,IAAWjmD,EAAKsyG,cAAcsX,aAC1D,GAAwB,IAAb5pH,EAAKq8B,MAAc,OAAOr8B,OAChC,GAAI,OAASA,EAAK6rE,MAAO,CAC9B7rE,EAAK6rE,MAAMqlB,OAASlxF,EACpBA,EAAOA,EAAK6rE,MACZ,QACD,CACD,GAAI7rE,IAAS0pH,EAAK,MAClB,KAAO,OAAS1pH,EAAK2xF,SAAW,CAC9B,GAAI,OAAS3xF,EAAKkxF,QAAUlxF,EAAKkxF,SAAWw4B,EAAK,YACjD1pH,EAAOA,EAAKkxF,MACb,CACDlxF,EAAK2xF,QAAQT,OAASlxF,EAAKkxF,OAC3BlxF,EAAOA,EAAK2xF,OACb,CACD,OAAO,IACT,CACA,SAASk4B,2BACPptB,EACAnjF,EACAwwG,EACAC,GAIAD,EACE,OAFFA,EAA2BA,EAAyBC,EADpDzwG,EAAOmjF,EAAepL,gBAIhB/3E,EACAkJ,OAAO,CAAA,EAAIlJ,EAAMwwG,GACvBrtB,EAAepL,cAAgBy4B,EAC/B,IAAMrtB,EAAevH,QAClBuH,EAAe4V,YAAY0I,UAAY+O,EAC5C,CACA,IAAIE,sBAAwB,CAC1BlkC,gBAAiB,SAAUuT,EAAM5Q,EAASnoF,GACxC+4F,EAAOA,EAAK4wB,gBACZ,IAAIj0B,EAAOkvB,oBACT14B,EAAS8uB,aAAatlB,GACxBxJ,EAAO/D,QAAUA,EACjB,MAAWnoF,IAAkCksF,EAAOlsF,SAAWA,GAE/D,QADAmoF,EAAU8yB,cAAcliB,EAAM7M,EAAQwJ,MAEnC4rB,sBAAsBn5B,EAAS4Q,EAAMrD,GACtCylB,oBAAoBhzB,EAAS4Q,EAAMrD,GACtC,EACDnQ,oBAAqB,SAAUwT,EAAM5Q,EAASnoF,GAC5C+4F,EAAOA,EAAK4wB,gBACZ,IAAIj0B,EAAOkvB,oBACT14B,EAAS8uB,aAAatlB,GACxBxJ,EAAOvmC,IAAM,EACbumC,EAAO/D,QAAUA,EACjB,MAAWnoF,IAAkCksF,EAAOlsF,SAAWA,GAE/D,QADAmoF,EAAU8yB,cAAcliB,EAAM7M,EAAQwJ,MAEnC4rB,sBAAsBn5B,EAAS4Q,EAAMrD,GACtCylB,oBAAoBhzB,EAAS4Q,EAAMrD,GACtC,EACDpQ,mBAAoB,SAAUyT,EAAM/4F,GAClC+4F,EAAOA,EAAK4wB,gBACZ,IAAIj0B,EAAOkvB,oBACT14B,EAAS8uB,aAAatlB,GACxBxJ,EAAOvmC,IAAM,EACb,MAAW3lD,IAAkCksF,EAAOlsF,SAAWA,GAE/D,QADAA,EAAWi7G,cAAcliB,EAAM7M,EAAQwJ,MAEpC4rB,sBAAsBthH,EAAU+4F,EAAMrD,GACvCylB,oBAAoBn7G,EAAU+4F,EAAMrD,GACvC,GAEH,SAASk0B,2BACPztB,EACAnjF,EACA6wG,EACAC,EACArgB,EACAD,EACAugB,GAGA,MAAO,mBADP5tB,EAAiBA,EAAe3K,WACYw4B,sBACxC7tB,EAAe6tB,sBAAsBF,EAAUtgB,EAAUugB,IACzD/wG,EAAKje,YAAaie,EAAKje,UAAUsrF,wBAC9BqmB,aAAamd,EAAUC,KAAcpd,aAAajD,EAAUD,GAErE,CACA,SAASygB,8BACP9tB,EACA1/F,EACAqtH,EACAC,GAEA5tB,EAAiB1/F,EAASoD,MAC1B,mBAAsBpD,EAASytH,2BAC7BztH,EAASytH,0BAA0BJ,EAAUC,GAC/C,mBAAsBttH,EAAS0tH,kCAC7B1tH,EAAS0tH,iCAAiCL,EAAUC,GACtDttH,EAASoD,QAAUs8F,GACjButB,sBAAsBnkC,oBAAoB9oF,EAAUA,EAASoD,MAAO,KACxE,CACA,SAASuqH,2BAA2B1kC,EAAW2kC,GAC7C,IAAIP,EAAWO,EACf,GAAI,QAASA,EAEX,IAAK,IAAI7qG,KADTsqG,EAAW,GACUO,EACnB,QAAU7qG,IAAasqG,EAAStqG,GAAY6qG,EAAU7qG,IAE1D,GAAKkmE,EAAYA,EAAU6E,aAEzB,IAAK,IAAI+/B,KADTR,IAAaO,IAAcP,EAAW5nG,OAAO,CAAA,EAAI4nG,IACzBpkC,OACtB,IAAWokC,EAASQ,KACjBR,EAASQ,GAAe5kC,EAAU4kC,IAEzC,OAAOR,CACT,CACA,IAAIvhC,kBACF,mBAAsBC,YAClBA,YACA,SAAUtyE,GACR,GACE,iBAAoB5U,QACpB,mBAAsBA,OAAOmnF,WAC7B,CACA,IAAI37E,EAAQ,IAAIxL,OAAOmnF,WAAW,QAAS,CACzCC,SAAS,EACTC,YAAY,EACZ33C,QACE,iBAAoB96B,GACpB,OAASA,GACT,iBAAoBA,EAAM86B,QACtB35B,OAAOnB,EAAM86B,SACb35B,OAAOnB,GACbA,MAAOA,IAET,IAAK5U,OAAOsnF,cAAc97E,GAAQ,MAC5C,SACU,iBAAoB/U,SACpB,mBAAsBA,QAAQuG,KAG9B,YADAvG,QAAQuG,KAAK,oBAAqB4X,GAGpCu7B,QAAQv7B,MAAMA,EACtB,EACA,SAASq0G,uBAAuBr0G,GAC9BqyE,kBAAkBryE,EACpB,CACA,SAASs0G,qBAAqBt0G,GAC5Bu7B,QAAQv7B,MAAMA,EAChB,CACA,SAASu0G,0BAA0Bv0G,GACjCqyE,kBAAkBryE,EACpB,CACA,SAASw0G,iBAAiB3xF,EAAM4xF,GAC9B,KAEEC,EADsB7xF,EAAK6xF,iBACXD,EAAUnlH,MAAO,CAAEqlH,eAAgBF,EAAU55E,OAC9D,CAAC,MAAO+5E,GACP13G,WAAW,WACT,MAAM03G,CACZ,EACG,CACH,CACA,SAASC,eAAehyF,EAAMiyF,EAAUL,GACtC,KAEEM,EADoBlyF,EAAKkyF,eACXN,EAAUnlH,MAAO,CAC7BqlH,eAAgBF,EAAU55E,MAC1Bm6E,cAAe,IAAMF,EAASrlE,IAAMqlE,EAASx5B,UAAY,MAE5D,CAAC,MAAO25B,GACP/3G,WAAW,WACT,MAAM+3G,CACZ,EACG,CACH,CACA,SAASC,sBAAsBryF,EAAM4xF,EAAWj1B,GAO9C,OANAA,EAAOslB,aAAatlB,IACf/vC,IAAM,EACX+vC,EAAKvN,QAAU,CAAE51E,QAAS,MAC1BmjF,EAAK11F,SAAW,WACd0qH,iBAAiB3xF,EAAM4xF,EAC3B,EACSj1B,CACT,CACA,SAAS21B,uBAAuB31B,GAG9B,OAFAA,EAAOslB,aAAatlB,IACf/vC,IAAM,EACJ+vC,CACT,CACA,SAAS41B,2BAA2Bp/B,EAAQnzD,EAAM03D,EAAOk6B,GACvD,IAAIY,EAA2B96B,EAAM9oF,KAAK4jH,yBAC1C,GAAI,mBAAsBA,EAA0B,CAClD,IAAIr1G,EAAQy0G,EAAUnlH,MACtB0mF,EAAO/D,QAAU,WACf,OAAOojC,EAAyBr1G,EACtC,EACIg2E,EAAOlsF,SAAW,WAChB+qH,eAAehyF,EAAM03D,EAAOk6B,EAClC,CACG,CACD,IAAI5xB,EAAOtI,EAAMe,UACjB,OAASuH,GACP,mBAAsBA,EAAKyyB,oBAC1Bt/B,EAAOlsF,SAAW,WACjB+qH,eAAehyF,EAAM03D,EAAOk6B,GAC5B,mBAAsBY,IACnB,OAASE,uCACLA,uCAAyC,IAAIlyB,IAAI,CAAC38F,OACnD6uH,uCAAuC5xB,IAAIj9F,OACjD,IAAIm0C,EAAQ45E,EAAU55E,MACtBn0C,KAAK4uH,kBAAkBb,EAAUnlH,MAAO,CACtCqlH,eAAgB,OAAS95E,EAAQA,EAAQ,IAEjD,EACA,CACA,SAAS26E,eACP3yF,EACAstF,EACAjV,EACA5rG,EACAmmH,GAGA,GADAva,EAAYr1E,OAAS,MAEnB,OAASv2B,GACT,iBAAoBA,GACpB,mBAAsBA,EAAMgQ,KAC5B,CAUA,GARA,QADA6wG,EAAcjV,EAAYzgB,YAExBimB,8BACEyP,EACAjV,EACAua,GACA,GAGA,QADJva,EAAcuX,2BAA2B3jH,SACf,CACxB,OAAQosG,EAAYzrD,KAClB,KAAO,GACL,OACE,OAASijE,cACLgD,kCACA,OAASxa,EAAYzgB,WACrB,IAAMk7B,+BACLA,6BAA+B,GACnCza,EAAYr1E,QAAU,IACtBq1E,EAAYr1E,OAAS,MACrBq1E,EAAYxc,MAAQ+2B,EACrBnmH,IAAUo0G,4BACLxI,EAAYr1E,OAAS,OAEtB,QADEsqF,EAAcjV,EAAYW,aAEvBX,EAAYW,YAAc,IAAIxY,IAAI,CAAC/zF,IACpC6gH,EAAYxsB,IAAIr0F,GACpBsmH,mBAAmB/yF,EAAMvzB,EAAOmmH,KACpC,EAEJ,KAAO,GACL,OACGva,EAAYr1E,OAAS,MACtBv2B,IAAUo0G,4BACLxI,EAAYr1E,OAAS,OAEtB,QADEsqF,EAAcjV,EAAYW,cAEtBsU,EAAc,CACd0F,YAAa,KACbC,gBAAiB,KACjBC,WAAY,IAAI1yB,IAAI,CAAC/zF,KAEtB4rG,EAAYW,YAAcsU,GAE3B,QADEjV,EAAciV,EAAY4F,YAEvB5F,EAAY4F,WAAa,IAAI1yB,IAAI,CAAC/zF,IACnC4rG,EAAYvX,IAAIr0F,GACxBsmH,mBAAmB/yF,EAAMvzB,EAAOmmH,KACpC,EAGN,MAAM5vH,MAAMwxF,yBAAuB,IAAK6jB,EAAYzrD,KACrD,CAGD,OAFAmmE,mBAAmB/yF,EAAMvzB,EAAOmmH,GAChCC,mCACO,CACR,CACD,GAAI7tB,YACF,OAEE,QADCsoB,EAAcsC,2BAA2B3jH,YAEV,MAApBqhH,EAAYtqF,SAAmBsqF,EAAYtqF,OAAS,KAC3DsqF,EAAYtqF,OAAS,MACrBsqF,EAAYzxB,MAAQ+2B,EACrBnmH,IAAU8uG,4BAERE,oBAAoBhE,2BADlBz3E,EAAOh9B,MAAMwxF,yBAAuB,KAAM,CAAE2+B,MAAO1mH,IACA4rG,MACtD5rG,IAAU8uG,4BAITE,oBACEhE,2BAJA6V,EAActqH,MAAMwxF,yBAAuB,KAAM,CACjD2+B,MAAO1mH,IAGiC4rG,KAE3Cr4E,EAAOA,EAAK/zB,QAAQ2rF,WACf50D,OAAS,MACd4vF,IAAoBA,EACpB5yF,EAAK67D,OAAS+2B,EACdnmH,EAAQgrG,2BAA2BhrG,EAAO4rG,GAM3CiK,sBAAsBtiF,EALrB4yF,EAAkBP,sBACjBryF,EAAKy4D,UACLhsF,EACAmmH,IAGF,IAAME,+BACHA,6BAA+B,KACtC,EAEJ,IAAIM,EAAepwH,MAAMwxF,yBAAuB,KAAM,CAAE2+B,MAAO1mH,IAM/D,GALA2mH,EAAe3b,2BAA2B2b,EAAc/a,GACxD,OAASgb,mCACJA,mCAAqC,CAACD,GACvCC,mCAAmCrvH,KAAKovH,GAC5C,IAAMN,+BAAiCA,6BAA+B,GAClE,OAASxF,EAAa,OAAO,EACjC7gH,EAAQgrG,2BAA2BhrG,EAAO4rG,GAC1CA,EAAciV,EACd,EAAG,CACD,OAAQjV,EAAYzrD,KAClB,KAAM,EACJ,OACGyrD,EAAYr1E,OAAS,MACrBhD,EAAO4yF,GAAmBA,EAC1Bva,EAAYxc,OAAS77D,EAEtBsiF,sBAAsBjK,EADrBr4E,EAAOqyF,sBAAsBha,EAAY5f,UAAWhsF,EAAOuzB,KAE5D,EAEJ,KAAK,EACH,GACIstF,EAAcjV,EAAYzpG,KAC3BwkH,EAAe/a,EAAY5f,YACD,IAApB4f,EAAYr1E,OAChB,mBAAsBsqF,EAAYkF,2BAChC,OAASY,GACR,mBAAsBA,EAAaX,mBAClC,OAASC,wCACPA,uCAAuCpsB,IAAI8sB,KAEpD,OACG/a,EAAYr1E,OAAS,MACrB4vF,IAAoBA,EACpBva,EAAYxc,OAAS+2B,EAEtBL,2BADCK,EAAkBN,uBAAuBM,GAGxC5yF,EACAq4E,EACA5rG,GAEF61G,sBAAsBjK,EAAaua,IACnC,EAGRva,EAAcA,EAAYxgB,MAC9B,OAAW,OAASwgB,GAClB,OAAO,CACT,CACA,IAAIib,4BAA8BtwH,MAAMwxF,yBAAuB,MAC7D6wB,kBAAmB,EACrB,SAASkO,kBAAkBtnH,EAASm3F,EAAgBowB,EAAc/2B,GAChE2G,EAAe5wB,MACb,OAASvmE,EACL0jH,iBAAiBvsB,EAAgB,KAAMowB,EAAc/2B,GACrDizB,qBACEtsB,EACAn3F,EAAQumE,MACRghD,EACA/2B,EAEV,CACA,SAASg3B,iBACPxnH,EACAm3F,EACAzW,EACA+jC,EACAj0B,GAEA9P,EAAYA,EAAUgF,OACtB,IAAI7K,EAAMsc,EAAetc,IACzB,GAAI,QAAS4pC,EAAW,CACtB,IAAIgD,EAAkB,CAAE,EACxB,IAAK,IAAI5yH,KAAO4vH,EACd,QAAU5vH,IAAQ4yH,EAAgB5yH,GAAO4vH,EAAU5vH,GACzD,MAAS4yH,EAAkBhD,EAWzB,OAVAvS,qBAAqB/a,GACrBstB,EAAY9L,gBACV34G,EACAm3F,EACAzW,EACA+mC,EACA5sC,EACA2V,GAEF37F,EAAMilH,uBACF,OAAS95G,GAAYo5G,kBAKzBrgB,aAAelkG,GAAOm6G,uBAAuB7X,GAC7CA,EAAepgE,OAAS,EACxBuwF,kBAAkBtnH,EAASm3F,EAAgBstB,EAAWj0B,GAC/C2G,EAAe5wB,QANlByzC,aAAah6G,EAASm3F,EAAgB3G,GACtCk3B,6BAA6B1nH,EAASm3F,EAAgB3G,GAM5D,CACA,SAASm3B,oBACP3nH,EACAm3F,EACAzW,EACA+jC,EACAj0B,GAEA,GAAI,OAASxwF,EAAS,CACpB,IAAI2C,EAAO+9E,EAAU/9E,KACrB,MACE,mBAAsBA,GACrByqG,gBAAgBzqG,SACjB,IAAWA,EAAK4iF,cAChB,OAAS7E,EAAUpF,UAarBt7E,EAAUwtG,4BACR9sB,EAAU/9E,KACV,KACA8hH,EACAttB,EACAA,EAAezmE,KACf8/D,IAEM3V,IAAMsc,EAAetc,IAC7B76E,EAAQ4rF,OAASuL,EACTA,EAAe5wB,MAAQvmE,IApB1Bm3F,EAAex2C,IAAM,GACrBw2C,EAAex0F,KAAOA,EACvBilH,0BACE5nH,EACAm3F,EACAx0F,EACA8hH,EACAj0B,GAcP,CAED,GADA7tF,EAAO3C,EAAQumE,OACVshD,8BAA8B7nH,EAASwwF,GAAc,CACxD,IAAIs3B,EAAYnlH,EAAKqqG,cAGrB,IADAtsB,EAAY,QADZA,EAAYA,EAAUpF,SACWoF,EAAYgnB,cAC/BogB,EAAWrD,IAAczkH,EAAQ66E,MAAQsc,EAAetc,IACpE,OAAO6sC,6BAA6B1nH,EAASm3F,EAAgB3G,EAChE,CAKD,OAJA2G,EAAepgE,OAAS,GACxB/2B,EAAUqtG,qBAAqB1qG,EAAM8hH,IAC7B5pC,IAAMsc,EAAetc,IAC7B76E,EAAQ4rF,OAASuL,EACTA,EAAe5wB,MAAQvmE,CACjC,CACA,SAAS4nH,0BACP5nH,EACAm3F,EACAzW,EACA+jC,EACAj0B,GAEA,GAAI,OAASxwF,EAAS,CACpB,IAAI8nH,EAAY9nH,EAAQgtG,cACxB,GACEtF,aAAaogB,EAAWrD,IACxBzkH,EAAQ66E,MAAQsc,EAAetc,IAE/B,IACIu+B,kBAAmB,EACpBjiB,EAAeyV,aAAe6X,EAAYqD,GAC3CD,8BAA8B7nH,EAASwwF,GAKpC,OAAA2G,EAAevH,MAAQ5vF,EAAQ4vF,MAChC83B,6BAA6B1nH,EAASm3F,EAAgB3G,GAJjC,OAAhBxwF,EAAQ+2B,QAAoBqiF,kBAAmB,EAIc,CAEzE,CACD,OAAO2O,wBACL/nH,EACAm3F,EACAzW,EACA+jC,EACAj0B,EAEJ,CACA,SAASw3B,yBAAyBhoH,EAASm3F,EAAgB3G,GACzD,IAAIi0B,EAAYttB,EAAeyV,aAC7B2a,EAAe9C,EAAU9/C,SACzBs4C,EAAY,OAASj9G,EAAUA,EAAQ+rF,cAAgB,KACzD,GAAI,WAAa04B,EAAU/zF,KAAM,CAC/B,GAAkC,IAAvBymE,EAAepgE,MAAc,CAGtC,GAFA0tF,EACE,OAASxH,EAAYA,EAAUvF,UAAYlnB,EAAcA,EACvD,OAASxwF,EAAS,CAEpB,IADAunH,EAAepwB,EAAe5wB,MAAQvmE,EAAQumE,MACzC02C,EAAY,EAAG,OAASsK,GAC1BtK,EACCA,EAAYsK,EAAa33B,MAAQ23B,EAAajb,WAC7Cib,EAAeA,EAAal7B,QACjC8K,EAAemV,WAAa2Q,GAAawH,CACjD,MAActtB,EAAemV,WAAa,EAAKnV,EAAe5wB,MAAQ,KAChE,OAAO0hD,8BACLjoH,EACAm3F,EACAstB,EACAj0B,EAEH,CACD,KAAyB,UAAdA,GAaN,OAAA2G,EAAevH,MAAQuH,EAAemV,WAAa,UACpD2b,8BACEjoH,EACAm3F,EACA,OAAS8lB,EAAYA,EAAUvF,UAAYlnB,EAAcA,EACzDA,GAjBH2G,EAAepL,cAAgB,CAAE2rB,UAAW,EAAGwQ,UAAW,MACzD,OAASloH,GACPm0G,eACEhd,EACA,OAAS8lB,EAAYA,EAAUiL,UAAY,MAE/C,OAASjL,EACLzF,kBAAkBrgB,EAAgB8lB,GAClCtF,4BACJqM,6BAA6B7sB,EAWlC,MACC,OAAS8lB,GACJ9I,eAAehd,EAAgB8lB,EAAUiL,WAC1C1Q,kBAAkBrgB,EAAgB8lB,GAClCgH,8BACC9sB,EAAepL,cAAgB,OAC/B,OAAS/rF,GAAWm0G,eAAehd,EAAgB,MACpDwgB,4BACAsM,+BAEN,OADAqD,kBAAkBtnH,EAASm3F,EAAgBowB,EAAc/2B,GAClD2G,EAAe5wB,KACxB,CACA,SAAS0hD,8BACPjoH,EACAm3F,EACAgxB,EACA33B,GAEA,IAAIrC,EAA2B4lB,oBAc/B,OAbA5lB,EACE,OAASA,EACL,KACA,CAAE9tD,OAAQyyE,aAAa9tB,cAAesvB,KAAMnmB,GAClDgJ,EAAepL,cAAgB,CAC7B2rB,UAAWyQ,EACXD,UAAW/5B,GAEb,OAASnuF,GAAWm0G,eAAehd,EAAgB,MACnDwgB,4BACAqM,6BAA6B7sB,GAC7B,OAASn3F,GACP4xG,8BAA8B5xG,EAASm3F,EAAgB3G,GAAa,GAC/D,IACT,CACA,SAAS43B,QAAQpoH,EAASm3F,GACxB,IAAItc,EAAMsc,EAAetc,IACzB,GAAI,OAASA,EACX,OAAS76E,GACP,OAASA,EAAQ66E,MAChBsc,EAAepgE,OAAS,aACxB,CACH,GAAI,mBAAsB8jD,GAAO,iBAAoBA,EACnD,MAAM9jF,MAAMwxF,yBAAuB,MACjC,OAASvoF,GAAWA,EAAQ66E,MAAQA,IACtCsc,EAAepgE,OAAS,QAC3B,CACH,CACA,SAASgxF,wBACP/nH,EACAm3F,EACAzW,EACA+jC,EACAj0B,GAYA,OAVA0hB,qBAAqB/a,GACrBzW,EAAYi4B,gBACV34G,EACAm3F,EACAzW,EACA+jC,OACA,EACAj0B,GAEFi0B,EAAY3K,uBACR,OAAS95G,GAAYo5G,kBAKzBrgB,aAAe0rB,GAAazV,uBAAuB7X,GACnDA,EAAepgE,OAAS,EACxBuwF,kBAAkBtnH,EAASm3F,EAAgBzW,EAAW8P,GAC/C2G,EAAe5wB,QANlByzC,aAAah6G,EAASm3F,EAAgB3G,GACtCk3B,6BAA6B1nH,EAASm3F,EAAgB3G,GAM5D,CACA,SAAS63B,wBACProH,EACAm3F,EACAstB,EACA/jC,EACAk4B,EACApoB,GAYA,OAVA0hB,qBAAqB/a,GACrBA,EAAe4V,YAAc,KAC7B0X,EAAYzL,qBACV7hB,EACAzW,EACA+jC,EACA7L,GAEFK,qBAAqBj5G,GACrB0gF,EAAYo5B,uBACR,OAAS95G,GAAYo5G,kBAKzBrgB,aAAerY,GAAasuB,uBAAuB7X,GACnDA,EAAepgE,OAAS,EACxBuwF,kBAAkBtnH,EAASm3F,EAAgBstB,EAAWj0B,GAC/C2G,EAAe5wB,QANlByzC,aAAah6G,EAASm3F,EAAgB3G,GACtCk3B,6BAA6B1nH,EAASm3F,EAAgB3G,GAM5D,CACA,SAAS83B,qBACPtoH,EACAm3F,EACAzW,EACA+jC,EACAj0B,GAGA,GADA0hB,qBAAqB/a,GACjB,OAASA,EAAe3K,UAAW,CACrC,IAAI7L,EAAU+rB,mBACZ6b,EAAc7nC,EAAU6nC,YAC1B,iBAAoBA,GAClB,OAASA,IACR5nC,EAAUwxB,YAAYoW,IACzB5nC,EAAU,IAAID,EAAU+jC,EAAW9jC,GACnCwW,EAAepL,cACb,OAASpL,EAAQ9lF,YAAS,IAAW8lF,EAAQ9lF,MAAQ8lF,EAAQ9lF,MAAQ,KACvE8lF,EAAQC,QAAU8jC,sBAClBvtB,EAAe3K,UAAY7L,EAC3BA,EAAQgkC,gBAAkBxtB,GAC1BxW,EAAUwW,EAAe3K,WACjBzR,MAAQ0pC,EAChB9jC,EAAQ9lF,MAAQs8F,EAAepL,cAC/BpL,EAAQE,KAAO,CAAA,EACf20B,sBAAsBre,GACtBoxB,EAAc7nC,EAAU6nC,YACxB5nC,EAAQA,QACN,iBAAoB4nC,GAAe,OAASA,EACxCpW,YAAYoW,GACZ7b,mBACN/rB,EAAQ9lF,MAAQs8F,EAAepL,cAE/B,mBADAw8B,EAAc7nC,EAAU8jC,4BAErBD,2BACCptB,EACAzW,EACA6nC,EACA9D,GAED9jC,EAAQ9lF,MAAQs8F,EAAepL,eAClC,mBAAsBrL,EAAU8jC,0BAC9B,mBAAsB7jC,EAAQ6nC,yBAC7B,mBAAsB7nC,EAAQ8nC,2BAC7B,mBAAsB9nC,EAAQ+nC,qBAC9BH,EAAc5nC,EAAQ9lF,MACxB,mBAAsB8lF,EAAQ+nC,oBAC5B/nC,EAAQ+nC,qBACV,mBAAsB/nC,EAAQ8nC,2BAC5B9nC,EAAQ8nC,4BACVF,IAAgB5nC,EAAQ9lF,OACtB6pH,sBAAsBnkC,oBAAoBI,EAASA,EAAQ9lF,MAAO,MACpE87G,mBAAmBxf,EAAgBstB,EAAW9jC,EAAS6P,GACvDkmB,8CACC/1B,EAAQ9lF,MAAQs8F,EAAepL,eAClC,mBAAsBpL,EAAQgoC,oBAC3BxxB,EAAepgE,OAAS,SAC3B0tF,GAAY,CAChB,MAAa,GAAA,OAASzkH,EAAS,CAC3B2gF,EAAUwW,EAAe3K,UACzB,IAAIo8B,EAAqBzxB,EAAe6V,cACtC6X,EAAWO,2BAA2B1kC,EAAWkoC,GACnDjoC,EAAQ5F,MAAQ8pC,EAChB,IAAIgE,EAAaloC,EAAQA,QACvBmoC,EAAuBpoC,EAAU6nC,YACnCA,EAAc7b,mBACd,iBAAoBoc,GAClB,OAASA,IACRP,EAAcpW,YAAY2W,IAC7B,IAAItE,EAA2B9jC,EAAU8jC,yBACzCsE,EACE,mBAAsBtE,GACtB,mBAAsB7jC,EAAQ6nC,wBAChCI,EAAqBzxB,EAAeyV,eAAiBgc,EACrDE,GACG,mBAAsBnoC,EAAQwkC,kCAC7B,mBAAsBxkC,EAAQukC,4BAC9B0D,GAAsBC,IAAeN,IACrCtD,8BACE9tB,EACAxW,EACA8jC,EACA8D,GAENhT,gBAAiB,EACjB,IAAI9Q,EAAWtN,EAAepL,cAC9BpL,EAAQ9lF,MAAQ4pG,EAChBkS,mBAAmBxf,EAAgBstB,EAAW9jC,EAAS6P,GACvDkmB,8CACAmS,EAAa1xB,EAAepL,cAC5B68B,GAAsBnkB,IAAaokB,GAActT,gBAC5C,mBAAsBiP,IACpBD,2BACCptB,EACAzW,EACA8jC,EACAC,GAEDoE,EAAa1xB,EAAepL,gBAC9B84B,EACCtP,gBACAqP,2BACEztB,EACAzW,EACAmkC,EACAJ,EACAhgB,EACAokB,EACAN,KAECO,GACE,mBAAsBnoC,EAAQ8nC,2BAC7B,mBAAsB9nC,EAAQ+nC,qBAC/B,mBAAsB/nC,EAAQ+nC,oBAC7B/nC,EAAQ+nC,qBACV,mBAAsB/nC,EAAQ8nC,2BAC5B9nC,EAAQ8nC,6BACZ,mBAAsB9nC,EAAQgoC,oBAC3BxxB,EAAepgE,OAAS,WAC1B,mBAAsB4pD,EAAQgoC,oBAC5BxxB,EAAepgE,OAAS,SAC1BogE,EAAe6V,cAAgByX,EAC/BttB,EAAepL,cAAgB88B,GACnCloC,EAAQ5F,MAAQ0pC,EAChB9jC,EAAQ9lF,MAAQguH,EAChBloC,EAAQA,QAAU4nC,EAClB9D,EAAYI,IACZ,mBAAsBlkC,EAAQgoC,oBAC5BxxB,EAAepgE,OAAS,SAC1B0tF,GAAY,EACrB,KAAS,CACL9jC,EAAUwW,EAAe3K,UACzBupB,iBAAiB/1G,EAASm3F,GAE1B2xB,EAAuB1D,2BAA2B1kC,EADlD6nC,EAAcpxB,EAAe6V,eAE7BrsB,EAAQ5F,MAAQ+tC,EAChBtE,EAA2BrtB,EAAeyV,aAC1CnI,EAAW9jB,EAAQA,QACnBkoC,EAAanoC,EAAU6nC,YACvB1D,EAAWnY,mBACX,iBAAoBmc,GAClB,OAASA,IACRhE,EAAW1S,YAAY0W,KAEzBA,EACC,mBAFFD,EAAqBloC,EAAU8jC,2BAG7B,mBAAsB7jC,EAAQ6nC,0BAC7B,mBAAsB7nC,EAAQwkC,kCAC7B,mBAAsBxkC,EAAQukC,4BAC9BqD,IAAgB/D,GAA4B/f,IAAaogB,IACzDI,8BACE9tB,EACAxW,EACA8jC,EACAI,GAENtP,gBAAiB,EACjB9Q,EAAWtN,EAAepL,cAC1BpL,EAAQ9lF,MAAQ4pG,EAChBkS,mBAAmBxf,EAAgBstB,EAAW9jC,EAAS6P,GACvDkmB,8CACA,IAAIlS,EAAWrN,EAAepL,cAC9Bw8B,IAAgB/D,GAChB/f,IAAaD,GACb+Q,gBACC,OAASv1G,GACR,OAASA,EAAQ20F,cACjBod,sBAAsB/xG,EAAQ20F,eAC3B,mBAAsBi0B,IACpBrE,2BACCptB,EACAzW,EACAkoC,EACAnE,GAEDjgB,EAAWrN,EAAepL,gBAC5B+8B,EACCvT,gBACAqP,2BACEztB,EACAzW,EACAooC,EACArE,EACAhgB,EACAD,EACAqgB,IAED,OAAS7kH,GACR,OAASA,EAAQ20F,cACjBod,sBAAsB/xG,EAAQ20F,gBAC7Bk0B,GACE,mBAAsBloC,EAAQooC,4BAC7B,mBAAsBpoC,EAAQqoC,sBAC/B,mBAAsBroC,EAAQqoC,qBAC7BroC,EAAQqoC,oBAAoBvE,EAAWjgB,EAAUqgB,GACnD,mBAAsBlkC,EAAQooC,4BAC5BpoC,EAAQooC,2BACNtE,EACAjgB,EACAqgB,IAEN,mBAAsBlkC,EAAQsoC,qBAC3B9xB,EAAepgE,OAAS,GAC3B,mBAAsB4pD,EAAQ6nC,0BAC3BrxB,EAAepgE,OAAS,QAC1B,mBAAsB4pD,EAAQsoC,oBAC5BV,IAAgBvoH,EAAQgtG,eACvBvI,IAAazkG,EAAQ+rF,gBACtBoL,EAAepgE,OAAS,GAC3B,mBAAsB4pD,EAAQ6nC,yBAC3BD,IAAgBvoH,EAAQgtG,eACvBvI,IAAazkG,EAAQ+rF,gBACtBoL,EAAepgE,OAAS,MAC1BogE,EAAe6V,cAAgByX,EAC/BttB,EAAepL,cAAgByY,GACnC7jB,EAAQ5F,MAAQ0pC,EAChB9jC,EAAQ9lF,MAAQ2pG,EAChB7jB,EAAQA,QAAUkkC,EAClBJ,EAAYqE,IACZ,mBAAsBnoC,EAAQsoC,oBAC5BV,IAAgBvoH,EAAQgtG,eACvBvI,IAAazkG,EAAQ+rF,gBACtBoL,EAAepgE,OAAS,GAC3B,mBAAsB4pD,EAAQ6nC,yBAC3BD,IAAgBvoH,EAAQgtG,eACvBvI,IAAazkG,EAAQ+rF,gBACtBoL,EAAepgE,OAAS,MAC1B0tF,GAAY,EAClB,CAgCD,OA/BA9jC,EAAU8jC,EACV2D,QAAQpoH,EAASm3F,GACjBstB,KAA0C,IAAvBttB,EAAepgE,OAClC4pD,GAAW8jC,GACL9jC,EAAUwW,EAAe3K,UAC1B9L,EACC+jC,GAAa,mBAAsB/jC,EAAU6lC,yBACzC,KACA5lC,EAAQ+E,SACbyR,EAAepgE,OAAS,EACzB,OAAS/2B,GAAWykH,GACdttB,EAAe5wB,MAAQk9C,qBACvBtsB,EACAn3F,EAAQumE,MACR,KACAiqB,GAED2G,EAAe5wB,MAAQk9C,qBACtBtsB,EACA,KACAzW,EACA8P,IAEF82B,kBAAkBtnH,EAASm3F,EAAgBzW,EAAW8P,GACzD2G,EAAepL,cAAgBpL,EAAQ9lF,MACvCmF,EAAUm3F,EAAe5wB,OACzBvmE,EAAU0nH,6BACT1nH,EACAm3F,EACA3G,GAECxwF,CACT,CACA,SAASkpH,8BACPlpH,EACAm3F,EACAowB,EACA/2B,GAKA,OAHAkgB,sBACAvZ,EAAepgE,OAAS,IACxBuwF,kBAAkBtnH,EAASm3F,EAAgBowB,EAAc/2B,GAClD2G,EAAe5wB,KACxB,CACA,IAAI4iD,iBAAmB,CACrBn9B,WAAY,KACZo9B,YAAa,KACbC,UAAW,EACXja,gBAAiB,MAEnB,SAASka,4BAA4B94B,GACnC,MAAO,CAAEknB,UAAWlnB,EAAa03B,UAAW3T,oBAC9C,CACA,SAASgV,8BACPvpH,EACAwpH,EACAh5B,GAIA,OAFAxwF,EAAU,OAASA,EAAUA,EAAQssG,YAAc9b,EAAc,EACjEg5B,IAAwBxpH,GAAWypH,4BAC5BzpH,CACT,CACA,SAAS0pH,wBAAwB1pH,EAASm3F,EAAgB3G,GACxD,IAGE6f,EAHEoU,EAAYttB,EAAeyV,aAC7B+c,GAAe,EACfC,KAA2C,IAAvBzyB,EAAepgE,OAUrC,IARCs5E,EAAkBuZ,KAChBvZ,GACC,OAASrwG,GAAW,OAASA,EAAQ+rF,mBAEI,EAA9Bg4B,oBAAoB/jH,UACnCqwG,IAAqBsZ,GAAe,EAAMxyB,EAAepgE,QAAU,KACnEs5E,KAAgD,GAAvBlZ,EAAepgE,OACxCogE,EAAepgE,QAAU,GACrB,OAAS/2B,EAAS,CACpB,GAAI+4F,YAAa,CAIf,GAHA4wB,EACI9F,+BAA+B1sB,GAC/B8sB,8BACAlrB,YAAa,CACf,IACE8wB,EADEC,EAAe3a,uBAEnB,GAAK0a,EAA2BC,EAAe,CAC7CjkH,EAAG,CAED,IADAgkH,EAA2BC,EAEzBA,EAAeza,uBACf,IAAMwa,EAAyBngC,UAE/B,CACA,IAAKogC,EAAc,CACjBA,EAAe,KACf,MAAMjkH,CACP,CAID,GAAI,QAHJgkH,EAA2BtZ,kBACzBsZ,EAAyB1hB,cAEY,CACrC2hB,EAAe,KACf,MAAMjkH,CACP,CACF,CACDikH,EAAeD,CAChB,CACD,OAASC,GACH3yB,EAAepL,cAAgB,CAC/BC,WAAY89B,EACZV,YACE,OAAS7a,oBACL,CAAE5oE,GAAI6oE,cAAehsF,SAAUisF,qBAC/B,KACN4a,UAAW,UACXja,gBAAiB,OAElBya,EAA2B1c,qBAC1B,GACA,KACA,KACA,IAEwB3gB,UAAYs9B,EACrCD,EAAyBj+B,OAASuL,EAClCA,EAAe5wB,MAAQsjD,EACvB3a,qBAAuB/X,EACvBgY,uBAAyB,KACzB0a,GAA2B,GAC3BA,GAA2B,CACjC,CACDA,GAA4Bta,yBAAyBpY,EACtD,CAED,GACE,QAFF2yB,EAAe3yB,EAAepL,gBAGe,QAAzC+9B,EAAeA,EAAa99B,YAE9B,OACEq4B,2BAA2ByF,GACtB3yB,EAAevH,MAAQ,GACvBuH,EAAevH,MAAQ,UAC5B,KAEJs0B,mBAAmB/sB,EACpB,CAGD,OAFA2yB,EAAerF,EAAU9/C,SACzB8/C,EAAYA,EAAUsF,SAClBJ,GAEA1F,8BAEC6F,EAAeE,kCACd,CAAEt5F,KAAM,SAAUi0C,SAAUmlD,GAF7BH,EAAexyB,EAAezmE,MAK9B+zF,EAAY9W,wBACX8W,EACAkF,EACAn5B,EACA,MAEDs5B,EAAal+B,OAASuL,EACtBstB,EAAU74B,OAASuL,EACnB2yB,EAAaz9B,QAAUo4B,EACvBttB,EAAe5wB,MAAQujD,GACvBH,EAAexyB,EAAe5wB,OACjBwlB,cAAgBu9B,4BAA4B94B,GACzDm5B,EAAard,WAAaid,8BACzBvpH,EACAqwG,EACA7f,GAED2G,EAAepL,cAAgBo9B,iBAChC1E,IAEJZ,+BAA+B1sB,GACxB8yB,6BAA6B9yB,EAAgB2yB,GACrD,CAED,GACE,QAFFD,EAA2B7pH,EAAQ+rF,gBAIjC,QADE+9B,EAAeD,EAAyB79B,YAE1C,CACA,GAAI49B,EACqB,IAAvBzyB,EAAepgE,OACV8sF,+BAA+B1sB,GAC/BA,EAAepgE,QAAU,IACzBogE,EAAiB+yB,uCAChBlqH,EACAm3F,EACA3G,IAEF,OAAS2G,EAAepL,eACrBk4B,8BACA9sB,EAAe5wB,MAAQvmE,EAAQumE,MAC/B4wB,EAAepgE,OAAS,IACxBogE,EAAiB,OACjB8sB,8BACA0F,EAAelF,EAAUsF,SACzBD,EAAe3yB,EAAezmE,KAC9B+zF,EAAYuF,kCACX,CAAEt5F,KAAM,UAAWi0C,SAAU8/C,EAAU9/C,UACvCmlD,IAEDH,EAAehc,wBACdgc,EACAG,EACAt5B,EACA,OAEYz5D,OAAS,EACtB0tF,EAAU74B,OAASuL,EACnBwyB,EAAa/9B,OAASuL,EACtBstB,EAAUp4B,QAAUs9B,EACpBxyB,EAAe5wB,MAAQk+C,EACxBhB,qBACEtsB,EACAn3F,EAAQumE,MACR,KACAiqB,IAEDi0B,EAAYttB,EAAe5wB,OACjBwlB,cACTu9B,4BAA4B94B,GAC7Bi0B,EAAUnY,WAAaid,8BACtBvpH,EACAqwG,EACA7f,GAED2G,EAAepL,cAAgBo9B,iBAC/BhyB,EAAiBwyB,QAEvB9F,GAAAA,+BAA+B1sB,GAChCktB,2BAA2ByF,GAC3B,CAGA,GAFAzZ,EACEyZ,EAAa3hB,aAAe2hB,EAAa3hB,YAAYgiB,QAClC,IAAIC,EAAS/Z,EAAgBga,KAClDha,EAAkB+Z,GAClB3F,EAAY1tH,MAAMwxF,yBAAuB,OAC/Bx8C,MAAQ,GAClB04E,EAAU2F,OAAS/Z,EACnBb,oBAAoB,CAAEhvG,MAAOikH,EAAWrnG,OAAQ,KAAM2uB,MAAO,OAC7DorD,EAAiB+yB,uCACflqH,EACAm3F,EACA3G,EAER,MAAW,GACJ4oB,kBACCxH,8BAA8B5xG,EAASm3F,EAAgB3G,GAAa,GACrE6f,EAAkB,KAAO7f,EAAcxwF,EAAQssG,YAChD8M,kBAAoB/I,EACpB,CAEA,GACE,QAFFA,EAAkB4D,sBAYhB,KAJCwQ,EACC,MALDA,EACoB,IAFnBA,EAAYj0B,GAAeA,GAGvB,EACA+B,gCAAgCkyB,KAEhBpU,EAAgBlgB,eAAiBK,IACjD,EACAi0B,IACaA,IAAcoF,EAAyBR,WAE1D,MACIQ,EAAyBR,UAAY5E,EACvCtY,+BAA+BnsG,EAASykH,GACxCnI,sBAAsBjM,EAAiBrwG,EAASykH,GAChD4C,4BAEJ,OAASyC,EAAa5xH,MAAQ0uH,kCAC9BzvB,EAAiB+yB,uCACflqH,EACAm3F,EACA3G,EAEH,KACC,OAASs5B,EAAa5xH,MAChBi/F,EAAepgE,OAAS,IACzBogE,EAAe5wB,MAAQvmE,EAAQumE,MAC/B4wB,EAAiB,OAChBn3F,EAAU6pH,EAAyBT,YACpCja,uBAAyBoB,kBACxBuZ,EAAa3hB,aAEd+G,qBAAuB/X,EACvB4B,aAAc,EACdqW,gBAAkB,KAClBC,wBAAyB,EAC1B,OAASrvG,IACLquG,QAAQC,gBAAkBE,cAC3BH,QAAQC,gBAAkBG,oBAC1BJ,QAAQC,gBAAkBC,oBAC1BC,cAAgBxuG,EAAQ2lC,GACxB8oE,oBAAsBzuG,EAAQwiB,SAC9B+rF,oBAAsBpX,IACxBA,EAAiB8yB,6BAChB9yB,EACAstB,EAAU9/C,WAEI5tC,OAAS,MAC/B,OAAOogE,CACR,CACD,OAAIwyB,GAEA1F,8BACC0F,EAAelF,EAAUsF,SACzBD,EAAe3yB,EAAezmE,KAE9B05F,GADAP,EAA2B7pH,EAAQumE,OACD8lB,SAClCo4B,EAAYpX,qBAAqBwc,EAA0B,CAC1Dn5F,KAAM,SACNi0C,SAAU8/C,EAAU9/C,YAEXsoC,aAC+B,SAAxC4c,EAAyB5c,aAC3B,OAASmd,EACJT,EAAetc,qBAAqB+c,EAAQT,IAC3CA,EAAehc,wBACfgc,EACAG,EACAt5B,EACA,OAEYz5D,OAAS,EAC1B4yF,EAAa/9B,OAASuL,EACtBstB,EAAU74B,OAASuL,EACnBstB,EAAUp4B,QAAUs9B,EACpBxyB,EAAe5wB,MAAQk+C,EACvBA,EAAYkF,EACZA,EAAexyB,EAAe5wB,MAE/B,QADCujD,EAAe9pH,EAAQumE,MAAMwlB,eAEzB+9B,EAAeR,4BAA4B94B,IAE5C,QADEq5B,EAA2BC,EAAa5B,YAEpCkC,EAAStX,aAAa9tB,cACvB6kC,EACCA,EAAyBxpF,SAAW+pF,EAChC,CAAE/pF,OAAQ+pF,EAAQ9V,KAAM8V,GACxBP,GACLA,EAA2BtV,oBAC/BuV,EAAe,CACdpS,UAAWoS,EAAapS,UAAYlnB,EACpC03B,UAAW2B,IAEhBF,EAAa59B,cAAgB+9B,EAC7BH,EAAard,WAAaid,8BACzBvpH,EACAqwG,EACA7f,GAED2G,EAAepL,cAAgBo9B,iBAChC1E,IAEJZ,+BAA+B1sB,GAE/Bn3F,GADAwwF,EAAcxwF,EAAQumE,OACA8lB,SACtBmE,EAAc6c,qBAAqB7c,EAAa,CAC9C9/D,KAAM,UACNi0C,SAAU8/C,EAAU9/C,YAEVinB,OAASuL,EACrB3G,EAAYnE,QAAU,KACtB,OAASrsF,IAEP,QADEqwG,EAAkBlZ,EAAe+V,YAE7B/V,EAAe+V,UAAY,CAACltG,GAAYm3F,EAAepgE,OAAS,IAClEs5E,EAAgBt4G,KAAKiI,IAC3Bm3F,EAAe5wB,MAAQiqB,EACvB2G,EAAepL,cAAgB,KACxByE,EACT,CACA,SAASy5B,6BAA6B9yB,EAAgBmzB,GAMpD,OALAA,EAAkBN,kCAChB,CAAEt5F,KAAM,UAAWi0C,SAAU2lD,GAC7BnzB,EAAezmE,OAEDk7D,OAASuL,EACjBA,EAAe5wB,MAAQ+jD,CACjC,CACA,SAASN,kCAAkCO,EAAgB75F,GASzD,OARA65F,EAAiBpd,qBAAqB,GAAIod,EAAgB,KAAM75F,IACjDk/D,MAAQ,EACvB26B,EAAe/9B,UAAY,CACzB+f,YAAa,EACbie,gBAAiB,KACjBC,YAAa,KACbC,aAAc,MAETH,CACT,CACA,SAASL,uCACPlqH,EACAm3F,EACA3G,GASA,OAPAizB,qBAAqBtsB,EAAgBn3F,EAAQumE,MAAO,KAAMiqB,IAC1DxwF,EAAUiqH,6BACR9yB,EACAA,EAAeyV,aAAajoC,WAEtB5tC,OAAS,EACjBogE,EAAepL,cAAgB,KACxB/rF,CACT,CACA,SAAS2qH,4BAA4Bl/B,EAAO+E,EAAa8gB,GACvD7lB,EAAMmE,OAASY,EACf,IAAI7E,EAAYF,EAAME,UACtB,OAASA,IAAcA,EAAUiE,OAASY,GAC1C6gB,gCAAgC5lB,EAAMG,OAAQ4E,EAAa8gB,EAC7D,CACA,SAASsZ,4BACPzzB,EACA0zB,EACA/yH,EACAgzH,EACAC,GAEA,IAAIC,EAAc7zB,EAAepL,cACjC,OAASi/B,EACJ7zB,EAAepL,cAAgB,CAC9B8+B,YAAaA,EACbI,UAAW,KACXC,mBAAoB,EACpBjqH,KAAM6pH,EACNhzH,KAAMA,EACNizH,SAAUA,IAEVC,EAAYH,YAAcA,EAC3BG,EAAYC,UAAY,KACxBD,EAAYE,mBAAqB,EACjCF,EAAY/pH,KAAO6pH,EACnBE,EAAYlzH,KAAOA,EACnBkzH,EAAYD,SAAWA,EAC9B,CACA,SAASI,4BAA4BnrH,EAASm3F,EAAgB3G,GAC5D,IAAIi0B,EAAYttB,EAAeyV,aAC7B0X,EAAcG,EAAUH,YACxByG,EAAWtG,EAAU3sH,KAGvB,GAFAwvH,kBAAkBtnH,EAASm3F,EAAgBstB,EAAU9/C,SAAU6rB,GAExC,GADvBi0B,EAAYV,oBAAoB/jH,SAE7BykH,EAAyB,EAAZA,EAAiB,EAAKttB,EAAepgE,OAAS,QACzD,CACH,GAAI,OAAS/2B,GAAkC,IAAhBA,EAAQ+2B,MACrC2gB,EAAG,IAAK13C,EAAUm3F,EAAe5wB,MAAO,OAASvmE,GAAW,CAC1D,GAAI,KAAOA,EAAQ2gD,IACjB,OAAS3gD,EAAQ+rF,eACf4+B,4BAA4B3qH,EAASwwF,EAAa2G,QACjD,GAAI,KAAOn3F,EAAQ2gD,IACtBgqE,4BAA4B3qH,EAASwwF,EAAa2G,QAC3C,GAAA,OAASn3F,EAAQumE,MAAO,CAC/BvmE,EAAQumE,MAAMqlB,OAAS5rF,EACvBA,EAAUA,EAAQumE,MAClB,QACD,CACD,GAAIvmE,IAAYm3F,EAAgB,MAAMz/C,EACtC,KAAO,OAAS13C,EAAQqsF,SAAW,CACjC,GAAI,OAASrsF,EAAQ4rF,QAAU5rF,EAAQ4rF,SAAWuL,EAChD,MAAMz/C,EACR13C,EAAUA,EAAQ4rF,MACnB,CACD5rF,EAAQqsF,QAAQT,OAAS5rF,EAAQ4rF,OACjC5rF,EAAUA,EAAQqsF,OACnB,CACHo4B,GAAa,CACd,CAED,OADA1sH,KAAKgsH,oBAAqBU,GAClBH,GACN,IAAK,WAEH,IADA9zB,EAAc2G,EAAe5wB,MACxB+9C,EAAc,KAAM,OAAS9zB,GAE9B,QADDxwF,EAAUwwF,EAAY7E,YAEnB,OAASw4B,mBAAmBnkH,KAC3BskH,EAAc9zB,GAChBA,EAAcA,EAAYnE,QAE/B,QADAmE,EAAc8zB,IAERA,EAAcntB,EAAe5wB,MAAS4wB,EAAe5wB,MAAQ,OAC7D+9C,EAAc9zB,EAAYnE,QAAWmE,EAAYnE,QAAU,MACjEu+B,4BACEzzB,GACA,EACAmtB,EACA9zB,EACAu6B,GAEF,MACF,IAAK,YAGH,IAFAv6B,EAAc,KACd8zB,EAAcntB,EAAe5wB,MACxB4wB,EAAe5wB,MAAQ,KAAM,OAAS+9C,GAAe,CAExD,GAAI,QADJtkH,EAAUskH,EAAY34B,YACE,OAASw4B,mBAAmBnkH,GAAU,CAC5Dm3F,EAAe5wB,MAAQ+9C,EACvB,KACD,CACDtkH,EAAUskH,EAAYj4B,QACtBi4B,EAAYj4B,QAAUmE,EACtBA,EAAc8zB,EACdA,EAActkH,CACf,CACD4qH,4BACEzzB,GACA,EACA3G,EACA,KACAu6B,GAEF,MACF,IAAK,WACHH,4BAA4BzzB,GAAgB,EAAI,KAAM,UAAM,GAC5D,MACF,QACEA,EAAepL,cAAgB,KAEnC,OAAOoL,EAAe5wB,KACxB,CACA,SAASmhD,6BAA6B1nH,EAASm3F,EAAgB3G,GAG7D,GAFA,OAASxwF,IAAYm3F,EAAexC,aAAe30F,EAAQ20F,cAC3DwiB,gCAAkChgB,EAAevH,MAC7C,KAAOY,EAAc2G,EAAemV,YACtC,IAAI,OAAStsG,EAWN,YAVL,GACG4xG,8BACC5xG,EACAm3F,EACA3G,GACA,GAEF,KAAOA,EAAc2G,EAAemV,YAEpC,WACc,CACpB,GAAI,OAAStsG,GAAWm3F,EAAe5wB,QAAUvmE,EAAQumE,MACvD,MAAMxvE,MAAMwxF,yBAAuB,MACrC,GAAI,OAAS4O,EAAe5wB,MAAO,CAIjC,IAFAiqB,EAAc6c,qBADdrtG,EAAUm3F,EAAe5wB,MACmBvmE,EAAQ4sG,cACpDzV,EAAe5wB,MAAQiqB,EAClBA,EAAY5E,OAASuL,EAAgB,OAASn3F,EAAQqsF,SACxDrsF,EAAUA,EAAQqsF,SAChBmE,EAAcA,EAAYnE,QACzBghB,qBAAqBrtG,EAASA,EAAQ4sG,eAC3BhhB,OAASuL,EAC1B3G,EAAYnE,QAAU,IACvB,CACD,OAAO8K,EAAe5wB,KACxB,CACA,SAASshD,8BAA8B7nH,EAASwwF,GAC9C,OAAI,KAAOxwF,EAAQ4vF,MAAQY,MAEpB,QADPxwF,EAAUA,EAAQ20F,gBACSod,sBAAsB/xG,GACnD,CACA,SAASorH,uCACPprH,EACAm3F,EACA3G,GAEA,OAAQ2G,EAAex2C,KACrB,KAAK,EACHitC,kBAAkBuJ,EAAgBA,EAAe3K,UAAUvD,eAC3DgoB,aAAa9Z,EAAgB2b,aAAc9yG,EAAQ+rF,cAAcpH,OACjE+rB,sBACA,MACF,KAAK,GACL,OACExiB,gBAAgBiJ,GAChB,MACF,OACEvJ,kBAAkBuJ,EAAgBA,EAAe3K,UAAUvD,eAC3D,MACF,KAAO,GACLgoB,aACE9Z,EACAA,EAAex0F,KACfw0F,EAAe6V,cAAcxsG,OAE/B,MACF,KAAK,GACH,IAAI3F,EAAQs8F,EAAepL,cAC3B,GAAI,OAASlxF,EACX,OAAI,OAASA,EAAMmxF,YAEf63B,+BAA+B1sB,GAC9BA,EAAepgE,OAAS,IACzB,MAEA,KAAOy5D,EAAc2G,EAAe5wB,MAAM+lC,YACrCod,wBAAwB1pH,EAASm3F,EAAgB3G,IAC1DqzB,+BAA+B1sB,GAMpB,QALXn3F,EAAU0nH,6BACR1nH,EACAm3F,EACA3G,IAEwBxwF,EAAQqsF,QAAU,MAE9Cw3B,+BAA+B1sB,GAC/B,MACF,QACE,IAAIk0B,KAA0C,IAAhBrrH,EAAQ+2B,OAUtC,IATAl8B,EAAQ,KAAO21F,EAAc2G,EAAemV,eAEzCsF,8BACC5xG,EACAm3F,EACA3G,GACA,GAED31F,EAAQ,KAAO21F,EAAc2G,EAAemV,aAC3C+e,EAAkB,CACpB,GAAIxwH,EACF,OAAOswH,4BACLnrH,EACAm3F,EACA3G,GAEJ2G,EAAepgE,OAAS,GACzB,CAOD,GALA,QADAs0F,EAAmBl0B,EAAepL,iBAE9Bs/B,EAAiBJ,UAAY,KAC9BI,EAAiBvzH,KAAO,KACxBuzH,EAAiB/R,WAAa,MACjCvhH,KAAKgsH,oBAAqBA,oBAAoB/jH,SAC1CnF,EAAO,aACK,KAClB,KAAK,GACL,KAAO,GACL,OACGs8F,EAAevH,MAAQ,EACxBo4B,yBAAyBhoH,EAASm3F,EAAgB3G,GAEtD,KAAK,GACHygB,aAAa9Z,EAAgB2b,aAAc9yG,EAAQ+rF,cAAcpH,OAErE,OAAO+iC,6BAA6B1nH,EAASm3F,EAAgB3G,EAC/D,CACA,SAAS86B,UAAUtrH,EAASm3F,EAAgB3G,GAC1C,GAAI,OAASxwF,EACX,GAAIA,EAAQgtG,gBAAkB7V,EAAeyV,aAC3CwM,kBAAmB,MAChB,CACH,KACGyO,8BAA8B7nH,EAASwwF,IACV,IAAvB2G,EAAepgE,OAEtB,OACGqiF,kBAAmB,EACpBgS,uCACEprH,EACAm3F,EACA3G,GAGN4oB,oBAA0C,OAAhBp5G,EAAQ+2B,MACnC,MAEAqiF,kBAAmB,EAClBrgB,aACgC,QAAvB5B,EAAepgE,OACtB63E,WAAWzX,EAAgBiX,cAAejX,EAAehvF,OAE/D,OADAgvF,EAAevH,MAAQ,EACfuH,EAAex2C,KACrB,KAAO,GACLjJ,EAAG,CACD13C,EAAUm3F,EAAeyV,aACzB,IAAI2e,EAAgBp0B,EAAe0V,YACjCnhE,EAAO6/E,EAAczoC,MAGvB,GAFAyoC,EAAgB7/E,EAAK6/E,EAAcxoC,UACnCoU,EAAex0F,KAAO4oH,EAClB,mBAAsBA,EAmBrB,CACH,GAAI,MAAWA,EACb,KACI7/E,EAAO6/E,EAAczwC,YAAoB8E,uBAC3C,CACAuX,EAAex2C,IAAM,GACrBw2C,EAAiBqwB,iBACf,KACArwB,EACAo0B,EACAvrH,EACAwwF,GAEF,MAAM94C,CACpB,CAAuBhM,GAAAA,IAASo0C,gBAAiB,CACnCqX,EAAex2C,IAAM,GACrBw2C,EAAiBwwB,oBACf,KACAxwB,EACAo0B,EACAvrH,EACAwwF,GAEF,MAAM94C,CACP,EAGH,MAFAy/C,EACEnK,yBAAyBu+B,IAAkBA,EACvCx0H,MAAMwxF,yBAAuB,IAAK4O,EAAgB,IACzD,CA9CCiW,gBAAgBme,IACVvrH,EAAUolH,2BAA2BmG,EAAevrH,GACrDm3F,EAAex2C,IAAM,EACrBw2C,EAAiBmxB,qBAChB,KACAnxB,EACAo0B,EACAvrH,EACAwwF,KAEA2G,EAAex2C,IAAM,EACtBw2C,EAAiB4wB,wBAChB,KACA5wB,EACAo0B,EACAvrH,EACAwwF,GA+BT,CACD,OAAO2G,EACT,OACE,OAAO4wB,wBACL/nH,EACAm3F,EACAA,EAAex0F,KACfw0F,EAAeyV,aACfpc,GAEJ,KAAK,EACH,OAME83B,qBACEtoH,EACAm3F,EAPDo0B,EAAgBp0B,EAAex0F,KAC/B+oC,EAAO05E,2BACNmG,EACAp0B,EAAeyV,cAOfpc,GAGN,KAAK,EACH94C,EAAG,CAKD,GAJAk2C,kBACEuJ,EACAA,EAAe3K,UAAUvD,eAEvB,OAASjpF,EAAS,MAAMjJ,MAAMwxF,yBAAuB,MACzDgjC,EAAgBp0B,EAAeyV,aAC/B,IAAIqQ,EAAY9lB,EAAepL,cAC/BrgD,EAAOuxE,EAAU1vG,QACjBwoG,iBAAiB/1G,EAASm3F,GAC1Bwf,mBAAmBxf,EAAgBo0B,EAAe,KAAM/6B,GACxD,IAAI6sB,EAAYlmB,EAAepL,cAY/B,GAXAw/B,EAAgBlO,EAAU14B,MAC1BssB,aAAa9Z,EAAgB2b,aAAcyY,GAC3CA,IAAkBtO,EAAUt4B,OAC1B4sB,wBACEpa,EACA,CAAC2b,cACDtiB,GACA,GAEJkmB,8CACA6U,EAAgBlO,EAAU9vG,QACtB0vG,EAAUuO,aACZ,CAAA,GACIvO,EAAY,CACZ1vG,QAASg+G,EACTC,cAAc,EACd7mC,MAAO04B,EAAU14B,OAElBwS,EAAe4V,YAAY0I,UAAYwH,EACvC9lB,EAAepL,cAAgBkxB,EACT,IAAvB9lB,EAAepgE,MACf,CACAogE,EAAiB+xB,8BACflpH,EACAm3F,EACAo0B,EACA/6B,GAEF,MAAM94C,CAClB,CAAiB,GAAI6zE,IAAkB7/E,EAAM,CAKjC8jE,oBAJA9jE,EAAO8/D,2BACLz0G,MAAMwxF,yBAAuB,MAC7B4O,IAGFA,EAAiB+xB,8BACflpH,EACAm3F,EACAo0B,EACA/6B,GAEF,MAAM94C,CAClB,CAEY,QADA13C,EAAUm3F,EAAe3K,UAAUvD,eACnBS,SAEZ1pF,EAAUA,EAAQo6E,UAGlBp6E,EACE,SAAWA,EAAQw3F,SACfx3F,EAAQg5F,cAAc5e,KACtBp6E,EAaV,IAXAmvG,uBAAyBoB,kBAAkBvwG,EAAQ45F,YACnDsV,qBAAuB/X,EACvB4B,aAAc,EACdqW,gBAAkB,KAClBC,wBAAyB,EACzB7e,EAAckzB,iBACZvsB,EACA,KACAo0B,EACA/6B,GAEG2G,EAAe5wB,MAAQiqB,EAAaA,GACtCA,EAAYz5D,OAA8B,EAArBy5D,EAAYz5D,MAAc,KAC7Cy5D,EAAcA,EAAYnE,OAChC,KACE,CAEH,GADAqkB,sBACI6a,IAAkB7/E,EAAM,CAC1ByrD,EAAiBuwB,6BACf1nH,EACAm3F,EACA3G,GAEF,MAAM94C,CACP,CACD4vE,kBACEtnH,EACAm3F,EACAo0B,EACA/6B,EAEH,CACD2G,EAAiBA,EAAe5wB,KACjC,CACD,OAAO4wB,EACT,QACE,OACEixB,QAAQpoH,EAASm3F,GACjB,OAASn3F,GACJwwF,EAAci7B,YACbt0B,EAAex0F,KACf,KACAw0F,EAAeyV,aACf,OAECzV,EAAepL,cAAgByE,EAChCuI,cACEvI,EAAc2G,EAAex0F,KAC9B3C,EAAUm3F,EAAeyV,cACzB2e,EAAgBG,kCACfh+B,wBAAwB1tF,SACxB6N,cAAc2iF,IACDwC,qBAAuBmE,EACrCo0B,EAAct4B,kBAAoBjzF,EACnC2rH,qBAAqBJ,EAAe/6B,EAAaxwF,GACjDq0F,oBAAoBk3B,GACnBp0B,EAAe3K,UAAY++B,GAC7Bp0B,EAAepL,cAAgB0/B,YAC9Bt0B,EAAex0F,KACf3C,EAAQgtG,cACR7V,EAAeyV,aACf5sG,EAAQ+rF,eAEd,KAEJ,KAAK,GACH,OACEmC,gBAAgBiJ,GAChB,OAASn3F,GACP+4F,cACEwyB,EAAgBp0B,EAAe3K,UAC/Bo/B,yBACEz0B,EAAex0F,KACfw0F,EAAeyV,aACflf,wBAAwB1tF,SAE3BkvG,qBAAuB/X,EACvBkY,wBAAyB,EACzB3jE,EAAOyjE,uBACRqB,iBAAiBrZ,EAAex0F,OAC1B8tG,4CAA8C/kE,EAC/CyjE,uBAAyBoB,kBACxBgb,EAAc3xB,aAEfuV,uBAAyBzjE,GAChC47E,kBACEtnH,EACAm3F,EACAA,EAAeyV,aAAajoC,SAC5B6rB,GAEF43B,QAAQpoH,EAASm3F,GACjB,OAASn3F,IAAYm3F,EAAepgE,OAAS,SAC7CogE,EAAe5wB,MAEnB,OA0CE,OAzCI,OAASvmE,GAAW+4F,eACjBrtD,EAAO6/E,EAAgBpc,0BAOxB,QANDoc,EAAgBM,mBACfN,EACAp0B,EAAex0F,KACfw0F,EAAeyV,aACfyC,0BAGMlY,EAAe3K,UAAY++B,EAC5Brc,qBAAuB/X,EACvBgY,uBAAyBoB,kBACxBgb,EAAc3xB,YAEfyV,wBAAyB,EACzB3jE,GAAO,GACPA,GAAO,GAChBA,GAAQ6jE,yBAAyBpY,IAEnCjJ,gBAAgBiJ,GAChBzrD,EAAOyrD,EAAex0F,KACtBs6G,EAAY9lB,EAAeyV,aAC3ByQ,EAAY,OAASr9G,EAAUA,EAAQgtG,cAAgB,KACvDue,EAAgBtO,EAAUt4C,SAC1B2rC,qBAAqB5kE,EAAMuxE,GACtBsO,EAAgB,KACjB,OAASlO,GACT/M,qBAAqB5kE,EAAM2xE,KAC1BlmB,EAAepgE,OAAS,IAC7B,OAASogE,EAAepL,gBACpBrgD,EAAOitE,gBACP34G,EACAm3F,EACAwiB,6BACA,KACA,KACAnpB,GAEDnC,sBAAsBrJ,cAAgBt5C,GACzC08E,QAAQpoH,EAASm3F,GACjBmwB,kBAAkBtnH,EAASm3F,EAAgBo0B,EAAe/6B,GACnD2G,EAAe5wB,MACxB,KAAK,EAgBH,OAfI,OAASvmE,GAAW+4F,eACjB/4F,EAAUwwF,EAAc2e,0BAMzB,QALD3e,EAAcs7B,uBACbt7B,EACA2G,EAAeyV,aACfyC,0BAGMlY,EAAe3K,UAAYgE,EAC5B0e,qBAAuB/X,EACvBgY,uBAAyB,KACzBnvG,GAAU,GACVA,GAAU,GACnBA,GAAWuvG,yBAAyBpY,IAE/B,KACT,KAAK,GACH,OAAOuyB,wBAAwB1pH,EAASm3F,EAAgB3G,GAC1D,KAAM,EACJ,OACE5C,kBACEuJ,EACAA,EAAe3K,UAAUvD,eAE1BsiC,EAAgBp0B,EAAeyV,aAChC,OAAS5sG,EACJm3F,EAAe5wB,MAAQk9C,qBACtBtsB,EACA,KACAo0B,EACA/6B,GAEF82B,kBACEtnH,EACAm3F,EACAo0B,EACA/6B,GAEN2G,EAAe5wB,MAEnB,KAAO,GACL,OAAOihD,iBACLxnH,EACAm3F,EACAA,EAAex0F,KACfw0F,EAAeyV,aACfpc,GAEJ,KAAK,EACH,OACE82B,kBACEtnH,EACAm3F,EACAA,EAAeyV,aACfpc,GAEF2G,EAAe5wB,MAEnB,KAAM,EAUN,KAAO,GACL,OACE+gD,kBACEtnH,EACAm3F,EACAA,EAAeyV,aAAajoC,SAC5B6rB,GAEF2G,EAAe5wB,MAEnB,KAAO,GACL,OACGglD,EAAgBp0B,EAAeyV,aAChCqE,aAAa9Z,EAAgBA,EAAex0F,KAAM4oH,EAAc/qH,OAChE8mH,kBACEtnH,EACAm3F,EACAo0B,EAAc5mD,SACd6rB,GAEF2G,EAAe5wB,MAEnB,KAAK,EACH,OACG76B,EAAOyrD,EAAex0F,KAAK0iF,SAC3BkmC,EAAgBp0B,EAAeyV,aAAajoC,SAC7CutC,qBAAqB/a,GAEpBo0B,EAAgBA,EADhB7/E,EAAOymE,YAAYzmE,IAEnByrD,EAAepgE,OAAS,EACzBuwF,kBAAkBtnH,EAASm3F,EAAgBo0B,EAAe/6B,GAC1D2G,EAAe5wB,MAEnB,KAAO,GACL,OAAOohD,oBACL3nH,EACAm3F,EACAA,EAAex0F,KACfw0F,EAAeyV,aACfpc,GAEJ,KAAO,GACL,OAAOo3B,0BACL5nH,EACAm3F,EACAA,EAAex0F,KACfw0F,EAAeyV,aACfpc,GAEJ,KAAO,GACL,OAAO26B,4BAA4BnrH,EAASm3F,EAAgB3G,GAC9D,QACE,OACG+6B,EAAgBp0B,EAAeyV,aAC/Bpc,EAAc2G,EAAezmE,KAC7B66F,EAAgB,CACf76F,KAAM66F,EAAc76F,KACpBi0C,SAAU4mD,EAAc5mD,UAE1B,OAAS3kE,IACHwwF,EAAcw5B,kCACduB,EACA/6B,IAEW3V,IAAMsc,EAAetc,IACjCsc,EAAe5wB,MAAQiqB,EACvBA,EAAY5E,OAASuL,EACrBA,EAAiB3G,KAChBA,EAAc6c,qBAAqBrtG,EAAQumE,MAAOglD,IACvC1wC,IAAMsc,EAAetc,IACjCsc,EAAe5wB,MAAQiqB,EACvBA,EAAY5E,OAASuL,EACrBA,EAAiB3G,GACtB2G,EAEJ,KAAK,GACH,OAAO6wB,yBAAyBhoH,EAASm3F,EAAgB3G,GAC3D,KAAK,GACH,OACE0hB,qBAAqB/a,GACpBo0B,EAAgBpZ,YAAYW,cAC7B,OAAS9yG,GAEL,QADE0rC,EAAOqoE,uBAELroE,EAAOuoE,mBACRgJ,EAAYlK,cACZrnE,EAAKwoE,YAAc+I,EACpBA,EAAUhK,WACV,OAASgK,IAAcvxE,EAAKqgF,kBAAoBv7B,GAC/C9kD,EAAOuxE,GACT9lB,EAAepL,cAAgB,CAC9B1rD,OAAQkrF,EACR5mC,MAAOj5C,GAET8pE,sBAAsBre,GACtB8Z,aAAa9Z,EAAgB2b,aAAcpnE,KAC1C,KAAO1rC,EAAQ4vF,MAAQY,KACrBulB,iBAAiB/1G,EAASm3F,GAC3Bwf,mBAAmBxf,EAAgB,KAAM,KAAM3G,GAC/CkmB,+CACDhrE,EAAO1rC,EAAQ+rF,cACfkxB,EAAY9lB,EAAepL,cAC5BrgD,EAAKrL,SAAWkrF,GACV7/E,EAAO,CAAErL,OAAQkrF,EAAe5mC,MAAO4mC,GACxCp0B,EAAepL,cAAgBrgD,EAChC,IAAMyrD,EAAevH,QAClBuH,EAAepL,cACdoL,EAAe4V,YAAY0I,UACzB/pE,GACNulE,aAAa9Z,EAAgB2b,aAAcyY,KACzCA,EAAgBtO,EAAUt4B,MAC5BssB,aAAa9Z,EAAgB2b,aAAcyY,GAC3CA,IAAkB7/E,EAAKi5C,OACrB4sB,wBACEpa,EACA,CAAC2b,cACDtiB,GACA,KAEZ82B,kBACEtnH,EACAm3F,EACAA,EAAeyV,aAAajoC,SAC5B6rB,GAEF2G,EAAe5wB,MAEnB,KAAO,GACL,MAAM4wB,EAAeyV,aAEzB,MAAM71G,MAAMwxF,yBAAuB,IAAK4O,EAAex2C,KACzD,CACA,SAASqrE,WAAW70B,GAClBA,EAAepgE,OAAS,CAC1B,CACA,SAASk1F,kCAAkC90B,EAAgBonB,GACzD,GAAI,eAAiBA,EAAS57G,MAAwC,EAAzB47G,EAAS1jH,MAAMqxH,QAC1D/0B,EAAepgE,QAAU,cAChBogE,GAAAA,EAAepgE,OAAS,UAAYo1F,gBAAgB5N,GAAY,CAEzE,GACE,QAFFA,EAAWoF,2BAA2B3jH,YAGF,QAAhCk3G,iCACFA,8BACI,OAAS0M,eACyB,SAAhC1M,iCACAA,iCACuC,UAAhCA,gCACTqH,IAAaqF,eAEjB,MACIxO,kBAAoBR,4BACtBF,yBAEJvd,EAAepgE,OAAS,IACzB,CACH,CACA,SAASq1F,oBAAoBj1B,EAAgB8vB,GAC3C,OAASA,IAAe9vB,EAAepgE,OAAS,GACzB,MAAvBogE,EAAepgE,QACXkwF,EACA,KAAO9vB,EAAex2C,IAAMiwC,qBAAuB,UACpDuG,EAAevH,OAASq3B,EACxBoF,mCAAqCpF,EAC1C,CACA,SAASqF,mBAAmBtB,EAAauB,GACvC,IAAKxzB,YACH,OAAQiyB,EAAYD,UAClB,IAAK,SACHwB,EAA2BvB,EAAYlzH,KACvC,IAAK,IAAI00H,EAAe,KAAM,OAASD,GACrC,OAASA,EAAyB5gC,YAC/B6gC,EAAeD,GACfA,EAA2BA,EAAyBlgC,QACzD,OAASmgC,EACJxB,EAAYlzH,KAAO,KACnB00H,EAAangC,QAAU,KAC5B,MACF,IAAK,YACHmgC,EAAexB,EAAYlzH,KAC3B,IAAK,IAAI20H,EAAmB,KAAM,OAASD,GACzC,OAASA,EAAa7gC,YAAc8gC,EAAmBD,GACpDA,EAAeA,EAAangC,QACjC,OAASogC,EACLF,GAA4B,OAASvB,EAAYlzH,KAC9CkzH,EAAYlzH,KAAO,KACnBkzH,EAAYlzH,KAAKu0F,QAAU,KAC7BogC,EAAiBpgC,QAAU,KAExC,CACA,SAASqgC,iBAAiBC,GACxB,IAAIC,EACA,OAASD,EAAchhC,WACvBghC,EAAchhC,UAAUplB,QAAUomD,EAAcpmD,MAClDsmD,EAAgB,EAChB5f,EAAe,EACjB,GAAI2f,EACF,IAAK,IAAIE,EAAYH,EAAcpmD,MAAO,OAASumD,GAChDD,GAAiBC,EAAUl9B,MAAQk9B,EAAUxgB,WAC3CW,GAAyC,SAAzB6f,EAAU7f,aAC1BA,GAAkC,SAAlB6f,EAAU/1F,MAC1B+1F,EAAUlhC,OAAS+gC,EACnBG,EAAYA,EAAUzgC,aAEtBygC,IAAAA,EAAYH,EAAcpmD,MAAO,OAASumD,GAC5CD,GAAiBC,EAAUl9B,MAAQk9B,EAAUxgB,WAC3CW,GAAgB6f,EAAU7f,aAC1BA,GAAgB6f,EAAU/1F,MAC1B+1F,EAAUlhC,OAAS+gC,EACnBG,EAAYA,EAAUzgC,QAG7B,OAFAsgC,EAAc1f,cAAgBA,EAC9B0f,EAAcrgB,WAAaugB,EACpBD,CACT,CACA,SAASG,aAAa/sH,EAASm3F,EAAgB3G,GAC7C,IAAIs0B,EAAW3tB,EAAeyV,aAE9B,OADAqC,eAAe9X,GACPA,EAAex2C,KACrB,KAAK,GACL,QACA,KAAO,GACP,KAAK,EACL,QACA,KAAM,EACN,KAAK,EACL,QACA,KAAM,EACN,KAAO,GAEP,KAAK,EACH,OAAO+rE,iBAAiBv1B,GAAiB,KAC3C,KAAK,EAoBH,OAnBA3G,EAAc2G,EAAe3K,UAC7Bs4B,EAAW,KACX,OAAS9kH,IAAY8kH,EAAW9kH,EAAQ+rF,cAAcpH,OACtDwS,EAAepL,cAAcpH,QAAUmgC,IACpC3tB,EAAepgE,OAAS,MAC3Bq6E,YAAY0B,cACZ7kB,mBACAuC,EAAYw8B,iBACRx8B,EAAY7P,QAAU6P,EAAYw8B,eACnCx8B,EAAYw8B,eAAiB,MAC5B,OAAShtH,GAAW,OAASA,EAAQumE,QACvC6pC,kBAAkBjZ,GACd60B,WAAW70B,GACX,OAASn3F,GACRA,EAAQ+rF,cAAcy/B,gBACS,IAAvBr0B,EAAepgE,SACtBogE,EAAepgE,OAAS,KAC1B45E,wCACN+b,iBAAiBv1B,GACV,KACT,QACE,OACG3G,EAAc2G,EAAepL,cAC9B,OAAS/rF,GACJgsH,WAAW70B,GACZ,OAAS3G,GACJk8B,iBAAiBv1B,GAClB80B,kCAAkC90B,EAAgB3G,KACjDk8B,iBAAiBv1B,GACjBA,EAAepgE,QAAU,WAC9By5D,EACEA,IAAgBxwF,EAAQ+rF,eACrBigC,WAAW70B,GACZu1B,iBAAiBv1B,GACjB80B,kCAAkC90B,EAAgB3G,KACjDk8B,iBAAiBv1B,GACjBA,EAAepgE,QAAU,WAC3B/2B,EAAQgtG,gBAAkB8X,GAAYkH,WAAW70B,GAClDu1B,iBAAiBv1B,GAChBA,EAAepgE,QAAU,UAChC,KAEJ,KAAK,GACHq3D,eAAe+I,GACf3G,EAAc9C,wBAAwB1tF,QACtC,IAAI2C,EAAOw0F,EAAex0F,KAC1B,GAAI,OAAS3C,GAAW,MAAQm3F,EAAe3K,UAC7CxsF,EAAQgtG,gBAAkB8X,GAAYkH,WAAW70B,OAC9C,CACH,IAAK2tB,EAAU,CACb,GAAI,OAAS3tB,EAAe3K,UAC1B,MAAMz1F,MAAMwxF,yBAAuB,MAErC,OADAmkC,iBAAiBv1B,GACN,IACZ,CACDn3F,EAAUwtF,mBAAmBxtF,QAC7BowG,kBAAkBjZ,GACdsY,6BAA6BtY,IAC3Bn3F,EAAU4rH,yBAAyBjpH,EAAMmiH,EAAUt0B,GACpD2G,EAAe3K,UAAYxsF,EAC5BgsH,WAAW70B,GAChB,CAED,OADAu1B,iBAAiBv1B,GACV,KACT,OAGE,GAFA/I,eAAe+I,GACf3G,EAAc2G,EAAex0F,KACzB,OAAS3C,GAAW,MAAQm3F,EAAe3K,UAC7CxsF,EAAQgtG,gBAAkB8X,GAAYkH,WAAW70B,OAC9C,CACH,IAAK2tB,EAAU,CACb,GAAI,OAAS3tB,EAAe3K,UAC1B,MAAMz1F,MAAMwxF,yBAAuB,MAErC,OADAmkC,iBAAiBv1B,GACN,IACZ,CAED,GADAn3F,EAAUwtF,mBAAmBxtF,QACzBowG,kBAAkBjZ,GACpBsY,6BAA6BtY,OAC1B,CAIH,OAHAx0F,EAAO+oH,kCACLh+B,wBAAwB1tF,SAElBA,GACN,KAAM,EACJA,EAAU2C,EAAKsqH,gBACb,6BACAz8B,GAEF,MACF,KAAM,EACJxwF,EAAU2C,EAAKsqH,gBACb,qCACAz8B,GAEF,MACF,QACE,OAAQA,GACN,IAAK,MACHxwF,EAAU2C,EAAKsqH,gBACb,6BACAz8B,GAEF,MACF,IAAK,OACHxwF,EAAU2C,EAAKsqH,gBACb,qCACAz8B,GAEF,MACF,IAAK,UACHxwF,EAAU2C,EAAKkL,cAAc,QACrBq/G,UAAY,qBACpBltH,EAAUA,EAAQiO,YAAYjO,EAAQ45F,YACtC,MACF,IAAK,SACH55F,EACE,iBAAoB8kH,EAAStd,GACzB7kG,EAAKkL,cAAc,SAAU,CAAE25F,GAAIsd,EAAStd,KAC5C7kG,EAAKkL,cAAc,UACzBi3G,EAAS5rB,SACJl5F,EAAQk5F,UAAW,EACpB4rB,EAASxvH,OAAS0K,EAAQ1K,KAAOwvH,EAASxvH,MAC9C,MACF,QACE0K,EACE,iBAAoB8kH,EAAStd,GACzB7kG,EAAKkL,cAAc2iF,EAAa,CAAEgX,GAAIsd,EAAStd,KAC/C7kG,EAAKkL,cAAc2iF,IAGjCxwF,EAAQgzF,qBAAuBmE,EAC/Bn3F,EAAQizF,kBAAoB6xB,EAC5BptE,EAAG,IAAK/0C,EAAOw0F,EAAe5wB,MAAO,OAAS5jE,GAAQ,CACpD,GAAI,IAAMA,EAAKg+C,KAAO,IAAMh+C,EAAKg+C,IAC/B3gD,EAAQmO,YAAYxL,EAAK6pF,gBAClB,GAAA,IAAM7pF,EAAKg+C,KAAO,KAAOh+C,EAAKg+C,KAAO,OAASh+C,EAAK4jE,MAAO,CACjE5jE,EAAK4jE,MAAMqlB,OAASjpF,EACpBA,EAAOA,EAAK4jE,MACZ,QACD,CACD,GAAI5jE,IAASw0F,EAAgB,MAAMz/C,EACnC,KAAO,OAAS/0C,EAAK0pF,SAAW,CAC9B,GAAI,OAAS1pF,EAAKipF,QAAUjpF,EAAKipF,SAAWuL,EAC1C,MAAMz/C,EACR/0C,EAAOA,EAAKipF,MACb,CACDjpF,EAAK0pF,QAAQT,OAASjpF,EAAKipF,OAC3BjpF,EAAOA,EAAK0pF,OACb,CACD8K,EAAe3K,UAAYxsF,EAC3B03C,EAAG,OACAi0E,qBAAqB3rH,EAASwwF,EAAas0B,GAAWt0B,GAEvD,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,WACHxwF,IAAY8kH,EAASqI,UACrB,MAAMz1E,EACR,IAAK,MACH13C,GAAU,EACV,MAAM03C,EACR,QACE13C,GAAU,EAEdA,GAAWgsH,WAAW70B,EACvB,CACF,CAGD,OAFAu1B,iBAAiBv1B,GACjBA,EAAepgE,QAAU,SAClB,KACT,KAAM,EACJ,GAAI/2B,GAAW,MAAQm3F,EAAe3K,UACpCxsF,EAAQgtG,gBAAkB8X,GAAYkH,WAAW70B,OAC9C,CACH,GAAI,iBAAoB2tB,GAAY,OAAS3tB,EAAe3K,UAC1D,MAAMz1F,MAAMwxF,yBAAuB,MAErC,GADAvoF,EAAU0tF,wBAAwB1tF,QAC9BowG,kBAAkBjZ,GAAiB,CAKrC,GAJAn3F,EAAUm3F,EAAe3K,UACzBgE,EAAc2G,EAAe6V,cAC7B8X,EAAW,KAEP,QADJniH,EAAOusG,sBAEL,OAAQvsG,EAAKg+C,KACX,KAAK,GACL,OACEmkE,EAAWniH,EAAKqqG,cAEtBhtG,EAAQgzF,qBAAuBmE,GAC/Bn3F,KACEA,EAAQ85F,YAActJ,GACrB,OAASs0B,IAAY,IAAOA,EAASlV,0BACtCC,sBAAsB7vG,EAAQ85F,UAAWtJ,MAGhC+e,yBAAyBpY,EACrC,MACEn3F,EACC0rH,kCAAkC1rH,GAASyN,eACzCq3G,IAEO9xB,qBAAuBmE,EAC/BA,EAAe3K,UAAYxsF,CACjC,CAED,OADA0sH,iBAAiBv1B,QAEnB,KAAO,GAEL,GADA2tB,EAAW3tB,EAAepL,cAExB,OAAS/rF,GACR,OAASA,EAAQ+rF,eAChB,OAAS/rF,EAAQ+rF,cAAcC,WACjC,CAEA,GADArpF,EAAOytG,kBAAkBjZ,GACrB,OAAS2tB,GAAY,OAASA,EAAS94B,WAAY,CACrD,GAAI,OAAShsF,EAAS,CACpB,IAAK2C,EAAM,MAAM5L,MAAMwxF,yBAAuB,MAG9C,KADA5lF,EAAO,QADPA,EAAOw0F,EAAepL,eACCppF,EAAKqpF,WAAa,MAC9B,MAAMj1F,MAAMwxF,yBAAuB,MAC9C5lF,EAAKqwF,qBAAuBmE,CAC7B,MACCuZ,wBACgC,IAAvBvZ,EAAepgE,SACnBogE,EAAepL,cAAgB,MACjCoL,EAAepgE,OAAS,EAC7B21F,iBAAiBv1B,GACjBx0F,GAAO,CACR,MACEA,EAAOguG,sCACN,OAAS3wG,GACP,OAASA,EAAQ+rF,gBAChB/rF,EAAQ+rF,cAAcqjB,gBAAkBzsG,GAC1CA,GAAO,EACZ,IAAKA,EACH,OAA2B,IAAvBw0F,EAAepgE,OACVmtF,mBAAmB/sB,GAAiBA,IAC7C+sB,mBAAmB/sB,GACZ,KAEV,CAED,GADA+sB,mBAAmB/sB,GACe,IAAvBA,EAAepgE,MACxB,OAAQogE,EAAevH,MAAQY,EAAc2G,EAG/C,GAFA3G,EAAc,OAASs0B,EACvB9kH,EAAU,OAASA,GAAW,OAASA,EAAQ+rF,cAC3CyE,EAAa,CAEf7tF,EAAO,KACP,QAFAmiH,EAAW3tB,EAAe5wB,OAERolB,WAChB,OAASm5B,EAASn5B,UAAUI,eAC5B,OAAS+4B,EAASn5B,UAAUI,cAAcm8B,YACzCvlH,EAAOmiH,EAASn5B,UAAUI,cAAcm8B,UAAU5T,MACrD,IAAI8Y,EAAY,KAChB,OAAStI,EAAS/4B,eAChB,OAAS+4B,EAAS/4B,cAAcm8B,YAC/BkF,EAAYtI,EAAS/4B,cAAcm8B,UAAU5T,MAChD8Y,IAAczqH,IAASmiH,EAAS/tF,OAAS,KAC1C,CAMD,OALAy5D,IAAgBxwF,GACdwwF,IACC2G,EAAe5wB,MAAMxvC,OAAS,MACjCq1F,oBAAoBj1B,EAAgBA,EAAe4V,aACnD2f,iBAAiBv1B,GACV,KACT,KAAK,EACH,OACElJ,mBACA,OAASjuF,GACPqtH,2BAA2Bl2B,EAAe3K,UAAUvD,eACtDyjC,iBAAiBv1B,GACjB,KAEJ,KAAK,GACH,OACEia,YAAYja,EAAex0F,MAAO+pH,iBAAiBv1B,GAAiB,KAExE,KAAK,GAGH,GAFA1jF,IAAIswG,qBAEA,QADJphH,EAAOw0F,EAAepL,eACH,OAAO2gC,iBAAiBv1B,GAAiB,KAG5D,GAFA2tB,KAAyC,IAAvB3tB,EAAepgE,OAE7B,QADJq2F,EAAYzqH,EAAKsoH,WAEf,GAAInG,EAAUwH,mBAAmB3pH,GAAM,OAClC,CACH,GACE,IAAMkkH,8BACL,OAAS7mH,GAAkC,IAAhBA,EAAQ+2B,MAEpC,IAAK/2B,EAAUm3F,EAAe5wB,MAAO,OAASvmE,GAAW,CAEvD,GAAI,QADJotH,EAAYjJ,mBAAmBnkH,IACP,CAQtB,IAPAm3F,EAAepgE,OAAS,IACxBu1F,mBAAmB3pH,GAAM,GACzB3C,EAAUotH,EAAUrgB,YACpB5V,EAAe4V,YAAc/sG,EAC7BosH,oBAAoBj1B,EAAgBn3F,GACpCm3F,EAAe8V,aAAe,EAC9BjtG,EAAUwwF,EACLA,EAAc2G,EAAe5wB,MAAO,OAASiqB,GAChD+c,oBAAoB/c,EAAaxwF,GAC9BwwF,EAAcA,EAAYnE,QAK/B,OAJAt0F,KACEgsH,oBAC+B,EAA9BA,oBAAoB/jH,QAAe,GAE/Bm3F,EAAe5wB,KACvB,CACDvmE,EAAUA,EAAQqsF,OACnB,CACH,OAAS1pF,EAAK7K,MACZikF,MAAQuxC,qCACNn2B,EAAepgE,OAAS,IACzB+tF,GAAW,EACZwH,mBAAmB3pH,GAAM,GACxBw0F,EAAevH,MAAQ,QAC3B,KACE,CACH,IAAKk1B,EACH,GAAgD,QAA1C9kH,EAAUmkH,mBAAmBiJ,KACjC,GACIj2B,EAAepgE,OAAS,IACzB+tF,GAAW,EACX9kH,EAAUA,EAAQ+sG,YAClB5V,EAAe4V,YAAc/sG,EAC9BosH,oBAAoBj1B,EAAgBn3F,GACpCssH,mBAAmB3pH,GAAM,GACzB,OAASA,EAAK7K,MACZ,WAAa6K,EAAKooH,WACjBqC,EAAUzhC,YACVoN,YAEH,OAAO2zB,iBAAiBv1B,GAAiB,UAE3C,EAAIpb,MAAQp5E,EAAKuoH,mBACfoC,oCACA,YAAc98B,IACZ2G,EAAepgE,OAAS,IACzB+tF,GAAW,EACZwH,mBAAmB3pH,GAAM,GACxBw0F,EAAevH,MAAQ,SAC9BjtF,EAAKkoH,aACCuC,EAAU/gC,QAAU8K,EAAe5wB,MACpC4wB,EAAe5wB,MAAQ6mD,IAExB,QADEptH,EAAU2C,EAAK1B,MAEZjB,EAAQqsF,QAAU+gC,EAClBj2B,EAAe5wB,MAAQ6mD,EAC3BzqH,EAAK1B,KAAOmsH,EAClB,CACD,OAAI,OAASzqH,EAAK7K,MAEbq/F,EAAiBx0F,EAAK7K,KACtB6K,EAAKsoH,UAAY9zB,EACjBx0F,EAAK7K,KAAOq/F,EAAe9K,QAC3B1pF,EAAKuoH,mBAAqBnvC,MAC1Bob,EAAe9K,QAAU,KACzBrsF,EAAU+jH,oBAAoB/jH,QAC/BjI,KAAKgsH,oBAAqBe,EAAsB,EAAV9kH,EAAe,EAAc,EAAVA,GACzDm3F,IAEJu1B,iBAAiBv1B,GACV,MACT,QACA,KAAO,GACL,OACE+sB,mBAAmB/sB,GACnBygB,mBACCkN,EAAW,OAAS3tB,EAAepL,cACpC,OAAS/rF,EACJ,OAASA,EAAQ+rF,gBAAmB+4B,IACpC3tB,EAAepgE,OAAS,MACzB+tF,IAAa3tB,EAAepgE,OAAS,MACzC+tF,KACyB,UAAdt0B,MACuB,IAAvB2G,EAAepgE,SACrB21F,iBAAiBv1B,GACY,EAA9BA,EAAe8V,eAAqB9V,EAAepgE,OAAS,OAC5D21F,iBAAiBv1B,GAErB,QADC3G,EAAc2G,EAAe4V,cAE5Bqf,oBAAoBj1B,EAAgB3G,EAAYy2B,YACjDz2B,EAAc,KACf,OAASxwF,GACP,OAASA,EAAQ+rF,eACjB,OAAS/rF,EAAQ+rF,cAAcm8B,YAC9B13B,EAAcxwF,EAAQ+rF,cAAcm8B,UAAU5T,MAChDwQ,EAAW,KACZ,OAAS3tB,EAAepL,eACtB,OAASoL,EAAepL,cAAcm8B,YACrCpD,EAAW3tB,EAAepL,cAAcm8B,UAAU5T,MACrDwQ,IAAat0B,IAAgB2G,EAAepgE,OAAS,MACrD,OAAS/2B,GAAWyT,IAAIqgG,cACxB,KAEJ,KAAK,GACH,OACGtjB,EAAc,KACf,OAASxwF,IAAYwwF,EAAcxwF,EAAQ+rF,cAAcpH,OACzDwS,EAAepL,cAAcpH,QAAU6L,IACpC2G,EAAepgE,OAAS,MAC3Bq6E,YAAY0B,cACZ4Z,iBAAiBv1B,GACjB,KAEJ,KAAO,GAEP,KAAK,GACH,OAAW,KAEf,MAAMpgG,MAAMwxF,yBAAuB,IAAK4O,EAAex2C,KACzD,CACA,SAAS4sE,WAAWvtH,EAASm3F,GAE3B,OADA8X,eAAe9X,GACPA,EAAex2C,KACrB,KAAK,EACH,OAEY,OADT3gD,EAAUm3F,EAAepgE,QAEpBogE,EAAepgE,OAAoB,MAAX/2B,EAAoB,IAAMm3F,GACpD,KAER,KAAM,EACJ,OACEia,YAAY0B,cACZ7kB,mBAEiB,OADhBjuF,EAAUm3F,EAAepgE,UACkB,IAAV/2B,IAC5Bm3F,EAAepgE,OAAoB,MAAX/2B,EAAoB,IAAMm3F,GACpD,KAER,KAAK,GACL,KAAK,GACL,OACE,OAAO/I,eAAe+I,GAAiB,KACzC,KAAO,GAGL,GAFA+sB,mBAAmB/sB,GAEf,QADJn3F,EAAUm3F,EAAepL,gBACD,OAAS/rF,EAAQgsF,WAAY,CACnD,GAAI,OAASmL,EAAexL,UAC1B,MAAM50F,MAAMwxF,yBAAuB,MACrCmoB,qBACD,CAED,OAAiB,OADjB1wG,EAAUm3F,EAAepgE,QAEnBogE,EAAepgE,OAAoB,MAAX/2B,EAAoB,IAAMm3F,GACpD,KACN,KAAK,GACH,OAAO1jF,IAAIswG,qBAAsB,KACnC,KAAM,EACJ,OAAO91B,mBAAoB,KAC7B,KAAK,GACH,OAAOmjB,YAAYja,EAAex0F,MAAO,KAC3C,KAAK,GACL,KAAO,GACL,OACEuhH,mBAAmB/sB,GACnBygB,mBACA,OAAS53G,GAAWyT,IAAIqgG,cAEd,OADT9zG,EAAUm3F,EAAepgE,QAEpBogE,EAAepgE,OAAoB,MAAX/2B,EAAoB,IAAMm3F,GACpD,KAER,QACE,OAAOia,YAAY0B,cAAe,KAGpC,QACE,YAEN,CACA,SAAS0a,sBAAsBxtH,EAASytH,GAEtC,OADAxe,eAAewe,GACPA,EAAgB9sE,KACtB,KAAM,EACJywD,YAAY0B,cACZ7kB,mBACA,MACF,QACA,KAAO,GACP,KAAK,EACHG,eAAeq/B,GACf,MACF,KAAK,EACHx/B,mBACA,MACF,QACEi2B,mBAAmBuJ,GACnB,MACF,KAAK,GACHh6G,IAAIswG,qBACJ,MACF,KAAK,GACH3S,YAAYqc,EAAgB9qH,MAC5B,MACF,KAAK,GACL,QACEuhH,mBAAmBuJ,GACnB7V,mBACA,OAAS53G,GAAWyT,IAAIqgG,cACxB,MACF,KAAO,GACL1C,YAAY0B,cAElB,CACA,SAAS4a,0BAA0B32F,EAAO42F,GACxC,IACE,IAAI5gB,EAAc4gB,EAAa5gB,YAC7BuM,EAAa,OAASvM,EAAcA,EAAYuM,WAAa,KAC/D,GAAI,OAASA,EAAY,CACvB,IAAIsU,EAActU,EAAWnhH,KAC7B40G,EAAc6gB,EACd,EAAG,CACD,IAAK7gB,EAAYpsD,IAAM5pB,KAAWA,EAAO,CACvCuiF,OAAa,EACb,IAAI19G,EAASmxG,EAAYnxG,OACvBm4F,EAAOgZ,EAAYhZ,KACrBulB,EAAa19G,IACbm4F,EAAKv6F,QAAU8/G,CAChB,CACDvM,EAAcA,EAAY50G,IAClC,OAAe40G,IAAgB6gB,EAC1B,CACF,CAAC,MAAO18G,GACP28G,wBAAwBF,EAAcA,EAAa/hC,OAAQ16E,EAC5D,CACH,CACA,SAAS48G,4BACP/2F,EACA42F,EACAI,GAEA,IACE,IAAIhhB,EAAc4gB,EAAa5gB,YAC7BuM,EAAa,OAASvM,EAAcA,EAAYuM,WAAa,KAC/D,GAAI,OAASA,EAAY,CACvB,IAAIsU,EAActU,EAAWnhH,KAC7B40G,EAAc6gB,EACd,EAAG,CACD,IAAK7gB,EAAYpsD,IAAM5pB,KAAWA,EAAO,CACvC,IAAIg9D,EAAOgZ,EAAYhZ,KACrBv6F,EAAUu6F,EAAKv6F,QACjB,QAAI,IAAWA,EAAS,CACtBu6F,EAAKv6F,aAAU,EACf8/G,EAAaqU,EACb,IAAIK,EAAyBD,EAC3BE,EAAWz0H,EACb,IACEy0H,GACD,CAAC,MAAO/8G,GACP28G,wBACEvU,EACA0U,EACA98G,EAEH,CACF,CACF,CACD67F,EAAcA,EAAY50G,IAClC,OAAe40G,IAAgB6gB,EAC1B,CACF,CAAC,MAAO18G,GACP28G,wBAAwBF,EAAcA,EAAa/hC,OAAQ16E,EAC5D,CACH,CACA,SAASg9G,qBAAqBP,GAC5B,IAAI5gB,EAAc4gB,EAAa5gB,YAC/B,GAAI,OAASA,EAAa,CACxB,IAAIt1G,EAAWk2H,EAAanhC,UAC5B,IACE6qB,gBAAgBtK,EAAat1G,EAC9B,CAAC,MAAOyZ,GACP28G,wBAAwBF,EAAcA,EAAa/hC,OAAQ16E,EAC5D,CACF,CACH,CACA,SAASi9G,+BACPnuH,EACAguH,EACAv2H,GAEAA,EAASsjF,MAAQqqC,2BACfplH,EAAQ2C,KACR3C,EAAQgtG,eAEVv1G,EAASoD,MAAQmF,EAAQ+rF,cACzB,IACEt0F,EAAS22H,sBACV,CAAC,MAAOl9G,GACP28G,wBAAwB7tH,EAASguH,EAAwB98G,EAC1D,CACH,CACA,SAASm9G,gBAAgBruH,EAASguH,GAChC,IACE,IAAInzC,EAAM76E,EAAQ66E,IAClB,GAAI,OAASA,EAAK,CAChB,OAAQ76E,EAAQ2gD,KACd,KAAO,GACP,KAAK,GACL,KAAM,EACJ,IAAI2tE,EAAgBtuH,EAAQwsF,UAC5B,MAIF,QACE8hC,EAAgBtuH,EAAQwsF,UAE5B,mBAAsB3R,EACjB76E,EAAQ8sG,WAAajyB,EAAIyzC,GACzBzzC,EAAI76E,QAAUsuH,CACpB,CACF,CAAC,MAAOp9G,GACP28G,wBAAwB7tH,EAASguH,EAAwB98G,EAC1D,CACH,CACA,SAASq9G,gBAAgBvuH,EAASguH,GAChC,IAAInzC,EAAM76E,EAAQ66E,IAChBiyB,EAAa9sG,EAAQ8sG,WACvB,GAAI,OAASjyB,EACX,GAAI,mBAAsBiyB,EACxB,IACEA,GACD,CAAC,MAAO57F,GACP28G,wBAAwB7tH,EAASguH,EAAwB98G,EACjE,CAAO,QACElR,EAAQ8sG,WAAa,KAEpB,OADC9sG,EAAUA,EAAQ2rF,aACC3rF,EAAQ8sG,WAAa,KAC5C,SACM,mBAAsBjyB,EAC7B,IACEA,EAAI,KACL,CAAC,MAAO2zC,GACPX,wBAAwB7tH,EAASguH,EAAwBQ,EAC1D,MACE3zC,EAAI76E,QAAU,IACvB,CACA,SAASyuH,gBAAgBd,GACvB,IAAIhrH,EAAOgrH,EAAahrH,KACtBo4E,EAAQ4yC,EAAa3gB,cACrBv1G,EAAWk2H,EAAanhC,UAC1B,IACE90C,EAAG,OAAQ/0C,GACT,IAAK,SACL,IAAK,QACL,IAAK,SACL,IAAK,WACHo4E,EAAMoyC,WAAa11H,EAASi3H,QAC5B,MAAMh3E,EACR,IAAK,MACHqjC,EAAMpmF,IACD8C,EAAS9C,IAAMomF,EAAMpmF,IACtBomF,EAAM4zC,SAAWl3H,EAASm3H,OAAS7zC,EAAM4zC,QAElD,CAAC,MAAOz9G,GACP28G,wBAAwBF,EAAcA,EAAa/hC,OAAQ16E,EAC5D,CACH,CACA,SAAS29G,iBAAiBlB,EAAc7I,EAAUD,GAChD,IACE,IAAIiK,EAAanB,EAAanhC,UAC9BuiC,iBAAiBD,EAAYnB,EAAahrH,KAAMkiH,EAAUC,GAC1DgK,EAAW77B,kBAAoB6xB,CAChC,CAAC,MAAO5zG,GACP28G,wBAAwBF,EAAcA,EAAa/hC,OAAQ16E,EAC5D,CACH,CACA,SAAS89G,aAAavjC,GACpB,WACQA,EAAM9qC,KACZ,IAAM8qC,EAAM9qC,KACZ,KAAO8qC,EAAM9qC,KACZ,KAAO8qC,EAAM9qC,KAAO6vD,iBAAiB/kB,EAAM9oF,OAC5C,IAAM8oF,EAAM9qC,GAEhB,CACA,SAASsuE,eAAexjC,GACtB/zC,EAAG,OAAS,CACV,KAAO,OAAS+zC,EAAMY,SAAW,CAC/B,GAAI,OAASZ,EAAMG,QAAUojC,aAAavjC,EAAMG,QAAS,OAAW,KACpEH,EAAQA,EAAMG,MACf,CAED,IADAH,EAAMY,QAAQT,OAASH,EAAMG,OAE3BH,EAAQA,EAAMY,QACd,IAAMZ,EAAM9qC,KAAO,IAAM8qC,EAAM9qC,KAAO,KAAO8qC,EAAM9qC,KAEnD,CACA,GAAI,KAAO8qC,EAAM9qC,KAAO6vD,iBAAiB/kB,EAAM9oF,MAAO,SAAS+0C,EAC/D,GAAkB,EAAd+zC,EAAM10D,MAAW,SAAS2gB,EAC9B,GAAI,OAAS+zC,EAAMllB,OAAS,IAAMklB,EAAM9qC,IAAK,SAASjJ,EAChD+zC,EAAMllB,MAAMqlB,OAASH,EAASA,EAAQA,EAAMllB,KACnD,CACD,KAAoB,EAAdklB,EAAM10D,OAAY,OAAO00D,EAAMe,SACtC,CACH,CACA,SAAS0iC,yCAAyCx0H,EAAMy0H,EAAQ9uF,GAC9D,IAAIsgB,EAAMjmD,EAAKimD,IACf,GAAI,IAAMA,GAAO,IAAMA,EACpBjmD,EAAOA,EAAK8xF,UACX2iC,GACK,IAAM9uF,EAAOqpD,SACVrpD,EAAO+5C,KACP,SAAW/5C,EAAOm3D,SAChBn3D,EAAO24D,cAAc5e,KACrB/5C,GACJ+uF,aAAa10H,EAAMy0H,KACnBA,EACA,IAAM9uF,EAAOqpD,SACTrpD,EAAO+5C,KACP,SAAW/5C,EAAOm3D,SAChBn3D,EAAO24D,cAAc5e,KACrB/5C,GACDlyB,YAAYzT,GAElB,OADA2lC,EAASA,EAAOgvF,sBAEf,OAASF,EAAOjf,UACfif,EAAOjf,QAAU3tB,cACvB,GACH,IAAM5hC,IACL,KAAOA,GACN6vD,iBAAiB91G,EAAKiI,QACpB09B,EAAS3lC,EAAK8xF,UAAa2iC,EAAS,MAExC,QADCz0H,EAAOA,EAAK6rE,QAGb,IACE2oD,yCAAyCx0H,EAAMy0H,EAAQ9uF,GACrD3lC,EAAOA,EAAK2xF,QACd,OAAS3xF,GAGTw0H,yCAAyCx0H,EAAMy0H,EAAQ9uF,GACpD3lC,EAAOA,EAAK2xF,OACrB,CACA,SAASijC,4BAA4B50H,EAAMy0H,EAAQ9uF,GACjD,IAAIsgB,EAAMjmD,EAAKimD,IACf,GAAI,IAAMA,GAAO,IAAMA,EACpBjmD,EAAOA,EAAK8xF,UACX2iC,EAAS9uF,EAAO+uF,aAAa10H,EAAMy0H,GAAU9uF,EAAOlyB,YAAYzT,QAElE,GAAA,IAAMimD,IACL,KAAOA,GAAO6vD,iBAAiB91G,EAAKiI,QAAU09B,EAAS3lC,EAAK8xF,WAE7D,QADC9xF,EAAOA,EAAK6rE,QAGb,IACE+oD,4BAA4B50H,EAAMy0H,EAAQ9uF,GAAS3lC,EAAOA,EAAK2xF,QAC/D,OAAS3xF,GAGT40H,4BAA4B50H,EAAMy0H,EAAQ9uF,GAAU3lC,EAAOA,EAAK2xF,OACtE,CACA,SAASkjC,+BAA+B5B,GACtC,IAAI6B,EAAY7B,EAAanhC,UAC3BzR,EAAQ4yC,EAAa3gB,cACvB,IACE,IACE,IAAIrqG,EAAOgrH,EAAahrH,KAAM8sH,EAAaD,EAAUC,WACrDA,EAAW57H,QAGX27H,EAAUE,oBAAoBD,EAAW,IAC3C9D,qBAAqB6D,EAAW7sH,EAAMo4E,GACtCy0C,EAAUx8B,qBAAuB26B,EACjC6B,EAAUv8B,kBAAoBlY,CAC/B,CAAC,MAAO7pE,GACP28G,wBAAwBF,EAAcA,EAAa/hC,OAAQ16E,EAC5D,CACH,CACA,IAAIy+G,0BAA2B,EAC7BC,2BAA4B,EAC5BC,gBAAiB,EACjBC,gBAAkB,mBAAsBC,QAAUA,QAAUx7B,IAC5Dy7B,WAAa,KACf,SAASC,4BAA4Bl8F,EAAM6lE,GAIzC,GAHA7lE,EAAOA,EAAKk1D,cACZinC,cAAgBC,SAEZtnB,yBADJ90E,EAAO00E,qBAAqB10E,IACQ,CAClC,GAAI,mBAAoBA,EACtB,IAAIs8E,EAAkB,CACpBrmF,MAAO+J,EAAKq1E,eACZ5nG,IAAKuyB,EAAKs1E,mBAGZ3xD,EAAG,CAKD,IAAI04E,GAJJ/f,GACIA,EAAkBt8E,EAAKilE,gBACvBqX,EAAgB3H,aAClBpsG,QAEgBitG,cAAgB8G,EAAgB9G,eAClD,GAAI6mB,GAAa,IAAMA,EAAUC,WAAY,CAC3ChgB,EAAkB+f,EAAU9mB,WAC5B,IAAIE,EAAe4mB,EAAU5mB,aAC3BC,EAAY2mB,EAAU3mB,UACxB2mB,EAAYA,EAAU1mB,YACtB,IACE2G,EAAgB3mB,SAAU+f,EAAU/f,QACrC,CAAC,MAAO4mC,GACPjgB,EAAkB,KAClB,MAAM34D,CACP,CACD,IAAI7jD,EAAS,EACXm2B,GAAS,EACTxoB,GAAO,EACP+uH,EAAoB,EACpBC,EAAmB,EACnB91H,EAAOq5B,EACP/lB,EAAa,KACflB,EAAG,OAAS,CACV,IAAK,IAAI3U,EACPuC,IAAS21G,GACN,IAAM7G,GAAgB,IAAM9uG,EAAKgvF,WACjC1/D,EAAQn2B,EAAS21G,GACpB9uG,IAAS+uG,GACN,IAAM2mB,GAAa,IAAM11H,EAAKgvF,WAC9BloF,EAAM3N,EAASu8H,GAClB,IAAM11H,EAAKgvF,WAAa71F,GAAU6G,EAAKo/F,UAAUjmG,QAC7C,QAAUsE,EAAOuC,EAAKk/F,aAC1B5rF,EAAatT,EACbA,EAAOvC,EAET,OAAS,CACP,GAAIuC,IAASq5B,EAAM,MAAMjnB,EAOzB,GANAkB,IAAeqiG,KACXkgB,IAAsB/mB,IACvBx/E,EAAQn2B,GACXma,IAAey7F,KACX+mB,IAAqBJ,IACtB5uH,EAAM3N,GACL,QAAUsE,EAAOuC,EAAKytG,aAAc,MAExCn6F,GADAtT,EAAOsT,GACWA,UACnB,CACDtT,EAAOvC,CACR,CACDk4G,GACG,IAAMrmF,IAAU,IAAMxoB,EAAM,KAAO,CAAEwoB,MAAOA,EAAOxoB,IAAKA,EACrE,MAAe6uG,EAAkB,IAC1B,CACHA,EAAkBA,GAAmB,CAAErmF,MAAO,EAAGxoB,IAAK,EAC1D,MAAS6uG,EAAkB,KAGzB,IAFAogB,qBAAuB,CAAEC,YAAa38F,EAAM48F,eAAgBtgB,GAC5D8f,UAAW,EACNH,WAAap2B,EAAY,OAASo2B,YACrC,GAEGj8F,GADC6lE,EAAao2B,YACIzpD,MACc,KAA1BqzB,EAAWqT,cAAwB,OAASl5E,EAElDA,EAAK63D,OAASgO,EAAco2B,WAAaj8F,OAE1C,KAAO,OAASi8F,YAAc,CAI5B,OAFAvmB,GADA7P,EAAao2B,YACUrkC,UACvB53D,EAAO6lE,EAAW7iE,MACV6iE,EAAWj5C,KACjB,KAAM,EAEN,KAAK,GACL,QAgDA,KAAM,EACN,KAAK,GACL,KAAK,GACL,OACA,KAAM,EACN,KAAK,GACH,MApDF,KAAK,EACH,GAAkB,KAAP5sB,GAAgB,OAAS01E,EAAW,CAC7C11E,OAAO,EACPs8E,EAAkBzW,EAClB4P,EAAeC,EAAUuD,cACzBvD,EAAYA,EAAU1d,cACtBqkC,EAAY/f,EAAgB7jB,UAC5B,IACE,IAAIokC,EAAoBxL,2BACtB/U,EAAgB1tG,KAChB6mG,EACA6G,EAAgBxD,cAAgBwD,EAAgB1tG,MAElDoxB,EAAOq8F,EAAU5H,wBACfoI,EACAnnB,GAEF2mB,EAAUS,oCAAsC98F,CACjD,CAAC,MAAO7iB,GACP28G,wBACExd,EACAA,EAAgBzkB,OAChB16E,EAEH,CACF,CACD,MACF,OACE,GAAkB,KAAP6iB,EACT,GAGE,KADCs8E,GADCt8E,EAAO6lE,EAAWpN,UAAUvD,eACNS,UAGxBonC,wBAAwB/8F,QACjB,GAAA,IAAMs8E,EACb,OAAQt8E,EAAKyjE,UACX,IAAK,OACL,IAAK,OACL,IAAK,OACHs5B,wBAAwB/8F,GACxB,MACF,QACEA,EAAK2lE,YAAc,GAE3B,MAQF,QACE,GAAkB,KAAP3lE,EAAc,MAAMh9B,MAAMwxF,yBAAuB,MAGhE,GAAI,QADJx0D,EAAO6lE,EAAWvN,SACC,CACjBt4D,EAAK63D,OAASgO,EAAWhO,OACzBokC,WAAaj8F,EACb,KACD,CACDi8F,WAAap2B,EAAWhO,MACzB,CACP,CACA,SAASmlC,0BAA0BC,EAAchxH,EAAS2tH,GACxD,IAAI52F,EAAQ42F,EAAa52F,MACzB,OAAQ42F,EAAahtE,KACnB,KAAM,EACN,KAAK,GACL,KAAK,GACHswE,iCAAiCD,EAAcrD,GACvC,EAAR52F,GAAa22F,0BAA0B,EAAGC,GAC1C,MACF,KAAM,EAEJ,GADAsD,iCAAiCD,EAAcrD,GACnC,EAAR52F,EACF,GAAMi6F,EAAerD,EAAanhC,UAAY,OAASxsF,EACrD,IACEgxH,EAAarI,mBACd,CAAC,MAAOz3G,GACP28G,wBAAwBF,EAAcA,EAAa/hC,OAAQ16E,EAC5D,KACE,CACH,IAAI42G,EAAY1C,2BACduI,EAAahrH,KACb3C,EAAQgtG,eAEVhtG,EAAUA,EAAQ+rF,cAClB,IACEilC,EAAa/H,mBACXnB,EACA9nH,EACAgxH,EAAaH,oCAEhB,CAAC,MAAOK,GACPrD,wBACEF,EACAA,EAAa/hC,OACbslC,EAEH,CACF,CACK,GAARn6F,GAAcm3F,qBAAqBP,GAC3B,IAAR52F,GAAes3F,gBAAgBV,EAAcA,EAAa/hC,QAC1D,MACF,KAAK,EAEH,GADAqlC,iCAAiCD,EAAcrD,GAErC,GAAR52F,GAC4C,QAA1Ci6F,EAAerD,EAAa5gB,aAC9B,CAEA,GADA/sG,EAAU,KACN,OAAS2tH,EAAapnD,MACxB,OAAQonD,EAAapnD,MAAM5lB,KACzB,KAAO,GACP,KAAK,EAGL,KAAK,EACH3gD,EAAU2tH,EAAapnD,MAAMimB,UAEnC,IACE6qB,gBAAgB2Z,EAAchxH,EAC/B,CAAC,MAAOkR,GACP28G,wBAAwBF,EAAcA,EAAa/hC,OAAQ16E,EAC5D,CACF,CACD,MACF,KAAO,GACL,OAASlR,GACC,EAAR+2B,GACAw4F,+BAA+B5B,GACnC,KAAO,GACP,KAAM,EACJsD,iCAAiCD,EAAcrD,GAC/C,OAAS3tH,GAAmB,EAAR+2B,GAAa03F,gBAAgBd,GACzC,IAAR52F,GAAes3F,gBAAgBV,EAAcA,EAAa/hC,QAC1D,MACF,KAAO,GACLqlC,iCAAiCD,EAAcrD,GAC/C,MACF,KAAO,GACLsD,iCAAiCD,EAAcrD,GACvC,EAAR52F,GAAao6F,iCAAiCH,EAAcrD,GACpD,GAAR52F,IAEE,QADEi6F,EAAerD,EAAa5hC,iBAG5B,QADEilC,EAAeA,EAAahlC,aAM5BolC,8BAA8BJ,EAJ5BrD,EAAe0D,gCAAgC3oH,KAC/C,KACAilH,MAGR,MACF,QAEE,KADA52F,EAAQ,OAAS42F,EAAa5hC,eAAiB4jC,0BACnC,CACV3vH,EACG,OAASA,GAAW,OAASA,EAAQ+rF,eACtC6jC,0BACF9H,EAAY6H,yBACZ,IAAI2B,EAAgC1B,0BACpCD,yBAA2B54F,GAC1B64F,0BAA4B5vH,KAAasxH,EACtCC,yCACEP,EACArD,KACmC,KAA5BA,EAAa1gB,eAEtBgkB,iCAAiCD,EAAcrD,GACnDgC,yBAA2B7H,EAC3B8H,0BAA4B0B,CAC7B,CACD,MACF,KAAK,GACH,MACF,QACEL,iCAAiCD,EAAcrD,GAErD,CACA,SAAS6D,wBAAwB/lC,GAC/B,IAAIE,EAAYF,EAAME,UACtB,OAASA,IACLF,EAAME,UAAY,KAAO6lC,wBAAwB7lC,IACrDF,EAAMllB,MAAQ,KACdklB,EAAMyhB,UAAY,KAClBzhB,EAAMY,QAAU,KAChB,IAAMZ,EAAM9qC,MAEV,QADEgrC,EAAYF,EAAMe,YACEgH,sBAAsB7H,IAC9CF,EAAMe,UAAY,KAClBf,EAAMG,OAAS,KACfH,EAAMkJ,aAAe,KACrBlJ,EAAMuhB,cAAgB,KACtBvhB,EAAMM,cAAgB,KACtBN,EAAMmhB,aAAe,KACrBnhB,EAAMe,UAAY,KAClBf,EAAMshB,YAAc,IACtB,CACA,IAAI0kB,WAAa,KACfC,uBAAwB,EAC1B,SAASC,mCACPX,EACAhD,EACA3tF,GAEA,IAAKA,EAASA,EAAOkmC,MAAO,OAASlmC,GACnCuxF,6BAA6BZ,EAAchD,EAAwB3tF,GAChEA,EAASA,EAAOgsD,OACvB,CACA,SAASulC,6BACPZ,EACAhD,EACA6D,GAEA,GAAI1iC,cAAgB,mBAAsBA,aAAa2iC,qBACrD,IACE3iC,aAAa2iC,qBAAqB5iC,WAAY2iC,EACpD,CAAM,MAAOx4H,GACX,CAAA,OAAQw4H,EAAalxE,KACnB,KAAO,GACLivE,2BACErB,gBAAgBsD,EAAc7D,GAChC2D,mCACEX,EACAhD,EACA6D,GAEFA,EAAa9lC,cACT8lC,EAAa9lC,cAActsF,QAC3BoyH,EAAarlC,YACXqlC,EAAeA,EAAarlC,WACjBx+E,WAAWC,YAAY4jH,GACxC,MACF,KAAO,GACLjC,2BACErB,gBAAgBsD,EAAc7D,GAChC,IAAI+D,EAAiBN,WACnBO,EAA4BN,sBAC9BlhB,iBAAiBqhB,EAAalvH,QAC1B8uH,WAAaI,EAAarlC,UAAaklC,uBAAwB,GACnEC,mCACEX,EACAhD,EACA6D,GAEFI,yBAAyBJ,EAAarlC,WACtCilC,WAAaM,EACbL,sBAAwBM,EACxB,MACF,KAAM,EACJpC,2BACErB,gBAAgBsD,EAAc7D,GAClC,KAAM,EAWJ,GAVA+D,EAAiBN,WACjBO,EAA4BN,sBAC5BD,WAAa,KACbE,mCACEX,EACAhD,EACA6D,GAGFH,sBAAwBM,EACpB,QAFJP,WAAaM,GAGX,GAAIL,sBACF,KACG,IAAMD,WAAW/nC,SACd+nC,WAAWr3C,KACX,SAAWq3C,WAAWj6B,SACpBi6B,WAAWz4B,cAAc5e,KACzBq3C,YACJxjH,YAAY4jH,EAAarlC,UAC5B,CAAC,MAAOt7E,GACP28G,wBACEgE,EACA7D,EACA98G,EAEH,UAGCugH,WAAWxjH,YAAY4jH,EAAarlC,UACrC,CAAC,MAAOt7E,GACP28G,wBACEgE,EACA7D,EACA98G,EAEH,CACL,MACF,QACE,OAASugH,aACNC,uBAEGQ,sBACE,KAFAlB,EAAeS,YAEI/nC,SACfsnC,EAAa52C,KACb,SAAW42C,EAAax5B,SACtBw5B,EAAah4B,cAAc5e,KAC3B42C,EACNa,EAAarlC,WAEf2lC,iBAAiBnB,IACjBkB,sBAAsBT,WAAYI,EAAarlC,YACrD,MACF,OACEulC,EAAiBN,WACjBO,EAA4BN,sBAC5BD,WAAaI,EAAarlC,UAAUvD,cACpCyoC,uBAAwB,EACxBC,mCACEX,EACAhD,EACA6D,GAEFJ,WAAaM,EACbL,sBAAwBM,EACxB,MACF,OACA,KAAO,GACP,KAAK,GACL,QACEpC,2BACE9B,4BAA4B,EAAG+D,EAAc7D,GAC/C4B,2BACE9B,4BAA4B,EAAG+D,EAAc7D,GAC/C2D,mCACEX,EACAhD,EACA6D,GAEF,MACF,KAAM,EACJjC,4BACGrB,gBAAgBsD,EAAc7D,GAE/B,mBADC+D,EAAiBF,EAAarlC,WACM4hC,sBACnCD,+BACE0D,EACA7D,EACA+D,IAENJ,mCACEX,EACAhD,EACA6D,GAEF,MACF,KAAO,GACLF,mCACEX,EACAhD,EACA6D,GAEF,MACF,KAAK,GACHjC,2BACGmC,EAAiBnC,4BAClB,OAASiC,EAAa9lC,cACxB4lC,mCACEX,EACAhD,EACA6D,GAEFjC,0BAA4BmC,EAC5B,MACF,QACEJ,mCACEX,EACAhD,EACA6D,GAGR,CACA,SAASV,iCAAiCH,EAAcrD,GACtD,GACE,OAASA,EAAa5hC,gBAEtB,QADEilC,EAAerD,EAAahiC,aAG5B,QADEqlC,EAAeA,EAAajlC,gBAEe,QAAzCilC,EAAeA,EAAahlC,cAElC,IACEmmC,iBAAiBnB,EAClB,CAAC,MAAO9/G,GACP28G,wBAAwBF,EAAcA,EAAa/hC,OAAQ16E,EAC5D,CACL,CACA,SAASkhH,cAAczE,GACrB,OAAQA,EAAahtE,KACnB,QACA,KAAO,GACL,IAAI0xE,EAAa1E,EAAanhC,UAG9B,OAFA,OAAS6lC,IACNA,EAAa1E,EAAanhC,UAAY,IAAIsjC,iBACtCuC,EACT,KAAO,GACL,OAGE,QADCA,GADA1E,EAAeA,EAAanhC,WACFi+B,eAExB4H,EAAa1E,EAAalD,YAAc,IAAIqF,iBAC/CuC,EAEJ,QACE,MAAMt7H,MAAMwxF,yBAAuB,IAAKolC,EAAahtE,MAE3D,CACA,SAAS2xE,6BAA6B3E,EAAc4E,GAClD,IAAIF,EAAaD,cAAczE,GAC/B4E,EAAU5yF,QAAQ,SAAU6yF,GAC1B,IAAIC,EAAQC,qBAAqBhqH,KAAK,KAAMilH,EAAc6E,GAC1DH,EAAWh4B,IAAIm4B,KACZH,EAAWx9B,IAAI29B,GAAWA,EAAShiH,KAAKiiH,EAAOA,GACtD,EACA,CACA,SAASE,mCAAmCC,EAAeC,GACzD,IAAI3lB,EAAY2lB,EAAY3lB,UAC5B,GAAI,OAASA,EACX,IAAK,IAAIx5G,EAAI,EAAGA,EAAIw5G,EAAUr5G,OAAQH,IAAK,CACzC,IAAIkuH,EAAgB1U,EAAUx5G,GAC5BqgC,EAAO6+F,EACPvR,EAAcwR,EACdxyF,EAASghF,EACX3pE,EAAG,KAAO,OAASrX,GAAU,CAC3B,OAAQA,EAAOsgB,KACb,QACE,GAAI6vD,iBAAiBnwE,EAAO19B,MAAO,CACjC8uH,WAAapxF,EAAOmsD,UACpBklC,uBAAwB,EACxB,MAAMh6E,CACP,CACD,MACF,KAAM,EACJ+5E,WAAapxF,EAAOmsD,UACpBklC,uBAAwB,EACxB,MAAMh6E,EACR,KAAM,EACN,KAAK,EACH+5E,WAAapxF,EAAOmsD,UAAUvD,cAC9ByoC,uBAAwB,EACxB,MAAMh6E,EAEVrX,EAASA,EAAOurD,MACjB,CACD,GAAI,OAAS6lC,WAAY,MAAM16H,MAAMwxF,yBAAuB,MAC5DqpC,6BAA6B79F,EAAMstF,EAAaO,GAChD6P,WAAa,KACbC,uBAAwB,EAExB,QADA39F,EAAO6tF,EAAcj2B,aACH53D,EAAK63D,OAAS,MAChCg2B,EAAch2B,OAAS,IACxB,CACH,GAA+B,MAA3BinC,EAAY5lB,aACd,IAAK4lB,EAAcA,EAAYtsD,MAAO,OAASssD,GAC7CC,6BAA6BD,EAAaD,GACvCC,EAAcA,EAAYxmC,OACnC,CACA,IAAI0mC,qBAAuB,KAC3B,SAASD,6BAA6BnF,EAAc55F,GAClD,IAAI/zB,EAAU2tH,EAAahiC,UACzB50D,EAAQ42F,EAAa52F,MACvB,OAAQ42F,EAAahtE,KACnB,KAAK,EACL,QACA,KAAO,GACP,KAAK,GACHgyE,mCAAmC5+F,EAAM45F,GACzCqF,4BAA4BrF,GACpB,EAAR52F,IACG+2F,4BAA4B,EAAGH,EAAcA,EAAa/hC,QAC3D8hC,0BAA0B,EAAGC,GAC7BG,4BAA4B,EAAGH,EAAcA,EAAa/hC,SAC5D,MACF,KAAM,EACJ+mC,mCAAmC5+F,EAAM45F,GACzCqF,4BAA4BrF,GACpB,IAAR52F,IACG64F,2BACC,OAAS5vH,GACTuuH,gBAAgBvuH,EAASA,EAAQ4rF,SAC7B,GAAR70D,GACE44F,2BAEA,QADEhC,EAAeA,EAAa5gB,eAG5B,QADEh2E,EAAQ42F,EAAa7X,aAEnB91G,EAAU2tH,EAAa/X,OAAOC,gBAC/B8X,EAAa/X,OAAOC,gBACnB,OAAS71G,EAAU+2B,EAAQ/2B,EAAQrH,OAAOo+B,MAClD,MACF,QACE,IAAIk8F,EAAgBF,qBAOpB,GANAJ,mCAAmC5+F,EAAM45F,GACzCqF,4BAA4BrF,GACpB,IAAR52F,IACG64F,2BACC,OAAS5vH,GACTuuH,gBAAgBvuH,EAASA,EAAQ4rF,SACzB,EAAR70D,EAAW,CACb,IAAIm8F,EAAkB,OAASlzH,EAAUA,EAAQ+rF,cAAgB,KAEjE,GADAh1D,EAAQ42F,EAAa5hC,cACjB,OAAS/rF,EACX,GAAI,OAAS+2B,EACX,GAAI,OAAS42F,EAAanhC,UAAW,CACnC90C,EAAG,CACD3gB,EAAQ42F,EAAahrH,KACrB3C,EAAU2tH,EAAa3gB,cACvBimB,EAAgBA,EAAcj6B,eAAiBi6B,EAC/CnmH,EAAG,OAAQiqB,GACT,IAAK,WACHm8F,EACED,EAAcE,qBAAqB,SAAS,KAG5CD,EAAgB3/B,0BAChB2/B,EAAgBlgC,sBAChB,+BACEkgC,EAAgBplC,cAClBolC,EAAgBE,aAAa,eAE5BF,EAAkBD,EAAcplH,cAAckpB,GAC7Ck8F,EAAcp7H,KAAKu3H,aACjB8D,EACAD,EAAcI,cAAc,kBAElC1H,qBAAqBuH,EAAiBn8F,EAAO/2B,GAC7CkzH,EAAgBlgC,qBAAuB26B,EACvCt5B,oBAAoB6+B,GACpBn8F,EAAQm8F,EACR,MAAMx7E,EACR,IAAK,OACH,IAAI47E,EAAaC,4BACf,OACA,OACAN,GACA9yH,IAAI42B,GAAS/2B,EAAQ+pF,MAAQ,KAC/B,GAAIupC,EACF,IAAK,IAAI5/H,EAAI,EAAGA,EAAI4/H,EAAWz/H,OAAQH,IACrC,IACIw/H,EAAkBI,EAAW5/H,IACf8/H,aAAa,WAC1B,MAAQxzH,EAAQ+pF,MAAQ,KAAO/pF,EAAQ+pF,KACpC,KACA/pF,EAAQ+pF,OACZmpC,EAAgBM,aAAa,UAC1B,MAAQxzH,EAAQyzH,IAAM,KAAOzzH,EAAQyzH,MACxCP,EAAgBM,aAAa,YAC1B,MAAQxzH,EAAQk/C,MAAQ,KAAOl/C,EAAQk/C,QAC1Cg0E,EAAgBM,aAAa,kBAC1B,MAAQxzH,EAAQgqF,YACb,KACAhqF,EAAQgqF,aAChB,CACAspC,EAAWlrH,OAAO1U,EAAG,GACrB,MAAMoZ,CACP,CAEL6+G,qBADAuH,EAAkBD,EAAcplH,cAAckpB,GACRA,EAAO/2B,GAC7CizH,EAAcp7H,KAAKsW,YAAY+kH,GAC/B,MACF,IAAK,OACH,GACGI,EAAaC,4BACZ,OACA,UACAN,GACA9yH,IAAI42B,GAAS/2B,EAAQgY,SAAW,KAElC,IAAKtkB,EAAI,EAAGA,EAAI4/H,EAAWz/H,OAAQH,IACjC,IACIw/H,EAAkBI,EAAW5/H,IACf8/H,aAAa,cAC1B,MAAQxzH,EAAQgY,QACb,KACA,GAAKhY,EAAQgY,UACjBk7G,EAAgBM,aAAa,WAC1B,MAAQxzH,EAAQ/G,KAAO,KAAO+G,EAAQ/G,OACzCi6H,EAAgBM,aAAa,eAC1B,MAAQxzH,EAAQ0zH,SACb,KACA1zH,EAAQ0zH,WACdR,EAAgBM,aAAa,iBAC1B,MAAQxzH,EAAQ2zH,UACb,KACA3zH,EAAQ2zH,YACdT,EAAgBM,aAAa,cAC1B,MAAQxzH,EAAQ4zH,QACb,KACA5zH,EAAQ4zH,SAChB,CACAN,EAAWlrH,OAAO1U,EAAG,GACrB,MAAMoZ,CACP,CAEL6+G,qBADAuH,EAAkBD,EAAcplH,cAAckpB,GACRA,EAAO/2B,GAC7CizH,EAAcp7H,KAAKsW,YAAY+kH,GAC/B,MACF,QACE,MAAMn8H,MAAMwxF,yBAAuB,IAAKxxD,IAE5Cm8F,EAAgBlgC,qBAAuB26B,EACvCt5B,oBAAoB6+B,GACpBn8F,EAAQm8F,CACT,CACDvF,EAAanhC,UAAYz1D,CAC1B,MACC88F,eACEZ,EACAtF,EAAahrH,KACbgrH,EAAanhC,gBAGjBmhC,EAAanhC,UAAYsnC,gBACvBb,EACAl8F,EACA42F,EAAa3gB,oBAGjBkmB,IAAoBn8F,GACf,OAASm8F,EACN,OAASlzH,EAAQwsF,YACfxsF,EAAUA,EAAQwsF,WACZx+E,WAAWC,YAAYjO,GAC/BkzH,EAAgBzzH,QACpB,OAASs3B,EACL88F,eACEZ,EACAtF,EAAahrH,KACbgrH,EAAanhC,WAEfsnC,gBACEb,EACAl8F,EACA42F,EAAa3gB,gBAEnB,OAASj2E,GACT,OAAS42F,EAAanhC,WACtBqiC,iBACElB,EACAA,EAAa3gB,cACbhtG,EAAQgtG,cAEjB,CACD,MACF,QACE2lB,mCAAmC5+F,EAAM45F,GACzCqF,4BAA4BrF,GACpB,IAAR52F,IACG64F,2BACC,OAAS5vH,GACTuuH,gBAAgBvuH,EAASA,EAAQ4rF,SACrC,OAAS5rF,GACC,EAAR+2B,GACA83F,iBACElB,EACAA,EAAa3gB,cACbhtG,EAAQgtG,eAEZ,MACF,KAAK,EAOH,GANA2lB,mCAAmC5+F,EAAM45F,GACzCqF,4BAA4BrF,GACpB,IAAR52F,IACG64F,2BACC,OAAS5vH,GACTuuH,gBAAgBvuH,EAASA,EAAQ4rF,SACZ,GAArB+hC,EAAa52F,MAAY,CAC3Bk8F,EAAgBtF,EAAanhC,UAC7B,IACEmN,eAAes5B,EAAe,GAC/B,CAAC,MAAO/hH,GACP28G,wBAAwBF,EAAcA,EAAa/hC,OAAQ16E,EAC5D,CACF,CACO,EAAR6lB,GACE,MAAQ42F,EAAanhC,WAErBqiC,iBACElB,EAFAsF,EAAgBtF,EAAa3gB,cAI7B,OAAShtG,EAAUA,EAAQgtG,cAAgBimB,GAEvC,KAARl8F,IAAiB84F,gBAAiB,GAClC,MACF,KAAK,EAGH,GAFA8C,mCAAmC5+F,EAAM45F,GACzCqF,4BAA4BrF,GAChB,EAAR52F,EAAW,CACb,GAAI,OAAS42F,EAAanhC,UACxB,MAAMz1F,MAAMwxF,yBAAuB,MACrCxxD,EAAQ42F,EAAa3gB,cACrBhtG,EAAU2tH,EAAanhC,UACvB,IACExsF,EAAQ85F,UAAY/iE,CACrB,CAAC,MAAO7lB,GACP28G,wBAAwBF,EAAcA,EAAa/hC,OAAQ16E,EAC5D,CACF,CACD,MACF,KAAK,EAOH,GANA6iH,UAAY,KACZd,EAAgBF,qBAChBA,qBAAuBiB,iBAAiBjgG,EAAKk1D,eAC7C0pC,mCAAmC5+F,EAAM45F,GACzCoF,qBAAuBE,EACvBD,4BAA4BrF,GAChB,EAAR52F,GAAa,OAAS/2B,GAAWA,EAAQ+rF,cAAcy/B,aACzD,IACE2G,iBAAiBp+F,EAAKk1D,cACvB,CAAC,MAAO/3E,GACP28G,wBAAwBF,EAAcA,EAAa/hC,OAAQ16E,EAC5D,CACH2+G,iBACIA,gBAAiB,EAAKoE,sBAAsBtG,IAChD,MACF,KAAM,EACJ52F,EAAQg8F,qBACRA,qBAAuBiB,iBACrBrG,EAAanhC,UAAUvD,eAEzB0pC,mCAAmC5+F,EAAM45F,GACzCqF,4BAA4BrF,GAC5BoF,qBAAuBh8F,EACvB,MACF,KAAO,GA4HP,QACE47F,mCAAmC5+F,EAAM45F,GACvCqF,4BAA4BrF,SA1HhC,QACEgF,mCAAmC5+F,EAAM45F,GACzCqF,4BAA4BrF,GACD,KAA3BA,EAAapnD,MAAMxvC,OAChB,OAAS42F,EAAa5hC,gBACpB,OAAS/rF,GAAW,OAASA,EAAQ+rF,iBACvCmoC,6BAA+Bn4C,OAC1B,EAARhlD,IAEE,QADEA,EAAQ42F,EAAa5gB,eAEnB4gB,EAAa5gB,YAAc,KAC7BulB,6BAA6B3E,EAAc52F,KAC/C,MACF,KAAO,GACLk8F,EAAgB,OAAStF,EAAa5hC,cACtC,IAAIooC,EAAY,OAASn0H,GAAW,OAASA,EAAQ+rF,cACnDqoC,EAA+BzE,yBAC/B2B,EAAgC1B,0BAOlC,GANAD,yBAA2ByE,GAAgCnB,EAC3DrD,0BAA4B0B,GAAiC6C,EAC7DxB,mCAAmC5+F,EAAM45F,GACzCiC,0BAA4B0B,EAC5B3B,yBAA2ByE,EAC3BpB,4BAA4BrF,GAChB,KAAR52F,EACF2gB,EAAG,IACD3jB,EAAO45F,EAAanhC,UAClBz4D,EAAKw4E,YAAc0mB,GACK,EAApBl/F,EAAKw4E,YACc,EAAnBx4E,EAAKw4E,YACT0mB,IACG,OAASjzH,GACRm0H,GACAxE,0BACAC,2BACAyE,0CAA0C1G,IAC9C3tH,EAAU,KACV+zB,EAAO45F,IAGT,CACA,GAAI,IAAM55F,EAAK4sB,KAAO,KAAO5sB,EAAK4sB,KAChC,GAAI,OAAS3gD,EAAS,CACpBm0H,EAAYn0H,EAAU+zB,EACtB,IACE,GAAMm/F,EAAkBiB,EAAU3nC,UAAYymC,EAE1C,mBADDK,EAAaJ,EAAgB3lF,OACK4sD,YAC7Bm5B,EAAWn5B,YAAY,UAAW,OAAQ,aACzCm5B,EAAWgB,QAAU,WACzB,CACH5gI,EAAIygI,EAAU3nC,UACd,IAAIod,EAAYuqB,EAAUnnB,cAAcz/D,MACtC+mF,EACE,MAAW1qB,GAEXA,EAAUv1F,eAAe,WACrBu1F,EAAU0qB,QACV,KACR5gI,EAAE65C,MAAM+mF,QACN,MAAQA,GAAW,kBAAqBA,EACpC,IACC,GAAKA,GAAShkF,MACtB,CACF,CAAC,MAAOp/B,GACP28G,wBAAwBsG,EAAWA,EAAUvoC,OAAQ16E,EACtD,CACF,UACQ,IAAM6iB,EAAK4sB,KACpB,GAAI,OAAS3gD,EAAS,CACpBm0H,EAAYpgG,EACZ,IACEogG,EAAU3nC,UAAUsN,UAAYm5B,EAC5B,GACAkB,EAAUnnB,aACf,CAAC,MAAO97F,GACP28G,wBAAwBsG,EAAWA,EAAUvoC,OAAQ16E,EACtD,CACF,OAED,IAAE,KAAO6iB,EAAK4sB,KAAO,KAAO5sB,EAAK4sB,KAC/B,OAAS5sB,EAAKg4D,eACdh4D,IAAS45F,IACX,OAAS55F,EAAKwyC,MACd,CACAxyC,EAAKwyC,MAAMqlB,OAAS73D,EACpBA,EAAOA,EAAKwyC,MACZ,QACD,CACD,GAAIxyC,IAAS45F,EAAc,MAAMj2E,EACjC,KAAO,OAAS3jB,EAAKs4D,SAAW,CAC9B,GAAI,OAASt4D,EAAK63D,QAAU73D,EAAK63D,SAAW+hC,EAAc,MAAMj2E,EAChE13C,IAAY+zB,IAAS/zB,EAAU,MAC/B+zB,EAAOA,EAAK63D,MACb,CACD5rF,IAAY+zB,IAAS/zB,EAAU,MAC/B+zB,EAAKs4D,QAAQT,OAAS73D,EAAK63D,OAC3B73D,EAAOA,EAAKs4D,OACb,CACK,EAARt1D,IAEE,QADEA,EAAQ42F,EAAa5gB,eAGrB,QADE/sG,EAAU+2B,EAAMkwF,cAEdlwF,EAAMkwF,WAAa,KACrBqL,6BAA6B3E,EAAc3tH,MACjD,MACF,KAAK,GACH2yH,mCAAmC5+F,EAAM45F,GACzCqF,4BAA4BrF,GACpB,EAAR52F,IAEE,QADEA,EAAQ42F,EAAa5gB,eAEnB4gB,EAAa5gB,YAAc,KAC7BulB,6BAA6B3E,EAAc52F,KAEjD,QAEA,KAAK,IAMT,CACA,SAASi8F,4BAA4BrF,GACnC,IAAI52F,EAAQ42F,EAAa52F,MACzB,GAAY,EAARA,EAAW,CACb,IACE,IACE,IAAIw9F,EAAiB1B,EAAclF,EAAa/hC,OAChD,OAASinC,GAET,CACA,GAAI7D,aAAa6D,GAAc,CAC7B0B,EAAkB1B,EAClB,KACD,CACDA,EAAcA,EAAYjnC,MAC3B,CACD,GAAI,MAAQ2oC,EAAiB,MAAMx9H,MAAMwxF,yBAAuB,MAChE,OAAQgsC,EAAgB5zE,KACtB,KAAO,GACL,IAAItgB,EAASk0F,EAAgB/nC,UAE7B8iC,4BAA4B3B,EADjBsB,eAAetB,GACwBttF,GAClD,MACF,KAAK,EACH,IAAIm0F,EAAaD,EAAgB/nC,UACT,GAAxB+nC,EAAgBx9F,QACb4iE,eAAe66B,EAAY,IAAMD,EAAgBx9F,QAAU,IAE9Du4F,4BAA4B3B,EADXsB,eAAetB,GACsB6G,GACtD,MACF,KAAK,EACL,OACE,IAAIC,EAAaF,EAAgB/nC,UAAUvD,cAE3CimC,yCACEvB,EAFasB,eAAetB,GAI5B8G,GAEF,MACF,QACE,MAAM19H,MAAMwxF,yBAAuB,MAExC,CAAC,MAAOr3E,GACP28G,wBAAwBF,EAAcA,EAAa/hC,OAAQ16E,EAC5D,CACDy8G,EAAa52F,QAAU,CACxB,CACO,KAARA,IAAiB42F,EAAa52F,QAAU,KAC1C,CACA,SAASk9F,sBAAsBpB,GAC7B,GAA+B,KAA3BA,EAAY5lB,aACd,IAAK4lB,EAAcA,EAAYtsD,MAAO,OAASssD,GAAe,CAC5D,IAAIpnC,EAAQonC,EACZoB,sBAAsBxoC,GACtB,IAAMA,EAAM9qC,KAAqB,KAAd8qC,EAAM10D,OAAgB00D,EAAMe,UAAUkoC,QACzD7B,EAAcA,EAAYxmC,OAC3B,CACL,CACA,SAAS4kC,iCAAiCl9F,EAAM8+F,GAC9C,GAA+B,KAA3BA,EAAY5lB,aACd,IAAK4lB,EAAcA,EAAYtsD,MAAO,OAASssD,GAC7C9B,0BAA0Bh9F,EAAM8+F,EAAYlnC,UAAWknC,GACpDA,EAAcA,EAAYxmC,OACnC,CACA,SAASgoC,0CAA0CxB,GACjD,IAAKA,EAAcA,EAAYtsD,MAAO,OAASssD,GAAe,CAC5D,IAAIlF,EAAekF,EACnB,OAAQlF,EAAahtE,KACnB,KAAM,EACN,KAAK,GACL,QACA,KAAO,GACLmtE,4BAA4B,EAAGH,EAAcA,EAAa/hC,QAC1DyoC,0CAA0C1G,GAC1C,MACF,KAAM,EACJY,gBAAgBZ,EAAcA,EAAa/hC,QAC3C,IAAIn0F,EAAWk2H,EAAanhC,UAC5B,mBAAsB/0F,EAAS22H,sBAC7BD,+BACER,EACAA,EAAa/hC,OACbn0F,GAEJ48H,0CAA0C1G,GAC1C,MACF,KAAK,GACHsE,yBAAyBtE,EAAanhC,WACxC,KAAK,GACL,KAAM,EACJ+hC,gBAAgBZ,EAAcA,EAAa/hC,QAC3CyoC,0CAA0C1G,GAC1C,MACF,KAAO,GACL,OAASA,EAAa5hC,eACpBsoC,0CAA0C1G,GAC5C,MAIF,QACE0G,0CAA0C1G,GAE9CkF,EAAcA,EAAYxmC,OAC3B,CACH,CACA,SAASklC,yCACPoD,EACA9B,EACA+B,GAIA,IAFAA,EACEA,MAAkE,KAA3B/B,EAAY5lB,cAChD4lB,EAAcA,EAAYtsD,MAAO,OAASssD,GAAe,CAC5D,IAAI7yH,EAAU6yH,EAAYlnC,UACxBqlC,EAAe2D,EACfhH,EAAekF,EACf97F,EAAQ42F,EAAa52F,MACvB,OAAQ42F,EAAahtE,KACnB,KAAM,EACN,KAAO,GACP,KAAK,GACH4wE,yCACEP,EACArD,EACAiH,GAEFlH,0BAA0B,EAAGC,GAC7B,MACF,KAAM,EAQJ,GAPA4D,yCACEP,EACArD,EACAiH,GAIE,mBADJ5D,GADAhxH,EAAU2tH,GACanhC,WACgBm8B,kBACrC,IACEqI,EAAarI,mBACd,CAAC,MAAOz3G,GACP28G,wBAAwB7tH,EAASA,EAAQ4rF,OAAQ16E,EAClD,CAGH,GAAI,QADJ8/G,GADAhxH,EAAU2tH,GACa5gB,aACI,CACzB,IAAIt1G,EAAWuI,EAAQwsF,UACvB,IACE,IAAIqpB,EAAkBmb,EAAapb,OAAOC,gBAC1C,GAAI,OAASA,EACX,IACEmb,EAAapb,OAAOC,gBAAkB,KAAMmb,EAAe,EAC3DA,EAAenb,EAAgBhiH,OAC/Bm9H,IAEA5Z,aAAavB,EAAgBmb,GAAev5H,EACjD,CAAC,MAAOyZ,GACP28G,wBAAwB7tH,EAASA,EAAQ4rF,OAAQ16E,EAClD,CACF,CACD0jH,GACU,GAAR79F,GACAm3F,qBAAqBP,GACvBU,gBAAgBV,EAAcA,EAAa/hC,QAC3C,MACF,KAAK,GACH2jC,+BAA+B5B,GACjC,KAAK,GACL,OACE4D,yCACEP,EACArD,EACAiH,GAEFA,GACE,OAAS50H,GACD,EAAR+2B,GACA03F,gBAAgBd,GAClBU,gBAAgBV,EAAcA,EAAa/hC,QAC3C,MACF,QACE2lC,yCACEP,EACArD,EACAiH,GAEF,MACF,KAAK,GACHrD,yCACEP,EACArD,EACAiH,GAEFA,GACU,EAAR79F,GACAo6F,iCAAiCH,EAAcrD,GACjD,MACF,KAAK,GACH,OAASA,EAAa5hC,eACpBwlC,yCACEP,EACArD,EACAiH,GAEJvG,gBAAgBV,EAAcA,EAAa/hC,QAC3C,MACF,KAAO,GACL,MACF,QACE2lC,yCACEP,EACArD,EACAiH,GAGN/B,EAAcA,EAAYxmC,OAC3B,CACH,CACA,SAASwoC,mCAAmC70H,EAAS2tH,GACnD,IAAImH,EAAgB,KACpB,OAAS90H,GACP,OAASA,EAAQ+rF,eACjB,OAAS/rF,EAAQ+rF,cAAcm8B,YAC9B4M,EAAgB90H,EAAQ+rF,cAAcm8B,UAAU5T,MACnDt0G,EAAU,KACV,OAAS2tH,EAAa5hC,eACpB,OAAS4hC,EAAa5hC,cAAcm8B,YACnCloH,EAAU2tH,EAAa5hC,cAAcm8B,UAAU5T,MAClDt0G,IAAY80H,IACT,MAAQ90H,GAAWA,EAAQizG,WAC5B,MAAQ6hB,GAAiB5hB,aAAa4hB,GAC1C,CACA,SAASC,8BAA8B/0H,EAAS2tH,GAC9C3tH,EAAU,KACV,OAAS2tH,EAAahiC,YACnB3rF,EAAU2tH,EAAahiC,UAAUI,cAAcpH,QAClDgpC,EAAeA,EAAa5hC,cAAcpH,SACzB3kF,IACd2tH,EAAa1a,WAAY,MAAQjzG,GAAWkzG,aAAalzG,GAC9D,CACA,SAASg1H,uCACPjhG,EACA8+F,EACAoC,EACAC,GAEA,GAA+B,MAA3BrC,EAAY5lB,aACd,IAAK4lB,EAAcA,EAAYtsD,MAAO,OAASssD,GAC7CsC,0BACEphG,EACA8+F,EACAoC,EACAC,GAECrC,EAAcA,EAAYxmC,OACnC,CACA,SAAS8oC,0BACPnE,EACArD,EACAsH,EACAC,GAEA,IAAIn+F,EAAQ42F,EAAa52F,MACzB,OAAQ42F,EAAahtE,KACnB,KAAK,EACL,QACA,KAAO,GACLq0E,uCACEhE,EACArD,EACAsH,EACAC,GAEM,KAARn+F,GAAgB22F,0BAA0B,EAAGC,GAC7C,MACF,KAAM,EAuDN,KAAK,GAiDL,QACEqH,uCACEhE,EACArD,EACAsH,EACAC,SArGJ,KAAK,EACHF,uCACEhE,EACArD,EACAsH,EACAC,GAEM,KAARn+F,IACIi6F,EAAe,KACjB,OAASrD,EAAahiC,YACnBqlC,EAAerD,EAAahiC,UAAUI,cAAcpH,QACtDgpC,EAAeA,EAAa5hC,cAAcpH,SAC1BqsC,IACdrD,EAAa1a,WACd,MAAQ+d,GAAgB9d,aAAa8d,KACzC,MACF,KAAO,GACL,GAAY,KAARj6F,EAAc,CAChBi+F,uCACEhE,EACArD,EACAsH,EACAC,GAEFlE,EAAerD,EAAanhC,UAC5B,IACE,IAAI4oC,EAAyBzH,EAAa3gB,cACxCrnE,EAAKyvF,EAAuBzvF,GAC5B0vF,EAAeD,EAAuBC,aACxC,mBAAsBA,GACpBA,EACE1vF,EACA,OAASgoF,EAAahiC,UAAY,QAAU,SAC5CqlC,EAAasE,uBACZ,EAEN,CAAC,MAAOpkH,GACP28G,wBAAwBF,EAAcA,EAAa/hC,OAAQ16E,EAC5D,CACF,MACC8jH,uCACEhE,EACArD,EACAsH,EACAC,GAEJ,MASF,KAAK,GACH,MACF,KAAK,GACHE,EAAyBzH,EAAanhC,UACtC7mD,EAAKgoF,EAAahiC,UAClB,OAASgiC,EAAa5hC,cACmB,EAArCqpC,EAAuB7oB,YACrByoB,uCACEhE,EACArD,EACAsH,EACAC,GAEFK,wCAAwCvE,EAAcrD,GACnB,EAArCyH,EAAuB7oB,YACrByoB,uCACEhE,EACArD,EACAsH,EACAC,IAEAE,EAAuB7oB,aAAe,EACxCipB,2CACExE,EACArD,EACAsH,EACAC,KACmC,MAA5BvH,EAAa1gB,gBAEpB,KAARl2E,GAAgB89F,mCAAmClvF,EAAIgoF,GACvD,MACF,KAAO,GACLqH,uCACEhE,EACArD,EACAsH,EACAC,GAEM,KAARn+F,GACEg+F,8BAA8BpH,EAAahiC,UAAWgiC,GAU9D,CACA,SAAS6H,2CACPb,EACA9B,EACA4C,EACAC,EACAd,GAIA,IAFAA,EACEA,MAAkE,MAA3B/B,EAAY5lB,cAChD4lB,EAAcA,EAAYtsD,MAAO,OAASssD,GAAe,CAC5D,IAAI7B,EAAe2D,EACjBhH,EAAekF,EACfoC,EAAiBQ,EACjBP,EAAuBQ,EACvB3+F,EAAQ42F,EAAa52F,MACvB,OAAQ42F,EAAahtE,KACnB,KAAK,EACL,KAAK,GACL,KAAO,GACL60E,2CACExE,EACArD,EACAsH,EACAC,EACAN,GAEFlH,0BAA0B,EAAGC,GAC7B,MACF,KAAK,GACH,MACF,KAAO,GACL,IAAIl2H,EAAWk2H,EAAanhC,UAC5B,OAASmhC,EAAa5hC,cACK,EAAvBt0F,EAAS80G,YACPipB,2CACExE,EACArD,EACAsH,EACAC,EACAN,GAEFW,wCACEvE,EACArD,IAEFl2H,EAAS80G,aAAe,EAC1BipB,2CACExE,EACArD,EACAsH,EACAC,EACAN,IAENA,GACU,KAAR79F,GACA89F,mCACElH,EAAahiC,UACbgiC,GAEJ,MACF,KAAO,GACL6H,2CACExE,EACArD,EACAsH,EACAC,EACAN,GAEFA,GACU,KAAR79F,GACAg+F,8BAA8BpH,EAAahiC,UAAWgiC,GACxD,MACF,QACE6H,2CACExE,EACArD,EACAsH,EACAC,EACAN,GAGN/B,EAAcA,EAAYxmC,OAC3B,CACH,CACA,SAASkpC,wCACPZ,EACA9B,GAEA,GAA+B,MAA3BA,EAAY5lB,aACd,IAAK4lB,EAAcA,EAAYtsD,MAAO,OAASssD,GAAe,CAC5D,IAAI7B,EAAe2D,EACjBhH,EAAekF,EACf97F,EAAQ42F,EAAa52F,MACvB,OAAQ42F,EAAahtE,KACnB,KAAK,GACH40E,wCAAwCvE,EAAcrD,GAC9C,KAAR52F,GACE89F,mCACElH,EAAahiC,UACbgiC,GAEJ,MACF,QACE4H,wCAAwCvE,EAAcrD,GAC9C,KAAR52F,GACEg+F,8BAA8BpH,EAAahiC,UAAWgiC,GACxD,MACF,QACE4H,wCAAwCvE,EAAcrD,GAE1DkF,EAAcA,EAAYxmC,OAC3B,CACL,CACA,IAAIspC,oBAAsB,KAC1B,SAASC,qCAAqC/C,GAC5C,GAAIA,EAAY5lB,aAAe0oB,oBAC7B,IAAK9C,EAAcA,EAAYtsD,MAAO,OAASssD,GAC7CgD,iCAAiChD,GAC9BA,EAAcA,EAAYxmC,OACnC,CACA,SAASwpC,iCAAiCpqC,GACxC,OAAQA,EAAM9qC,KACZ,KAAK,GACHi1E,qCAAqCnqC,GACrCA,EAAM10D,MAAQ4+F,qBACZ,OAASlqC,EAAMM,eACf+pC,gBACE/C,qBACAtnC,EAAMM,cACNN,EAAMuhB,eAEV,MACF,KAAM,EAqBN,QACE4oB,qCAAqCnqC,SAnBvC,KAAM,EACN,KAAK,EACH,IAAIsqC,EAAwBhD,qBAC5BA,qBAAuBiB,iBAAiBvoC,EAAMe,UAAUvD,eACxD2sC,qCAAqCnqC,GACrCsnC,qBAAuBgD,EACvB,MACF,KAAK,GACH,OAAStqC,EAAMM,gBAEb,QADEgqC,EAAwBtqC,EAAME,YAEhC,OAASoqC,EAAsBhqC,eACzBgqC,EAAwBJ,oBACzBA,oBAAsB,SACvBC,qCAAqCnqC,GACpCkqC,oBAAsBI,GACvBH,qCAAqCnqC,IAKjD,CACA,SAASuqC,wBAAwBnD,GAC/B,IAAIoD,EAAgBpD,EAAYlnC,UAChC,GACE,OAASsqC,GAC6B,QAApCpD,EAAcoD,EAAc1vD,OAC9B,CACA0vD,EAAc1vD,MAAQ,KACtB,GACG0vD,EAAgBpD,EAAYxmC,QAC1BwmC,EAAYxmC,QAAU,KACtBwmC,EAAcoD,QACZ,OAASpD,EACjB,CACH,CACA,SAASqD,yCAAyCrD,GAChD,IAAI3lB,EAAY2lB,EAAY3lB,UAC5B,GAA+B,GAApB2lB,EAAY97F,MAAa,CAClC,GAAI,OAASm2E,EACX,IAAK,IAAIx5G,EAAI,EAAGA,EAAIw5G,EAAUr5G,OAAQH,IAAK,CACzC,IAAIkuH,EAAgB1U,EAAUx5G,GAC9Bs8H,WAAapO,EACbuU,qDACEvU,EACAiR,EAEH,CACHmD,wBAAwBnD,EACzB,CACD,GAA+B,MAA3BA,EAAY5lB,aACd,IAAK4lB,EAAcA,EAAYtsD,MAAO,OAASssD,GAC7CuD,4BAA4BvD,GACzBA,EAAcA,EAAYxmC,OACnC,CACA,SAAS+pC,4BAA4BzI,GACnC,OAAQA,EAAahtE,KACnB,KAAM,EACN,KAAK,GACL,QACEu1E,yCAAyCvI,GACpB,KAArBA,EAAa52F,OACX+2F,4BAA4B,EAAGH,EAAcA,EAAa/hC,QAC5D,MACF,KAAM,EAGN,KAAO,GAYP,QACEsqC,yCAAyCvI,SAV3C,KAAK,GACH,IAAIl2H,EAAWk2H,EAAanhC,UAC5B,OAASmhC,EAAa5hC,eACC,EAAvBt0F,EAAS80G,cACR,OAASohB,EAAa/hC,QAAU,KAAO+hC,EAAa/hC,OAAOjrC,MACtDlpD,EAAS80G,cAAgB,EAC3B8pB,4CAA4C1I,IAC5CuI,yCAAyCvI,GAKnD,CACA,SAAS0I,4CAA4CxD,GACnD,IAAI3lB,EAAY2lB,EAAY3lB,UAC5B,GAA+B,GAApB2lB,EAAY97F,MAAa,CAClC,GAAI,OAASm2E,EACX,IAAK,IAAIx5G,EAAI,EAAGA,EAAIw5G,EAAUr5G,OAAQH,IAAK,CACzC,IAAIkuH,EAAgB1U,EAAUx5G,GAC9Bs8H,WAAapO,EACbuU,qDACEvU,EACAiR,EAEH,CACHmD,wBAAwBnD,EACzB,CACD,IAAKA,EAAcA,EAAYtsD,MAAO,OAASssD,GAAe,CAE5D,QADA3lB,EAAY2lB,GACMlyE,KAChB,KAAM,EACN,KAAK,GACL,KAAO,GACLmtE,4BAA4B,EAAG5gB,EAAWA,EAAUthB,QACpDyqC,4CAA4CnpB,GAC5C,MACF,KAAK,GAEa,GADhBx5G,EAAIw5G,EAAU1gB,WACZ+f,cACE74G,EAAE64G,cAAgB,EACpB8pB,4CAA4CnpB,IAC9C,MACF,QACEmpB,4CAA4CnpB,GAEhD2lB,EAAcA,EAAYxmC,OAC3B,CACH,CACA,SAAS8pC,qDACPG,EACAtI,GAEA,KAAO,OAASgC,YAAc,CAC5B,IAAIvkC,EAAQukC,WACZ,OAAQvkC,EAAM9qC,KACZ,OACA,KAAO,GACP,KAAO,GACLmtE,4BAA4B,EAAGriC,EAAOuiC,GACtC,MACF,KAAO,GACP,KAAK,GACH,GACE,OAASviC,EAAMM,eACf,OAASN,EAAMM,cAAcm8B,UAC7B,CACA,IAAIvjC,EAAQ8G,EAAMM,cAAcm8B,UAAU5T,KAC1C,MAAQ3vB,GAASA,EAAMsuB,UACxB,CACD,MACF,KAAK,GACHC,aAAaznB,EAAMM,cAAcpH,OAGrC,GAAI,QADJA,EAAQ8G,EAAMllB,OACOoe,EAAMiH,OAASH,EAASukC,WAAarrC,OAExDjtC,EAAG,IAAK+zC,EAAQ6qC,EAAoB,OAAStG,YAAc,CAEzD,IAAI3jC,GADJ1H,EAAQqrC,YACY3jC,QAClBg1B,EAAc18B,EAAMiH,OAEtB,GADA4lC,wBAAwB7sC,GACpBA,IAAU8G,EAAO,CACnBukC,WAAa,KACb,MAAMt4E,CACP,CACD,GAAI,OAAS20C,EAAS,CACpBA,EAAQT,OAASy1B,EACjB2O,WAAa3jC,EACb,MAAM30C,CACP,CACDs4E,WAAa3O,CACd,CACJ,CACH,CACA,IAAIkV,uBAAyB,CACzBC,gBAAiB,SAAUC,GACzB,IAAI9xC,EAAQwtB,YAAYW,cACtB4jB,EAAe/xC,EAAMzsF,KAAKiI,IAAIs2H,GAIhC,YAHA,IAAWC,IACPA,EAAeD,IACjB9xC,EAAMzsF,KAAKyJ,IAAI80H,EAAcC,IACxBA,CACR,GAEHC,gBAAkB,mBAAsBprB,QAAUA,QAAUpX,IAC5D+hB,iBAAmB,EACnBjC,mBAAqB,KACrB9c,eAAiB,KACjB+f,8BAAgC,EAChC0f,8BAAgC,EAChCC,0BAA4B,KAC5BC,4CAA6C,EAC7CC,kCAAmC,EACnCC,yCAA0C,EAC1Cvf,qBAAuB,EACvBoP,6BAA+B,EAC/B1P,+BAAiC,EACjC8f,0CAA4C,EAC5CC,8BAAgC,EAChCzN,2BAA6B,EAC7B4C,kCAAoC,EACpCjF,mCAAqC,KACrCvW,oCAAsC,KACtCsmB,mDAAoD,EACpDjD,6BAA+B,EAC/B5G,mCAAqCzzE,IACrCu9E,0BAA4B,KAC5B3Q,uCAAyC,KACzC4Q,qBAAuB,EACvBC,mBAAqB,KACrBC,oBAAsB,KACtBC,oBAAsB,EACtBC,6BAA+B,EAC/BC,0BAA4B,KAC5BC,yBAA2B,KAC3BnrB,kBAAoB,EACpBC,sBAAwB,KAC1B,SAASmT,oBACP,GAA8B,EAAnB1J,kBAAyB,IAAMgB,8BACxC,OAAOA,+BAAiCA,8BAC1C,GAAI,OAAS31B,qBAAqBG,EAAG,CAEnC,OAAO,IADe2xB,0CAC2BI,uBAClD,CACD,OAAOhhB,uBACT,CACA,SAAS6sB,sBACP,IAAMmK,6BACHA,2BACwC,UAAhCvS,gCAA8Cne,YAEjD,UADApI,2BAER,IAAIinC,EAAkBjU,2BAA2B3jH,QAEjD,OADA,OAAS43H,IAAoBA,EAAgB7gG,OAAS,IAC/C0yF,0BACT,CACA,SAASnN,sBAAsBvoF,EAAM03D,EAAOiF,IAEvC38D,IAASkgF,oBACP,IAAM2iB,+BACL,IAAMA,gCACV,OAAS7iG,EAAK8jG,sBAEdC,kBAAkB/jG,EAAM,GACtBgkG,kBACEhkG,EACAmjF,8BACAuS,4BACA,IAENz4B,kBAAkBj9D,EAAM28D,GACM,EAAnBwlB,kBAAyBniF,IAASkgF,qBAC3ClgF,IAASkgF,uBACoB,EAAnBiC,oBACL+gB,2CAA6CvmC,GAChD,IAAMm2B,8BACJkR,kBACEhkG,EACAmjF,8BACAuS,4BACA,IAEJuO,sBAAsBjkG,GAC5B,CACA,SAASkkG,kBAAkBrF,EAAehjC,EAAOsoC,GAC/C,GAA8B,EAAnBhiB,iBAAuB,MAAMn/G,MAAMwxF,yBAAuB,MAUrE,IATA,IAAI4vC,GACED,KACe,IAARtoC,IACP,KAAOA,EAAQgjC,EAAcnhC,eAC/BlB,0BAA0BqiC,EAAehjC,GAC3CwoC,EAAaD,EACTE,qBAAqBzF,EAAehjC,GACpC0oC,eAAe1F,EAAehjC,GAAO,GACzC2oC,EAAsBJ,IACrB,CACD,GAAI,IAAMC,EAAY,CACpBrB,mCACGoB,GACDJ,kBAAkBnF,EAAehjC,EAAO,GAAG,GAC7C,KACN,CAEM,GADAsoC,EAAYtF,EAAc5yH,QAAQ2rF,WAEhC4sC,GACCC,qCAAqCN,GAFxC,CAQA,GAAI,IAAME,EAAY,CAEpB,GADAG,EAAsB3oC,EAClBgjC,EAAcjhC,2BAA6B4mC,EAC7C,IAAIpqC,EAA2B,OAG5BA,EACC,KAFHA,GAAyD,UAA9BykC,EAAc3iC,cAGlC9B,EAC2B,UAA3BA,EACE,UACA,EACZ,GAAI,IAAMA,EAA0B,CAClCyB,EAAQzB,EACRz2C,EAAG,CACD,IAAI3jB,EAAO6+F,EACXwF,EAAahR,mCACb,IAAIqR,EAAoB1kG,EAAK/zB,QAAQ+rF,cAAcy/B,aAQnD,GAPAiN,IACGX,kBAAkB/jG,EAAMo6D,GAA0Bp3D,OAAS,KAM1D,KALJo3D,EAA2BmqC,eACzBvkG,EACAo6D,GACA,IAEkC,CAClC,GACE6oC,0CACCyB,EACD,CACA1kG,EAAK49D,4BAA8B4mC,EACnCtB,2CACEsB,EACFH,EAAa,EACb,MAAM1gF,CACP,CACD6gF,EAAsB1nB,oCACtBA,oCAAsCunB,EACtC,OAASG,IACN,OAAS1nB,oCACLA,oCAAsC0nB,EACvC1nB,oCAAoC94G,KAAK/D,MACvC68G,oCACA0nB,GAET,CACDH,EAAajqC,CACd,CAED,GADAoqC,GAAsB,EAClB,IAAMH,EAAY,QACvB,CACF,CACD,GAAI,IAAMA,EAAY,CACpBN,kBAAkBlF,EAAe,GACjCmF,kBAAkBnF,EAAehjC,EAAO,GAAG,GAC3C,KACD,CACDl4C,EAAG,CAGD,OAFAygF,EAAkBvF,EAClB2F,EAAsBH,GAEpB,KAAM,EACN,KAAK,EACH,MAAMrhI,MAAMwxF,yBAAuB,MACrC,OACE,IAAa,QAARqH,KAAqBA,EAAO,MACnC,KAAM,EACJmoC,kBACEI,EACAvoC,EACA65B,4BACCqN,4CAEH,MAAMp/E,EACR,KAAK,EACHm5D,oCAAsC,KACtC,MACF,KAAK,EACL,KAAM,EACJ,MACF,QACE,MAAM95G,MAAMwxF,yBAAuB,MAEvC,IACW,SAARqH,KAAsBA,GAEvB,IADEwoC,EAAalE,6BAA+B,IAAMn4C,OAFtD,CAWE,GANAg8C,kBACEI,EACAvoC,EACA65B,4BACCqN,4CAEC,IAAMhnC,aAAaqoC,EAAiB,GAAG,GAAK,MAAMzgF,EACtDygF,EAAgBO,cAAgBC,gBAC9BC,oBAAoBlwH,KAClB,KACAyvH,EACAD,EACArnB,oCACAumB,0BACAD,kDACAvnC,EACA65B,2BACAwN,0CACA5K,kCACAyK,2CACAyB,EACA,GACC,EACD,GAEFH,EAGH,MACDQ,oBACET,EACAD,EACArnB,oCACAumB,0BACAD,kDACAvnC,EACA65B,2BACAwN,0CACA5K,kCACAyK,2CACAyB,EACA,GACC,EACD,EAEH,CAEH,KAxIG,CAHCH,EAAaE,eAAe1F,EAAehjC,GAAO,GAClD2oC,GAAsB,CA2I3B,CACDP,sBAAsBpF,EACxB,CACA,SAASgG,oBACP7kG,EACA45F,EACAkL,EACA9R,EACA+R,EACAlpC,EACAyB,EACAC,EACAC,EACAwnC,EACAX,EACAY,EACAC,EACAC,GAIA,GAFAnlG,EAAK2kG,eAAiB,GAGI,MAF1BM,EAAwB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KAER,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACvE,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IACxD,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IAAK,IAAU,IACtF,IAAU,IAAM,IAAU,IAC1B,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,IAAM,IAAU,IAAK,IAAU,IACzC,IAAU,KAAM,IAAU,KAC1B,IAAU,KAAM,IAAU,KAC1B,IAAU,KAAM,IAAU,KAWxBC,eAAeH,eAAeE,iBAElCE,cAAiBD,eCrEbE,aAA8B,iBAAVxoL,gBAAsBA,gBAAUA,eAAOvG,SAAWA,QAAUuG,eAEpFyoL,YAAiBD,aCHbA,WAAatwL,YAGbwwL,SAA0B,iBAAR3rL,MAAoBA,MAAQA,KAAKtD,SAAWA,QAAUsD,KAGxE26B,OAAO8wJ,YAAcE,UAAYxkL,SAAS,cAATA,GAErCykL,MAAiBjxJ,OCRbA,KAAOx/B,MAGP8L,SAAS0zB,KAAK1zB,OAElB4kL,QAAiB5kL,SCIjB,SAAS6kL,WAAS/6K,EAAOi0I,GAKvB,IAJA,IAAIj2I,GAAS,EACTtU,EAAkB,MAATsW,EAAgB,EAAIA,EAAMtW,OACnC+c,EAAS7c,MAAMF,KAEVsU,EAAQtU,GACf+c,EAAOzI,GAASi2I,EAASj0I,EAAMhC,GAAQA,EAAOgC,GAEhD,OAAOyG,CACT,CAEA,IAAAu0K,UAAiBD,WCGb9wL,UAAUL,MAAMK,QAEpBgxL,UAAiBhxL,UCzBbiM,SAAS9L,QAGT8wL,cAAcvvL,OAAOC,UAGrBse,eAAiBgxK,cAAYhxK,eAO7BixK,uBAAuBD,cAAYnxL,SAGnCqxL,iBAAiBllL,SAASA,SAAOmlL,iBAAc9vL,EASnD,SAAS+vL,YAAUjlL,GACjB,IAAIklL,EAAQrxK,eAAevgB,KAAK0M,EAAO+kL,kBACnC5kI,EAAMngD,EAAM+kL,kBAEhB,IACE/kL,EAAM+kL,uBAAkB7vL,EACxB,IAAIiwL,GAAW,CACnB,CAAI,MAAO7uL,GAAK,CAEd,IAAI8Z,EAAS00K,uBAAqBxxL,KAAK0M,GAQvC,OAPImlL,IACED,EACFllL,EAAM+kL,kBAAkB5kI,SAEjBngD,EAAM+kL,mBAGV30K,CACT,CAEA,IAAAg1K,WAAiBH,YC5CbJ,YAAcvvL,OAAOC,UAOrBuvL,qBAAuBD,YAAYnxL,SASvC,SAAS0B,iBAAe4K,GACtB,OAAO8kL,qBAAqBxxL,KAAK0M,EACnC,CAEA,IAAAqlL,gBAAiBjwL,iBCrBbyK,SAAS9L,QACTkxL,UAAYtuL,WACZvB,eAAiBkG,gBAGjBgqL,QAAU,gBACVC,aAAe,qBAGfR,eAAiBllL,SAASA,SAAOmlL,iBAAc9vL,EASnD,SAASswL,aAAWxlL,GAClB,OAAa,MAATA,OACe9K,IAAV8K,EAAsBulL,aAAeD,QAEtCP,gBAAkBA,kBAAkBzvL,OAAO0K,GAC/CilL,UAAUjlL,GACV5K,eAAe4K,EACrB,CAEA,IAAAylL,YAAiBD,aCHjB,SAASE,eAAa1lL,GACpB,OAAgB,MAATA,GAAiC,iBAATA,CACjC,CAEA,IAAA2lL,eAAiBD,eC5BbF,WAAazxL,YACb2xL,aAAe/uL,eAGfivL,UAAY,kBAmBhB,SAAS9vL,WAASkK,GAChB,MAAuB,iBAATA,GACX0lL,aAAa1lL,IAAUwlL,WAAWxlL,IAAU4lL,SACjD,CAEA,IAAAC,WAAiB/vL,WC5Bb+J,SAAS9L,QACT2wL,SAAW/tL,UACX/C,QAAU0H,UACVxF,SAAW0F,WAGXsqL,SAAW,IAGXC,YAAclmL,SAASA,SAAOtK,eAAYL,EAC1C8wL,eAAiBD,YAAcA,YAAYryL,cAAWwB,EAU1D,SAAS+wL,eAAajmL,GAEpB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAIpM,QAAQoM,GAEV,OAAO0kL,SAAS1kL,EAAOimL,gBAAgB,GAEzC,GAAInwL,SAASkK,GACX,OAAOgmL,eAAiBA,eAAe1yL,KAAK0M,GAAS,GAEvD,IAAIoQ,EAAUpQ,EAAQ,GACtB,MAAkB,KAAVoQ,GAAkB,EAAIpQ,IAAW8lL,SAAY,KAAO11K,CAC9D,CAEA,IAAA81K,cAAiBD,eCpCbA,aAAelyL,cAuBnB,SAASL,WAASsM,GAChB,OAAgB,MAATA,EAAgB,GAAKimL,aAAajmL,EAC3C,CAEA,IAAAmmL,WAAiBzyL,WC3BbywL,aAAepwL,cACfL,SAAWiD,WAGXyvL,QAAU,8CAGVC,kBAAoB,kBACpBC,sBAAwB,kBACxBC,oBAAsB,kBACtBC,aAAeH,kBAAoBC,sBAAwBC,oBAG3DE,QAAU,IAAMD,aAAe,IAM/BE,YAAc36I,OAAO06I,QAAS,KAoBlC,SAASE,OAAO/8K,GAEd,OADAA,EAASlW,SAASkW,KACDA,EAAOqC,QAAQm6K,QAASjC,cAAcl4K,QAAQy6K,YAAa,GAC9E,CAEA,IAAAE,SAAiBD,kDCpCV,MAAME,mBAAsB7hF,GACjC,aAAa2hF,SAAO3hF,EAAKtxG,YAAYoN,cAAc4K,WAAW,KAE1Do7K,UAAYjJ,aAAUz4F,KAC1B,EAAGjhB,SAAU6gC,EAAMonD,eAAc26B,KAE7Bn7B,kBAAAA,eACMm7B,EACJ36B,UAAW,GAAGA,GAAa,gBAAgBy6B,mBAAmB7hF,cAE7DA,KCJHm0E,WAAa,IACjBvtB,kBAAClxE,IAAAD,aAAQA,SACN,CAAAtW,SAAA,CAAC,EAAG,EAAG,GAAI,GAAI,IAAIx4B,IAAI,CAACjY,EAAMxgC,IAC7B04J,kBAAAlxE,IAACosG,UAAS,CACR/5I,MAAO,CAAErZ,QAET04H,UAAU,uBACVjoF,SAAS,KAFJjxE,MAQP8zL,SAAW,KACf,MAAM12K,EAASwiK,iBAAiBlV,gBAC1B9kG,EAAWg6G,iBAAiBzU,aAC5Bjc,EAAc0wB,iBAAiBvU,gBAC/Bpc,EAAW2wB,iBAAiBiO,aAE5BkG,EAASlU,iBAAiB2N,gBAChC,IAAIlrG,EAAU,KAGVllE,IAAWoqI,aAAaE,SAAuB,MAAZ9hF,IACrC0c,EACE2sE,IAAa5H,UAAUC,QAAU4H,EAActpF,EAAWspF,GAG9D,MAAM8kC,EAAUjsC,WAAWzlE,GACrB2xG,EACJhlC,IAAa5H,UAAUE,WAAanqI,IAAWoqI,aAAaE,QAC9D,OACEqR,kBAAAtxE,KAAA,MAAA,CACE80B,QAASw3E,EACT76B,UAAW6pB,WAAW,YAAa,YAAa,CAC9CmR,SAAU92K,IAAWoqI,aAAaG,SAClC12E,SAAA,CAEFynF,sBAACutB,WAAU,CAAA,GACXvtB,kBAAAA,IAACk7B,WAAU/5I,MAAO,CAAErZ,KAAM,GAAGywC,SAAGgjH,EAAY,IAAM,MAClDv7B,kBAAAA,IAACk7B,UAAU,CAAA/5I,MAAO,CAAErZ,KAAM,YAAMwzJ,EAAQhsC,oBACxC0Q,sBAACk7B,UAAS,CAAC/5I,MAAO,CAAErZ,KAAM,IAAOywC,SAAA+iH,EAAQ/rC,qBACzCyQ,kBAAClxE,IAAAosG,WAAU/5I,MAAO,CAAErZ,KAAM,IAAIywC,SAAG+iH,EAAQ9rC,oBACzCwQ,kBAAAA,IAACk7B,UAAU,CAAA/5I,MAAO,CAAErZ,KAAM,aAAOwzJ,EAAQ7rC,yBC1C/C,SAASgsC,WAAW9sG,GAClB,MAAO+sG,EAASC,GAAchgG,aAAQA,UAAC,GAOvC,OACEqkE,kBAAClxE,IAAA+6F,aACK,IAAAl7F,EACJ6xE,UAAW6pB,WAAW17F,EAAM6xE,UAAW,CAAEk7B,YACzClS,cAVJ,SAA2B9+K,GACzBixL,GAAW,GACPhtG,EAAM66F,eACR76F,EAAM66F,cAAc9+K,EAEvB,GAQH,CCrBA,SAASkxL,cAActtL,GACrB,GAAY,MAARA,EACF,MAAO,CAAE03B,IAAK,EAAG8B,KAAM,GAGzB,MAAM+zJ,EAAOvtL,EAAKuhK,wBACZt/B,EAAargI,OAAO4rL,aAAe16K,SAASU,gBAAiByuH,WAC7DC,EAAYtgI,OAAO6rL,aAAe36K,SAASU,gBAAiB0uH,UAClE,MAAO,CAAExqG,IAAK61J,EAAK71J,IAAMwqG,EAAW1oG,KAAM+zJ,EAAK/zJ,KAAOyoG,EACxD,CAOA,SAASyrD,kBAAkBrtG,GACzB,MAAM8gG,EAAa/zF,oBAAuB,OACnCuR,EAAUgvF,GAAetgG,aAAQA,UAAC,GACzCf,aAAAA,UAAU,KACR,GAAKqS,EAkBL,OADA7rF,SAASyuF,iBAAiB,QAAS0hF,GAC5B,KACLnwK,SAAS0uF,oBAAoB,QAASyhF,IAhBxC,SAASA,EAAkB7mL,GAEvBuiG,GAEAviG,EAAEO,kBAAkB44I,SACpB52C,GAGAwiF,EAAW77K,UACV67K,EAAW77K,QAAQuoG,SAASzxG,EAAEO,SAE/BgxL,GAAY,EAEf,GAKA,CAAChvF,IAEJ,MAAM/hG,EAASkwF,aAAAA,QAAQ,IACd6R,EACH2uF,cAAcnM,EAAW77K,SAGzB,CAAEoyB,IAAK,EAAG8B,KAAM,GACnB,CAACmlE,KAEEivF,WAAEA,EAAU3jH,SAAEA,EAAQvyC,IAAEA,EAAGitH,OAAEA,KAAW80B,GAAqBp5F,EACnE,OACE0xE,kBAAAtxE,KAAA,MAAA,IAASg5F,EAAgBxvG,SAAA,CACvBynF,6BACEQ,UAAU,SACVr/G,MAAO,CAAE4zB,MAAO,OAAQC,OAAQ,QAChCyZ,IAAKghG,EACL5rE,QAAS,IAAMo4E,GAAahvF,GAE3B10B,SAAAA,IAEHynF,kBAAAA,IAACgxB,aACC/jF,SAAUA,EACVwjE,UAAWvlK,EAAO86B,IAClBwqI,WAAYtlK,EAAO48B,KACnB9B,IAAKA,EACLitH,OAAQA,WAEPipC,QAIT,OC/EaC,IACHC,YACAC,SACAC,SACAC,MACAC,MACAC,YAGAC,cAAyB,UACzBA,eAA0B,aAElC,WAAA9vL,GAEE,MAMM+vL,EAAQC,KAGdpxL,KAAK4wL,YAAc5wL,KAAKqxL,gBAAgBF,GACxCnxL,KAAKixL,YAAcjxL,KAAKsxL,gBAAgBH,GAExCnxL,KAAK6wL,SAAW7wL,KAAKuxL,kBAZH,KAGI,GAUtBvxL,KAAK8wL,SAAW9wL,KAAKwxL,kBAAkBL,GAT1B,GAWbnxL,KAAK+wL,MAAQ,IAAI5vG,aAAagwG,GAC9BnxL,KAAKgxL,MAAQ,IAAI7vG,aAAagwG,EAC/B,CAEO,iBAAAK,CAAkBL,EAAer4J,GACvC,MAAMg4J,EAAW,IAAI3vG,aAAagwG,EAAQ,GAC1C,IAAIM,EAAO,IAEX,IAAK,IAAI31L,EAAI,EAAGA,EAAIq1L,EAAQ,EAAGr1L,IAAK,CAClC,MAAM41L,GAAgB,EAAMD,IAASN,EAAQ,GAC7CL,EAASh1L,GAAK4J,KAAKisL,MAAM,EAAMF,GAAQ31L,EAAI,GAAK41L,GAChDD,GAAQ,MACT,CAED,OAAOX,CACR,CAEO,iBAAAS,CAAkBK,EAAmBC,GAC3C,MAAMC,EAAQ,EAAMF,EAAajB,IAAIoB,OAC/BlB,EAAW,IAAI1vG,aAAaywG,GAElC,IAAK,IAAI91L,EAAI,EAAGA,EAAI81L,EAAW91L,IAC7B+0L,EAAS/0L,GAAK4J,KAAKw8C,IACjB,GAAM,GAAMx8C,KAAKssL,IAAIl2L,EAAIg2L,EAAOnB,IAAIsB,SACpCJ,GAIJ,OAAOhB,CACR,CAEO,eAAAQ,CAAgBF,GACtB,MAAMP,EAAc,IAAIz0L,MAAMg1L,GAE9B,IAAK,IAAIr1L,EAAI,EAAGA,EAAIq1L,EAAOr1L,IACzB80L,EAAY90L,GAAKA,EAGnB,IAAK,IAAIA,EAAI,EAAGqwB,EAAI,EAAGrwB,EAAIq1L,EAAOr1L,IAAK,CACrC,GAAIqwB,EAAIrwB,EAAG,CACT,MAAM4rI,EAAOkpD,EAAY90L,GACzB80L,EAAY90L,GAAK80L,EAAYzkK,GAC7BykK,EAAYzkK,GAAKu7G,CAClB,CAED,IAAIr9G,EAAI8mK,GAAS,EACjB,KAAO9mK,GAAK,GAAK8B,GAAK9B,GACpB8B,GAAK9B,EACLA,IAAM,EAGR8B,GAAK9B,CACN,CAED,OAAOumK,CACR,CAEO,eAAAU,CAAgBH,GACtB,MAAMF,EAA8B,GACpC,IAAIiB,EAAU,EAEd,KAAOA,GAAWf,GAAO,CACvB,MAAMgB,GAAU,EAAMzsL,KAAK0sL,GAAMF,EACjCjB,EAAY9wL,KAAK,IAAIghF,aAAa,CAACz7E,KAAK2sL,IAAIF,GAAQzsL,KAAKssL,IAAIG,MAC7DD,IAAY,CACb,CAED,OAAOjB,CACR,CAEM,qBAAAqB,CACLC,EACAC,GAEA,IAAKxyL,KAAK+wL,QAAU/wL,KAAKgxL,QAAUhxL,KAAKixL,YAAa,OA6CrD,IAAK,IAAIn1L,EAAI,EAAGA,EAAIkE,KAAK+wL,MAAM90L,OAAQH,IAAK,CAC1C,MAAM22L,EAAMzyL,KAAK4wL,YAAY90L,GACzB22L,EAAMF,EAAWt2L,OACnB+D,KAAK+wL,MAAMj1L,GACTy2L,EAAWE,IAAQzyL,KAAK6wL,SAAW7wL,KAAK6wL,SAAS4B,GAAO,GAE1DzyL,KAAK+wL,MAAMj1L,GAAK,CAEnB,CACDkE,KAAKgxL,MAAMrzL,KAAK,GAGhB,MAAM+0L,EAAO1yL,KAAK+wL,MACZ4B,EAAO3yL,KAAKgxL,MAClB,IAAIkB,EAAU,EACV5vK,EAAI,EAER,KAAO4vK,GAAWlyL,KAAK+wL,MAAM90L,QAAQ,CACnC,MAAM22L,EAAM5yL,KAAKixL,YAAY3uK,GAAG,GAC1BuwK,EAAM7yL,KAAKixL,YAAY3uK,GAAG,GAChC,IAAIwwK,EAAK,EACLC,EAAK,EACT,MAAMC,EAAWd,GAAW,EAE5B,IAAK,IAAI7nK,EAAI,EAAGA,EAAI2oK,EAAU3oK,GAAK,EAAG,CACpC,IAAK,IAAIvuB,EAAIuuB,EAAGvuB,EAAIkE,KAAK+wL,MAAM90L,OAAQH,GAAKo2L,EAAS,CACnD,MAAM/lK,EAAIrwB,EAAIk3L,EACRC,EAAQH,EAAKJ,EAAKvmK,GAAK4mK,EAAKJ,EAAKxmK,GACjC+mK,EAAQJ,EAAKH,EAAKxmK,GAAK4mK,EAAKL,EAAKvmK,GACvCumK,EAAKvmK,GAAKumK,EAAK52L,GAAKm3L,EACpBN,EAAKxmK,GAAKwmK,EAAK72L,GAAKo3L,EACpBR,EAAK52L,IAAMm3L,EACXN,EAAK72L,IAAMo3L,CACZ,CAED,MAAMC,EAAQL,EACdA,EAAKA,EAAKF,EAAMG,EAAKF,EACrBE,EAAKA,EAAKH,EAAMO,EAAQN,CACzB,CAEDX,IAAY,IACV5vK,CACH,CAGD,IAAK,IAAIxmB,EAAI,EAAGA,EAAI02L,EAAgBv2L,OAAQH,IAC1C02L,EAAgB12L,GACd4J,KAAK0tL,KAAKV,EAAK52L,GAAK42L,EAAK52L,GAAK62L,EAAK72L,GAAK62L,EAAK72L,KAC5CkE,KAAK8wL,SAAW9wL,KAAK8wL,SAASh1L,GAAK,EAEzC,EClLH,MAAeu3L,gBACbC,KACAC,KAEA,WAAAnyL,CAAYoyL,GACVxzL,KAAKszL,KAAOE,EACZxzL,KAAKuzL,KAAOC,EAAIvnB,OAAQ51B,WAAW,KACpC,CAMD,OAAAo9C,GAAY,CAKZ,UAAAC,GAAe,CAKf,OAAAC,GAAY,EAQd,SAASC,WACP7T,EACA8T,EACAC,EACAC,GAEA,MAAMzzK,EAAY,IAAI3b,WAAW,MAEjCo7K,EAASiU,sBAAsB1zK,GAC/B,IAAK,IAAIxkB,EAAI,EAAGA,EAAIwkB,EAAUrkB,OAAQH,IACpCg4L,EAAWh4L,IAAMwkB,EAAUxkB,GAAK,KAAO,GAEzC+3L,EAAIvB,sBAAsBwB,EAAYC,EACxC,CAYM,MAAOE,wBAAwBZ,gBAC3Ba,QACAC,QACAC,OACAC,UACA11F,OACA21F,QACA7sL,MACA8sL,OACAC,QACAC,YACAC,SAEAZ,WAAa,IAAI3yG,aAAa,MAC9B4yG,gBAAkB,IAAI5yG,aAAa,KAE3CwzG,UACAC,KACAC,OAAiB,mBACjBC,WAAqB,mBAErBC,KAA0Bn/K,SAASK,cAAc,UACjD++K,MAA2Bp/K,SAASK,cAAc,UAClDg/K,KAA0Br/K,SAASK,cAAc,UACjDi/K,cACAC,WACAC,YACAC,aACAC,cACAC,UACAC,cACAC,SACAC,UACAC,SACAjC,WAEA,WAAAtyL,CAAYoyL,GAmDV,OAlDAl4I,MAAMk4I,GACNxzL,KAAK20L,UAAY30L,KAAKszL,KAAKvT,SAC3B//K,KAAK40L,KAAO,IAAIjE,IAChB3wL,KAAKk1L,cAAgBl1L,KAAK20L,UAAUiB,kBACpC51L,KAAKm1L,WAAa,IAAIxwL,WAAW3E,KAAKk1L,eAEtCl1L,KAAKs1L,cAAgB9B,EAAIqC,aACzB71L,KAAKu1L,UAAY/B,EAAIsC,SACrB91L,KAAKw1L,cAAgBhC,EAAIuC,aACzB/1L,KAAKy1L,SAAWjC,EAAIplC,QACpBpuJ,KAAK01L,UAAYlC,EAAIwC,SAErBh2L,KAAKo1L,YAAc,CACjB5B,EAAIx+I,OAAO,IACXw+I,EAAIx+I,OAAO,IACXw+I,EAAIx+I,OAAO,IACXw+I,EAAIx+I,OAAO,GACXw+I,EAAIx+I,OAAO,IAEbh1C,KAAKq1L,aAAe,CAClB7B,EAAIx+I,OAAO,IACXw+I,EAAIx+I,OAAO,IACXw+I,EAAIx+I,OAAO,IACXw+I,EAAIx+I,OAAO,IACXw+I,EAAIx+I,OAAO,IACXw+I,EAAIx+I,OAAO,IACXw+I,EAAIx+I,OAAO,GACXw+I,EAAIx+I,OAAO,GACXw+I,EAAIx+I,OAAO,GACXw+I,EAAIx+I,OAAO,IAGbh1C,KAAKi1L,KAAK1rH,MAAQ,EAClBvpE,KAAKi1L,KAAKzrH,OAAS,GACnBxpE,KAAKi1L,KAAKv3F,aAAa,QAAS,MAChC19F,KAAKi1L,KAAKv3F,aAAa,SAAU,MAGjC19F,KAAK0zL,WAAa1zL,KAAKi2L,cAAcnlL,KAAK9Q,MAE1CA,KAAKk0L,QAAU,IAAIjzG,WAAW,IAAItjF,KAAK,GACvCqC,KAAKm0L,QAAU,IAAIhzG,aAAa,IAAIxjF,KAAK,GACzCqC,KAAKo0L,OAAS,IAAInzG,WAAW,IAAItjF,KAAK,GACtCqC,KAAKq0L,UAAY,IAAIlzG,aAAa,IAAIxjF,KAAK,GAC3CqC,KAAK2+F,OAAS,IAAIxd,aAAa,IAAIxjF,KAAK,GACxCqC,KAAKs0L,QAAU,IAAIrzG,WAAW,IAAItjF,KAAK,GACvCqC,KAAKyH,MAAQ,EACbzH,KAAKu0L,OAAS,EACdv0L,KAAK00L,SAAW,EAER10L,KAAKszL,KAAK4C,UAChB,IAAK,OACHl2L,KAAK21L,SAAW31L,KAAKm2L,aAAarlL,KAAK9Q,MACvC,MACF,IAAK,OACHA,KAAK21L,SAAW31L,KAAKo2L,aAAatlL,KAAK9Q,MACvC,MACF,QACEA,KAAK21L,SAAW31L,KAAKq2L,eAAevlL,KAAK9Q,MAI7C,OAAQA,KAAKszL,KAAKe,WAChB,IAAK,SACHr0L,KAAKw0L,QAAU,EACf,MACF,IAAK,OACHx0L,KAAKw0L,QAAU,EACf,MACF,IAAK,WASL,QACEx0L,KAAKw0L,QAAU,GACf,MARF,IAAK,OACHx0L,KAAKw0L,QAAU,GACf,MACF,IAAK,SACHx0L,KAAKw0L,QAAU,GAOnB,OAAQx0L,KAAKszL,KAAKgD,eAChB,IAAK,SACHt2L,KAAKy0L,YAAc,KACnB,MACF,IAAK,OAYL,QACEz0L,KAAKy0L,YAAc,IACnB,MAXF,IAAK,WACHz0L,KAAKy0L,YAAc,IACnB,MACF,IAAK,OACHz0L,KAAKy0L,YAAc,IACnB,MACF,IAAK,SACHz0L,KAAKy0L,YAAc,IAMxB,CAED,OAAAhB,GACE,MAAMD,EAAMxzL,KAAKszL,KAGjBtzL,KAAKg1L,MAAMxrH,OAAS,EACpBxpE,KAAKg1L,MAAMzrH,MAAQ,EACnB,IAAIgtH,EAAMv2L,KAAKg1L,MAAM3+C,WAAW,MAChCkgD,EAAIC,UAAYhD,EAAIx+I,OAAO,IAC3BuhJ,EAAIE,SAAS,EAAG,EAAG,EAAG,GAElBz2L,KAAKszL,KAAKwC,SACZ91L,KAAK00L,SAAW,EACP10L,KAAKszL,KAAKllC,UAAYpuJ,KAAKszL,KAAK0C,SACzCh2L,KAAK00L,SAAW,EACP10L,KAAKszL,KAAKllC,QACnBpuJ,KAAK00L,SAAW,EAEhB10L,KAAK00L,SAAW,EAIlB10L,KAAK+0L,KAAKvrH,OAAS,GACnBxpE,KAAK+0L,KAAKxrH,MAAQ,EAClBvpE,KAAK+0L,KAAKr3F,aAAa,QAAS,KAChC19F,KAAK+0L,KAAKr3F,aAAa,SAAU,MACjC64F,EAAMv2L,KAAK+0L,KAAK1+C,WAAW,MAC3B,IAAK,IAAI3kG,EAAI,EAAGA,EAAI,GAAIA,IACS,IAA3B1xC,KAAKszL,KAAKyC,cAAsB/1L,KAAKszL,KAAKwC,SAC5CS,EAAIC,UAAYx2L,KAAKq1L,aAAkB,EAAJ3jJ,GAEnC6kJ,EAAIC,UAAYx2L,KAAKszL,KAAKwC,SACtB91L,KAAKo1L,YAAiB,EAAJ1jJ,GAClB8hJ,EAAIx+I,OAAO,EAAIh1C,KAAK00L,WAAYhjJ,GAEtC6kJ,EAAIE,SAAS,EAAG/kJ,EAAG,EAAGA,EAAI,EAE7B,CAsBD,aAAAukJ,GACE,IAAKj2L,KAAKuzL,KAAM,OAChB,MAAMgD,EAAMv2L,KAAKuzL,KACPgD,EAAItqB,OAAO1iG,MACXgtH,EAAItqB,OAAOziG,OACrB+sH,EAAIC,UAAYx2L,KAAK60L,OAErB,MAAM6B,EAAe,IACfC,EAAkBjxL,KAAKisL,MAAM+E,GAGnC,IAAIE,EACA1S,EACA2S,EAC2B,IAA3B72L,KAAKszL,KAAKyC,cACZa,EAAa,GACb1S,EAAY,KAEZ0S,EAAa52L,KAAKszL,KAAKwC,SAAW,GAAK,GACvC5R,EAAYlkL,KAAKszL,KAAKwC,SAAW,EAAI,IAGvClC,WACE5zL,KAAK20L,UACL30L,KAAK40L,KACL50L,KAAK8zL,WACL9zL,KAAK+zL,iBAKH8C,EAFA72L,KAAKszL,KAAKwC,SACmB,IAA3B91L,KAAKszL,KAAKyC,aACD,GAGA,GAGF,GAWb,IAAK,IAAIrnL,EAAI,EAAGA,EAAIkoL,EAAYloL,IAAK,CAEnC,MACMooL,EA1CgB,GA4ClBH,EA5CkB,GA4CmBjoL,GAAMkoL,EAAa,GAItDG,GAAe,EAVT,MAGSroL,GAAKkoL,EAAa,GAAO,KAHlC,IAOKlxL,KAAKw8C,IAAI,GAAI40I,GAK9B,IAAIE,EAAStxL,KAAKC,MAAMoxL,GACpBE,EAASvxL,KAAK4/J,KAAKyxB,GASvB,GAPIC,GAAUN,IACZM,EAASN,KAEPO,GAAUP,IACZO,EAASP,KAGPM,IAAWC,EACbj3L,KAAK2+F,OAAOjwF,GAAK1O,KAAK+zL,gBAAgBiD,OACjC,CACL,MAAME,EAAQH,EAAcC,EACtBG,EAAQ,EAAMD,EACpBl3L,KAAK2+F,OAAOjwF,GACVyoL,EAAQn3L,KAAK+zL,gBAAgBiD,GAC7BE,EAAQl3L,KAAK+zL,gBAAgBkD,EAChC,CACF,CAED,IAAK,IAAIvoL,EAAI,EAAGA,EAAImoL,EAAUnoL,IAKA,SAAxB1O,KAAKszL,KAAK8D,WACZp3L,KAAKyH,MAAQzH,KAAKyH,MAAY,WAAJiH,EAC1B1O,KAAKu0L,QACFv0L,KAAK2+F,OAAO3+F,KAAKyH,MAAQ,GACxBzH,KAAK2+F,OAAO3+F,KAAKyH,MAAQ,GACzBzH,KAAK2+F,OAAO3+F,KAAKyH,MAAQ,GACzBzH,KAAK2+F,OAAO3+F,KAAKyH,QACnB,EACFzH,KAAKo0L,OAAO1lL,GAAK1O,KAAKu0L,SAEtBv0L,KAAKyH,MAAQ,EACbzH,KAAKo0L,OAAO1lL,GAAK1O,KAAK2+F,OAAOjwF,IAG3B1O,KAAKo0L,OAAO1lL,IAAMw1K,IACpBlkL,KAAKo0L,OAAO1lL,GAAKw1K,GAIflkL,KAAKk0L,QAAQxlL,IAAkB,IAAZw1K,IACrBlkL,KAAKk0L,QAAQxlL,GAAiB,IAAZw1K,GAGpBlkL,KAAKq0L,UAAU3lL,IAAM1O,KAAKw0L,QAAU,GAOhCx0L,KAAKq0L,UAAU3lL,IAAM1O,KAAKo0L,OAAO1lL,KACnC1O,KAAKq0L,UAAU3lL,GAAK1O,KAAKo0L,OAAO1lL,IAG9B1O,KAAKk0L,QAAQxlL,IAAMhJ,KAAKqsC,MAA0B,IAApB/xC,KAAKq0L,UAAU3lL,MAC/C1O,KAAKk0L,QAAQxlL,GAAyB,IAApB1O,KAAKq0L,UAAU3lL,GACjC1O,KAAKm0L,QAAQzlL,GAAK,GAGpB1O,KAAKs0L,QAAQ5lL,GAAK1O,KAAKk0L,QAAQxlL,GAAK,IAEpC1O,KAAKk0L,QAAQxlL,IAAMhJ,KAAKqsC,MAAM/xC,KAAKm0L,QAAQzlL,IAC3C1O,KAAKm0L,QAAQzlL,IAAM1O,KAAKy0L,YAIpBz0L,KAAKk0L,QAAQxlL,IAAM,IACrB1O,KAAKk0L,QAAQxlL,GAAK,GAGhB1O,KAAKszL,KAAKwC,UAGHpwL,KAAKqsC,MAAM/xC,KAAKs0L,QAAQ5lL,IAAM,IACvC1O,KAAKs0L,QAAQ5lL,IAAM,GAIfA,IAAM1O,KAAKyH,MAAQ,GAA6B,SAAxBzH,KAAKszL,KAAK8D,WACtCp3L,KAAK21L,SACHY,EACA7nL,EACAA,EACAhJ,KAAKqsC,MAAM/xC,KAAKq0L,UAAU3lL,IAAM1O,KAAK00L,SACrC10L,KAAKs0L,QAAQ5lL,GAAK,EAAI1O,KAAK00L,SAIlC,CAQD,cAAA2B,CACEE,EACA7nL,EACA2oL,EACAC,EACAC,GAEA,MAAMntK,EAAImsK,EAAItqB,OAAOziG,OACf93B,EAAItnB,EAAIktK,EAId,GAFAf,EAAInqB,UAAUpsK,KAAK+0L,KAAM,EAAGrjJ,EAAG,EAAGtnB,EAAIsnB,EAAGhjC,EAAGgjC,EAAG2lJ,EAAK3oL,EAAI,EAAG0b,EAAIsnB,GAE3D1xC,KAAKszL,KAAKkE,MAAO,CACnB,MAAMC,EAAQrtK,EAAImtK,EAClBhB,EAAInqB,UAAUpsK,KAAKg1L,MAAO,EAAG,EAAG,EAAG,EAAGtmL,EAAG+oL,EAAOJ,EAAK3oL,EAAI,EAAG,EAC7D,CACF,CAQD,YAAAynL,CACEI,EACA7nL,EACA2oL,EACAC,EACAC,GAEA,MAAMntK,EAAImsK,EAAItqB,OAAOziG,OACf93B,EAAItnB,EAAIktK,EAcd,GAZAf,EAAInqB,UACFpsK,KAAK+0L,KACL,EACA,EACA/0L,KAAK+0L,KAAKxrH,MACVn/C,EAAIsnB,EACJhjC,EACAgjC,EACA2lJ,EAAK3oL,EAAI,EACT0b,EAAIsnB,GAGF1xC,KAAKszL,KAAKkE,MAAO,CACnB,MAAMC,EAAQrtK,EAAImtK,EAClBhB,EAAInqB,UAAUpsK,KAAKg1L,MAAO,EAAG,EAAG,EAAG,EAAGtmL,EAAG+oL,EAAOJ,EAAK3oL,EAAI,EAAG,EAC7D,CACF,CAQD,YAAA0nL,CACEG,EACA7nL,EACA2oL,EACAC,EACAC,GAEA,MAAMntK,EAAImsK,EAAItqB,OAAOziG,OACf93B,EAAItnB,EAAIktK,EAed,GAZAf,EAAInqB,UACFpsK,KAAK+0L,KACL,EACA,EACA/0L,KAAK+0L,KAAKxrH,MACVn/C,EAAIsnB,EACJhjC,EACAgjC,EACA2lJ,EAAK3oL,EAAI,EACT0b,EAAIsnB,GAGF1xC,KAAKszL,KAAKkE,MAAO,CACnB,MAAMC,EAAQrtK,EAAImtK,EAClBhB,EAAInqB,UAAUpsK,KAAKg1L,MAAO,EAAG,EAAG,EAAG,EAAGtmL,EAAG+oL,EAAOJ,EAAK3oL,EAAI,EAAG,EAC7D,CACF,EAOH,SAASgpL,SACPp3K,EACAq3K,EACAC,GAGA,OAAOt3K,EADOq3K,EAAaC,EAE7B,CAEM,MAAOC,yBAAyBxE,gBAC5BqB,SAERC,UACAO,cACA4C,OAAiB,EACjBC,OAAiB,EACjB5C,WACA6C,YAEAjD,KAA0Bn/K,SAASK,cAAc,UACjDg/K,KAA0Br/K,SAASK,cAAc,UACjDgiL,SAEA,WAAA72L,CAAYoyL,GACVl4I,MAAMk4I,GACNxzL,KAAK20L,UAAY30L,KAAKszL,KAAKvT,SAC3B//K,KAAKk1L,cAAgBl1L,KAAK20L,UAAUuD,QACpCl4L,KAAKm1L,WAAa,IAAIxwL,WAAW3E,KAAKk1L,eAEtCl1L,KAAKi1L,KAAK1rH,MAAQ,EAClBvpE,KAAKi1L,KAAKzrH,OAAS,GACnBxpE,KAAKi1L,KAAKv3F,aAAa,QAAS,MAChC19F,KAAKi1L,KAAKv3F,aAAa,SAAU,MAGjC19F,KAAKg4L,YAActzL,OAAOy8K,kBAAoB,EAI9CnhL,KAAKi4L,SAAWj4L,KAAKm4L,kBAAkBrnL,KAAK9Q,MAC5CA,KAAK00L,SAAW,CACjB,CAED,OAAAjB,GACE,MAAMD,EAAMxzL,KAAKszL,KAGjBtzL,KAAK+0L,KAAKxrH,MAAQ,EAClBvpE,KAAK+0L,KAAKvrH,OAAS,EACnBxpE,KAAK+0L,KAAKr3F,aAAa,QAAS,KAChC19F,KAAK+0L,KAAKr3F,aAAa,SAAU,KACjC,MAAM64F,EAAMv2L,KAAK+0L,KAAK1+C,WAAW,MACjC,GAAIkgD,EACF,IAAK,IAAI7kJ,EAAI,EAAGA,EAAI,EAAGA,IACrB6kJ,EAAIC,UAAYhD,EAAIx+I,OAAO,GAAKtD,GAChC6kJ,EAAIE,SAAS,EAAG/kJ,EAAG,EAAGA,EAAI,GAK9B1xC,KAAKuzL,KAAK6E,uBAAwB,EAElCp4L,KAAKuzL,KAAK8E,0BAA2B,EAErCr4L,KAAKuzL,KAAK+E,6BAA8B,EAExCt4L,KAAKuzL,KAAKgF,yBAA0B,CACrC,CAED,UAAA7E,GACE,IAAK1zL,KAAKuzL,KAAM,OAChBvzL,KAAK20L,UAAUX,sBAAsBh0L,KAAKm1L,YAC1Cn1L,KAAKm1L,WAAan1L,KAAKm1L,WAAWtxL,MAAM,EAAG,KAC3C,MAAMuzL,EAAYp3L,KAAKm1L,WAAWl5L,OAEpB+D,KAAKuzL,KAAMtnB,OAAO1iG,MACjBvpE,KAAKuzL,KAAMtnB,OAAOziG,OAKjC,MAAMmuH,EAAajyL,KAAKC,MAAMyxL,EAAY,IAG1C,IAAK,IAAIjrK,EAAI,EAAGA,GAAK,GAAIA,IAAK,CAC5B,MAAMqsK,EAAYd,SAAS13L,KAAKm1L,WAAYwC,EAAYxrK,GACxDnsB,KAAKi4L,SAAS9rK,EAAGqsK,EAClB,CACF,CAOD,UAAAC,CAAW/mJ,GACT,OAAI1xC,KAAKszL,KAAKwC,SACL,EAELpkJ,GAAK,GAAW,EAChBA,GAAK,GAAW,EAChBA,GAAK,GAAW,EAChBA,GAAK,EAAU,EACfA,GAAK,EAAU,EACfA,GAAK,EAAU,EACfA,GAAK,EAAU,EACA,CAEpB,CAED,iBAAAymJ,CAAkBzpL,EAAWgjC,GAO3B,GAAI1xC,KAAKszL,KAAKwC,UAAY91L,KAAKszL,KAAKllC,SAClC,GAAI1/I,GAAK,GAEP,YAEG,GAAIA,IAAM1O,KAAKszL,KAAKwC,SAAW,GAAK,IAEzC,OAsBF,IAAI4C,EAnBA14L,KAAKszL,KAAKwC,SACZ91L,KAAK00L,SAAW,EACP10L,KAAKszL,KAAKllC,UAAYpuJ,KAAKszL,KAAK0C,SACzCh2L,KAAK00L,SAAW,EACP10L,KAAKszL,KAAKllC,QACnBpuJ,KAAK00L,SAAW,EAEhB10L,KAAK00L,SAAW,EAOlBhjJ,EAAIhsC,KAAKqsC,MAAOL,EAAI,GAAM,GAAK,EAMGgnJ,EAAH,IAA3B14L,KAAKszL,KAAKyC,aAA8B,EAC7B,EACfrkJ,EAAI1xC,KAAKszL,KAAKwC,SAAWpkJ,EAAIgnJ,EAAUhnJ,EAKnC1xC,KAAKszL,KAAKwC,UAAuC,IAA3B91L,KAAKszL,KAAKyC,aAClCrkJ,EAAIhsC,KAAKqsC,OAAQL,EAAI,IAAM,GAAM,IAAM,EAC9B1xC,KAAKszL,KAAKwC,WACnBpkJ,EAAIhsC,KAAKqsC,OAAQL,EAAI,IAAM,GAAM,GAAK,GAexC,MAAMtxC,EATJsxC,EADE1xC,KAAKszL,KAAKwC,UAAuC,IAA3B91L,KAAKszL,KAAKyC,aAC9BrkJ,EAAI,EAAI,EAAIA,EAAI,EAAS,EAASA,EAGpCA,EAAI,EACA,EACAA,EAAI1xC,KAAKszL,KAAKuC,aAAe,EAC7B71L,KAAKszL,KAAKuC,aAAe,EACzBnkJ,EAGE,IAANhjC,IAAS1O,KAAK+3L,OAASrmJ,GAE3B,IAAIlX,EAAMkX,EACN+1G,EAASznJ,KAAK+3L,OA4ClB,IA3CA/3L,KAAK+3L,OAASrmJ,EAEa,UAAvB1xC,KAAKszL,KAAKqF,SACmB,IAA3B34L,KAAKszL,KAAKyC,cACRrkJ,IAAM1xC,KAAKszL,KAAKwC,SAAW,EAAI,IACjCt7J,EAAMx6B,KAAKszL,KAAKwC,SAAW,EAAI,EAC/BruC,EAAS/1G,IAETlX,EAAMkX,EACN+1G,EAASznJ,KAAKszL,KAAKwC,SAAW,EAAI,GAE1B,IAANpnL,GAAW1O,KAAKszL,KAAKwC,WAEvBt7J,EAAMkX,EACN+1G,EAAS/1G,KAGPA,IAAM1xC,KAAKszL,KAAKwC,SAAW,EAAI,IACjCt7J,EAAMx6B,KAAKszL,KAAKwC,SAAW,EAAI,EAC/BruC,EAAS/1G,IAETlX,EAAMkX,EACN+1G,EAASznJ,KAAKszL,KAAKwC,SAAW,EAAI,GAE1B,IAANpnL,GAAW1O,KAAKszL,KAAKwC,WAEvBt7J,EAAMkX,EACN+1G,EAAS/1G,IAGmB,SAAvB1xC,KAAKszL,KAAKqF,UACnBn+J,EAAMkX,EACN+1G,EAAS/1G,GACA+1G,EAASjtH,KACjBitH,EAAQjtH,GAAO,CAACA,EAAKitH,GAClBznJ,KAAKszL,KAAKwC,UAIZt7J,KAICkX,EAAIlX,EAAKkX,GAAK+1G,EAAQ/1G,IACzB1xC,KAAKuzL,KAAMnnB,UACTpsK,KAAK+0L,KACL,EACA/0L,KAAKy4L,WAAWr4L,GAChB,EACA,EACAsO,EACAgjC,EAAI1xC,KAAK00L,SACT,EACA,EAGL,EAGG,MAAOkE,4BAA4BvF,gBACvCwF,SAAmB,EACnB,OAAApF,GACEzzL,KAAK64L,SAAU,CAChB,CAED,UAAAnF,GACO1zL,KAAKuzL,OACEvzL,KAAKuzL,KACjBvzL,KAAK64L,SAAU,EAChB,ECvvBH,SAASC,YACPvvH,EACAC,EACAuvH,EACAC,EACAC,EACAlD,GAGA,MAAMmD,EAAWtjL,SAASK,cAAc,UACxCijL,EAAS3vH,MAAQA,EACjB2vH,EAAS1vH,OAASA,EAClB,MAAM2vH,EAAW,EAAIpD,EAEfqD,EAAcF,EAAS7iD,WAAW,MACxC,GAAmB,MAAf+iD,EACF,MAAM,IAAIj6L,MAAM,sCAIlB,GAFAi6L,EAAY5C,UAAYuC,EACxBK,EAAY3C,SAAS,EAAG,EAAGltH,EAAOC,IAC7ByvH,EAAa,CAChBG,EAAY5C,UAAYwC,EACxB,IAAK,IAAItqL,EAAI,EAAGA,EAAI66D,EAAO76D,GAAKyqL,EAC9B,IAAK,IAAIznJ,EAAIqkJ,EAAcrkJ,EAAI83B,EAAQ93B,GAAKynJ,EAC1CC,EAAY3C,SAAS/nL,EAAGgjC,EAAGqkJ,EAAcA,EAG9C,CACD,OAAOmD,CACT,CAEc,SAAUG,KAAItZ,SAAEA,IAC5BpwF,aAAAA,gBAAgB,KACdowF,EAASmY,QAAU,MAClB,CAACnY,EAAUA,EAASmY,UAEvB,MAAMljJ,EAAS0mI,iBAAiB4d,eAC1BxgK,EAAO4iJ,iBAAiBsE,oBACxBuZ,EAAc7d,iBAAiBlV,gBAC/BxM,EAAiB0hB,iBAAiB8d,gBAElCxD,EADgBta,iBAAiB3W,cACtBnL,CAAc,QACzBxL,EAAUstB,iBAAiBgO,YAC3BjT,EAAwBkF,iBAAiB8d,uBACzCR,EAAcj/B,EAAe,QAE7B87B,EAAWmD,GAAejD,EAC1BH,EAAeC,EAAW,EAAI,GAE9BC,EAAe3nC,GAAW0nC,EAAW,EAAI,EACzC4D,EAAiB1D,EAEnBiD,EACA7qC,EALgB,GAOd,GAPc,GAQF2nC,EARE,GAUdxsH,EAVc,GAUQwsH,EACtBvsH,EAASqsH,EAAeE,EAExBmD,EAAWtpG,aAAAA,QAAQ,IAChBkpG,YACLY,EACAlwH,EACAx0B,EAAO,GACPA,EAAO,GACPsD,QAAQ2gJ,GACRlD,GAED,CAAC/gJ,EAAQw0B,EAAQkwH,EAAeT,EAAalD,KAEzC9pB,EAAQ0tB,GAAaxpG,aAAQA,SAA2B,MAGzDypG,EAAUhqG,aAAAA,QAAQ,KACtB,IAAKq8E,EAAQ,OAAO,KAEpB,MAAMunB,EAAY,CAChBvnB,SACAj3H,SACA+qI,WACA4Y,SAAU,QACVvB,UAAW,OACXlB,SAAU,SACVsB,OAAO,EACPnD,UAAW,WACXiC,cAAe,OACfuD,GAAI,WACJhE,eACAC,WACAC,eACA3nC,UACA4nC,YAGF,OAAQl9J,GACN,KAAKiqH,YAAYC,aACf,OAAO,IAAI60C,iBAAiBrE,GAC9B,KAAKzwC,YAAYE,IACf,OAAO,IAAIgxC,gBAAgBT,GAC7B,KAAKzwC,YAAYf,KAEjB,QACE,OAAO,IAAI42C,oBAAoBpF,KAElC,CACDzT,EACA9T,EACAnzI,EACAkc,EACA6gJ,EACAC,EACAC,EACA3nC,EACA4nC,IAuDF,OAnDA5mG,aAAAA,UAAU,KACR,GAAI68E,GAAU2tB,EAAS,CACrB,MAAME,EAAY7tB,EAAO51B,WAAW,MAChCyjD,IACFF,EAAQnG,UAEJ8F,IAAgBj2C,aAAaG,QAC/Bq2C,EAAUC,UAAU,EAAG,EAAG9tB,EAAO1iG,MAAO0iG,EAAOziG,QAGpD,GAKA,CAAC4kF,EAAS6d,EAAQ2tB,IAErBxqG,aAAAA,UAAU,KACR,GAAc,MAAV68E,GAA6B,MAAX2tB,EACpB,OAGF,MAAME,EAAY7tB,EAAO51B,WAAW,MACpC,GAAiB,MAAbyjD,EACF,OAEFA,EAAU1B,uBAAwB,EAElC,IAAI4B,EAAkC,KAEtC,MAAMpY,EAAO,KACXkY,EAAU1tB,UAAU8sB,EAAU,EAAG,GACjCU,EAAQlG,aACRsG,EAAmBt1L,OAAOm9K,sBAAsBD,IAWlD,OARI2X,IAAgBj2C,aAAaC,UAC3BzqH,IAASiqH,YAAYf,KACvB83C,EAAUC,UAAU,EAAG,EAAGL,EAAelwH,GAEzCo4G,KAIG,KACoB,OAArBoY,GACFt1L,OAAOo9K,qBAAqBkY,KAG/B,CAACT,EAAattB,EAAQ2tB,EAASV,EAAUQ,EAAelwH,EAAQ1wC,IAE/DygK,IAAgBj2C,aAAaE,QACxB,KAIPgR,kBAAAlxE,IAAA,SAAA,CACEv1C,GAAG,aACHk1C,IAAK02G,EACLhkJ,MAAO,CAAE4zB,MAlIO,GAkIaC,OAAQqsH,GACrCtsH,MAAOA,EACPC,OAAQA,EACR6uC,QAASo+D,GAGf,CCtMA,MAAMwjB,cAAgBjsG,aAAIA,KAAC,KACzB,MAAMrwE,EAAWg+J,iBAAiB2M,UAC5B5hB,EAAOiV,iBAAiB4M,MACxBt4K,EAAQ0rK,iBAAiB6M,OACzBjoL,EAAOo7K,iBAAiB+M,MACxB9hB,EAAO+U,iBAAiB8M,MAC9B,OACE5zB,kBAAKtxE,KAAA,MAAA,CAAAyxE,UAAU,UAASjoF,SAAA,CACtBynF,sBAAC6pB,aAAY,CAACtwI,GAAG,WAAWsqE,QAAS16F,EAAU2pC,MAAM,mBACrDktG,kBAAAA,IAAC6pB,aAAY,CAACtwI,GAAG,OAAOsqE,QAASquD,EAAMp/G,MAAM,SAC7CktG,kBAAClxE,IAAA+6F,cAAatwI,GAAG,QAAQsqE,QAASpoG,EAAOq3C,MAAM,UAC/CktG,sBAAC6pB,aAAY,CAACtwI,GAAG,OAAOsqE,QAASuuD,EAAMt/G,MAAM,SAC7CktG,kBAAAA,IAAC6pB,aAAa,CAAAtwI,GAAG,OAAOsqE,QAAS93G,EAAM+mD,MAAM,oBCLrC,SAAU4yI,SAAQvkJ,MAAEA,EAAKq/G,UAAEA,EAASjnH,GAAEA,IAClD,MAAMm9G,EAAUwwB,iBAAiB9D,YAC3BnQ,EAAakU,iBAAiBwe,YAC9BxjB,EAAWgF,iBAAiBye,UAC5BxjB,EAAa+E,iBAAiB0e,YACpC,OACE7lC,kBACElxE,IAAA,QAAA,CAAAv1C,GAAIA,EACJinH,UAAWA,EACXjqJ,KAAK,QACL4P,IAAI,OACJ2E,IAAI,MACJ85B,KAAK,IACLxwC,MAAOsiJ,EACPv1G,MAAO,IAAKA,EAAOg3I,YAAa,QAChC1S,SAAW/6K,GAAMuoK,EAAWx0H,OAAO/zC,EAAEO,OAAOmJ,QAC5Co1K,cAAe,IAAMrH,EAAS,WAC9B2jB,YAAa1jB,EACbtvH,MAAM,WAGZ,CC3BO,MAAMizI,kBAAqBrvC,IAChC,MAAMnpI,EAAUrc,KAAKmrC,IAAIq6G,GAAW,IAGpC,OADwB,GADTxlJ,KAAKC,MAAgB,GAAVoc,IAKtBy4K,YAAcxsG,aAAIA,KAAC,KACvB,MAAMk9D,EAAUwwB,iBAAiB9D,YACjC,OACEpjB,kBAAAA,IAAC0lC,QAAO,CACNnsJ,GAAG,UACH4H,MAAO,CAAE8kJ,mBAAoB,MAAMF,kBAAkBrvC,YCZrDwvC,MAAQ1sG,aAAIA,KAAC,KACjB,MAAM9zC,EAAQyhI,iBAAiByO,OAC/B,OAAO51B,kBAAClxE,IAAA2sG,WAAW,CAAAliJ,GAAG,QAAQsqE,QAASn+D,EAAOoN,MAAM,YCEtD,SAASqzI,iBACP,OAAOP,SAAiB,SAC1B,CAEA,SAASQ,UACP,OAAQn3E,IACNA,EAAS8lE,wBACT9lE,EAAS42E,cAEb,CAEA,MAAMQ,WAAa7sG,aAAIA,KAAC,KACtB,MAAMgvF,EAAkBrB,iBAAiBgf,gBACnC5d,EAAgBpB,iBAAiBif,SACjCxsC,EAAUstB,iBAAiBgO,YACjC,OACE70B,uBAAA,MAAA,CAAK9mH,GAAG,cACNg/B,SAAA,CAAAynF,kBAAAA,IAACg8B,kBAAiB,CAAC/oC,QAAM,EAACipC,WAAY,IAAMl8B,kBAAClxE,IAAA+lG,mBAAqB,CAAA,GAAAt8G,SAChEynF,kBAAAA,IAAK,MAAA,CAAAzmH,GAAG,eAEVymH,kBAAAA,IAAK,MAAA,CAAAzmH,GAAG,aACRymH,kBAAAA,IAAA,MAAA,CAAKzmH,GAAG,aACRymH,sBAAA,MAAA,CACEltG,MAAO,yBACPvZ,GAAG,WACHinH,UAAW6pB,WAAW,CAAEp9E,SAAU2sD,IAClCksC,YAAavd,EACbiB,cAAgB9+K,IACdA,EAAE8mG,iBACFg3E,OAGJxoB,kBAAKlxE,IAAA,MAAA,CAAAv1C,GAAG,kBCpCR+sJ,MAAQ9sG,aAAIA,KAAC,KACjB,MAAM24E,EAAsBgV,iBAAiB0O,qBAC7C,OACE71B,kBAAClxE,IAAA+6F,aACC,CAAAtwI,GAAG,QACHsqE,QAASsuD,EACTr/G,MAAM,mBCJZ,SAASyzI,kBACP,OAAOxQ,aAAqB,YAC9B,CAEA,MAAMyQ,eAAiBhtG,aAAIA,KAAC,KAC1B,MAAMitG,EAActf,iBAAiBof,iBAC/BG,EAAaxf,iBAAiB3W,cAAjB2W,CAA0C,aAC7D,OACElnB,kBAAAA,IAAC6pB,aAAY,CACXtwI,GAAG,mBACHinH,UAAW6pB,WAAW,CAAEp9E,SAAUy5F,IAClC7iF,QAAS4iF,EACT3zI,MAAM,iCCZZ,SAAS6zI,iBACP,OAAO5Q,aAAqB,WAC9B,CAEA,MAAM6Q,qBAAuBptG,aAAIA,KAAC,KAChC,MAAMyT,EAAWi6E,iBAAiB3W,cAAjB2W,CAA0C,YACrDuf,EAActf,iBAAiBwf,gBACrC,OACE3mC,kBAAAA,IAAC6pB,aACC,CAAAtwI,GAAG,kBACHinH,UAAW6pB,WAAW,CAAEp9E,aACxB4W,QAAS4iF,EACT3zI,MAAM,6BCbN+zI,gBAAkBrtG,aAAAA,KAAM7K,IAC5B,MACMm4G,GADO,GAAGn4G,EAAMpW,YAAc,IACjBnxD,MAAM,IACzB,OACE44I,kBAAAA,IAACnxE,aAAAA,SAAQ,CAAAtW,SACNuuH,EAAM/mJ,IAAI,CAAC6H,EAAW7rC,IACrBikJ,kBAAClxE,IAAAosG,UAAmC,CAAA3iH,SAAA3wB,GAApB7rC,EAAQ6rC,QCP1Bm/I,KAAOvtG,aAAIA,KAAC,KAChB,MAAM8kE,EAAO4oB,iBAAiB8f,SAC9B,OACEhnC,kBAAAlxE,IAAA,MAAA,CAAKv1C,GAAG,OACNg/B,SAAAynF,kBAAAA,IAAC6mC,gBAAe,CAAAtuH,SAAE+lF,GAAQ,SCJ1B2oC,IAAMztG,aAAIA,KAAC,KACf,MAAM+kE,EAAM2oB,iBAAiBggB,QAC7B,OACElnC,kBAAAlxE,IAAA,MAAA,CAAKv1C,GAAG,MACNg/B,SAAAynF,kBAAAA,IAAC6mC,gBAAe,CAAAtuH,SAAEgmF,GAAO,SCDzB4oC,UAAY,UAEZC,WAAa,EACbC,mBAAqB,GAGdC,IAAM,CAAC96L,EAAWqpB,KAAwBrpB,EAAIqpB,EAAKA,GAAKA,EAE/D0xK,OAAUnlK,GAA0BA,EAAK36B,QAAU4/L,mBAG5CG,WAAa,CACxBplK,EACAwiB,EACA6iJ,KAEA,IAAKF,OAAOnlK,GACV,OAAO,EAGT,MACMl3B,EADkB05C,EAAOwiJ,WACEK,EAC3BC,GAAgBtlK,EAAK36B,OAAS0/L,UAAU1/L,QAAU2/L,WAExD,OAAOE,IAAIp8L,EAAQw8L,IAIRC,WAAcF,GAA2B,GAAGA,MAG5CG,SAAYxlK,GACvBmlK,OAAOnlK,GACH,GAAGA,IAAO+kK,YAAY/kK,IACtBA,EAAKylK,OAAOR,mBAAoB,KAQtC,SAASS,YAAWljJ,KAAEA,EAAImjJ,SAAEA,IAC1B,MAAOC,EAAUC,GAAe9V,aAAcx2F,UAAC,GAC/Cy2F,aAAAA,UAAgB,KACd,IAAiB,IAAb4V,EACF,OAEF,MAAME,EAAa3U,YAAY3uI,EAAM,KACrC,MAAO,IAAM4uI,cAAc0U,IAC1B,CAACtjJ,EAAMojJ,IAEV5V,aAAAA,UAAgB,KACd,GAAI2V,EAEF,YADAE,GAAY,GAGd,MAAME,EAAkBj4L,OAAO8R,WAAW,KACxCimL,GAAY,IACX,KACH,MAAO,KACL/3L,OAAOwgF,aAAay3G,KAErB,CAACJ,GACN,CAGA,SAASK,WACP,MAAOC,EAAYC,GAAiBnW,aAAcx2F,SAAgB,OAC3D4sG,EAAYC,GAAiBrW,aAAcx2F,SAAC,GAEnDy2F,aAAAA,UAAgB,KACd,GAAkB,MAAdiW,EACF,OAEF,MAAMI,EAASJ,EACTpR,EAAmB1f,IACvB,MAAM74H,EAAO0pI,KAAW7Q,GAAMkxB,EAC9BD,GAAe9pJ,IAIjB,IAAIrjC,GAAY,EAChB,MAAMktK,EAAgB,KAChBltK,IAGJ+F,SAAS0uF,oBAAoB,YAAamnF,GAC1C71K,SAAS0uF,oBAAoB,YAAamnF,GAC1C71K,SAAS0uF,oBAAoB,UAAWy4E,GACxCnnK,SAAS0uF,oBAAoB,WAAYy4E,GACzC+f,EAAc,MACdjtL,GAAY,IAQd,OALA+F,SAASyuF,iBAAiB,YAAaonF,GACvC71K,SAASyuF,iBAAiB,YAAaonF,GACvC71K,SAASyuF,iBAAiB,UAAW04E,GACrCnnK,SAASyuF,iBAAiB,WAAY04E,GAE/BA,GACN,CAAC8f,IAEJ,MAAM7f,EAAkBkgB,yBAEpBh+L,IAEA49L,EAAclgB,KAAW19K,KAE3B,IAGF,MAAO,CAAE89K,kBAAiB+f,aAAYR,SAAwB,MAAdM,EAClD,CAEA,MAAMM,QAAU1W,aAAUz4F,KAAC,KACzB,MAAMp3D,EAAO8kJ,iBAAiB0hB,gBACxBhvC,EAAUstB,iBAAiBgO,YAC3Br7B,EAAcqtB,iBAAiB2hB,gBAC/B9lB,EAAcoE,iBAAiB2hB,cAC/BtgB,gBAAEA,EAAe+f,WAAEA,EAAUR,SAAEA,GAAaK,WAC5Cl9L,EAASs8L,WAAWplK,EAAMy3H,EAAa0uC,GACvCQ,EAAepB,YAAYz8L,GAIjC,OAFA48L,WAAW,CAAEljJ,KAAMm+H,EAAaglB,aAG9B/nC,kBAAAA,WACEzmH,GAAG,UACHinH,UAAU,OACVgpB,cAAehB,EACf11H,MAAM,aAENylB,SAAAynF,kBAAAA,IAAA,MAAA,CACE7+G,MAAO,CACL6sI,WAAY,SACZgb,WAAY,YACZ9rL,UAAW,cAAc6rL,MAQ3BxwH,SAAAynF,kBAAAlxE,IAAC+3G,gBAAiB,CAAAtuH,SAAAqvH,SAASxlK,MAFtBw3H,EAAU,UAAY,mBCnJ7BqvC,WAAazvG,aAAIA,KAAC,KACtB,MAAMriB,EAAW+vG,iBAAiBgiB,aAClC,OACE7oC,kBAAAA,YAAKG,UAAU,cACbjoF,SAAA,CAAAynF,kBAAAA,IAAA,MAAA,CAAKzmH,GAAG,SAASinH,UAAW6pB,WAAW,CAAEp9E,SAAuB,IAAb91B,MACnD6oF,6BAAKzmH,GAAG,OAAOinH,UAAW6pB,WAAW,CAAEp9E,SAAuB,IAAb91B,WCCvD,SAASgyH,cACP,MAAMj8H,EAAWg6G,iBAAiBzU,aAC5Bjc,EAAc0wB,iBAAiBvU,gBAC/B3wH,EAAWkrB,EAAYh8D,KAAKC,MAAMqlJ,GAAetpF,EAAY,IAAM,EACnEouF,EAAgB4rB,iBAAiBkiB,2BAMvC,MAAO,CAACpnJ,EAFa,aAHEklI,iBAAiBmiB,mBAGN/tC,EAAgBt5G,EAGpD,CAEA,MAAMsnJ,SAAW9vG,aAAIA,KAAC,KACpB,MAAOx3C,EAAUunJ,GAAqBJ,cAChCl6E,EAAWo4D,mBAEXhE,EAAwBhpF,yBAC3B3vF,IACCukH,EAAS,CACP14G,KAAM6xI,yBACN76H,QAASkxB,OAAQ/zC,EAAEO,OAA4BmJ,SAEjD66G,EAAS,CAAE14G,KAAMozI,eAEnB,CAAC16B,IAGGu6E,EAAcnvG,yBACjB3vF,IACCukH,EAAS,CAAE14G,KAAMgyI,UAAWppI,MAAO,aACnC8vG,EAAS,CACP14G,KAAMoyI,mBACN3mG,SAAUvD,OAAQ/zC,EAAEO,OAA4BmJ,UAGpD,CAAC66G,IAKH,IAAIuxC,EAAY,GAOhB,OANIx+G,GAAY,GACdw+G,EAAY,OACHx+G,GAAY,KACrBw+G,EAAY,SAIZR,kBAAAA,IAAA,QAAA,CACEzmH,GAAG,WACHinH,UAAWA,EACXjqJ,KAAK,QACL4P,IAAI,IACJ2E,IAAI,MACJ85B,KAAK,IACLzD,MAAO,CAAEg3I,YAAa,QACtB/jL,MAAOm1L,EACPE,QAASD,EACT/jB,SACE,OAEFqgB,YAAaziB,EACbmG,cAAeggB,EACf12I,MAAM,kBClEN42I,OAASlwG,aAAIA,KAAC,KAClB,MAAM4c,EAAS8wE,iBAAiBkO,WAC1BqR,EAActf,iBAAiB6N,cACrC,OACEh1B,kBAAAA,IAACkxB,kBACC,CAAAC,eAAgB,IACdnxB,kBAAAA,IAAC+wB,KAAI,CACHhlF,QAASqK,EACTy6E,MAAM,SACNhtE,QAAS4iF,EACTjxC,OAAO,QAEVj9E,SAEDynF,kBAAClxE,IAAA+6F,aACC,CAAAtwI,GAAG,SACHinH,UAAW6pB,WAAW,CAAEp9E,SAAUmJ,IAClCyN,QAAS4iF,EACT3zI,MAAM,sBCrBR62I,MAAQnwG,aAAIA,KAAC,KACjB,MAAMitG,EAActf,iBAAiByiB,2BACrC,OACE5pC,kBAAAA,IAACy7B,WAAU,CACTliJ,GAAG,QACHiwI,cAAeid,EACf7S,cAAgBlpL,GAAMA,EAAE+mG,kBACxB3+C,MAAM,8BCRN+2I,SAAWrwG,aAAIA,KAAC,KACpB,MAAM0oF,EAAWiF,iBAAiB2iB,UAClC,OAAO9pC,kBAAClxE,IAAA2sG,WAAW,CAAAliJ,GAAG,WAAWuZ,MAAM,WAAW+wD,QAASq+D,MCEvD6nB,QAAUvwG,aAAIA,KAAC,KACnB,MAAMs4D,EAAUo1B,iBAAiBmO,YAC3BoR,EAActf,iBAAiB8N,eACrC,OACEj1B,kBAAAA,IAACkxB,kBACC,CAAAC,eAAgB,IACdnxB,kBAAAA,IAAC+wB,KAAI,CACHhlF,QAAS+lD,EACT++B,MAAM,UACNhtE,QAAS4iF,EACTjxC,OAAO,QAEVj9E,SAEDynF,kBAAClxE,IAAA+6F,aACC,CAAAtwI,GAAG,UACHinH,UAAW6pB,WAAW,CAAEp9E,SAAU6kD,IAClCjuC,QAAS4iF,EACT3zI,MAAM,uBCnBRk3I,KAAOxwG,aAAIA,KAAC,KAChB,MAAM45E,EAAiB+T,iBAAiB2N,gBAClCt+B,EAAc0wB,iBAAiBvU,gBAC/BzlG,EAAWg6G,iBAAiBzU,cAA0B,EACtDlc,EAAW2wB,iBAAiBiO,aAC5BvrG,EACJ2sE,IAAa5H,UAAUC,QAAU4H,EAActpF,EAAWspF,EAEtD8kC,EAAU2O,WAAiBrgH,GACjC,OACEy2E,kBAAAA,KAAK,MAAA,CAAA9mH,GAAG,OAAOsqE,QAASuvD,EAAgB5S,UAAU,sBAC/CjK,IAAa5H,UAAUE,WAAamR,kBAAAA,IAAA,MAAA,CAAKzmH,GAAG,eAC7CymH,kBAAAA,IAAA,MAAA,CACEzmH,GAAG,qBACHinH,UAAW,eAAe86B,EAAQhsC,sBAEpC0Q,kBAAAA,IAAA,MAAA,CACEzmH,GAAG,sBACHinH,UAAW,eAAe86B,EAAQ/rC,uBAEpCyQ,6BACEzmH,GAAG,qBACHinH,UAAW,eAAe86B,EAAQ9rC,sBAEpCwQ,kBAAAA,WACEzmH,GAAG,sBACHinH,UAAW,eAAe86B,EAAQ7rC,4BCvB5B,SAAUy6C,QAAO3wJ,GAAEA,EAAE4H,MAAEA,EAAKq/G,UAAEA,IAC1C,MAAM/J,EAASywB,iBAAiB/D,WAC1BhB,EAAWgF,iBAAiBye,UAC5BxjB,EAAa+E,iBAAiB0e,YAC9BhzB,EAAYsU,iBAAiBgjB,WAEnC,OACEnqC,kBACElxE,IAAA,QAAA,CAAAv1C,GAAIA,EACJhjC,KAAK,QACL4P,IAAI,IACJ2E,IAAI,MACJ85B,KAAK,IACLxwC,MAAOqiJ,EACPt1G,MAAO,IAAKA,EAAOg3I,YAAa,QAChC33B,UAAWA,EACXilB,SAAW/6K,GAAMmoK,EAAUp0H,OAAO/zC,EAAEO,OAAOmJ,QAC3Co1K,cAAe,IAAMrH,EAAS,UAC9B2jB,YAAa1jB,EACbtvH,MAAM,cAGZ,CC3BA,MAAMs3I,WAAa5wG,aAAIA,KAAC,KACtB,MACMjsE,EADS25J,iBAAiB/D,WACP,IAInBhiI,EAAQ,CACZ8kJ,mBAAoB,MAHQ,IADf/0L,KAAKqsC,MAAgB,GAAVhwB,GACD,QAKzB,OACEyyI,kBAAAlxE,IAAA,MAAA,CAAKv1C,GAAG,SAAS4H,MAAOA,WACtB6+G,kBAAAA,IAACkqC,OAAS,CAAA,OCwBhB,SAASG,iBAAiB3/L,GACxB,OAAO4/L,UAAkB5/L,EAAG4iJ,WAAWnF,KACzC,CAEA,MAAMoiD,WAAatY,aAAAA,KAAW,EAAG1G,WAAUiK,kBACzC,MAAMgV,EAAYtjB,iBAAiB8d,eAAjB9d,CAA2C,QACvDxiK,EAASwiK,iBAAiBlV,gBAC1Bhd,EAAUkyB,iBAAiB4B,kBAC3BhpD,EAAUonD,iBAAiBujB,YAC3B7wC,EAAUstB,iBAAiBgO,YAC3Bn7B,EAAQmtB,iBAAiBwjB,cACzBzwC,EAAUitB,iBAAiByjB,YAE3BnqC,EAAY6pB,WAAW,CAC3Bn6K,QAAQ,EACRgiK,KAAMxtJ,IAAWoqI,aAAaC,QAC9BqjB,KAAM1tJ,IAAWoqI,aAAaE,QAC9BvzI,MAAOiJ,IAAWoqI,aAAaG,OAC/BhiD,SAAU+nD,IAAY/H,QAAQC,KAC9BkI,MAAOo1C,EACPI,WAAW,EACX9qE,UACA85B,UACAG,UAGIsV,EAA4B8X,iBAChCyiB,2BAEI52B,EAAemU,iBAAiB0jB,cAChClsB,EAAYwI,iBAAiBkjB,kBAEnC,OACErqC,sBAACowB,WACC,CAAA72I,GAAG,cACHo8G,SAAU1I,QAAQC,KAClBsT,UAAWA,EACX6vB,WAAY1R,EACZmsB,QAAS93B,EAAYz6F,SAErB8nF,kBAAAA,KAACsoB,aAAYhzB,SAAU1I,QAAQC,KAAI30E,SAAA,CACjC8nF,kBACEtxE,KAAA,MAAA,CAAAx1C,GAAG,YACHinH,UAAU,qBACVozB,cAAevkB,EAEf92F,SAAA,CAAAynF,sBAACg8B,kBAAiB,CAChBziJ,GAAG,iBACH05G,QAAM,EACNipC,WAAY,IAAMl8B,kBAAClxE,IAAAymG,gBAAgB,CAAAC,YAAaA,IAAej9G,SAE/DynF,kBAAAA,IAACy7B,WAAW,CAAAliJ,GAAG,SAASuZ,MAAM,kBAE/B03I,GAAaxqC,sBAACo7B,SAAW,CAAA,GAC1Bp7B,sBAAC6pC,SAAQ,CAAA,GACT7pC,kBAAAA,IAAC2pC,MAAK,IACN3pC,sBAACkmC,MAAK,CAAA,MAER7lC,kBAAKtxE,KAAA,MAAA,CAAAyxE,UAAU,gBACbjoF,SAAA,CAAAynF,kBAAAlxE,IAACu3G,WAAU,CAAA,IACTpsC,GAAW+F,kBAAAA,IAAK,MAAA,CAAAzmH,GAAG,eACrBymH,6BACEzmH,GAAG,iBACHinH,UAAW6pB,WAAW,CAAEp9E,SAAUgtD,MAEpC+F,kBAAAlxE,IAACk7G,KAAI,CAAA,MAEPhqC,kBAAAA,IAAC6kC,IAAI,CAAAtZ,SAAUA,IACflrB,8BAAKG,UAAU,aAAYjoF,SAAA,CACzBynF,kBAAClxE,IAAA65G,QAAU,CAAA,GACX3oC,kBAAAA,IAAC+mC,KAAO,IACR/mC,sBAACinC,IAAM,CAAA,GACPjnC,kBAAClxE,IAAAm6G,WAAa,CAAA,MAEhBjpC,kBAAAA,IAACoqC,WAAU,IACXpqC,sBAACgmC,YAAW,CAAA,GACZ3lC,kBAAAtxE,KAAA,MAAA,CAAKyxE,UAAU,UACbjoF,SAAA,CAAAynF,kBAAAlxE,IAAC03G,eAAc,CAAA,GACfxmC,kBAAAA,IAAC4mC,qBAAoB,OAEvB5mC,sBAACspC,aACDtpC,kBAAAlxE,IAAC22G,cAAa,CAAA,GACdzlC,kBAAAA,IAACsmC,MAAK,IACNjmC,uBAAA,MAAA,CAAKG,UAAU,iBAAgBjoF,SAAA,CAC7BynF,sBAAC+pC,QAAO,CAAA,GACR/pC,kBAAAlxE,IAAC46G,OAAM,CAAA,MAET1pC,kBAAAA,IACE,IAAA,CAAAzmH,GAAG,QACHtuC,OAAO,SACP0yF,KAAK,2BACL7qC,MAAM,iBC3HhB,SAASi4I,sBAAqBjjB,UAAEA,IAC9B,MAAMoD,EAAahE,iBAAiBiE,eAC9B1b,EAAgB0X,iBAAiB2D,eACjCjD,EAAcqD,EAAW,YAE/B,OACElrB,kBAAClxE,IAAA84F,eACC,CAAAC,YAAaA,EACbtuI,GAAG,yBACHk2H,cAAgBvmK,IACdumK,EAAc,WAAYvmK,IAE5B4+K,UAAWA,GAGjB,CCNA,SAASkjB,gBACP,MAAMh2C,EAAUkyB,iBAAiB4B,kBAE3BjjB,EADgBqhB,iBAAiBiE,cAClBh4B,CAAc,YAC7BjmF,EAAWg6G,iBAAiBzU,aAC5B5lK,EAAOq6K,iBAAiB+jB,qBAExB17B,EAAc4X,iBAAiB4D,aAC/BmgB,EAAc/jB,iBAAiBgkB,yBAC/BC,EAAcjkB,iBAAiB4B,kBAE/BsiB,EAAaxlC,EAAa,GAAK7X,4BAE/Bs9C,EAAclwG,aAAAA,QAAQ,KAC1B,GAAY,MAARvuF,EACF,MAAO,YAGT,MAEM0+L,GAFiB,IAEcF,GAAct9C,gBACnD,OAAOlhJ,EAAKpF,OAAS8jM,EACjB1+L,EAAKwC,MAAM,EAAGk8L,EAAa,GAAKz9C,cAChCjhJ,GACH,CAACw+L,EAAYx+L,IAEVy1B,EAAO84D,aAAAA,QAAQ,IACJ,MAARvuF,EAAe,GAAK8iJ,WAAWziF,GACrC,CAACA,EAAUrgE,IAEd,OACEmzJ,kBAAAlxE,IAAA,MAAA,CACEv1C,GAAG,wBACHinH,UAAW6pB,WAAW,SAAU,YAAa,CAC3Cp9E,SAAU+nD,IAAY/H,QAAQE,WAEhChsG,MAAO,CAAE4zB,MAAO,GAAGm5E,aAAem9C,OAClC7hB,cAAe,IAAM4hB,EAAY,YACjCxX,cAAesX,EAAW3yH,SAE1BynF,kBAAAA,WAAKQ,UAAU,OACbjoF,SAAA8nF,kBAAAA,KAAA,MAAA,CAAKG,UAAU,kBAAiBjoF,SAAA,CAC9BynF,6BAAKzmH,GAAG,6BACNg/B,SAAAynF,kBAAAA,IAAC6mC,gBAAiB,CAAAtuH,SAAA+yH,MAEpBtrC,kBAAAlxE,IAAA,MAAA,CAAKv1C,GAAG,+BACNymH,kBAAAA,IAAC6mC,0BAAiBvkK,MAEpB09H,sBAAC+qC,sBAAqBjjB,WAAS,IAC/B9nB,kBAAClxE,IAAA+6F,cAAatwI,GAAG,wBAAwBsqE,QAASqnF,IAClDlrC,sBAAC6pB,aAAY,CACXtwI,GAAG,wBACHsqE,QAAS,IAAM0rD,EAAY,oBAMvC,CCnEA,SAASi8B,mBAAkBjzH,SAAEA,IAC3B,MAAMkW,IAAEA,EAAGg4F,MAAEA,GAAUF,eACvB,OACEvmB,kBAAIlxE,IAAA,KAAA,CAAAL,IAAKA,EAAK+xE,UAAW6pB,WAAW,CAAE5D,mBACnCluG,GAGP,CAEA,IAAeihB,iBAAAA,aAAAA,KAAKgyG,mBCHpB,SAASC,aAAa98G,GACpB,MAAOse,EAAUgvF,GAAetgG,aAAQA,UAAC,IAElClN,EAAKw6F,GAAUttF,aAAQA,SAAiB,MAEzC/sF,EAAWyrF,aAAAA,YAAY,KAK3Br4E,WAAW,KAETi6K,GAAY,IACX,IACF,IAIH,OAFAlV,eAAet4F,EAAKwe,EAAWr+F,EAAW,MAGxCyxJ,kBAAAtxE,KAAA,MAAA,CACEx1C,GAAIo1C,EAAMp1C,GACVinH,UAAW6pB,WAAW,gBAAiB,CACrCp9E,aAEFxe,IAAKw6F,EACLplE,QAAS,IAAMo4E,EAAayP,IAAeA,GAE3CnzH,SAAA,CAAAynF,kBAAAA,IAAA,MAAA,CAAKQ,UAAU,QACdvzD,GACC+yD,sBACG,KAAA,CAAAznF,SAAAof,aAAQA,SAAC53C,IAAI4uC,EAAMpW,SAAU,CAAC4B,EAAO7yE,IACpC04J,kBAAAlxE,IAAC68G,iBAAgB,CAAApzH,SAAU4B,GAAJ7yE,QAMnC,CACA,IAAekyF,eAAAA,aAAAA,KAAKiyG,cC/CpB,MAAMG,QAAU,KACd,MAAMv+K,EAAY65J,iBAAiB2kB,eAC7BjsB,EAAgBuH,iBAAiB2kB,eACjCnsB,EAAkBwH,iBAAiB4kB,iBACnClsB,EAAkBsH,iBAAiB6kB,iBACzC,OACE3rC,kBAAAA,KAACorC,eAAa,CAAAlyJ,GAAG,oBACfg/B,SAAA,CAAAynF,kBAAAA,IAAA,MAAA,CAAKQ,UAAU,UAAU38C,QAAS,IAAMg8D,EAAgBxyJ,KACxD2yI,kBAAAA,IAAK,MAAA,CAAAQ,UAAU,UAAU38C,QAAS,IAAM+7D,EAAcvyJ,KACtD2yI,kBAAAA,IAAA,MAAA,CAAKQ,UAAU,WAAW38C,QAAS,IAAM87D,EAAgBtyJ,SCTzD4+K,WAAa,KACjB,MAAMC,EAAiB/kB,iBAAiBglB,sBAClCC,EAAYjlB,iBAAiBklB,iBAC7BC,EAAOnlB,iBAAiBolB,cAC9B,OACElsC,kBAACtxE,KAAA08G,eAAa,CAAAlyJ,GAAG,uBAAsBg/B,SAAA,CACrCynF,kBACElxE,IAAA,MAAA,CAAA0xE,UAAU,cACV38C,QAAS,IAAMo6D,MAAM,6BAEvBje,kBAAAA,IAAA,MAAA,CAAKQ,UAAU,aAAa38C,QAASuoF,IACrCpsC,kBAAKlxE,IAAA,MAAA,CAAA0xE,UAAU,OAAO38C,QAASyoF,IAC/BtsC,sBAAA,MAAA,CAAKQ,UAAU,kBAAkB38C,QAASqoF,QCdlC,SAAUM,gBACtB,MAAMC,EAAStlB,iBAAiBulB,iBAC1Bz6K,EAAOk1J,iBAAiBwlB,YACxB5nL,EAAMoiK,iBAAiBylB,WAC7B,OACEvsC,kBAAAA,KAACorC,eAAa,CAAAlyJ,GAAG,0BAAyBg/B,SAAA,CACxCynF,kBAAAA,IAAK,MAAA,CAAAQ,UAAU,mBAAmB38C,QAAS4oF,IAC3CzsC,kBAAAlxE,IAAA,MAAA,CAAK0xE,UAAU,cAAc38C,QAAS5xF,IACtC+tI,kBAAAA,IAAK,MAAA,CAAAQ,UAAU,aAAa38C,QAAS9+F,MAG3C,CCDc,SAAU8nL,kBACtB,MAAMjxB,EAAcuL,iBAAiB2lB,aAC/BjxB,EAAgBsL,iBAAiB4lB,eACjCjxB,EAAkBqL,iBAAiB6lB,iBACzC,OACEhtC,sBAACg8B,kBAAiB,CAChB76I,MAAO,CAAE4zB,MAAO,OAAQC,OAAQ,QAChChvC,KAAG,EACHk2J,WAAY,IACV77B,kBAAAA,KAAAC,kBAAAzxE,SAAA,CAAAtW,SAAA,CACEynF,kBAAAA,IAAC+wB,MAAKF,MAAM,qBAAqBhtE,QAASi4D,IAC1C9b,kBAAAA,IAACC,GAAK,IACND,sBAAC+wB,KAAI,CAACF,MAAM,eAAehtE,QAAS+3D,IACpC5b,kBAAAA,IAAC+wB,KAAK,CAAAF,MAAM,iBAAiBhtE,QAASg4D,OAEzCtjG,SAEDynF,sBAAO,MAAA,CAAA,IAGb,CC7BA,MAAMitC,uBAAyB,KAC7B,MAAMxtB,EAAuB0H,iBAAiB+lB,sBAC9C,OACEltC,sBAACg8B,mBACC76I,MAAO,CAAE4zB,MAAO,OAAQC,OAAQ,QAChChvC,OACAk2J,WAAY,IACVl8B,sBAAC+wB,KAAK,CAAAltE,QAAS47D,EAAsBoR,MAAM,oCAG7C7wB,kBAAAA,IAAO,MAAA,CAAA,MCXPmtC,SAAW,IACf9sC,kBAAAA,KAACorC,eAAY,CAAClyJ,GAAG,qBACfg/B,SAAA,CAAAynF,kBAAAA,IAAA,MAAA,CAAKQ,UAAU,YAAY38C,QAAUn5G,GAAMA,EAAE+mG,2BAC3CuuD,kBAAClxE,IAAA+9G,gBAAkB,CAAA,KAErB7sC,kBAAAA,IACE,MAAA,CAAAQ,UAAU,YACV38C,QAAS,IAAMo6D,MAAM,6BAGvBje,kBAAKlxE,IAAA,MAAA,CAAA0xE,UAAU,eAAe38C,QAAUn5G,GAAMA,EAAE+mG,kBAAiBl5B,SAC/DynF,sBAACitC,uBAAsB,CAAA,QCVf,SAAUG,WACtB,MAAMzxB,EAAkBwL,iBAAiBklB,iBACnCtsB,EAAmBoH,iBAAiBkmB,kBACpCptB,EAAkBkH,iBAAiBmmB,iBACzC,OACEjtC,kBAAAA,KAACorC,eAAa,CAAAlyJ,GAAG,qBAAoBg/B,SAAA,CACnCynF,kBAAAA,IAAK,MAAA,CAAAQ,UAAU,WAAW38C,QAAS83D,IACnC3b,kBAAAlxE,IAAA,MAAA,CAAK0xE,UAAU,YAAY38C,QAASo8D,IACpCjgB,kBAAAA,IAAK,MAAA,CAAAQ,UAAU,YAAY38C,QAASk8D,MAG1C,CCPA,SAASwtB,SAAS7zL,EAAanS,EAAaimM,GAC1C,KAAO9zL,EAAIjS,OAASF,GAClBmS,GAAO8zL,EAET,OAAO9zL,CACT,CAEA,MAAM+zL,mBAAqB,KACzB,MAAMC,EAAqBxmB,iBAAiBymB,uBACtCvrK,EAAOg5D,qBACX,IAAMmyG,SAASG,EAAoB,GAAI,KACvC,CAACA,IAEH,OACE1tC,kBAAAA,IAAA,MAAA,CAAKQ,UAAU,0CAEbjoF,SAAAynF,kBAAAA,IAAA,MAAA,CAAAznF,SACEynF,kBAAAA,IAAC6mC,0BAAiBzkK,SClBpBwrK,iBAAiB,KACrB,MAAM17B,EAAOiV,iBAAiB4M,MACxBt4K,EAAQ0rK,iBAAiB6M,OACzB5hB,EAAO+U,iBAAiB8M,MACxB9hB,EAAsBgV,iBAAiB0O,qBACvC9pL,EAAOo7K,iBAAiB+M,MACxB/qK,EAAWg+J,iBAAiB2M,UAClC,OACEzzB,kBAAAA,KAACxxE,aAAAA,SACC,CAAAtW,SAAA,CAAAynF,kBAAAA,IAACytC,mBAAqB,CAAA,GACtBptC,kBAAKtxE,KAAA,MAAA,CAAAyxE,UAAU,0BAAyBjoF,SAAA,CACtCynF,sBAAK,MAAA,CAAAQ,UAAU,2BAA2B38C,QAAS16F,IACnD62I,kBAAKlxE,IAAA,MAAA,CAAA0xE,UAAU,uBAAuB38C,QAASquD,IAC/ClS,6BAAKQ,UAAU,wBAAwB38C,QAASpoG,IAChDukJ,kBAAAlxE,IAAA,MAAA,CAAK0xE,UAAU,uBAAuB38C,QAASuuD,IAC/CpS,kBAAAA,IAAA,MAAA,CAAKQ,UAAU,uBAAuB38C,QAAS93G,IAC/Ci0J,kBAAAA,IAAK,MAAA,CAAAQ,UAAU,wBAAwB38C,QAASsuD,OAElDnS,kBAAAlxE,IAACssG,SAAW,CAAA,OCFlB,SAASyS,WAAUt1H,SAAEA,EAAQu1H,gBAAEA,EAAe/xL,MAAEA,EAAKw9B,GAAEA,IACrD,MAAM+gH,EAAoB4sB,iBAAiB6mB,sBACrCvyB,EAAmB0L,iBAAiBzL,qBACpCuyB,EAAiB9mB,iBAAiBhE,mBAClCj2E,EAAWuuE,EAAiBvtE,IAAI10D,GAChC3lC,EAAUo6L,IAAmBz0J,EAE7B01E,EAAWo4D,mBACXpV,EAAekV,iBAAiB8mB,cAEhCxlB,EAAcpuF,yBACjB3vF,GACKA,EAAEuoG,UACJvoG,EAAE8mG,sBACFyd,EAAS,CAAE14G,KAAM2zI,oBAAqBnuI,WAE7BrR,EAAEyoG,SAAWzoG,EAAEsoG,SACxBtoG,EAAE8mG,sBACFyd,EAAS,CAAE14G,KAAM0zI,mBAAoBluI,YAIlCkxF,GACHgiB,EAAS,CAAE14G,KAAMyzI,cAAejuI,eAGlC+xL,EAAgBpjM,IAElB,CAACukH,EAAU6+E,EAAiB/xL,EAAOkxF,IAG/BihG,EAAmB7zG,yBACtB3vF,IAOC,SAASyjM,IACPl8B,EAAa14H,EACd,CARI0zD,GACHgiB,EAAS,CAAE14G,KAAMyzI,cAAejuI,UAElC+xL,EAAgBpjM,GAMhBA,EAAEO,OAAO4kG,iBAAiB,aAAcs+F,GACxCnsL,WAAW,KAGTtX,EAAEO,OAAO6kG,oBAAoB,aAAcq+F,IAC1C,MAEL,CAACl/E,EAAU6+E,EAAiBv0J,EAAIx9B,EAAOk2J,EAAchlE,IAGjD9rD,EAA6B,CACjC2+G,gBAAiB7yD,EAAWqtD,EAAkB0O,gBAAa1/J,EAC3D41C,MAAOtrC,EAAU0mJ,EAAkB1mJ,aAAUtK,GAE/C,OACE02J,kBAAAA,IAAA,MAAA,CACEQ,UAAW6pB,WAAW,aAAc,CAAEp9E,WAAUr5F,YAChDutC,MAAOA,EACP0iE,QAAUn5G,GAAMA,EAAE+mG,kBAClBg3E,YAAaA,EACbC,aAAcwlB,EACdzc,cAAgB/mL,GAAMA,EAAE8mG,iBACxBoiF,cAAe,IAAM3hB,EAAa14H,GAAGg/B,SAEpCA,GAGP,CCrFA,MAAM61H,WAAa,EAAG70J,KAAI80J,wBACxB,MAAMv7I,EAAQo0H,iBAAiBonB,oBAAjBpnB,CAAgD3tI,GAC9D,OACE8mH,kBACGtxE,KAAA,OAAA,CAAAxW,SAAA,CAAA81H,OAAqBv7I,MCF5B,SAASy7I,gBAAgB/0F,GACvB,OAAOA,EAAO1xG,WAAWL,MAC3B,CAEA,SAAS+mM,YACP,MAAMtjM,EAASg8K,iBAAiB7K,iBAC1BoyB,EAAWvnB,iBAAiBwnB,oBAC5BxwC,EAASgpB,iBAAiBnL,WAC1Blb,EAAiBqmB,iBAAiBynB,mBAElC3xB,EAAamK,iBAAiBwlB,YAC9BhwB,EAAewK,iBAAiBynB,cAChCtyB,EAAwB6K,iBAAiB0nB,wBAExCvgM,EAAMq4K,GAAWhrF,aAAQA,SAAqB,OAC9Co7F,EAAQ+X,GAAanzG,aAAQA,UAAC,IAC9BozG,EAAaC,GAAkBrzG,aAAQA,SAAgB,MAExDszG,EACJvkM,IAEAokM,GAAU,GACVE,EAAe3mB,KAAW39K,KA4C5B,SAASwkM,EACPtwJ,GAEA,OAAO6vJ,EAAS1uJ,IAAI,CAACxG,EAAIjyC,IACvB04J,kBAAClxE,IAAA++G,WAECt0J,GAAIA,EACJx9B,MAAO7Q,EAAS5D,EAChBwmM,gBAAiBmB,WAEhBrwJ,EAAOrF,EAAIjyC,IALPiyC,GAQV,CAtDDqhD,aAAAA,UAAU,KACR,GAAY,MAARtsF,GAA+B,MAAfygM,IAAkC,IAAXhY,EACzC,OAEF,MAAM/wJ,IAAEA,EAAGitH,OAAEA,EAAMnrH,KAAEA,EAAIynD,MAAEA,GAAUjhF,EAAKuhK,wBAC1C,IAAIs/B,EAAW,EACf,MAAMlY,EAAmB1f,IACvB,MAAMr9J,EAAIkuK,KAAW7Q,GACfr6H,EAAImrI,KAAW9Q,GACrB,GAAIr6H,EAAIlX,GAAOkX,EAAI+1G,GAAU/4I,EAAI4tB,GAAQ5tB,EAAIq1E,EAE3C,OAEF,MAAM2nG,EAAehmL,KAAKC,OAAO+rC,EAAI6xJ,GAAe5gD,cACpD,GAAI+oC,IAAiBiY,EAAU,CAE7BxyB,EADiBua,EAAeiY,GAEhCA,EAAWjY,CACZ,GAOG3O,EAAgB,IAAMumB,GAAU,GAKtC,OAJA5+L,OAAO2/F,iBAAiB,UAAW04E,GACnCr4K,OAAO2/F,iBAAiB,YAAaonF,GACrC/mL,OAAO2/F,iBAAiB,WAAY04E,GACpCr4K,OAAO2/F,iBAAiB,YAAaonF,GAC9B,KACL/mL,OAAO4/F,oBAAoB,YAAamnF,GACxC/mL,OAAO4/F,oBAAoB,YAAamnF,GACxC/mL,OAAO4/F,oBAAoB,UAAWy4E,GACtCr4K,OAAO4/F,oBAAoB,WAAYy4E,KAKxC,CAACwO,IAiBJ,MAAMqY,EAAuBb,gBAAgB1tC,GACvCwuC,EAA0B/nM,IAC7BA,EAAI,EAAI4D,GAAQpD,WAAWwnM,SAASF,EAAsB,KAkB7D,OAhBAx0G,aAAAA,UAAU,KACR,GAAY,MAARtsF,EAWJ,OAFAA,EAAKuhG,iBAAiB,QAASysE,EAAuB,CAAEznC,SAAS,IAE1D,KACLvmI,EAAKwhG,oBAAoB,QAASwsE,KAEnC,CAAChuK,EAAMguK,IAERjc,uBACE,MAAA,CAAA5xE,IAAKk4F,EACLnmB,UAAU,kBACVr/G,MAAO,CAAE6zB,OAAQ,OAAQu6H,WAAY,QACrC1rF,QAASm5D,YAEThd,kBAAAA,IAAK,MAAA,CAAAQ,UAAU,wBAAuBjoF,SACnC22H,EAAc,CAAC31J,EAAIjyC,IAClB04J,kBAAAA,IAACouC,WAAW,CAAA70J,GAAIA,EAAI80J,kBAAmBgB,EAAuB/nM,QAGlE04J,6BAAKQ,UAAU,2BACZjoF,SAAA22H,EAAe31J,GAAOioH,WAAiBtD,EAAO3kH,GAAI2zB,eAI3D,CCxGc,SAAUsiI,gBAAep7L,MACrCA,EAAK4gE,OACLA,EAAMD,MACNA,EAAK06H,OACLA,EAAMC,aACNA,EAAYC,eACZA,EAAclqB,SACdA,EAAQmqB,cACRA,EAAa9lB,8BACbA,GAAgC,EAAI38E,SACpCA,IAEA,MAAM1e,EAAMiN,oBAA8B,MACpCm0G,EAAYn0G,oBAA8B,MA0DhD,SAASo0G,EAAkBplM,GACzBA,EAAE8mG,iBAzDJ,UAA8BvmG,OAAEA,EAAM4nG,QAAEA,IACtC,MAAMk9F,EAAathH,EAAI76E,QACjB67K,EAAaogB,EAAUj8L,QAC7B,GAAkB,MAAdm8L,GAAoC,MAAdtgB,EAExB,OAAO,KAGT,MAAMugB,EAAaD,EAAWlgC,wBACxBogC,EAAaxgB,EAAW5f,yBAEtB7pI,IAAKkqK,EAAWl7H,OAAQm7H,GAAiBH,GACzChqK,IAAKoqK,EAAWp7H,OAAQq7H,GAAqBJ,EAU/CK,EAAaJ,GAJEzgB,EAAWtzE,SAASlxG,GACrC4nG,EAAUu9F,EACVC,EAAmB,GAKjBE,EAAWJ,EAAeE,EAEhC,SAASG,EAAetzJ,GAItBuoI,EAASvgB,OADWhoH,EAAIozJ,GACWC,EAAU,EAAG,GACjD,CAED,MAAME,EAAqB/0L,IACzBA,EAAM81F,iBACNg/F,EAAe90L,EAAMm3F,UAEjB69F,EAAgB,KACC,MAAjBd,GACFA,IAEFxuL,SAAS0uF,oBAAoB,cAAe2gG,GAC5CrvL,SAAS0uF,oBAAoB,YAAa4gG,IAE5CtvL,SAASyuF,iBAAiB,cAAe4gG,GACzCrvL,SAASyuF,iBAAiB,YAAa6gG,GAEjB,MAAlBf,GACFA,IAIFa,EAAe39F,EAChB,CAIC89F,CAAqB,CACnB1lM,OAAQP,EAAEO,OACV4nG,QAASnoG,EAAEmoG,SAEd,CAUD,MAAM3nG,EAASgG,KAAKC,OAAO6jE,EAAS06H,GAAgBt7L,GACpD,OACE4rJ,kBACElxE,IAAA,MAAA,CAAA3tC,MAAO,CAAE6zB,SAAQD,SACjBy0G,cAAer8E,OAAW7jG,EAAYwmM,EACtCxlB,eACEn9E,GAAY28E,OACRxgL,EAbV,SAA4BoB,GACR,IAAdA,EAAE6oG,SACJu8F,EAAkBplM,EAErB,EAYG+jF,IAAKA,EAAGlW,SAERynF,kBAAKlxE,IAAA,MAAA,CAAA3tC,MAAO,CAAEjkC,UAAW,cAAchS,QAAeujF,IAAKohH,EAASt3H,SACjEk3H,KAIT,CCzHA,MAAMmB,cAAgB,GAEhBC,SAAS,IACb7wC,kBAAAA,IAAA,MAAA,CACEQ,UAAU,4BACVr/G,MAAO,CAAE6zB,OAAQ47H,iBAIP,SAAUE,oBACtB,MACMC,EADqB7pB,iBAAiB8D,mBACrBziB,CAAmBtb,QAAQE,UAAUn4E,OACtD0lF,EAAyBwsB,iBAC7B8pB,2BAEIC,EAAsB/pB,iBAC1BgqB,wBAEIj1B,EAA4BkL,iBAChCgqB,2BAEF,OACEnxC,kBAAAA,IAAA,MAAA,CAAKQ,UAAU,qBAAqBr/G,MAAO,CAAEiwJ,WAAY,GAAG74H,SAC1DynF,kBAAAA,IAACwvC,eACC,CAAAx6H,OAAQ+7H,EAAiB,GACzBrB,aAAckB,cACd77H,MAAO,EACP3gE,MAAOsmJ,EAAyB,IAChC+qB,SAAWtjJ,GAAQ85I,EAAgC,IAAN95I,GAC7CstK,OAAQzvC,kBAAAA,IAAC6wC,SAAM,CAAA,GACf1jG,SAAU8jG,KAIlB,CCXA,SAASI,eAAe5iM,GACtB,OAAOA,EAAM8lJ,SAASL,WAAWzsJ,OAAS,CAC5C,CAEA,SAASmmM,gBAAeriB,SAAEA,IACxB,MAAMrgL,EAASg8K,iBAAiB7K,iBAC1BlpB,EAAgB+zB,iBAAiBiE,eACjCmmB,EAAiBpqB,iBAAiB4B,kBAClCtjB,EAAiB0hB,iBAAiB8d,gBAClC5/B,EAAgB8hB,iBAAiB3W,eACjCghC,EAAgBrqB,iBAAiBmqB,gBACjC/2C,EAAoB4sB,iBAAiB6mB,sBACrCxlC,EAAqB2e,iBAAiB8D,oBAEtC/9E,EAAWqkG,IAAmBrkD,QAAQE,SACtCqkD,EAAgB1tJ,QAAQ0hH,EAAevY,QAAQE,WAC/C0Y,EAAe1S,EAAclG,QAAQE,UACrCskD,EAA0BlpC,EAAmBtb,QAAQE,UAErDznG,EAAQyhI,iBAAiB4D,aACzBmgB,EAAc/jB,iBAAiBgkB,yBAC/B1uB,EAAqB0K,iBAAiBuqB,oBACtCh1B,EAAuByK,iBAAiBwqB,sBACxC3+B,EAAemU,iBAAiB0jB,cAChClsB,EAAYwI,iBAAiBmjB,WAE7BsH,EAAiB/rC,EAAa,GAAK,EACnCgsC,GAAsBzsC,EAAcnY,QAAQC,MAE5CmjC,EAAah2F,aAAAA,YACjB,CACE3vF,EACAonM,KAEA,MAAM9rK,EAAMt7B,EAAEmoG,QAAUi/F,EAAa50J,EAC/B43G,EAAUxE,MACdplJ,EAASgG,KAAKqsC,OAAOvX,EAAM,IAAMmoH,cACjC,EACAojD,EAAgB,GAElB5yB,EAAUj0K,EAAG4iJ,WAAWE,KAAMsH,IAEhC,CAAC6pB,EAAW4yB,EAAermM,IAG7B,GAAIsmM,EACF,OAAOxxC,kBAAAlxE,IAACk8G,cAAa,CAAA,GAGvB,MAAM7pJ,EAAQ,CACZjC,MAAOo7G,EAAkBwO,OACzBhJ,gBAAiBxF,EAAkByO,SACnCgpC,WAAY,GAAGz3C,EAAkB2O,0BACjCj0F,OAAQ,GAAGy8H,EAAwBz8H,WACnCD,MAAO,GAAG08H,EAAwB18H,WAG9ByyG,EAAU6C,WAAW,SAAU,YAAa,CAAEp9E,aAE9C+kG,EAAcnsC,EAAa,GAAK,GAAM,EAE5C,OACE7F,sBAAC2oB,YAAW,CAAChzB,SAAU1I,QAAQE,SAAQ50E,SACrC8nF,kBAACtxE,KAAAqhG,WACC,CAAA72I,GAAG,kBACHo8G,SAAU1I,QAAQE,SAClBqT,UAAWgnB,EACXrmI,MAAOA,EACPkvI,WAAYA,EACZya,QAAS93B,EAAYz6F,SAAA,CAErB8nF,kBAAAA,KAAK,MAAA,CAAAG,UAAU,yBAAyBozB,cAAesX,EAAW3yH,SAAA,CAChEynF,kBAAKlxE,IAAA,MAAA,CAAA0xE,UAAU,gCACdwxC,GACChyC,kBAAAA,IAAA,MAAA,CAAKQ,UAAU,uCAEjBR,kBAAAA,IAAA,MAAA,CAAKQ,UAAU,qCACfR,kBAAAA,IAAA,MAAA,CAAKQ,UAAU,iCACdwxC,GACChyC,kBAAAA,WAAKQ,UAAU,wCAEjBR,kBAAAA,IAAK,MAAA,CAAAQ,UAAU,sCACfH,kBAAKtxE,KAAA,MAAA,CAAAyxE,UAAU,yCACbR,kBAAAA,IAAC6pB,aAAa,CAAAtwI,GAAG,wBAAwBsqE,QAASqnF,IAClDlrC,sBAAC6pB,aACC,CAAAtwI,GAAG,wBACHsqE,QAAS,IAAMn+D,EAAMunG,QAAQE,kBAInCkT,kBAAAA,KAAK,MAAA,CAAAG,UAAU,4BACbjoF,SAAA,CAAAynF,kBAAAA,IAAA,MAAA,CAAKQ,UAAU,mCACfR,kBAAAlxE,IAAA,MAAA,CAAK0xE,UAAU,yBAAwBjoF,SACrCynF,kBAAAA,IAACwuC,UAAS,CAAA,KAEZxuC,kBAAClxE,IAAA+6F,aAAa,CAAArpB,UAAU,kCACtBjoF,SAAAynF,kBAAAlxE,IAACgiH,kBAAiB,CAAA,QAGtBzwC,kBAAKtxE,KAAA,MAAA,CAAAyxE,UAAU,4BACbjoF,SAAA,CAAA8nF,kBAAAtxE,KAAA,MAAA,CAAKyxE,UAAU,iCAAgCjoF,SAAA,CAC7CynF,sBAAC4rC,QAAU,CAAA,GACX5rC,sBAACisC,eACDjsC,sBAACwsC,cAAa,CAAA,GACdxsC,sBAACmtC,SAAQ,CAAA,MAEXntC,kBAAKlxE,IAAA,MAAA,CAAA0xE,UAAU,qCACfH,8BAAKG,UAAU,kCAAiCjoF,SAAA,CAC7Cq5H,GACC5xC,kBAAAlxE,IAAA,MAAA,CAAK0xE,UAAU,sBAAqBjoF,SACjCs5H,GACC7xC,sBAAA,MAAA,CAAKQ,UAAU,qBACbjoF,SAAAynF,kBAAAA,IAAC6kC,IAAG,CAACtZ,SAAUA,QAKvBvrB,sBAACiyC,iBAAqB,CAAA,GACtBjyC,sBAACotC,SAAW,CAAA,GACZptC,sBAAK,MAAA,CAAAzmH,GAAG,4BAA4BsqE,QAAS44D,IAC7Czc,6BACEzmH,GAAG,8BACHsqE,QAAS64D,IAEX1c,kBAAAA,IAAC+qC,qBAAoB,CAAA,aAMjC,CCjJA,MAAMmH,UAAY,IAGLC,aAAgB/9L,IAC3B,MAAMmZ,EAAUnZ,EAAQ89L,UACxB,OAAOhhM,KAAKqsC,MAAgB,GAAVhwB,IAIP6kL,cAAiB54F,IAGrB,CAAEt/F,EAFCs/F,EAAS,GAEPt8D,EADFhsC,KAAKC,MAAMqoG,EAAS,MAI1Bq3F,OAAS,IAEN7wC,kBAAAA,IAAA,MAAA,CAAK7+G,MADE,CAAE4zB,MAAO,GAAIC,OAAQ,GAAIo8H,WAAY,GACzB5wC,UAAU,kBAGd,SAAA6xC,MAAK94J,GAC3BA,EAAEksI,SACFA,EAAQ3pB,KACRA,EAAIw2C,oBACJA,IAEA,MACMl+L,EADU8yK,iBAAiBqrB,YACXz2C,GAChBmqC,EAAqB7qG,aAAAA,QAAQ,KACjC,MAAMlhF,EAAEA,EAACgjC,EAAEA,GAAMk1J,cAAcD,aAAa/9L,IAG5C,MAAO,IAFa,GAAJ8F,QACI,GAAJgjC,OAEf,CAAC9oC,IACEiuK,EAAY8E,iBAAiBqrB,WAC7BpwB,EAAa+E,iBAAiB0e,YAIpC,OACE7lC,sBAAC6pB,aAAY,CACXtwI,GAAIA,EACJinH,UAAU,OACVr/G,MAAO,CAAE8kJ,qBAAoBjxH,OAAQ,IACrC80G,gCACa,WAAThuB,GAAqBw2C,YAGzBtyC,kBAAClxE,IAAA0gH,eACC,CAAAx6H,OAAQ,GACRD,MAAO,GACP26H,aAAc,GACdt7L,MAAO,EAAIA,EAAQ89L,UACnBvC,eAAgB,IAAMttB,EAAUvmB,GAChC2pB,SAAWtjJ,GAAQsjJ,GAAU,EAAItjJ,GAAO+vK,WACxCtC,cAAextB,EACf0H,gCACa,WAAThuB,GAAqBw2C,GAEzB7C,OAAQzvC,kBAAAlxE,IAAC+hH,OAAS,CAAA,MAI1B,CCvEA,MAAM4B,KAAO,KACX,MAAM3+B,EAAWqT,iBAAiBurB,UAC5Bp3L,EAAK4rK,iBAAiBxD,qBAC5B,OACE1jB,kBAAClxE,IAAA+6F,aACC,CAAAtwI,GAAG,KACHinH,UAAW6pB,WAAW,CAAEp9E,SAAU3xF,IAClCuoG,QAASiwD,KCPT6+B,OAASn5G,aAAIA,KAAC,KAClB,MAAMyT,EAAWi6E,iBAAkBz4K,GAAUA,EAAMmtJ,UAAUH,MACvDm3C,EAAazrB,iBAAiB0rB,cACpC,OACE7yC,sBAAC6pB,aAAY,CACXtwI,GAAG,OACHinH,UAAW6pB,WAAW,CAAEp9E,aACxB4W,QAAS+uF,MCZA,SAASE,OAAO74L,EAAI84L,GACjC,MAAMC,EAAKC,aAAah5L,EAAI84L,GACtBG,EAAOj5L,EAAGA,EAAGxS,OAAS,GACtB0rM,EAAQ,GACd,IAAI7rM,EAAI,EACR,IAAK,IAAI4S,EAAI,EAAGA,GAAKg5L,EAAMh5L,IAAK,CAC9B,KAAOD,EAAG3S,GAAK4S,GAAG5S,IAClB,MAAMwmB,GAAK5T,EAAID,EAAG3S,EAAI,KAAO2S,EAAG3S,GAAK2S,EAAG3S,EAAI,IACtCgkD,EAAI0nJ,EAAG1rM,EAAI,IAAM2S,EAAG3S,GAAK2S,EAAG3S,EAAI,KAAOyrM,EAAGzrM,GAAKyrM,EAAGzrM,EAAI,IACtDoZ,GAAKsyL,EAAG1rM,IAAM2S,EAAG3S,GAAK2S,EAAG3S,EAAI,KAAOyrM,EAAGzrM,GAAKyrM,EAAGzrM,EAAI,IACnD87B,GACH,EAAItV,GAAKilL,EAAGzrM,EAAI,GAAKwmB,EAAIilL,EAAGzrM,GAAKwmB,GAAK,EAAIA,IAAMw9B,GAAK,EAAIx9B,GAAKpN,EAAIoN,GACrEqlL,EAAMxnM,KAAKy3B,EACb,CACA,OAAO+vK,CACT,CAEA,SAASF,aAAah5L,EAAI84L,GACxB,MAAMC,EAAK/4L,EAAG8lC,IAAI,IAAM,GAClBvzC,EAAIyN,EAAGxS,OAAS,EAChB2rM,EAASC,YAAY7mM,EAAI,EAAGA,EAAI,GAEtC,IACE,IAAIlF,EAAI,EACRA,EAAIkF,EACJlF,IAEA8rM,EAAO9rM,GAAGA,EAAI,GAAK,GAAK2S,EAAG3S,GAAK2S,EAAG3S,EAAI,IACvC8rM,EAAO9rM,GAAGA,GAAK,GAAK,GAAK2S,EAAG3S,GAAK2S,EAAG3S,EAAI,IAAM,GAAK2S,EAAG3S,EAAI,GAAK2S,EAAG3S,KAClE8rM,EAAO9rM,GAAGA,EAAI,GAAK,GAAK2S,EAAG3S,EAAI,GAAK2S,EAAG3S,IACvC8rM,EAAO9rM,GAAGkF,EAAI,GACZ,IACEumM,EAAGzrM,GAAKyrM,EAAGzrM,EAAI,MAAQ2S,EAAG3S,GAAK2S,EAAG3S,EAAI,KAAO2S,EAAG3S,GAAK2S,EAAG3S,EAAI,MAC3DyrM,EAAGzrM,EAAI,GAAKyrM,EAAGzrM,MAAQ2S,EAAG3S,EAAI,GAAK2S,EAAG3S,KAAO2S,EAAG3S,EAAI,GAAK2S,EAAG3S,MAanE,OAVA8rM,EAAO,GAAG,GAAK,GAAKn5L,EAAG,GAAKA,EAAG,IAC/Bm5L,EAAO,GAAG,GAAK,GAAKn5L,EAAG,GAAKA,EAAG,IAC/Bm5L,EAAO,GAAG5mM,EAAI,GACX,GAAKumM,EAAG,GAAKA,EAAG,MAAS94L,EAAG,GAAKA,EAAG,KAAOA,EAAG,GAAKA,EAAG,KAEzDm5L,EAAO5mM,GAAGA,EAAI,GAAK,GAAKyN,EAAGzN,GAAKyN,EAAGzN,EAAI,IACvC4mM,EAAO5mM,GAAGA,GAAK,GAAKyN,EAAGzN,GAAKyN,EAAGzN,EAAI,IACnC4mM,EAAO5mM,GAAGA,EAAI,GACX,GAAKumM,EAAGvmM,GAAKumM,EAAGvmM,EAAI,MAASyN,EAAGzN,GAAKyN,EAAGzN,EAAI,KAAOyN,EAAGzN,GAAKyN,EAAGzN,EAAI,KAE9D8mM,MAAMF,EAAQJ,EACvB,CAEA,SAASM,MAAMF,EAAQJ,GACrB,MAAMn9K,EAAIu9K,EAAO3rM,OAEjB,IAAK,IAAIue,EAAI,EAAGA,EAAI6P,EAAG7P,IAAK,CAE1B,IAAIutL,EAAO,EACPC,EAAO/0J,OAAOg1J,kBAClB,IAAK,IAAInsM,EAAI0e,EAAG1e,EAAIuuB,EAAGvuB,IACjB8rM,EAAO9rM,GAAG0e,GAAKwtL,IACjBD,EAAOjsM,EACPksM,EAAOJ,EAAO9rM,GAAG0e,IAErB0tL,SAASN,EAAQptL,EAAGutL,GAGpB,IAAK,IAAIjsM,EAAI0e,EAAI,EAAG1e,EAAIuuB,EAAGvuB,IAAK,CAC9B,IAAK,IAAIqwB,EAAI3R,EAAI,EAAG2R,EAAI9B,EAAI,EAAG8B,IAC7By7K,EAAO9rM,GAAGqwB,GACRy7K,EAAO9rM,GAAGqwB,GAAKy7K,EAAOptL,GAAG2R,IAAMy7K,EAAO9rM,GAAG0e,GAAKotL,EAAOptL,GAAGA,IAC5DotL,EAAO9rM,GAAG0e,GAAK,CACjB,CACF,CAEA,IAAK,IAAI1e,EAAIuuB,EAAI,EAAGvuB,GAAK,EAAGA,IAAK,CAC/B,MAAMsE,EAAIwnM,EAAO9rM,GAAGuuB,GAAKu9K,EAAO9rM,GAAGA,GACnC0rM,EAAG1rM,GAAKsE,EAER,IAAK,IAAI+rB,EAAIrwB,EAAI,EAAGqwB,GAAK,EAAGA,IAC1By7K,EAAOz7K,GAAG9B,IAAMu9K,EAAOz7K,GAAGrwB,GAAKsE,EAC/BwnM,EAAOz7K,GAAGrwB,GAAK,CAEnB,CACA,OAAO0rM,CACT,CAEA,SAASK,YAAYM,EAAMC,GACzB,MAAMR,EAAS,GACf,IAAK,IAAI9rM,EAAI,EAAGA,EAAIqsM,EAAMrsM,IAAK,CAC7B8rM,EAAOznM,KAAK,IACZ,IAAK,IAAIgsB,EAAI,EAAGA,EAAIi8K,EAASj8K,IAC3By7K,EAAO9rM,GAAGqE,KAAK,EAEnB,CACA,OAAOynM,CACT,CAEA,SAASM,SAAS79K,EAAG7P,EAAG7S,GACtB,MAAM7G,EAAIupB,EAAE7P,GACZ6P,EAAE7P,GAAK6P,EAAE1iB,GACT0iB,EAAE1iB,GAAK7G,CACT,CC7FA,MAAMunM,aAAe,GACfC,YAAc,IAEpB,SAASC,UACP,MAAMr4C,EAAUwrB,iBAAiBqrB,YAG3ByB,EAAkBluB,sBADOoB,iBAAiB+sB,sBAGzCC,EAAYC,GAAiBx4G,aAAQA,SAA2B,MAEjE2pG,EAAYlqG,qBAChB,IAAM84G,GAAYryD,WAAW,OAAS,KACtC,CAACqyD,IAEGE,EAAeC,gBAAgB/O,GAiBrC,OAfAnqG,aAAAA,gBAAgB,KACd,GACe,MAAbmqG,GACc,MAAd4O,GACmB,MAAnBF,GACgB,MAAhBI,EAEA,OAEF,MAAMr/H,EAAQt2B,OAAOy1J,EAAWn/H,OAC1BC,EAASv2B,OAAOy1J,EAAWl/H,QACjCswH,EAAUC,UAAU,EAAG,EAAGxwH,EAAOC,GACjCs/H,WAAW,CAAEF,eAAc14C,UAAS4pC,YAAW0O,qBAC9C,CAAC1O,EAAW4O,EAAYE,EAAcJ,EAAiBt4C,IAGxDsE,sBACE,SAAA,CAAAzmH,GAAG,UACHk1C,IAAK0lH,EACLp/H,MAAO++H,YACP9+H,OAAQ6+H,cAGd,CAEA,SAASQ,gBAAgB/O,GACvB,MACMiP,EAAkBzuB,sBADOoB,iBAAiBstB,qBAEhD,OAAOp5G,aAAOA,QAAC,IACI,MAAbkqG,GAAwC,MAAnBiP,EAChB,KAEFjP,EAAUmP,cAAcF,EAAiB,YAC/C,CAACjP,EAAWiP,GACjB,CAEA,SAASD,YAAWF,aAClBA,EAAY14C,QACZA,EAAO4pC,UACPA,EAAS0O,gBACTA,IAOA,MAAMU,EAAc1jD,eAAe0K,EAAQC,OAAS,IAAK,EAAGk4C,aAAe,GAC3EvO,EAAU1tB,UACRo8B,EACA,EACAU,EACAV,EAAgBj/H,MAChBi/H,EAAgBh/H,QAGlB,MAAM2/H,EAAa3nD,MAAMjtG,IAAK+7G,GAASJ,EAAQI,IAE/CwpC,EAAUtD,UAAYoS,EACtB,MAGMtpL,EAAM+oL,aAAe,EAErB55L,EAAe,GACf84L,EAAe,GACrB4B,EAAWphK,QAAQ,CAACn/B,EAAO9M,KACzB,MAAMimB,GAAW,IAAMnZ,GAAS,IAEhC6F,EAAGtO,KAAS,GAAJrE,GACRyrM,EAAGpnM,KAAKqlJ,eAAezjI,EATb,EAS2BzC,MAGvC,MAAMqoL,EAAQL,OAAO74L,EAAI84L,GAEnBG,EAAOj5L,EAAGA,EAAGxS,OAAS,GAC5B,IAAImtM,EAAQ7B,EAAG,GACf,IAAK,IAAI74L,EAAI,EAAGA,GAAKg5L,EAAMh5L,IAAK,CAC9B,MAAMgjC,EAAIozG,MAAMp/I,KAAKqsC,MAAM41J,EAAMj5L,IAAK,EAAG25L,aAAe,GAClDgB,EAAO3jM,KAAKiV,IAAI+2B,EAAG03J,GACnB5/H,EAAS,EAAI9jE,KAAKmrC,IAAIu4J,EAAQ13J,GACpCooJ,EAAUrD,SAtBQ,EAsBe/nL,EAAG26L,EAAM,EAAG7/H,GAC7C4/H,EAAQ13J,CACT,CACH,orECtGA,MAAM43J,mBAAqB,KACzB,MAAMv2B,EAAoB4I,iBAAiB4tB,mBACrCz1B,EAAiB6H,iBAAiB6tB,gBAClC51B,EAAkB+H,iBAAiB8tB,iBACzC,OACEj1C,kBAAAA,IAACg8B,kBAAiB,CAChBh2J,KACA,EAAAuT,GAAG,kBACH2iJ,WAAY,IACV77B,kBAAAA,KAAAC,kBAAAA,SAAA,CAAA/nF,SAAA,CACE8nF,kBAAAA,KAACuwB,OAAM,CAACC,MAAM,OAAMt4G,SAAA,CACjB28H,QAAQp2C,QAAQ/+G,IAAKw/G,GACpBS,kBAAAlxE,IAACiiG,KAEC,CAAAltE,QAAS,IAAMu7D,EAAgB7f,GAC/BsxB,MAAOtxB,EAAO1yJ,MAFT0yJ,EAAO1yJ,OAKhBmzJ,kBAAClxE,IAAAmxE,OACDD,kBAAAlxE,IAACiiG,KAAK,CAAAltE,QAAS06D,EAAmBsS,MAAM,mBAE1C7wB,kBAAAA,IAAC+wB,KAAK,CAAAltE,QAASy7D,EAAgBuR,MAAM,YAExCt4G,SAEDynF,kBAAAA,IAAC6pB,aAAa,CAAAtwI,GAAG,eCzBT,SAAU47J,iBACtB,MAEMloG,EAFgBi6E,iBAAiB4B,oBAEJ77B,QAAQG,UACrCmiB,EAAc4X,iBAAiB4D,aAC/B3b,EAA2B+X,iBAC/BiuB,0BAEF,OACE/0C,uBAACo7B,WAAU,CAACliJ,GAAG,aACbg/B,SAAA,CAAAynF,sBAAC6pB,aAAY,CAACtwI,GAAG,kBAAkBsqE,QAASurD,IAC5CpP,sBAAC6pB,aAAY,CACXtwI,GAAG,kBACHsqE,QAAS,IAAM0rD,EAAYtiB,QAAQG,eAJNngD,EAAW,WAAa,aAQ7D,CCfA,MAAMooG,eAAiB,KACrB,MAAM5+C,EAASywB,iBAAiB/D,WAC1BzsB,EAAUwwB,iBAAiB9D,YAC3BhU,EAA2B+X,iBAC/BiuB,0BAGI5tB,EAAU,CAAC,OAAQ,SAAU,SAC7B8tB,EAAoB3jD,QAAQ,EAAG,IAAK8E,EAAQ+wB,GAC5C+tB,EAAqB5jD,SAAS,IAAK,IAAK+E,EAAS8wB,GACvD,OACEnnB,kBAAAA,YACEG,UAAU,YACVozB,cAAexkB,EACfjuH,MAAO,CAAE4zB,MAAO,OAAQC,OAAQ,QAEhCuD,SAAA,CAAAynF,kBAAAlxE,IAACqmH,eAAc,CAAA,GACfn1C,kBAAClxE,IAAAo7G,OAAO,CAAA3wJ,GAAG,mBAAmBinH,UAAW80C,IACzCt1C,kBAAAA,IAAC0lC,QAAQ,CAAAnsJ,GAAG,oBAAoBinH,UAAW+0C,QCR3CC,cAAiB15C,GAAmB,QAAQA,IAE5C25C,gBAAkB,KACtB,MAAM77C,EAAUstB,iBAAiBgO,YAC3BjK,EAAgB/D,iBAAiB4B,kBACjCtjB,EAAiB0hB,iBAAiB8d,gBAElC/3F,EAAWg+E,IAAkBh+B,QAAQG,UACrCgI,EAAQoQ,EAAevY,QAAQG,WAE/BsoD,EAAiBvuB,iBAAiBwuB,WAClC/hC,EAAauT,iBAAiByuB,YAC9BjiC,EAAawT,iBAAiB0uB,YAC9BniC,EAAayT,iBAAiB2uB,YAC9BC,EAAgB5uB,iBAAiB6uB,WACjC5mC,EAA2B+X,iBAC/BiuB,0BAGI50C,EAAY6pB,WAAW,CAC3Bp9E,WACA2sD,UACAxE,QACAllJ,QAAQ,EACR06L,WAAW,KAKN0H,EAAqB2D,GAA0Bt6G,aAAQA,UAAC,GAwB/D,OACEqkE,kBAAKlxE,IAAA,MAAA,CAAAv1C,GAAG,mBAAmBinH,UAAWA,EAASjoF,SAC7CynF,kBAAAA,IAAC2oB,YAAW,CAAChzB,SAAU1I,QAAQG,UAAS70E,SACrC68E,EACC4K,kBAAClxE,IAAAumH,mBAEDh1C,kBACEtxE,KAAA,MAAA,CAAAxW,SAAA,CAAAynF,kBAAAA,IAAA,MAAA,CACEQ,UAAU,oCACVozB,cAAexkB,EAAwB72F,SAEvCynF,kBAAAA,IAACm1C,eAAc,CAAA,KAEjBn1C,sBAACyyC,KAAI,CAAA,GACLzyC,kBAAAA,IAAC2yC,OAAS,CAAA,GACV3yC,sBAAC+zC,QAAO,CAAA,GACR/zC,sBAAC80C,mBAAqB,CAAA,GACtB90C,sBAACqyC,KAAI,CAAC94J,GAAG,SAASuiH,KAAK,SAAS2pB,SAAUiwB,IAC1C11C,kBAAAA,IAAA,MAAA,CAAKzmH,GAAG,WAAWsqE,QAAS6vD,IAC5B1T,kBAAAlxE,IAAA,MAAA,CAAKv1C,GAAG,SAASsqE,QAAS8vD,IAC1B3T,kBAAKlxE,IAAA,MAAA,CAAAv1C,GAAG,YAAYsqE,QAAS+vD,IAC7B5T,kBAAAA,IAAK,MAAA,CAAAwpB,cA3CU9+K,IACvBA,EAAE+mG,kBAIa/mG,EAAEO,OACVk/K,sBAAsBz/K,EAAE+rG,WAE/Bw/F,GAAuB,GAWvB70L,SAASyuF,iBAAiB,YAT1B,SAASqmG,EAAY3+B,GAID,IAAdA,EAAGnlE,SACL6jG,GAAuB,GACvB70L,SAAS0uF,oBAAoB,YAAaomG,GAE7C,IAyB0C39H,SAChCy0E,MAAMjtG,IAAKo2J,GACVn2C,kBAAAA,IAACqyC,KAAI,CAEH94J,GAAIi8J,cAAcW,GAClBr6C,KAAMq6C,EACN1wB,SAAWrxK,GAAU2hM,EAAcI,EAAO/hM,GAC1Ck+L,oBAAqBA,GAJhB6D,cCzFVC,eAA4B,CACvCC,wBAAyB,CAAC,YAC1BC,mBAAoB,CAClB,iCACA,8BAEFC,0BAA2B,CACzB,wCACA,qCAEFC,qBAAsB,CAAC,sBACvBC,4BAA6B,CAAC,oCAC9BC,iBAAkB,CAAC,kBACnBC,wBAAyB,CAAC,gCAC1BC,kBAAmB,CAAC,mBACpBC,yBAA0B,CAAC,iCAC3BC,iBAAkB,CAAC,kBACnBC,wBAAyB,CAAC,gCAC1BC,iBAAkB,CAAC,kBACnBC,wBAAyB,CAAC,gCAC1BC,kBAAmB,CAAC,UACpBC,yBAA0B,CAAC,wBAC3BC,uBAAwB,CAAC,gBACzBC,YAAa,CAAC,sBAAuB,sCACrCC,qBAAsB,CAAC,gCACvBC,UAAW,CAAC,oBAAqB,oCACjCC,mBAAoB,CAAC,8BACrBC,cAAe,CAAC,qBAChBC,WAAY,CAAC,+BACbC,QAAS,CAAC,YACVC,QAAS,CAAC,YACVC,QAAS,CAAC,YACVC,QAAS,CAAC,YACVC,QAAS,CAAC,YACVC,QAAS,CAAC,YACVC,QAAS,CAAC,YACVC,QAAS,CAAC,YACVC,QAAS,CAAC,YACVC,QAAS,CAAC,YACVC,iBAAkB,CAAC,qBACnBC,cAAe,CAAC,+BAChBC,WAAY,CAAC,YACbC,WAAY,CAAC,YACbC,WAAY,CAAC,YACbC,WAAY,CAAC,YACbC,WAAY,CAAC,YACbC,WAAY,CAAC,YACbC,WAAY,CAAC,YACbC,WAAY,CAAC,YACbC,WAAY,CAAC,YACbC,WAAY,CAAC,YACbC,uBAAwB,CAAC,qBACzBC,sBAAuB,CAAC,sBACxBC,uBAAwB,CAAC,qBACzBC,2BAA4B,CAAC,mBAC7BC,uBAAwB,CAAC,4BACzBC,kBAAmB,CACjB,0BACA,4BACA,2BACA,8BAEFC,yBAA0B,CAAC,sBAC3BC,mBAAoB,CAAC,uBACrBC,0BAA2B,CAAC,uBAC5BC,2BAA4B,CAC1B,oCACA,sCACA,qCACA,wCAEFC,2BAA4B,CAAC,gCAC7BC,4BAA6B,CAAC,iCAC9BC,mCAAoC,CAAC,iCACrCC,mBAAoB,CAAC,yBACrBC,oBAAqB,CAAC,0BACtBC,uBAAwB,CAAC,8BACzBC,gCAAiC,CAC/B,mEAEFC,qBAAsB,CAAC,oBACvBC,4BAA6B,CAAC,yBAC9BC,6BAA8B,CAAC,0BAC/BC,+BAAgC,CAAC,wBACjCC,0BAA2B,CAAC,0BAC5BC,+BAAgC,CAAC,gCACjCC,gCAAiC,CAAC,iCAClCC,yCAA0C,CACxC,0CAGFC,sBAAuB,CAAC,oCACxBC,iBAAkB,CAAC,+BACnBC,0BAA2B,CAAC,sCAC5BC,iBAAkB,CAAC,+BACnBC,0BAA2B,CAAC,sCAC5BC,kBAAmB,CAAC,gCACpBC,2BAA4B,CAAC,uCAE7BC,yBAA0B,CAAC,uCAC3BC,oBAAqB,CAAC,qCACtBC,6BAA8B,CAAC,4CAC/BC,cAAe,CAAC,+BAChBC,uBAAwB,CAAC,sCACzBC,yBAA0B,CAAC,0CAC3BC,kCAAmC,CACjC,iDAEFC,qBAAsB,CAAC,sCACvBC,8BAA+B,CAAC,6CAEhCC,yBAA0B,CAAC,0CAC3BC,0BAA2B,CAAC,8CAC5BC,mCAAoC,CAClC,qDAEFC,qBAAsB,CAAC,yCACvBC,8BAA+B,CAC7B,gDAEFC,oBAAqB,CAAC,wCACtBC,6BAA8B,CAAC,+CAC/BC,wBAAyB,CAAC,wCAC1BC,2BAA4B,CAC1B,yDAEFC,yBAA0B,CACxB,+DAGFC,uBAAwB,CAAC,qCACzBC,sBAAuB,CAAC,qCACxBC,+BAAgC,CAAC,4CACjCC,mBAAoB,CAAC,kCACrBC,4BAA6B,CAAC,yCAC9BC,mBAAoB,CAAC,kCACrBC,4BAA6B,CAAC,yCAE9BC,kBAAmB,CAAC,qCACpBC,kBAAmB,CAAC,iCACpBC,2BAA4B,CAAC,wCAC7BC,mBAAoB,CAAC,kCACrBC,4BAA6B,CAAC,yCAC9BC,mBAAoB,CAAC,kCACrBC,4BAA6B,CAAC,yCAE9BC,qBAAsB,CAAC,iCACvBC,aAAc,CAAC,kBACfC,sBAAuB,CAAC,4BACxBC,qBAAsB,CAAC,SACvBC,gBAAiB,CAAC,wBAGlBC,yBAA0B,CAAC,sCAC3BC,aAAc,CAAC,OACfC,uBAAwB,CAAC,qBACzBC,sBAAuB,CAAC,gBACxBC,gCAAiC,CAAC,8BAClCC,eAAgB,CAAC,SACjBC,yBAA0B,CAAC,uBAC3BC,wBAAyB,CAAC,kBAC1BC,kCAAmC,CAAC,gCACpCC,oBAAqB,CAAC,YACtBC,kBAAmB,CAAC,YACpBC,2BAA4B,CAAC,0BAC7B/xC,eAAgB,CAAC,gBACjBgyC,oBAAqB,CAAC,2BACtBC,6BAA8B,CAAC,oCAC/BC,4BAA6B,CAC3B,+CACA,4CAEFC,8BAA+B,CAC7B,iDACA,8CAEFC,6BAA8B,CAC5B,gDACA,6CAEFC,6BAA8B,CAC5B,gDACA,6CAEFC,+BAAgC,CAC9B,kDACA,+CAEFC,8BAA+B,CAC7B,iDACA,8CAEFC,0BAA2B,CAAC,kCAC5BC,0BAA2B,CACzB,0DAEFC,gBAAiB,CACf,mEAEFC,uBAAwB,CACtB,iFAEFC,sBAAuB,CACrB,yEAEFC,6BAA8B,CAC5B,uFAEFC,gCAAiC,CAAC,aAClCC,2BAA4B,CAC1B,kCACA,+BAEFC,oCAAqC,CACnC,yCACA,sCAEFC,oBAAqB,CAAC,YACtBC,8BAA+B,CAAC,0BAChCC,6BAA8B,CAAC,qBAC/BC,uCAAwC,CAAC,mCACzCC,mBAAoB,CAAC,WACrBC,6BAA8B,CAAC,yBAC/BC,4BAA6B,CAAC,oBAC9BC,sCAAuC,CAAC,kCACxCC,eAAgB,CAAC,qBACjBC,wBAAyB,CAAC,8BAC1BC,yBAA0B,CAAC,mCAC3BC,kCAAmC,CACjC,4CAEFC,qBAAsB,CAAC,oBACvBC,8BAA+B,CAAC,6BAChCC,+BAAgC,CAAC,kCACjCC,wCAAyC,CACvC,2CAEFC,eAAgB,CAAC,cACjBC,wBAAyB,CAAC,wBAC1BC,0BAA2B,CAAC,qBAC5BC,mCAAoC,CAAC,8BACrCC,oBAAqB,CAAC,wCACtBC,8BAA+B,CAC7B,sCACA,yCAEFC,qBAAsB,CAAC,0CACvBC,+BAAgC,CAC9B,gDAEFC,kBAAmB,CAAC,uCACpBC,4BAA6B,CAAC,6CAC9BC,kBAAmB,CAAC,uCACpBC,4BAA6B,CAAC,6CAC9BC,4BAA6B,CAAC,gBAC9BC,qCAAsC,CAAC,yBACvCC,mCAAoC,CAClC,mBACA,sBAEFC,mCAAoC,CAClC,mBACA,sBAEFC,mCAAoC,CAClC,mBACA,sBAEFC,mCAAoC,CAClC,mBACA,sBAEFC,mCAAoC,CAClC,mBACA,sBAEFC,sBAAuB,CAAC,qBACxBC,+BAAgC,CAAC,8BACjCC,2BAA4B,CAAC,qCAC7BC,qCAAsC,CACpC,0CAEFC,+BAAgC,CAAC,oBACjCC,0BAA2B,CACzB,qCACA,0CAEFC,+BAAgC,CAC9B,0CACA,+CAEFC,gCAAiC,CAC/B,2CACA,gDAEFC,uBAAwB,CAAC,WACzBC,kBAAmB,CACjB,sCACA,mCAEFC,2BAA4B,CAC1B,6CACA,0CAEFC,oBAAqB,CAAC,wBACtBC,aAAc,CAAC,6BACfC,iBAAkB,CAAC,iCACnBC,cAAe,CAAC,8BAChBC,kBAAmB,CAAC,kCACpBC,wBAAyB,CACvB,iCACA,mCAGFC,6BAA8B,CAAC,iCAC/BC,sBAAuB,CAAC,sCACxBC,0BAA2B,CAAC,0CAC5BC,uBAAwB,CAAC,uCACzBC,2BAA4B,CAAC,2CAC7BC,iCAAkC,CAChC,0CACA,4CAEFC,gBAAiB,CAAC,gCAClBC,iBAAkB,CAAC,iCACnBC,gBAAiB,CAAC,2BAClBC,gBAAiB,CAAC,gCAClBC,uBAAwB,CAAC,uCACzBC,iBAAkB,CAAC,iCACnBC,wBAAyB,CAAC,wCAC1BC,mBAAoB,CAAC,yCAGvB35M,OAAOgM,KAAKi/J,aAAaphI,QAASqU,IAChC,MAAMn/C,EAAMosK,mBAAmBjtH,GACzBngC,EAAOmgC,EAAU9nC,WAAW,GAClCs2L,eAAe3tM,GAAO,CAAC,cAAcgf,OAGvC2mI,QAAQ76G,QAASqU,IACfwuJ,eAAe,YAAYxuJ,KAAe,CACxC,aAAaA,EAAU1yC,iBAEzBkhM,eAAe,qBAAqBxuJ,KAAe,CACjD,kCAAkCA,EAAU1yC,mBAIzC,MAAMouM,gBAA6B,CACxCC,MAAO,CAAC,qBAGRC,OAAQ,CAAC,2BACTC,SAAU,CAAC,qBACXC,QAAS,CAAC,sCACVC,QAAS,CACP,+BACA,0BACA,iCAEFC,SAAU,CAAC,uBAAwB,sCACnCC,IAAK,CAAC,0BACNC,OAAQ,CAEN,UACA,gBACA,eACA,iCAEFC,MAAO,CAAC,8BACRC,QAAS,CAAC,oBAIVC,MAAO,CAAC,kCACRC,OAAQ,CACN,0CACA,iDAEFC,QAAS,CACP,0CACA,iDAEFxuC,OAAQ,CAAC,0BACTyuC,MAAO,CAAC,4CACRC,QAAS,CAAC,kDACVC,QAAS,CAAC,0BAEVC,SAAU,CAAC,wCACXC,SAAU,CAAC,yBACX3uC,SAAU,CAAC,2BACX4uC,OAAQ,CAAC,UAAW,gBAAiB,YACrCC,OAAQ,CAAC,uBACTC,SAAU,CAAC,iCACXC,SAAU,CAAC,iCCzYW,SAAAC,KAAItsI,SAAEA,EAAQh/B,GAAEA,IACtC,MAAM4H,EAAQi6C,aAAAA,QAAQ,KACpB,MAAM/uF,EAAI+U,SAASK,cAAc,SAKjC,OAJApV,EAAEkK,KAAO,WACC,MAANgjC,IACFltC,EAAEktC,GAAKA,GAEFltC,GACN,CAACktC,IAOJ,OALA4hD,aAAAA,gBAAgB,KACd/5E,SAAS3V,KAAKsW,YAAYo/B,GACnB,IAAMA,EAAM/L,UAClB,CAAC+L,IAEGk8C,gBAAYA,aAAC9kB,EAAUp3B,EAChC,CCfc,SAAU2jK,WAAUvsI,SAAEA,IAClC,MAAMwsI,EAAQ3pH,aAAAA,QAAQ,IACbh6E,SAASK,cAAc,OAC7B,IAOH,OALA05E,aAAAA,gBAAgB,KACd/5E,SAAS4sE,KAAKjsE,YAAYgjM,GACnB,IAAMA,EAAM3vK,UAClB,CAAC2vK,IAEG1nH,gBAAYA,aACjB2iE,sBAAK,MAAA,CAAAhrF,OAAQ,EAAGD,MAAO,EACrBwD,SAAAynF,kBAAAlxE,IAAA,OAAA,CAAAvW,SACG7uE,OAAOgM,KAAK6iE,GAAUx4B,IAAKxG,GAC1BymH,sBAAA,WAAA,CAAUzmH,GAAIA,EACXg/B,SAAAA,EAASh/B,GAAIwG,IAAI,CAACy2H,EAAQlvK,IACzB04J,iCAASwW,OAAQA,GAAalvK,KAFXiyC,QAQ7BwrK,EAEJ,uBCMe,SAASC,WAAW/1K,EAAO/jC,EAAQ0yB,EAAM,EAAGxoB,EAAI65B,EAAMxnC,QACnE,GAAI2N,EAAMlK,EACR,MAAM,IAAIP,MAAM,sBAElB,IAAK,IAAIoR,EAAQ6hB,EAAO7hB,EAAQ3G,EAAK2G,GAAS7Q,EAC5C+5M,KAAKh2K,EAAO/jC,EAAQ6Q,EAExB,CASA,SAASkpM,KAAKh2K,EAAO/jC,EAAQ6Q,GAC3B7Q,IACA,IAAI,IAAIgP,EAAI,EAAGA,EAAIhP,EAAQgP,IAAK,CAE9B,IAAIgrM,EAAUj2K,EAAMlzB,EAAQ7B,GAC5B+0B,EAAMlzB,EAAQ7B,GAAK+0B,EAAMlzB,EAAQ7Q,GACjC+jC,EAAMlzB,EAAQ7Q,GAAUg6M,EACxBh6M,GACF,CACF,CCpBO,SAASi6M,SAAO/8M,EAAQw1B,EAAM,EAAGxoB,EAAIhN,EAAOX,QAEjD,IAAIiS,EAAM,GACV,IAAI,IAAIqC,EAAQ6hB,EAAO7hB,EAAQ3G,GAAM,CAEnC,IAAIgwM,EAAgB,IAEhBC,EAAgB,IAEhBhlM,GAAU,EAEVowF,EAAWroG,EAAO2T,KACtB,GAAI00F,GAAY,GAAQA,GAAY,IAClC/2F,GAAOuM,OAAOC,aAAauqF,OACtB,CAEL,IAAIp9F,EAAQ,EACRo9F,GAAY,KAAQA,GAAY,IAClCp9F,EAAQ,EACCo9F,GAAY,KAAQA,GAAY,KACzCp9F,EAAQ,EACc,MAAlBjL,EAAO2T,KACTqpM,EAAgB,KAEI,MAAlBh9M,EAAO2T,KACTspM,EAAgB,MAET50G,GAAY,KAAQA,GAAY,KACzCp9F,EAAQ,EACc,MAAlBjL,EAAO2T,KACTqpM,EAAgB,KAEI,MAAlBh9M,EAAO2T,KACTspM,EAAgB,MAGlBhlM,GAAU,EAEZowF,IAAuB,GAAM,EAAIp9F,EAAQ,GAAM,EAC/C,IAAK,IAAI/L,EAAI,EAAGA,EAAI+L,EAAO/L,KACrBc,EAAO2T,GAASqpM,GAAiBh9M,EAAO2T,GAASspM,KACnDhlM,GAAU,GAEZowF,EAAYA,GAAY,EAAsB,GAAhBroG,EAAO2T,GACrCA,IAEEsE,EACF3G,GAAOuM,OAAOC,aAAa,OAEpBuqF,GAAY,MACnB/2F,GAAOuM,OAAOC,aAAauqF,IAE3BA,GAAY,MACZ/2F,GAAOuM,OAAOC,aACiB,OAA3BuqF,GAAY,GAAM,MACC,OAAT,KAAXA,IAEP,CACF,CACA,OAAO/2F,CACT,CAUO,SAAS4rM,OAAK5rM,EAAKtR,EAAQ2T,EAAM,GACtC,IAAK,IAAIzU,EAAI,EAAGC,EAAMmS,EAAIjS,OAAQH,EAAIC,EAAKD,IAAK,CAE9C,IAAIqkD,EAAYjyC,EAAI6rM,YAAYj+M,GAChC,GAAIqkD,EAAY,IACdvjD,EAAO2T,GAAS4vC,EAChB5vC,QACK,CAEL,IAAI1I,EAAQ,EAERnI,EAAS,EAcb,IAbIygD,GAAa,MACft4C,EAAQ,EACRnI,EAAS,KACDygD,GAAa,OACrBt4C,EAAQ,EACRnI,EAAS,KACDygD,GAAa,UACrBt4C,EAAQ,EACRnI,EAAS,IACT5D,KAEFc,EAAO2T,IAAU4vC,GAAc,EAAIt4C,GAAUnI,EAC7C6Q,IACO1I,EAAQ,GACbjL,EAAO2T,GAAS,IAAQ4vC,GAAc,GAAKt4C,EAAQ,GAAM,GACzD0I,IACA1I,GAEJ,CACF,CACA,OAAO0I,CACT,CCnHO,MAAMypM,UAOX54M,WAAAA,CAAYkpB,EAAM2vL,GAAO,EAAOn1D,GAAM,GAKpC9kJ,KAAKsqB,KAAOA,EAKZtqB,KAAKyjC,MAAQnZ,EAAO,EAAI,EAAI5kB,KAAK4/J,KAAKh7I,EAAO,GAK7CtqB,KAAKsf,IAAM5Z,KAAKw8C,IAAI,EAAG53B,GAAQ,EAK/BtqB,KAAK2a,IAAM,EAEX,IAAI06B,EAAI,GAAyB,GAAjB/qB,EAAO,EAAK,GAAUA,GAKtCtqB,KAAKk6M,cAAgBx0M,KAAKw8C,IAAI,EAAG7M,EAAI,EAAIA,EAAI,GAAK,EAKlDr1C,KAAK25M,OAAS35M,KAAKm6M,gBACfF,IACFj6M,KAAKsf,IAAM5Z,KAAKw8C,IAAI,EAAG53B,GAAQ,EAAI,EACnCtqB,KAAK2a,KAAO3a,KAAKsf,IAAM,EACvBtf,KAAK25M,OAAS35M,KAAKo6M,eAEjBt1D,IACF9kJ,KAAKq6M,UAAYr6M,KAAKs6M,eAE1B,CASAR,IAAAA,CAAKl9M,EAAQqyE,EAAK1+D,EAAM,GACtB,GAAI0+D,GAAQA,GAAOA,EAAI7tE,aAAe6xC,OACpC,MAAM,IAAIr3C,UAEZqzE,EAAMjvE,KAAKq6M,UAAUprI,GACrBryE,EAAO2T,GAA0D,KAAhD0+D,EAAM,EAAIA,EAAMvpE,KAAKw8C,IAAI,EAAGliD,KAAKsqB,MAAQ2kD,GAC1D1+D,IACA,IAAK,IAAIzU,EAAI,EAAGC,EAAMiE,KAAKyjC,MAAO3nC,EAAIC,EAAKD,IACzCc,EAAO2T,GAAwD,IAA/C7K,KAAKC,MAAMspE,EAAMvpE,KAAKw8C,IAAI,EAAc,GAATpmD,EAAI,KACnDyU,IAOF,OALIvQ,KAAKsqB,KAAO,IACd1tB,EAAO2T,GAAS7K,KAAKC,MACnBspE,EAAMvpE,KAAKw8C,IAAI,EAAuB,GAAlBliD,KAAKyjC,MAAQ,KAAYzjC,KAAKk6M,cACpD3pM,KAEKA,CACT,CASAgqM,OAAAA,CAAQ39M,EAAQ2T,EAAM,GAEpB,IAAI0+D,EAAM,EACV,IAAI,IAAIvgE,EAAI,EAAGA,EAAI1O,KAAKyjC,MAAO/0B,IAC7BugE,GAAOryE,EAAO2T,EAAQ7B,GAAKhJ,KAAKw8C,IAAI,IAAKxzC,GAE3C,OAAOugE,CACT,CAEAkrI,eAAAA,CAAgBv9M,EAAQ2T,EAAM,GAC5B,OAAOvQ,KAAKq6M,UAAUr6M,KAAKu6M,QAAQ39M,EAAQ2T,GAC7C,CAQA6pM,aAAAA,CAAcx9M,EAAQ2T,EAAM,GAC1B,OAAOvQ,KAAKq6M,UAAUr6M,KAAKw6M,MAAMx6M,KAAKu6M,QAAQ39M,EAAQ2T,IACxD,CAOA8pM,SAAAA,CAAUprI,GACR,GAAIA,EAAMjvE,KAAKsf,KAAO2vD,EAAMjvE,KAAK2a,IAC/B,MAAM,IAAI8/L,WAEZ,OAAOxrI,CACT,CAOAqrI,cAAAA,CAAerrI,GACb,OAAIA,EAAMjvE,KAAKsf,IACNtf,KAAKsf,IACH2vD,EAAMjvE,KAAK2a,IACb3a,KAAK2a,IAEPs0D,CACT,CAQAurI,KAAAA,CAAMvrI,GAIJ,OAHIA,EAAMjvE,KAAKsf,MACb2vD,GAAmB,EAAXjvE,KAAKsf,IAAW,GAEnB2vD,CACT,ECvIK,MAAMyrI,cAOXt5M,WAAAA,CAAYu5M,EAAOC,GAKjB56M,KAAK26M,MAAQA,EAKb36M,KAAK46M,MAAQA,EAKb56M,KAAKyxL,MAAQ,GAAMkpB,EAAQ,GAAM,EAKjC36M,KAAK66M,SAAWn1M,KAAK4/J,MAAMq1C,EAAQC,GAAS,GAK5C56M,KAAK86M,OAASp1M,KAAKw8C,IAAI,EAAGliD,KAAKyxL,KAAO,GAKtCzxL,KAAK+6M,WAAcJ,EAAQC,EAK3B56M,KAAKg7M,MAAQt1M,KAAKw8C,IAAI,IAAK,EAAIliD,KAAK66M,SAAW,EAAIF,GACrD,CAUAb,IAAAA,CAAKl9M,EAAQqyE,EAAK1+D,GAEhB,GAAkB,iBAAP0+D,EACT,MAAM,IAAIrzE,UAGR8J,KAAKmrC,IAAIo+B,GAAOjvE,KAAK86M,OAA4B,EAAlB96M,KAAK+6M,aACtC9rI,EAAMA,EAAM,GAAKhtB,IAAWA,KAO9B,IAAI1K,IAAU03B,GAAOA,IAAQ,EAAIA,GAAO,GAASA,EAAM,EAAV,EAAkB,EAC/DA,EAAMvpE,KAAKmrC,IAAIo+B,GAEf,IAAIgsI,EAAMv1M,KAAKiV,IAAIjV,KAAKC,MAAMD,KAAK8tC,IAAIy7B,GAAOvpE,KAAK28C,KAAM,MAErD64J,EAAWC,YAAYlsI,EAAMvpE,KAAKw8C,IAAI,EAAG+4J,GAAOv1M,KAAKw8C,IAAI,EAAGliD,KAAK46M,QAyBrE,OAvBI3rI,GAAQA,GACVisI,EAAWx1M,KAAKw8C,IAAI,EAAGliD,KAAK46M,MAAQ,GACpCK,GAAO,GAAKj7M,KAAK26M,OAAS,GAET,IAAR1rI,IACLA,GAAOvpE,KAAKw8C,IAAI,EAAG,EAAIliD,KAAKyxL,OAC1BypB,EAAWx1M,KAAKw8C,IAAI,EAAGliD,KAAK46M,QAAU,IACxCK,GAAY,EACZC,EAAW,GAGTD,EAAMj7M,KAAKyxL,MACbwpB,GAAO,GAAKj7M,KAAK26M,OAAS,EAC1BO,EAAW,IAEXD,GAAYj7M,KAAKyxL,KACjBypB,EAAWC,YAAYD,GAAYx1M,KAAKw8C,IAAI,EAAGliD,KAAK46M,UAGtDM,EAAWC,YAAYlsI,EAAMvpE,KAAKw8C,IAAI,EAAG,EAAIliD,KAAKyxL,KAAOzxL,KAAK46M,QAC9DK,EAAM,IAGHj7M,KAAKo7M,eAAex+M,EAAQ2T,EAAOgnC,EAAM0jK,EAAKC,EACvD,CAUAvB,MAAAA,CAAO/8M,EAAQ2T,GAEb,IAEI8qM,EAFAx5J,GAAQ,GAAK7hD,KAAK26M,OAAS,EAI3BW,EAAW,GACf,IAAK,IAAIx/M,EAAIkE,KAAK66M,SAAW,EAAG/+M,GAAK,EAAIA,IAAK,CAE5C,IAAIwmB,EAAI1lB,EAAOd,EAAIyU,GAAOjU,SAAS,GACnCg/M,GAAY,WAAWx5L,UAAUQ,EAAErmB,QAAUqmB,CAC/C,CAEA,IAAIi1B,EAA6B,KAAtB+jK,EAAS/mM,OAAO,IAAa,EAAI,EAC5C+mM,EAAWA,EAASx5L,UAAU,GAE9B,IAAIy5L,EAAW5sM,SAAS2sM,EAASx5L,UAAU,EAAG9hB,KAAK26M,OAAQ,GAE3D,OADAW,EAAWA,EAASx5L,UAAU9hB,KAAK26M,OAC/BY,GAAY15J,EACgB,IAA1BlzC,SAAS2sM,EAAU,GACdt5J,IAEFzK,GAAO0K,MACQ,IAAbs5J,GACTA,GAAY,EACZF,EAAc1sM,SAAS2sM,EAAU,IAEjCD,EAAc1sM,SAAS,IAAM2sM,EAAU,GAElC/jK,EAAO8jK,EAAcr7M,KAAKg7M,MAAQt1M,KAAKw8C,IAAI,EAAGq5J,EAAWv7M,KAAKyxL,MACvE,CAaA2pB,cAAAA,CAAex+M,EAAQ2T,EAAOgnC,EAAM0jK,EAAKC,GAEvC,IAAI5wL,EAAO,GAEXA,EAAKnqB,KAAKo3C,GAEV,IAAK,IAAIz7C,EAAIkE,KAAK26M,MAAO7+M,EAAI,EAAGA,GAAK,EACnCwuB,EAAKxuB,GAAMm/M,EAAM,EAAI,EAAI,EACzBA,EAAMv1M,KAAKC,MAAMs1M,EAAM,GAGzB,IAAIl/M,EAAMuuB,EAAKruB,OACf,IAAK,IAAIH,EAAIkE,KAAK46M,MAAO9+M,EAAI,EAAGA,GAAK,EACnCwuB,EAAKvuB,EAAMD,GAAMo/M,EAAW,EAAI,EAAI,EACpCA,EAAWx1M,KAAKC,MAAMu1M,EAAW,GAInC,IAAIhtM,EAAMoc,EAAK1pB,KAAK,IAEhBi6M,EAAW76M,KAAK66M,SAAWtqM,EAAQ,EAEnCiK,EAAIjK,EACR,KAAOsqM,GAAYtqM,GACjB3T,EAAOi+M,GAAYlsM,SAAST,EAAI4T,UAAU,EAAG,GAAI,GACjD5T,EAAMA,EAAI4T,UAAU,GACpB+4L,IACArgM,IAEF,OAAOA,CACT,EASF,SAAS2gM,YAAYn6M,GAEnB,IAAIwoB,EAAI9jB,KAAKC,MAAM3E,GACfwpB,EAAIxpB,EAAIwoB,EACZ,OAAIgB,EAAI,GACChB,EAELgB,EAAI,IAGDhB,EAAI,EAFFA,EAAI,EAEUA,CACzB,CCtMO,SAASgyL,aAAa5+M,EAAQ2T,EAAM,EAAG3G,EAAIhN,EAAOX,QACvD,OAAOw/M,SAAW7+M,EAAQ2T,EAAO3G,EACnC,CAOO,SAAS8xM,WAAWxtM,GAEzB,IAAItR,EAAS,GAEb,OADA++M,OAASztM,EAAKtR,EAAQ,GACfA,CACT,CASO,SAASg/M,aAAa1tM,EAAKtR,EAAQ2T,EAAM,GAC9C,OAAOorM,OAASztM,EAAKtR,EAAQ2T,EAC/B,CAmBO,SAASsrM,YAAYpiM,EAAQqiM,EAASl/M,EAAQ2T,EAAM,EAAGu0I,GAAM,GAGlE,IAAIi3D,EAASC,YAFbF,EAAUA,GAAW,IAEWxxL,KAAMwxL,EAAQG,GAAIH,EAAQ7B,OAAQn1D,GAE9DplJ,EAASgG,KAAK4/J,KAAKw2C,EAAQxxL,KAAO,GAElCxuB,EAAI,EAEJs2B,EAAQ7hB,EACZ,IACE,IAAK,IAAI2rM,EAAYziM,EAAOxd,OAAQH,EAAIogN,EAAWpgN,IACjDyU,EAAQwrM,EAAOjC,KAAKl9M,EAAQ6c,EAAO3d,GAAIyU,GAErCurM,EAAQK,IACV3C,WAAW58M,EAAQ8C,EAAQ0yB,EAAO7hB,EAErC,CAAC,MAAOrR,GACPk9M,iBAAiBl9M,EAAGua,EAAO3d,GAAIA,EACjC,CACA,OAAOyU,CACT,CAqBO,SAAS8rM,cACZz/M,EAAQk/M,EAAS3nM,EAAQie,EAAM,EAAGxoB,EAAIhN,EAAOX,OAC7CqgN,GAAK,EAAOx3D,GAAM,GAGpB,IAAIi3D,EAASC,YAFbF,EAAUA,GAAW,IAEWxxL,KAAMwxL,EAAQG,GAAIH,EAAQ7B,OAAQn1D,GAE9DplJ,EAASgG,KAAK4/J,KAAKw2C,EAAQxxL,KAAO,GAItC1gB,EAAM2yM,cAAc3/M,EAAQw1B,EAAOxoB,EAAKlK,EAAQ48M,GAEhD,IAAI/rM,EAAQ,EACR4b,EAAIiG,EACR,IAIE,IAHI0pL,EAAQK,IACV3C,WAAW58M,EAAQ8C,EAAQ0yB,EAAOxoB,GAE7BuiB,EAAIviB,EAAKuiB,GAAKzsB,EAAQ6Q,IAC3B4D,EAAO5D,GAASwrM,EAAOpC,OAAO/8M,EAAQuvB,GAEpC2vL,EAAQK,IACV3C,WAAW58M,EAAQ8C,EAAQ0yB,EAAOxoB,EAErC,CAAC,MAAO1K,GACPk9M,iBAAiBl9M,EAAGtC,EAAOiH,MAAMsoB,EAAGA,EAAIzsB,GAASysB,EACnD,CACF,CAiBO,SAASqwL,OAAO5zM,EAAOkzM,EAASl/M,EAAQ2T,EAAM,EAAGu0I,GAAM,GAC5D,OAAO+2D,YAAY,CAACjzM,GAAQkzM,EAASl/M,EAAQ2T,EAAOu0I,EACtD,CAeO,SAASg1D,KAAKlxM,EAAOkzM,EAASh3D,GAAM,GAEzC,IAAI3wI,EAAS,GAEb,OADAqoM,OAAO5zM,EAAOkzM,EAAS3nM,EAAQ,EAAG2wI,GAC3B3wI,CACT,CAeO,SAASsoM,UAAUhjM,EAAQqiM,EAASh3D,GAAM,GAE/C,IAAI3wI,EAAS,GAEb,OADA0nM,YAAYpiM,EAAQqiM,EAAS3nM,EAAQ,EAAG2wI,GACjC3wI,CACT,CAoBO,SAASuoM,YACZ9/M,EAAQk/M,EAAS1pL,EAAM,EAAGxoB,EAAIhN,EAAOX,OAAQqgN,GAAK,EAAOx3D,GAAM,GAEjE,IAAI3wI,EAAS,GAEb,OADAkoM,cAAcz/M,EAAQk/M,EAAS3nM,EAAQie,EAAOxoB,EAAK0yM,EAAMx3D,GAClD3wI,CACT,CAgBO,SAASwlM,OAAO/8M,EAAQk/M,EAASvrM,EAAM,EAAGu0I,GAAM,GACrD,OAAO43D,YACL9/M,EAAQk/M,EAASvrM,EAAOA,EAAQ7K,KAAK4/J,KAAKw2C,EAAQxxL,KAAO,IACzD,EAAMw6H,GAAO,EACjB,CAUA,SAASs3D,iBAAiB36M,EAAKmH,EAAO2H,GAGpC,MAFA9O,EAAI2yC,QAAU3yC,EAAIL,YAAYC,KAC5B,aAAekP,EAAQ,KAAO3H,EAC1BnH,CACR,CAaA,SAAS86M,cAAc3/M,EAAQw1B,EAAOxoB,EAAKlK,EAAQ48M,GAEjD,IAAI5xL,GAAS9gB,EAAMwoB,GAAS1yB,EAC5B,GAAI48M,IAAS5xL,GAAS9tB,EAAOX,OAASyD,GACpC,MAAM,IAAIP,MAAM,qBAElB,OAAOyK,EAAM8gB,CACf,CAWA,SAASsxL,WAAW1xL,EAAM2xL,EAAIhC,EAAQn1D,GAMpC,OALIm3D,EACFU,kBAAkBryL,GAElBsyL,gBAAgBtyL,GAEd2xL,GAAe,KAAT3xL,EACD,IAAIowL,cAAc,EAAG,IACnBuB,GAAc,IAAR3xL,EACR,IAAIowL,cAAc,EAAG,IACpBuB,GAAc,IAAR3xL,EACP,IAAIowL,cAAc,GAAI,IAExB,IAAIV,UAAU1vL,EAAM2vL,EAAQn1D,EACrC,CAOA,MAAM+3D,SAAW,mBAQjB,SAASF,kBAAkBryL,GACzB,IAAKA,GAAiB,KAATA,GAAwB,KAATA,GAAwB,KAATA,EACzC,MAAM,IAAInrB,MAAM09M,SAAW,kBAAoBvyL,EAEnD,CAQA,SAASsyL,gBAAgBtyL,GACvB,IAAKA,GAAQA,EAAO,GAAKA,EAAO,GAC9B,MAAM,IAAInrB,MAAM09M,SAAW,gBAAkBvyL,EAEjD,8PC5TO,MAAMwyL,SAEX17M,WAAAA,GAMEpB,KAAK4wE,UAAY,GAKjB5wE,KAAKq4B,UAAY,EAKjBr4B,KAAKozC,OAAS,GAWdpzC,KAAKsjC,UAAY,KAKjBtjC,KAAKC,KAAO,EAOZD,KAAK+8M,OAAS,CAAEzyL,KAAM,GAAI6xL,IAAI,EAAOlC,QAAQ,EAAOgC,IAAI,GAOxDj8M,KAAKg9M,qBAAuB,CAAC,OAAQ,OACvC,CAOAC,YAAAA,CAAargN,GAGT,GAFAoD,KAAKC,KAAO,EACZD,KAAK4wE,UAAY5wE,KAAKyqC,WAAW7tC,EAAQ,IACkB,IAAvDoD,KAAKg9M,qBAAqB3hN,QAAQ2E,KAAK4wE,WACzC,MAAMzxE,MAAM,2BAEda,KAAK+8M,OAAOZ,GAAwB,SAAnBn8M,KAAK4wE,UACtB5wE,KAAKq4B,UAAYr4B,KAAKk9M,WAAWtgN,GACjCoD,KAAKozC,OAASpzC,KAAKyqC,WAAW7tC,EAAQ,GAEtCoD,KAAKsjC,UAAY,CACb65K,QAASn9M,KAAK4wE,UACdv4C,UAAWr4B,KAAKq4B,UAChB+a,OAAQpzC,KAAKozC,OACbgqK,UAAWp9M,KAAKq9M,mBAAmBzgN,GACnC0gN,UAAW,CAAClrL,MAAO,EAAGxoB,IAAK5J,KAAKq4B,WAExC,CAUAklL,SAAAA,CAAUJ,EAAS77G,GAAS,GAE1B,IAAIv7E,EAAS/lB,KAAKsjC,UAAU85K,UAExB31M,EAAQ,GACZ,IAAK,IAAI3L,EAAE,EAAGA,EAAEiqB,EAAO9pB,OAAQH,IAC7B,GAAIiqB,EAAOjqB,GAAGqhN,SAAWA,EAAS,CAChC,IAAI77G,EAGF,OAAOv7E,EAAOjqB,GAFd2L,EAAMtH,KAAK4lB,EAAOjqB,GAItB,CAEF,MAAe,QAAXqhN,GACK11M,EAAMxL,OAASwL,EAEjB,IACT,CASAgjC,UAAAA,CAAWhH,EAAO+5K,GAEhB,IAAItvM,EAAM,GAGV,OAFAA,EAAMstM,aAAa/3K,EAAOzjC,KAAKC,KAAMD,KAAKC,KAAOu9M,GACjDx9M,KAAKC,MAAQu9M,EACNtvM,CACT,CAQAgvM,UAAAA,CAAWz5K,GAET,IAAI76B,EAAQ+wM,OAAOl2K,EAAOzjC,KAAK+8M,OAAQ/8M,KAAKC,MAE5C,OADAD,KAAKC,MAAQ,EACN2I,CACT,CAQAy0M,kBAAAA,CAAmBzgN,GAEf,IAAImpB,EAAS,GAETjqB,EAAIkE,KAAKC,KACb,KAAMnE,GAAKc,EAAOX,OAAS,GACvB8pB,EAAO5lB,KAAKH,KAAKy9M,kBAAkB7gN,EAAQd,IAC3CA,GAAK,EAAIiqB,EAAOA,EAAO9pB,OAAS,GAAGo8B,UACnCv8B,EAAIA,EAAI,EAAIA,EAAI,EAAIA,EAExB,OAAOiqB,CACX,CASA03L,iBAAAA,CAAkB7gN,EAAQ2T,GAEtB,IAAI9I,EAAQ,CACR01M,QAASn9M,KAAK09M,YAAY9gN,EAAQ2T,GAClC8nB,UAAWr4B,KAAK29M,cAAc/gN,EAAQ2T,IAE1C,GAAqB,QAAjB9I,EAAM01M,QACN11M,EAAM2rC,OAASooK,aAAa5+M,EAAQ2T,EAAQ,EAAGA,EAAQ,IACvDvQ,KAAKC,MAAQ,EACbwH,EAAM21M,UAAYp9M,KAAKq9M,mBAAmBzgN,OACvC,CAEH,IAAIghN,EAAgBn2M,EAAM4wB,UAAY,EAClC5wB,EAAM4wB,UAAY,EAAI5wB,EAAM4wB,UAChCr4B,KAAKC,KAAOsQ,EAAQ,EAAIqtM,EACxBn2M,EAAM61M,UAAY,CACdlrL,MAAO7hB,EAAQ,EACf3G,IAAK5J,KAAKC,KAElB,CACA,OAAOwH,CACX,CASAi2M,WAAAA,CAAY9gN,EAAQ2T,GAEhB,OADAvQ,KAAKC,MAAQ,EACNu7M,aAAa5+M,EAAQ2T,EAAOA,EAAQ,EAC/C,CASAotM,aAAAA,CAAc/gN,EAAQ2T,GAElB,OADAvQ,KAAKC,MAAQ,EACN05M,OAAO/8M,EAAQoD,KAAK+8M,OAAQxsM,EAAQ,EAC/C,uJC9MFrS,OAAAoK,eAA0B43E,OAAA,aAAA,CAAAt3E,OAAA,IACRs3E,OAAA29H,gBAEdC,IAAAA,YAAAnhN,WAEJohN,YAAOx+M,WACPy+M,MAAA,CAAA1zL,KAAA,GAAA6xL,IAAA,EAAAlC,QAAA,EAAAgC,IAAA,YACI4B,SAAUphN,OAGVu9E,EAAA,IAAA8jI,YAAAhB,SAEJ9iI,EAAAijI,aAAAxgN,GACA,IAAA6mC,IAAuBA,aAClB,SAAAA,EAAA8P,OACD,MAAA,UAAa,0CAAsC9P,EAAA8P,OAAA,gBAIrC+pK,EAAAjjJ,GAClB,IAAAzyD,EAAOuyE,EAAAujI,UAAAJ,GACC11M,OAAa,MAAbA,EAAa,KAAAyyD,EAAAzyD,SAEbw2M,EAAY,OAAA,SAAAhwM,GACZiwM,IAAAA,EAAAH,YAAarB,YAAAjgN,EAAAuhN,MAAA/vM,EAAAqvM,UAAAlrL,MAAAnkB,EAAAqvM,UAAA1zM,KACb,MAAA,CACIu0M,OAAAD,EAAU,GACtBE,QAAAF,EAAqB,GACDG,OAAAH,EAAA,GACpBI,OAAAJ,EAAoB,GACpBK,QAAAL,EAAA,GACoBM,UAAAN,EAAA,GAEpBO,QAAwBP,EAAA,GACxBQ,UAAAR,EAAA,GACaS,aAAAT,EAAA,MAIZ,GAAA,MAAAn3J,EACe,MAAA,IAAA5nD,MAAA,y3CClEhB,EAEAjB,OAAAoK,eAAAghB,KAAwC,aAAA,CAAA1gB,OAAA,IACxC,IAAYg2M,wBAAAt1L,KAAAu1L,2BAAA,EACZ/1C,SAAAnsK,OACAmiN,eAAA,IAAA,kCASE7nE,EAAA8nE,OACFC,EAAOC,QAAAF,GACsBn2G,EAAA,cAAAo+C,sDACzBg4D,EAAAE,OAAA3qK,aAAA4qK,GAEJ,IAAAliJ,EAAAkiJ,EAAAliJ,IAEA,OAFAkiJ,EAAAC,SACA7qK,aAAA06B,GAAA,OAAAA,EAAA,GAAA,GAAAruE,KAAA,wBACAq8D,EAAA,YACA,8HA2BSgiJ,QAAOxzC,GAEZ,IAAI0zC,EACJH,EAAQl2C,SAAA+0C,SAAiBpyC,GACzB4zC,EAAwB,QAAZF,EAAYH,EAAAK,YAAA,IAAAF,EAAAA,EAAAH,EAAArwD,OAAAp6G,IAAA,WAAA,OAAAyqK,EAAAj4J,SAAA23J,SAAA,GAFch9I,EAGlCjlB,IAAA4iK,GAEAH,EAAAF,EAAUrwD,OAAAp6G,aAAA83H,GAAA,MAAA,CACbpvG,IAAEi1F,oBAAIma,GACP+yC,SAAI,GACJ,GACJh0D,EAAY,EASH,OARTi0D,EAAAt3K,QAAAsN,SAAAA,EAAAv5C,GAEA,IAAOwjN,EAAAN,EAAAO,IAAAP,EAAAO,IAAAzjN,GAAAA,EACPojN,EAAAI,GAAAF,SAAAj/M,KAAAirJ,EAAA1pF,EAAA,KAEA0pF,GAAA/1G,IAGS,CAAAqsB,SAAAA,EAAAo9I,eAAAI,OAAAA,EAET,CAvB6BN,wBAAAt1L,KAAAu1L,sBAAAA,sBAyB7B,IAAA/iN,EAAA,EAEAkrJ,oBAAC,OAAAlrJ,GAAA,WACQipJ,oBAAIzkI,GACT,OAAA5b,OAAAsgJ,KAAAvqI,OAAAC,aAAAte,MAA2Cqe,OAAW+kM,SAAAl/L,IAC1D,6JCzEA,MAAMm/L,WAAa,UAEbC,oBAAiD,CACrDpiD,OAAQ,qBACRqiD,YAAa,0BACbvvD,UAAW,0BACXwvD,YAAa,gCAGTC,wBAAqD,CACzDviD,OAAQ,2BACRqiD,YAAa,qBACbvvD,UAAW,gCACXwvD,YAAa,2BAGTE,YAAepxD,GAA2Bp2G,QAAQo2G,EAAWq+C,YAE7DgT,UAAuC,CAC3ClV,wBAAyB,yBACzBC,mBAAoB,oBACpBC,0BAA2B,6BAC3BoI,0BAA2B,sCAI7B,SAAS6M,wBAAwB/oE,GAC/B,MAAO,GAKLA,EAAS1gG,WAAW,wBAA0B,GAAKkpK,cACjDxoE,GACN,CAEA,MAAMgpE,YAAcvwD,iBAClBwwD,cACAC,eACAC,oBACAC,cACA,CAAC3xD,EAAYG,EAAaM,EAAqBJ,KAC7C,IAAKL,IAAeG,EAClB,OAAO,KAET,MAAMyxD,EAAW,GACjBpiN,OAAOgM,KAAK0gM,gBAAgB7iK,QAASw4K,IACnC,MAAMC,EACJ9xD,EAAW6xD,IAAc7xD,EAAWqxD,UAAUQ,IAC5CC,GACF5V,eAAe2V,GAAWx4K,QAAS04K,IACjC,MAAMxpE,EAAWwpE,EACjBH,EAASngN,KACP,GAAGs/M,cAAcxoE,4BAAmCupE,WAMjC,MAAvBrxD,GACFvM,QAAQ76G,QAASymI,IACf,MAAMjlG,EAAQ4lF,EAAoB,YAAYqf,KACxCkyC,EACJvxD,EAAoB,qBAAqBqf,KAC3C8xC,EAASngN,KACP,GAAGs/M,wBAAwBjxC,EAAO9kK,yBAAyB6/D,SAE7D+2I,EAASngN,KACP,GAAGs/M,kCAAkCjxC,EAAO9kK,yBAAyBg3M,WAK3ExiN,OAAOomJ,QAAQwzD,iBAAiB/vK,QAAQ,EAAEomI,EAAYwyC,MACpD,MAAMhrH,EAASk5D,EAAYsf,GAC3B,GAAc,MAAVx4E,EACF,OAEF,MAAMirH,EAAcD,EACjBpsK,IAAIyrK,yBACJzrK,IAAK0iG,IACJ,OAAQthD,EAAO5qF,MACb,IAAK,MACH,MAAO,GAAGksI,kBAAyBthD,EAAO14B,cAC5C,IAAK,MACH,IACE,OAAO4hJ,wBAAsB5nE,EAAUthD,EAAOo3E,QAC/C,CAAC,MAAO7tK,GAEP,OADA21C,QAAQv7B,MAAMpa,GACP,IACR,KAINmqC,OAAOiP,SACVgoK,EAASngN,QAAQygN,KAGfd,YAAYpxD,IAGd4xD,EAASngN,KACP,GAAGs/M,mGAIP,IAAK,MAAOoB,EAAYC,KAAa5iN,OAAOomJ,QAAQyK,GAClD,GAAI+xD,EAAU,CACZ,MAAMl0C,EAAUizC,wBAAwBgB,GAClC9yK,EAAK2xK,oBAAoBmB,GAC/BP,EAASngN,KAAK,GAAGs/M,cAAc7yC,uBAA6B7+H,QAC7D,CAGH,OAAOuyK,EAAS1/M,KAAK,QAInBmgN,aAAerxD,iBAAe2wD,cAA0BtxD,IAC5D,MAAMiyD,EAAwC,CAAA,EAC9C,IAAK,MAAOH,EAAYC,KAAa5iN,OAAOomJ,QAAQyK,GAClD,GAAI+xD,EAAU,CAEZE,EADWtB,oBAAoBmB,IACfC,CACjB,CAEH,OAAOE,IAGK,SAAUC,OACtB,MAAMX,EAAW5kC,iBAAiBukC,aAC5Be,EAAYtlC,iBAAiBqlC,cACnC,OAAgB,MAAZT,EACK,KAGPzrD,kBACEtxE,KAAAuxE,kBAAAzxE,SAAA,CAAAtW,SAAA,CAAAynF,kBAAAA,IAAC6kD,IAAI,CAAAtrK,GAAG,cAAag/B,SAAEuzI,IACvB9rD,kBAAAA,IAAC8kD,UAAS,CAAAvsI,SAAEi0I,MAGlB,2mrNCnHwB,SAAAE,KAAIluH,MAAEA,EAAKg3F,YAAEA,IACnC,MAAMx7B,EAASktB,iBAAiBylC,WAC1BC,EAAiB1lC,iBAAiByO,eAClC76B,EAASosB,iBAAiB+J,WAE1BlgB,EAA2BoW,iBAC/B0lC,0BAEIr9C,EAAmB2X,iBAAiB4B,mBAEnC+jC,GAAcnxH,aAAAA,SAAS,KAC5B,MAAMrtF,EAAO8S,SAASK,cAAc,OAIpC,OAHAnT,EAAKirC,GAAK,SAEVjrC,EAAKy+M,KAAO,cACLz+M,IAGT6sF,aAAAA,gBAAgB,KACd2xH,EAAW3rK,MAAM25G,OAAS70I,OAAO60I,IAChC,CAACgyD,EAAYhyD,IAEhB3/D,aAAAA,gBAAgB,KACd/5E,SAAS4sE,KAAKjsE,YAAY+qM,GACnB,KACL1rM,SAAS4sE,KAAKnsE,YAAYirM,KAE3B,CAACA,IAEJlyH,aAAAA,UAAU,KACR,MAAMoyH,EAAqB,KACP,MAAdF,IAWJA,EAAW3rK,MAAMouC,MAAQ,IACzBu9H,EAAW3rK,MAAM8xG,OAAS,IAC1B65D,EAAW3rK,MAAM/qB,SAAW,SAC5B26I,EAAyBY,mBACzBm7C,EAAW3rK,MAAMouC,MAAQ,OACzBu9H,EAAW3rK,MAAM8xG,OAAS,OAC1B65D,EAAW3rK,MAAM/qB,SAAW,YAO9B,OAJA42L,IAEA98M,OAAO2/F,iBAAiB,SAAUm9G,GAE3B,KACL98M,OAAO4/F,oBAAoB,SAAUk9G,KAEtC,CAACj8C,EAA0B+7C,IAE9B,MAAMG,EAAgB5yH,aAAAA,YAAY,IACzBy7D,UAAgB82D,EAAgB,CAAC53L,EAAGukB,KACzC,IAAKvkB,EAAEmgI,KACL,OAAO,KAET,OAAQ57G,GACN,KAAK0zG,QAAQC,KACX,OACE8S,kBAAClxE,IAAAy7G,WACC,CAAAhf,SAAU/sF,EAAM0uH,cAChB13B,YAAaA,IAGnB,KAAKvoC,QAAQG,UACX,OAAO4S,kBAAAlxE,IAAC2mH,gBAAe,CAAA,GACzB,KAAKxoD,QAAQE,SACX,OAAO6S,kBAAAA,IAAC4tC,eAAc,CAACriB,SAAU/sF,EAAM0uH,gBACzC,KAAKjgE,QAAQI,SACX,OAAO2S,kBAAAA,IAACmtD,SAAc,CAAC5hC,SAAU/sF,EAAM0uH,gBACzC,QACE,MAAM,IAAIviN,MAAM,sCAAsC4uC,QAG3D,CAACilD,EAAOg3F,EAAao3B,IAQxB,OAAI5yD,EACK,KAGF96D,WAAS7B,aACdgjE,kBAAAA,KAACpoE,aAAUA,WACT,CAAA1f,SAAA,CAAAynF,kBAAAA,IAAC6kD,IAAG,CAAAtsI,SAAE60I,WACN/sD,kBAAAA,KAAK,MAAA,CAAA63B,OAbWxtL,IACbA,EAAE0mG,cAAc+K,SAASzxG,EAAE8oG,gBAC9Bg8D,EAAiB,OAYfj3F,SAAA,CAAAynF,kBAAAA,IAACysD,KAAO,IACRzsD,kBAAClxE,IAAAu+H,kBACC,CAAAl8B,eAAgB,IAAMnxB,sBAACu1B,gBAAe,CAACC,YAAaA,IAAej9G,SAEnEynF,kBAAAA,IAACi4B,eAAcllC,QAASk6D,cAI9BH,EAEJ,CC5HA,MAAMQ,wBAA0B,IAAInlH,IAAI,CAAC,QAAS,WAAY,WAExD,SAAUolH,YAAYt+F,GAC1B,IAAIu+F,EAAqB,EACzB,MAAMrpC,EAAU,CACd,GACA,GACA,GACA,GACA,GACA,GACA,GACA,IAGI96J,EAAY3e,IAChB,KACEA,EAAEO,kBAAkB44I,SACpBypE,wBAAwBr/G,IAAIvjG,EAAEO,OAAOioE,QAAQh+D,gBAF/C,CAMA,GAAIxK,EAAEsoG,QACJ,OAAQtoG,EAAE8lG,SACR,KAAK,GACHye,EAASkgD,wBACTzkK,EAAE8mG,iBACF,MACF,KAAK,GACH,MACF,KAAK,GACHyd,EAAS2sD,eACT,MACF,KAAK,GACH3sD,EAAS,CAAE14G,KAAMkzI,wBAGhB,GAAI/+I,EAAEwoG,OACX,OAAQxoG,EAAE8lG,SACR,KAAK,GACHye,EAASygD,aAAa,SACtB,MACF,KAAK,GACHzgD,EAASygD,aAAa,aACtB,MACF,KAAK,GACHzgD,EAASygD,aAAa,mBAI1B,OAAQhlK,EAAE8lG,SACR,KAAK,GAyDL,KAAK,IACHye,EAAS2jD,aAAa,IACtB,MAxDF,KAAK,GAyDL,KAAK,IACH3jD,EAAS6jD,aAAa,IACtB,MAxDF,KAAK,GAyDL,KAAK,IACH7jD,EAASyjD,YAAY,IACrB,MAxDF,KAAK,GAiCL,KAAK,GACHzjD,EAAS6jD,cAAc,IACvB,MAhCF,KAAK,GA0CL,KAAK,IACH7jD,EAASljH,QACT,MAzCF,KAAK,GACHkjH,EAASxzG,SACT,MACF,KAAK,GAkBL,KAAK,GACHwzG,EAASkjD,uBACT,MAjBF,KAAK,GACHljD,EAASikD,gBACT,MACF,KAAK,GACHjkD,EAASkkD,iBACT,MACF,KAAK,GACHlkD,EAASmjD,QACT,MACF,KAAK,GAqBL,KAAK,IACHnjD,EAASijD,QACT,MApBF,KAAK,GAeL,KAAK,IACHjjD,EAAS9lG,YACT,MAXF,KAAK,GACH8lG,EAASojD,OAAO,KAChB,MAIF,KAAK,GACHpjD,EAASojD,MAAM,KA0BH,KAAd3nK,EAAE8lG,UACJg9G,EAAa9iN,EAAE8lG,UAAY2zE,EAAQqpC,GAAcA,EAAa,EAAI,EAC9DA,IAAerpC,EAAQ18K,QACzBwnH,EAAS,CAAE14G,KAAM+yI,oBAzGpB,GA+GH,OAFAloI,SAASyuF,iBAAiB,UAAWxmF,GAE9B,KACLjI,SAAS0uF,oBAAoB,UAAWzmF,GAE5C,CC7Jc,MAAOokM,QACnBvkM,WAEA,WAAAtc,GACEpB,KAAK0d,WAAa,EACnB,CAED,EAAA5N,CAAGI,EAAe9M,GAChB,MAAM8+M,EAAiBliN,KAAK0d,WAAWxN,IAAU,GACjDgyM,EAAe/hN,KAAKiD,GACpBpD,KAAK0d,WAAWxN,GAASgyM,EAIzB,MAHoB,KAClBliN,KAAK0d,WAAWxN,GAASgyM,EAAe74K,OAAQxnC,GAAOA,IAAOuB,GAGjE,CAED,OAAAu1K,CAAQzoK,KAAkBrU,GACxB,MAAMqiH,EAAYl+G,KAAK0d,WAAWxN,GAC9BguG,GACFA,EAAUn2E,QAASlmC,GAAOA,KAAMhG,GAEnC,CAED,OAAA83L,GACE3zL,KAAK0d,WAAa,EACnB,ECvBY,SAASykM,kBAAkBp5H,EAAS/jF,EAAU,CAAEkmJ,QAAS,IACtE,IAAIA,EAAU,EAQd,MAAMk3D,EAAUr5H,EAAQs5H,aACxBD,EAAQxtI,aAAe,EACvBwtI,EAAQE,iBAAmB,WAC3BF,EAAQG,sBAAwB,WAEhC,MAAMC,EAAWz5H,EAAQ05H,sBAAsB,GAGzCC,EAAW35H,EAAQs5H,aACnBM,EAAY55H,EAAQs5H,aAEpBO,EAAS75H,EAAQ85H,oBAAoB,GAW3C,SAAS94M,EAAI+4M,GACX,MAAMl6M,EAAQqqC,OAAO6vK,GACrBJ,EAASK,KAAKn6M,MAAQA,EAAQ,EAAI,EAAIA,EAAQ,EAC9C+5M,EAAUI,KAAKn6M,MAAQA,EAAQ,EAAI,EAAI,EAAIA,EAC3CsiJ,EAAUtiJ,CACZ,CAdAw5M,EAAQY,QAAQR,GAEhBA,EAASQ,QAAQN,EAAU,GAC3BF,EAASQ,QAAQL,EAAW,GAE5BD,EAASM,QAAQJ,EAAQ,EAAG,GAC5BD,EAAUK,QAAQJ,EAAQ,EAAG,GAiB7B,MAAMK,EAAa,CAAA,EAgCnB,OA/BA/kN,OAAOglN,iBAAiBD,EAAY,CAClCr6M,MAAO,CAAEL,IATX,WACE,OAAO2iJ,CACT,EAOgBnhJ,MAAKJ,YAAY,EAAMiqC,cAAc,KAKrD11C,OAAOglN,iBAAiBd,EAAS,CAC/Bl3D,QAAS,CACPtiJ,MAAOq6M,EACPt5M,YAAY,EACZ1C,UAAU,EACV2sC,cAAc,GAEhBovK,QAAS,CACPp6M,MAAOu6M,UAAUhlN,UAAU6kN,QAAQlyM,KAAK8xM,GACxCj5M,YAAY,EACZ1C,UAAU,EACV2sC,cAAc,GAEhBmqI,WAAY,CACVn1K,MAAOu6M,UAAUhlN,UAAU4/K,WAAWjtK,KAAK8xM,GAC3Cj5M,YAAY,EACZ1C,UAAU,EACV2sC,cAAc,KAIds3G,IAAYlmJ,EAAQkmJ,SACtBnhJ,EAAI/E,EAAQkmJ,SAGPk3D,CACT,CC5Ec,MAAOgB,cACnBC,SACA51H,SACA61H,QACAC,aACAC,OACAC,SACAj4H,QAEA,EAAA17E,CAAG06H,EAAmB3oI,GACpB,OAAO7B,KAAKqjN,SAASvzM,GAAG06H,EAAW3oI,EACpC,CAED,WAAAT,CAAY2nF,EAAuB26H,GACjC1jN,KAAKqjN,SAAW,IAAIpB,QACpBjiN,KAAKytF,SAAW1E,EAChB/oF,KAAKujN,aAAeG,EACpB1jN,KAAKwjN,OAAS5tM,SAASK,cAAc,SACrCjW,KAAKwjN,OAAOpxH,YAAc,YAC1BpyF,KAAKyjN,UAAW,EAChBzjN,KAAKwrF,QAAU83D,aAAaE,QAG5BxjJ,KAAKwjN,OAAOn/G,iBAAiB,UAAW,KACtCrkG,KAAK2jN,aAAY,KAInB3jN,KAAKwjN,OAAOn/G,iBAAiB,iBAAkB,KAC7CrkG,KAAKqjN,SAAS1qC,QAAQ,UACtB34K,KAAK2jN,aAAY,KAInB3jN,KAAKwjN,OAAOn/G,iBAAiB,QAAS,KACpCrkG,KAAKqjN,SAAS1qC,QAAQ,SACtB34K,KAAK4jN,WAAWtgE,aAAaE,WAK/BxjJ,KAAKwjN,OAAOn/G,iBAAiB,aAAc,KACzCrkG,KAAKqjN,SAAS1qC,QAAQ,oBAIxB34K,KAAKwjN,OAAOn/G,iBAAiB,QAAUnlG,IACrC,OAAQc,KAAKwjN,OAAOlqM,MAAO2C,MACzB,KAAK,EAEH44B,QAAQv7B,MAAM,oBAAqBpa,GACnC,MACF,KAAK,EACH21C,QAAQv7B,MAAM,oBAAqBpa,GAEnC,MACF,KAAK,EAMH21C,QAAQv7B,MAAM,wBAAyBpa,GACvC,MACF,KAAK,EACH21C,QAAQv7B,MAAM,8BAA+Bpa,GAOjDc,KAAKqjN,SAAS1qC,QAAQ,SACtB34K,KAAK4jN,WAAWtgE,aAAaE,WAG/BxjJ,KAAKsjN,QAAUtjN,KAAKytF,SAASo2H,yBAAyB7jN,KAAKwjN,QAC3DxjN,KAAKsjN,QAAQN,QAAQU,EACtB,CAED,WAAAC,CAAYG,GACV9jN,KAAKyjN,SAAWK,EAChB9jN,KAAKqjN,SAAS1qC,QAAQ,eACvB,CAED,UAAAoF,GACE/9K,KAAKsjN,QAAQvlC,YACd,CAID,aAAMgmC,CAAQ9mJ,GACZj9D,KAAKwjN,OAAOzmN,IAAMkgE,CACnB,CAED,UAAMypG,GACA1mK,KAAKwrF,UAAY83D,aAAaG,QAChCzjJ,KAAKgnK,WAAW,GAElB,UACQhnK,KAAKwjN,OAAO98C,MAEnB,CAAC,MAAOjlK,GAER,CACDzB,KAAK4jN,WAAWtgE,aAAaC,QAC9B,CAED,KAAAtzI,GACEjQ,KAAKwjN,OAAOvzM,QACZjQ,KAAK4jN,WAAWtgE,aAAaG,OAC9B,CAED,IAAAmjB,GACE5mK,KAAKwjN,OAAOvzM,QACZjQ,KAAKwjN,OAAOn+H,YAAc,EAC1BrlF,KAAK4jN,WAAWtgE,aAAaE,QAC9B,CAED,UAAAwjB,CAAWlwI,GAOT92B,KAAKwjN,OAAOn+H,YAAcy/D,MAAMhuH,EAAM,EAAG92B,KAAKi7J,eAC9Cj7J,KAAKqjN,SAAS1qC,QAAQ,iBACvB,CAED,UAAAqrC,GACE,OAAOhkN,KAAKyjN,QACb,CAED,SAAAQ,GACE,OAAOjkN,KAAKwrF,OACb,CAED,WAAAyvE,GACE,MAAMv5F,SAAEA,GAAa1hE,KAAKwjN,OAI1B,OAAOphK,MAAMsf,IAAaA,IAAazf,IAAW,EAAIyf,CACvD,CAED,cAAAw8F,GACE,OAAOl+J,KAAKwjN,OAAOn+H,WACpB,CAED,UAAAu+H,CAAW1qM,GACTlZ,KAAKwrF,QAAUtyE,EACflZ,KAAKqjN,SAAS1qC,QAAQ,eACvB,CAED,OAAAgb,GAEE3zL,KAAK4mK,OACL5mK,KAAKqjN,SAAS1vB,SACf,ECxEW,MAAOjjI,MACnB2yJ,SACA51H,SACAy2H,SACAC,cACAC,QACAzvB,UACA0vB,UACAf,QACAgB,OAEA,WAAAljN,GAUE,GATApB,KAAKqjN,SAAW,IAAIpB,QAEpBjiN,KAAKytF,SAAW,IAAK/oF,OAAO6/M,cAAgB7/M,OAAO8/M,oBAOvB,cAAxBxkN,KAAKytF,SAASxqF,MAAuB,CACvC,MAAMoN,EAASqU,gBACP1kB,KAAKytF,SAASp9E,SAEQ,YAAxBrQ,KAAKytF,SAASxqF,QAEhB2S,SAAS4sE,KAAK8hB,oBAAoB,WAAYj0F,GAAQ,GACtDuF,SAAS4sE,KAAK8hB,oBAAoB,QAASj0F,GAAQ,GACnDuF,SAAS4sE,KAAK8hB,oBAAoB,UAAWj0F,GAAQ,KAIzDuF,SAAS4sE,KAAK6hB,iBAAiB,WAAYh0F,GAAQ,GACnDuF,SAAS4sE,KAAK6hB,iBAAiB,QAASh0F,GAAQ,GAChDuF,SAAS4sE,KAAK6hB,iBAAiB,UAAWh0F,GAAQ,EACnD,CAGDrQ,KAAKmkN,cAAgBnkN,KAAKytF,SAAS40H,aAGnCriN,KAAKkkN,SAAW,IAAI/B,kBAAkBniN,KAAKytF,UAG3CztF,KAAKokN,QAAUpkN,KAAKytF,SAAS40H,aAG7BriN,KAAK20L,UAAY30L,KAAKytF,SAASg3H,iBAC/BzkN,KAAK20L,UAAUuD,QAAU,KAEzBl4L,KAAK20L,UAAU+vB,sBAAwB,EAGvC1kN,KAAKqkN,UAAYrkN,KAAKytF,SAAS40H,aAwB/BriN,KAAKsjN,QAAU,IAAIF,cAAcpjN,KAAKytF,SAAUztF,KAAKmkN,eAErDnkN,KAAKsjN,QAAQxzM,GAAG,iBAAkB,KAChC9P,KAAKqjN,SAAS1qC,QAAQ,gBAExB34K,KAAKsjN,QAAQxzM,GAAG,QAAS,KACvB9P,KAAKqjN,SAAS1qC,QAAQ,WAExB34K,KAAKsjN,QAAQxzM,GAAG,eAAgB,KAC9B,GAAQ9P,KAAKsjN,QAAQW,cACd3gE,aAAaC,QAChBvjJ,KAAKqjN,SAAS1qC,QAAQ,WAG1B34K,KAAKqjN,SAAS1qC,QAAQ,gBAExB34K,KAAKsjN,QAAQxzM,GAAG,SAAU,KACxB9P,KAAKqjN,SAAS1qC,QAAQ,gBAGxB34K,KAAKmkN,cAAcnB,QAAQhjN,KAAKokN,SAEhC,IAAIjwM,EAASnU,KAAKokN,QAClBpkN,KAAKskN,OAAS,GAEd9iE,MAAMz5G,QAAQ,CAACuoH,EAAMx0J,KACnB,MAAMutC,EAASrpC,KAAKytF,SAASk3H,qBAE7B3kN,KAAKskN,OAAOh0D,GAAQjnH,EAEV,IAANvtC,EAEFutC,EAAOt+B,KAAO,WACLjP,IAAM0lJ,MAAMvlJ,OAAS,EAE9BotC,EAAOt+B,KAAO,YAEds+B,EAAOt+B,KAAO,UAEhBs+B,EAAOu7K,UAAUh8M,MAAQ0nJ,EACzBjnH,EAAO05K,KAAKn6M,MAAQ,EAEpBuL,EAAO6uM,QAAQ35K,GACfl1B,EAASk1B,IAGXl1B,EAAO6uM,QAAQhjN,KAAKkkN,UAEpBlkN,KAAKkkN,SAASlB,QAAQhjN,KAAKqkN,WAC3BrkN,KAAKkkN,SAASlB,QAAQhjN,KAAK20L,WAE3B30L,KAAKqkN,UAAUrB,QAAQhjN,KAAKytF,SAASi2H,YACtC,CAED,WAAAhC,GACE,OAAO1hN,KAAK20L,SACb,CAGD,QAAAjzH,GACE,OAAO1hE,KAAKsjN,QAAQroD,aACrB,CAED,WAAAjQ,GACE,OAAOhrJ,KAAKsjN,QAAQplD,gBACrB,CAED,aAAA2mD,GACE,OAAO7kN,KAAK0hE,WAAa1hE,KAAKgrJ,aAC/B,CAED,eAAA85D,GACE,OAAQ9kN,KAAKgrJ,cAAgBhrJ,KAAK0hE,WAAc,GACjD,CAGD,UAAMglG,SACE1mK,KAAKsjN,QAAQ58C,MACpB,CAED,KAAAz2J,GACEjQ,KAAKsjN,QAAQrzM,OACd,CAED,IAAA22J,GACE5mK,KAAKsjN,QAAQ18C,MACd,CAGD,qBAAAiR,CAAsB91J,GACpB,MAAMgjM,EAAW/kN,KAAK0hE,YAAc3/C,EAAU,KAC9C/hB,KAAKgnK,WAAW+9C,EACjB,CAGD,SAAA19C,CAAUpc,GACRjrJ,KAAKqkN,UAAUtB,KAAKn6M,MAAQqiJ,EAAS,GACtC,CAMD,SAAAod,CAAUz/J,GACR,MAAM2tJ,EAAM3tJ,EAAQ,IAAO,GAAK,GAChC5I,KAAKokN,QAAQrB,KAAKn6M,MAAQlD,KAAKw8C,IAAI,GAAIq0G,EAAK,GAC7C,CAGD,UAAAkR,CAAWvc,GAETlrJ,KAAKkkN,SAASh5D,QAAQtiJ,MAAQsiJ,EAAU,GACzC,CAED,SAAA8c,CAAU1X,EAAY1nJ,GACpB,MAAM2tJ,EAAM3tJ,EAAQ,IAAO,GAAK,GAChC5I,KAAKskN,OAAOh0D,GAAMyyD,KAAKn6M,MAAQ2tJ,CAChC,CAED,SAAAyhB,GACEh4K,KAAKmkN,cAAcpmC,aACnB/9K,KAAKmkN,cAAcnB,QAAQhjN,KAAKkkN,SACjC,CAED,QAAAjsC,GACEj4K,KAAKmkN,cAAcpmC,aACnB/9K,KAAKmkN,cAAcnB,QAAQhjN,KAAKokN,QACjC,CAGD,EAAAt0M,CAAGI,EAAe9M,GAChBpD,KAAKqjN,SAASvzM,GAAGI,EAAO9M,EACzB,CAED,UAAA4jK,CAAWlwI,GACT92B,KAAKsjN,QAAQt8C,WAAWlwI,EACzB,CAGD,iBAAMihJ,CAAY96G,EAAa+nJ,GAC7BhlN,KAAKqjN,SAAS1qC,QAAQ,iBAChB34K,KAAKsjN,QAAQS,QAAQ9mJ,GAE3Bj9D,KAAKqjN,SAAS1qC,QAAQ,eAClBqsC,GACFhlN,KAAK0mK,MAER,CAED,OAAAitB,GACE3zL,KAAKsjN,QAAQ3vB,UACb3zL,KAAKqjN,SAAS1vB,SACf,EChUW,MAAOsxB,WACnBC,WAAyB,GACzB3qC,SAEA,WAAAn5K,GACEpB,KAAKu6K,UAAW,CACjB,CAED,GAAAt9E,IAAOkoH,GACL,GAAInlN,KAAKu6K,SACP,MAAM,IAAIp7K,MACR,6DAGJa,KAAKklN,WAAW/kN,QAAQglN,EACzB,CAED,OAAAxxB,GACE,GAAI3zL,KAAKu6K,SACP,MAAM,IAAIp7K,MACR,8DAGJa,KAAKklN,WAAWn9K,QAASq9K,IACC,mBAAbA,EACTA,IACqC,mBAArBA,EAASzxB,SACzByxB,EAASzxB,YAGb3zL,KAAKklN,WAAa,GAClBllN,KAAKu6K,UAAW,CACjB,ECqBH,IAAA8qC,SAAA,MACEn0B,eAAiB,QACjBo0B,eACAl4B,MACAm4B,YACAvgN,QACAguF,MACAskD,MAOA,yBAAOkuE,GACL,MAAMC,KACJ/gN,OAAO6/M,eAEP7/M,OAAO8/M,oBAEHkB,IAAmBhhN,OAAOkR,SAASK,cAAc,UAAUogI,WAEjE,OAAOovE,GAAoBC,GADiB,oBAAZjuM,OAEjC,CAED,WAAArW,CAAY4D,GACVhF,KAAKotL,MAAQ,KACbptL,KAAKulN,YAAc,IAAIN,WACvBjlN,KAAKslN,eAAiB,IAAIrD,QAC1BjiN,KAAKgF,QAAUA,EACf,MAAM2gN,cACJA,EAAaC,YACbA,EAAWl1D,eACXA,EAAcm1D,cACdA,GAAgB,EAAKv2D,OACrBA,EAAMkjB,aACNA,EAAYkB,qBACZA,EAAoBN,qBACpBA,EAAoBkB,kBACpBA,EAAiBE,oBACjBA,EAAmBE,oBACnBA,EAAmBoxC,qBACnBA,EAAoBC,qBACpBA,EAAoBC,mBACpBA,GACEhmN,KAAKgF,QAGT,IAAI8wK,EAAgB,KACpB,GAA4B,MAAxBiwC,EAA8B,CAChC,MAAME,oBAAEA,EAAmBC,wBAAEA,GAC3BH,EAEyB,MAAvBE,GAA0D,MAA3BC,IACjCpwC,EAAgBpxJ,MAAO2f,IACrB,MAAQyxI,cAAeqwC,SAAkBF,IACzC,OAAOE,QACClwC,2BAAqC5xI,GAC3C6hL,IAIP,CAIDlmN,KAAKgzF,MAAQ,IAAKgzH,GAAsBt1J,OACxC1wD,KAAKs3I,MAAQ8uE,kBACXpmN,KAAKgzF,MACLhzF,KAAKslN,eACLtlN,KAAKgF,QAAQqhN,oBACbrmN,KAAKgF,QAAQshN,eACb,CACE9zC,eACAkB,uBACAoC,gBAEA1C,uBACAkB,oBACAE,sBACAE,wBAIAoxC,GACF9lN,KAAKs3I,MAAM7zB,SAAS8lE,wBAGlB9zI,UAAU8wK,OACZvmN,KAAKs3I,MAAM7zB,SAAS,CAAE14G,KAAM80I,oBAE5B7/I,KAAKs3I,MAAM7zB,SAAS,CAAE14G,KAAM+0I,uBAGhB,MAAVwP,GACFtvJ,KAAKs3I,MAAM7zB,SAAS,CAAE14G,KAAMo1I,YAAamP,WAGvCtqJ,EAAQ+gN,uBACV/lN,KAAKs3I,MAAM7zB,SAAS,CAClB14G,KAAM61I,gBACN+I,KAAM3kJ,EAAQ+gN,qBAAqBS,kBAErCxmN,KAAKs3I,MAAM7zB,SACTgjG,kBAA0BzhN,EAAQ+gN,wBAItC,MAAMW,EAAe,IAAM1mN,KAAKs3I,MAAM7zB,SAAS,CAAE14G,KAAM80I,oBACjD8mE,EAAgB,IACpB3mN,KAAKs3I,MAAM7zB,SAAS,CAAE14G,KAAM+0I,uBAE9Bp7I,OAAO2/F,iBAAiB,SAAUqiH,GAClChiN,OAAO2/F,iBAAiB,UAAWsiH,GAEnC3mN,KAAKulN,YAAYtoH,IAAI,KACnBv4F,OAAO4/F,oBAAoB,SAAUoiH,GACrChiN,OAAO4/F,oBAAoB,UAAWqiH,KAGpCf,EACF5lN,KAAKs3I,MAAM7zB,SAASylE,eAAuB08B,EAAY3oJ,MAGvDj9D,KAAKs3I,MAAM7zB,SAAS,CAAE14G,KAAMm1I,SAG1BylE,GACF3lN,KAAK4mN,cAAcjB,GAIS,MAA1B3gN,EAAQ6hN,gBACVhyK,QAAQC,KACN,8FAGF90C,KAAKs3I,MAAM7zB,SAAS,CAAE14G,KAAMi0I,oBAAqB4R,MAAOi2D,kBAC7B,MAAlBn2D,GACT1wJ,KAAKs3I,MAAM7zB,SAAS,CAAE14G,KAAMi0I,oBAAqB4R,MAAOF,IAG1D1wJ,KAAKs3I,MAAM7zB,SAASqjG,gBAAwB9hN,EAAQ+hN,eAEhDlB,GACF7lN,KAAKulN,YAAYtoH,IAAI8kH,YAAY/hN,KAAKs3I,MAAM7zB,UAE/C,CAKD,IAAAijD,GACE1mK,KAAKs3I,MAAM7zB,SAAS8kE,OACrB,CAKD,KAAAt4K,GACEjQ,KAAKs3I,MAAM7zB,SAAS+kE,QACrB,CAKD,IAAA5hB,GACE5mK,KAAKs3I,MAAM7zB,SAASglE,OACrB,CAKD,SAAAphB,CAAUpc,GACRjrJ,KAAKs3I,MAAM7zB,SAASk7E,UAAkB1zC,GACvC,CAKD,YAAAmc,CAAahpF,GACXp+E,KAAKs3I,MAAM7zB,SAASmlE,aAAqBxqG,GAC1C,CAKD,WAAA8oF,CAAY9oF,GACVp+E,KAAKs3I,MAAM7zB,SAASklE,YAAoBvqG,GACzC,CAKD,UAAA4oF,CAAW5oF,GACTp+E,KAAKs3I,MAAM7zB,SAASujG,WAAmB5oI,GACxC,CAKD,gBAAA6oI,GACE,OAAOp9B,WAAqB7pL,KAAKs3I,MAAMQ,WACxC,CAKD,eAAAovE,GACE,OAAOt9B,UAAoB5pL,KAAKs3I,MAAMQ,WACvC,CAKD,SAAA2/B,GACEz3K,KAAKs3I,MAAM7zB,SAASilE,OACrB,CAKD,aAAAy+B,GACEnnN,KAAKs3I,MAAM7zB,SAAS6kE,WACrB,CAUD,eAAA8+B,CAAgB72M,GACdvQ,KAAKs3I,MAAM7zB,SAAS4jG,UAAkB92M,GACvC,CAKD,YAAA+2M,CAAa50D,GACX,MAAM7wI,EAAYw+K,cAAwBrgM,KAAKs3I,MAAMQ,YACrD93I,KAAKs3I,MAAM7zB,SACT6mE,eAAuB53B,EAAQ5Q,WAAWE,KAAMngI,GAEnD,CAKD,eAAA0lM,CAAgB70D,GACd1yJ,KAAKs3I,MAAM7zB,SAAS6mE,eAAuB53B,EAAQ5Q,WAAWnF,MAC/D,CAKD,iBAAA0b,GACE,OAAOmvD,kBAA4BxnN,KAAKs3I,MAAMQ,WAC/C,CAKD,cAAAujB,GACE,OAAOmL,eAAyBxmK,KAAKs3I,MAAMQ,WAC5C,CASD,WAAA2vE,CAAY5lN,GACV,OAAO7B,KAAKslN,eAAex1M,GAAGywI,gBAAkB19G,IAC9ChhC,EAAGghC,EAAO4+C,SAEb,CAOD,OAAAimI,CAAQ7lN,GACN,OAAO7B,KAAKslN,eAAex1M,GAAGusI,aAAcx6I,EAC7C,CAMD,KAAAq4C,GACEl6C,KAAKs3I,MAAM7zB,SAAS2mE,QACrB,CAKD,MAAAu9B,GACE3nN,KAAKs3I,MAAM7zB,SAASmkG,OACrB,CAeD,gBAAAC,CAAiBhmN,GACf,IAAIimN,EAAiC,KAErC,OAAO9nN,KAAKs3I,MAAMjnD,UAAU,KAC1B,MAAMptF,EAAQjD,KAAKs3I,MAAMQ,WACnBsR,EAAU2+D,mCAA6C9kN,GACzDmmJ,IAAY0+D,IAGhBA,EAAkB1+D,EAClBvnJ,EAAc,MAAXunJ,EAAkB,KAAO4+D,oBAA8B/kN,MAE7D,CAOD,UAAAglN,CAAWpmN,GACT,OAAO7B,KAAKslN,eAAex1M,GAAGysI,gBAAiB16I,EAChD,CASD,cAAA8wK,CAAe11G,GACbj9D,KAAKs3I,MAAM7zB,SAASylE,eAAuBjsH,GAG5C,CAKD,kBAAMirJ,SAGEC,SAASnoN,KAAKs3I,MAAQr0I,IAAWA,EAAMy5H,QAAQpI,eAO/C78G,QAAQ8B,IAAI,CAChBkvL,mBAA6BzoM,KAAKs3I,MAAMQ,YACxCkxD,mBAA6BhpM,KAAKs3I,MAAMQ,aAG3C,CAWD,qBAAMswE,CAAgBtlN,GAGpB,GAFA9C,KAAKs3I,MAAM7zB,SAAS4kG,yBAAiCvlN,UAC/C9C,KAAKkoN,gBACPloN,KAAKulN,YAAYhrC,SAArB,CAGA,GAAkB,MAAdv6K,KAAKotL,MACP,MAAM,IAAIjuL,MAAM,yCAElBa,KAAKotL,MAAQ15F,SAASshD,WAAWlyI,GACjC9C,KAAKulN,YAAYtoH,IAAI,KACD,MAAdj9F,KAAKotL,QACPptL,KAAKotL,MAAMl5C,UACXl0I,KAAKotL,MAAQ,QAIjBptL,KAAKotL,MAAMt/F,OACT0mE,kBAAAA,IAACjnE,SAAS,CAAA+pD,MAAOt3I,KAAKs3I,MAAKvqE,SACzBynF,sBAAC0sD,IAAG,CAACluH,MAAOhzF,KAAKgzF,MAAOg3F,YAAahqL,KAAKgF,QAAQglL,aAAe,OAdpE,CAiBF,CAWD,OAAA2J,GAGE3zL,KAAKgzF,MAAM2gG,UACX3zL,KAAKslN,eAAe3xB,UACpB3zL,KAAKulN,YAAY5xB,SAClB,CAED,qBAAA20B,CAAsB79D,GACpBzqJ,KAAKs3I,MAAM7zB,SAAS8kG,oBAA4B99D,GACjD,CAED,oBAAA+9D,GACE,OAAOC,oBAA8BzoN,KAAKs3I,MAAMQ,WACjD,CAED,eAAA4wE,CAAgB7mN,GAEd,OAAO7B,KAAKs3I,MAAMjnD,UAAUxuF,EAC7B,CAED,aAAA+kN,CAAcl0D,GACZ,MAAM7wI,EAAYw+K,cAAwBrgM,KAAKs3I,MAAMQ,YACrD93I,KAAKs3I,MAAM7zB,SACT6mE,eAAuB53B,EAAQ5Q,WAAWC,OAAQlgI,GAErD,GAKH,MAAMsmM,SAAW,CACf7wE,EACA+P,IAEA,IAAI5vI,QAASiB,IACX,GAAI2uI,EAAU/P,EAAMQ,YAElB,YADAp/H,IAGF,MAAM8hI,EAAclD,EAAMjnD,UAAU,KAC9Bg3D,EAAU/P,EAAMQ,cAClBp/H,IACA8hI,SAMR91I,OAAOikN,OAASA,SClgBhB,IAAIC,WAAa,EACjB,MAAMC,cAA8B,CAAA,EACpC,IAAIC,uBAAwB,EACxBC,kBAEE,SAAUjlN,eAAaV,GAE3B,MAAMvH,EAAO,IAAIM,MAAMH,UAAUC,OAAS,GAC1C,IAAK,IAAIH,EAAI,EAAGA,EAAID,EAAKI,OAAQH,IAC/BD,EAAKC,GAAKE,UAAUF,EAAI,GAG1B,MAAMmb,EAAO,CAAE7T,SAAUA,EAAUvH,KAAMA,GAGzC,OAFAgtN,cAAcD,YAAc3xM,EAC5B8xM,kBAAkBH,YACXA,YACT,CAEA,SAASI,eAAe/kB,UACf4kB,cAAc5kB,EACvB,CAEA,SAASglB,IAAIhyM,GACX,MAAM7T,EAAW6T,EAAK7T,SAChBvH,EAAOob,EAAKpb,KAClB,OAAQA,EAAKI,QACX,KAAK,EACHmH,IACA,MACF,KAAK,EACHA,EAASvH,EAAK,IACd,MACF,KAAK,EACHuH,EAASvH,EAAK,GAAIA,EAAK,IACvB,MACF,KAAK,EACHuH,EAASvH,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAChC,MACF,QAEEuH,EAAShH,WAAM0B,EAAWjC,GAGhC,CAEA,SAASqtN,aAAajlB,GAGpB,GAAI6kB,sBAGFtyM,WAAW0yM,aAAc,EAAGjlB,OACvB,CACL,MAAMhtL,EAAO4xM,cAAc5kB,GAC3B,GAAIhtL,EAAM,CACR6xM,uBAAwB,EACxB,IACEG,IAAIhyM,EACL,CAAS,QACR+xM,eAAe/kB,GACf6kB,uBAAwB,CACzB,CACF,CACF,CACH,CAEA,SAASK,oBAGP,IAAKzkN,OAAO0kN,cAAe,CACzB,IAAIC,GAA4B,EAChC,MAAMC,EAAe5kN,OAAOiS,UAM5B,OALAjS,OAAOiS,UAAY,WACjB0yM,GAA4B,CAC9B,EACA3kN,OAAOmS,YAAY,GAAI,KACvBnS,OAAOiS,UAAY2yM,EACZD,CACR,CACH,CAEA,SAASE,mCAKP,MAAMC,EAAgB,gBAAgB9jN,KAAKy1F,YAE3Cz2F,OAAO2/F,iBACL,UACCn0F,IAEGA,EAAMsV,SAAW9gB,QACK,iBAAfwL,EAAM5P,MACyB,IAAtC4P,EAAM5P,KAAKjF,QAAQmuN,IAEnBN,cAAch5M,EAAM5P,KAAKuD,MAAM2lN,EAAcvtN,WAGjD,GAGF8sN,kBAAoB,SAAU9kB,GAC5Bv/L,OAAOmS,YAAY2yM,EAAgBvlB,EAAQ,IAC7C,CACF,CAEA,SAASwlB,kCACPV,kBAAoB,SAAU9kB,GAC5BztL,WAAW0yM,aAAc,EAAGjlB,EAC9B,CACF,CAEIklB,oBAEFI,mCAGAE,8GC5GFC,MAAMvtM,MAAQ,SAAU/Y,EAAUvH,EAAM2F,GACtCsC,eAAa,KACXV,EAAShH,MAAMoF,GAAQ,KAAM3F,GAAQ,KAEzC,EAIqB,MAAA8sN,eAAegB,SAClC,WAAAvoN,CAAY4D,GACVs2C,MAAM,IACDt2C,EACHwtK,aAAc9tJ,SAAY6sB,QAC1BmiI,qBAAsBhvJ,SAAYklM,sBAErC,EAKHllN,OAAOikN,OAASA","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,183,189,212,220,223,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,317,318,319,320,321,322,323,324]}