{"version":3,"sources":["webpack:///./node_modules/node-libs-browser/mock/process.js","webpack:///./node_modules/orderedmap/index.es.js","webpack:///./node_modules/path-browserify/index.js"],"names":["exports","nextTick","fn","args","Array","prototype","slice","call","arguments","shift","setTimeout","apply","platform","arch","execPath","title","pid","browser","env","argv","binding","name","Error","path","cwd","chdir","dir","resolve","exit","kill","umask","dlopen","uptime","memoryUsage","uvCounters","features","OrderedMap","content","this","constructor","find","key","i","length","get","found","undefined","update","value","newKey","self","remove","push","splice","addToStart","concat","addToEnd","addBefore","place","without","forEach","f","prepend","map","from","size","subtract","append","result","prop","orderedmap","normalizeArray","parts","allowAboveRoot","up","last","unshift","basename","start","end","matchedSlash","charCodeAt","filter","xs","res","resolvedPath","resolvedAbsolute","process","TypeError","charAt","split","p","join","normalize","isAbsolute","trailingSlash","substr","paths","index","relative","to","trim","arr","fromParts","toParts","Math","min","samePartsLength","outputParts","sep","delimiter","dirname","code","hasRoot","ext","extname","startDot","startPart","preDotState","str","len"],"mappings":"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","file":"js/chunk-vendors~b58f7129.bfbe45a5.js","sourcesContent":["exports.nextTick = function nextTick(fn) {\n    var args = Array.prototype.slice.call(arguments);\n    args.shift();\n    setTimeout(function () {\n        fn.apply(null, args);\n    }, 0);\n};\n\nexports.platform = exports.arch = \nexports.execPath = exports.title = 'browser';\nexports.pid = 1;\nexports.browser = true;\nexports.env = {};\nexports.argv = [];\n\nexports.binding = function (name) {\n\tthrow new Error('No such module. (Possibly not yet loaded)')\n};\n\n(function () {\n    var cwd = '/';\n    var path;\n    exports.cwd = function () { return cwd };\n    exports.chdir = function (dir) {\n        if (!path) path = require('path');\n        cwd = path.resolve(dir, cwd);\n    };\n})();\n\nexports.exit = exports.kill = \nexports.umask = exports.dlopen = \nexports.uptime = exports.memoryUsage = \nexports.uvCounters = function() {};\nexports.features = {};\n","// ::- Persistent data structure representing an ordered mapping from\n// strings to values, with some convenient update methods.\nfunction OrderedMap(content) {\n  this.content = content;\n}\n\nOrderedMap.prototype = {\n  constructor: OrderedMap,\n\n  find: function(key) {\n    for (var i = 0; i < this.content.length; i += 2)\n      if (this.content[i] === key) return i\n    return -1\n  },\n\n  // :: (string) → ?any\n  // Retrieve the value stored under `key`, or return undefined when\n  // no such key exists.\n  get: function(key) {\n    var found = this.find(key);\n    return found == -1 ? undefined : this.content[found + 1]\n  },\n\n  // :: (string, any, ?string) → OrderedMap\n  // Create a new map by replacing the value of `key` with a new\n  // value, or adding a binding to the end of the map. If `newKey` is\n  // given, the key of the binding will be replaced with that key.\n  update: function(key, value, newKey) {\n    var self = newKey && newKey != key ? this.remove(newKey) : this;\n    var found = self.find(key), content = self.content.slice();\n    if (found == -1) {\n      content.push(newKey || key, value);\n    } else {\n      content[found + 1] = value;\n      if (newKey) content[found] = newKey;\n    }\n    return new OrderedMap(content)\n  },\n\n  // :: (string) → OrderedMap\n  // Return a map with the given key removed, if it existed.\n  remove: function(key) {\n    var found = this.find(key);\n    if (found == -1) return this\n    var content = this.content.slice();\n    content.splice(found, 2);\n    return new OrderedMap(content)\n  },\n\n  // :: (string, any) → OrderedMap\n  // Add a new key to the start of the map.\n  addToStart: function(key, value) {\n    return new OrderedMap([key, value].concat(this.remove(key).content))\n  },\n\n  // :: (string, any) → OrderedMap\n  // Add a new key to the end of the map.\n  addToEnd: function(key, value) {\n    var content = this.remove(key).content.slice();\n    content.push(key, value);\n    return new OrderedMap(content)\n  },\n\n  // :: (string, string, any) → OrderedMap\n  // Add a key after the given key. If `place` is not found, the new\n  // key is added to the end.\n  addBefore: function(place, key, value) {\n    var without = this.remove(key), content = without.content.slice();\n    var found = without.find(place);\n    content.splice(found == -1 ? content.length : found, 0, key, value);\n    return new OrderedMap(content)\n  },\n\n  // :: ((key: string, value: any))\n  // Call the given function for each key/value pair in the map, in\n  // order.\n  forEach: function(f) {\n    for (var i = 0; i < this.content.length; i += 2)\n      f(this.content[i], this.content[i + 1]);\n  },\n\n  // :: (union<Object, OrderedMap>) → OrderedMap\n  // Create a new map by prepending the keys in this map that don't\n  // appear in `map` before the keys in `map`.\n  prepend: function(map) {\n    map = OrderedMap.from(map);\n    if (!map.size) return this\n    return new OrderedMap(map.content.concat(this.subtract(map).content))\n  },\n\n  // :: (union<Object, OrderedMap>) → OrderedMap\n  // Create a new map by appending the keys in this map that don't\n  // appear in `map` after the keys in `map`.\n  append: function(map) {\n    map = OrderedMap.from(map);\n    if (!map.size) return this\n    return new OrderedMap(this.subtract(map).content.concat(map.content))\n  },\n\n  // :: (union<Object, OrderedMap>) → OrderedMap\n  // Create a map containing all the keys in this map that don't\n  // appear in `map`.\n  subtract: function(map) {\n    var result = this;\n    map = OrderedMap.from(map);\n    for (var i = 0; i < map.content.length; i += 2)\n      result = result.remove(map.content[i]);\n    return result\n  },\n\n  // :: number\n  // The amount of keys in this map.\n  get size() {\n    return this.content.length >> 1\n  }\n};\n\n// :: (?union<Object, OrderedMap>) → OrderedMap\n// Return a map with the given content. If null, create an empty\n// map. If given an ordered map, return that map itself. If given an\n// object, create a map from the object's properties.\nOrderedMap.from = function(value) {\n  if (value instanceof OrderedMap) return value\n  var content = [];\n  if (value) for (var prop in value) content.push(prop, value[prop]);\n  return new OrderedMap(content)\n};\n\nvar orderedmap = OrderedMap;\n\nexport default orderedmap;\n","// .dirname, .basename, and .extname methods are extracted from Node.js v8.11.1,\n// backported and transplited with Babel, with backwards-compat fixes\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// resolves . and .. elements in a path array with directory names there\n// must be no slashes, empty elements, or device names (c:\\) in the array\n// (so also no leading and trailing slashes - it does not distinguish\n// relative and absolute paths)\nfunction normalizeArray(parts, allowAboveRoot) {\n  // if the path tries to go above the root, `up` ends up > 0\n  var up = 0;\n  for (var i = parts.length - 1; i >= 0; i--) {\n    var last = parts[i];\n    if (last === '.') {\n      parts.splice(i, 1);\n    } else if (last === '..') {\n      parts.splice(i, 1);\n      up++;\n    } else if (up) {\n      parts.splice(i, 1);\n      up--;\n    }\n  }\n\n  // if the path is allowed to go above the root, restore leading ..s\n  if (allowAboveRoot) {\n    for (; up--; up) {\n      parts.unshift('..');\n    }\n  }\n\n  return parts;\n}\n\n// path.resolve([from ...], to)\n// posix version\nexports.resolve = function() {\n  var resolvedPath = '',\n      resolvedAbsolute = false;\n\n  for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) {\n    var path = (i >= 0) ? arguments[i] : process.cwd();\n\n    // Skip empty and invalid entries\n    if (typeof path !== 'string') {\n      throw new TypeError('Arguments to path.resolve must be strings');\n    } else if (!path) {\n      continue;\n    }\n\n    resolvedPath = path + '/' + resolvedPath;\n    resolvedAbsolute = path.charAt(0) === '/';\n  }\n\n  // At this point the path should be resolved to a full absolute path, but\n  // handle relative paths to be safe (might happen when process.cwd() fails)\n\n  // Normalize the path\n  resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) {\n    return !!p;\n  }), !resolvedAbsolute).join('/');\n\n  return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.';\n};\n\n// path.normalize(path)\n// posix version\nexports.normalize = function(path) {\n  var isAbsolute = exports.isAbsolute(path),\n      trailingSlash = substr(path, -1) === '/';\n\n  // Normalize the path\n  path = normalizeArray(filter(path.split('/'), function(p) {\n    return !!p;\n  }), !isAbsolute).join('/');\n\n  if (!path && !isAbsolute) {\n    path = '.';\n  }\n  if (path && trailingSlash) {\n    path += '/';\n  }\n\n  return (isAbsolute ? '/' : '') + path;\n};\n\n// posix version\nexports.isAbsolute = function(path) {\n  return path.charAt(0) === '/';\n};\n\n// posix version\nexports.join = function() {\n  var paths = Array.prototype.slice.call(arguments, 0);\n  return exports.normalize(filter(paths, function(p, index) {\n    if (typeof p !== 'string') {\n      throw new TypeError('Arguments to path.join must be strings');\n    }\n    return p;\n  }).join('/'));\n};\n\n\n// path.relative(from, to)\n// posix version\nexports.relative = function(from, to) {\n  from = exports.resolve(from).substr(1);\n  to = exports.resolve(to).substr(1);\n\n  function trim(arr) {\n    var start = 0;\n    for (; start < arr.length; start++) {\n      if (arr[start] !== '') break;\n    }\n\n    var end = arr.length - 1;\n    for (; end >= 0; end--) {\n      if (arr[end] !== '') break;\n    }\n\n    if (start > end) return [];\n    return arr.slice(start, end - start + 1);\n  }\n\n  var fromParts = trim(from.split('/'));\n  var toParts = trim(to.split('/'));\n\n  var length = Math.min(fromParts.length, toParts.length);\n  var samePartsLength = length;\n  for (var i = 0; i < length; i++) {\n    if (fromParts[i] !== toParts[i]) {\n      samePartsLength = i;\n      break;\n    }\n  }\n\n  var outputParts = [];\n  for (var i = samePartsLength; i < fromParts.length; i++) {\n    outputParts.push('..');\n  }\n\n  outputParts = outputParts.concat(toParts.slice(samePartsLength));\n\n  return outputParts.join('/');\n};\n\nexports.sep = '/';\nexports.delimiter = ':';\n\nexports.dirname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  if (path.length === 0) return '.';\n  var code = path.charCodeAt(0);\n  var hasRoot = code === 47 /*/*/;\n  var end = -1;\n  var matchedSlash = true;\n  for (var i = path.length - 1; i >= 1; --i) {\n    code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        if (!matchedSlash) {\n          end = i;\n          break;\n        }\n      } else {\n      // We saw the first non-path separator\n      matchedSlash = false;\n    }\n  }\n\n  if (end === -1) return hasRoot ? '/' : '.';\n  if (hasRoot && end === 1) {\n    // return '//';\n    // Backwards-compat fix:\n    return '/';\n  }\n  return path.slice(0, end);\n};\n\nfunction basename(path) {\n  if (typeof path !== 'string') path = path + '';\n\n  var start = 0;\n  var end = -1;\n  var matchedSlash = true;\n  var i;\n\n  for (i = path.length - 1; i >= 0; --i) {\n    if (path.charCodeAt(i) === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          start = i + 1;\n          break;\n        }\n      } else if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // path component\n      matchedSlash = false;\n      end = i + 1;\n    }\n  }\n\n  if (end === -1) return '';\n  return path.slice(start, end);\n}\n\n// Uses a mixed approach for backwards-compatibility, as ext behavior changed\n// in new Node.js versions, so only basename() above is backported here\nexports.basename = function (path, ext) {\n  var f = basename(path);\n  if (ext && f.substr(-1 * ext.length) === ext) {\n    f = f.substr(0, f.length - ext.length);\n  }\n  return f;\n};\n\nexports.extname = function (path) {\n  if (typeof path !== 'string') path = path + '';\n  var startDot = -1;\n  var startPart = 0;\n  var end = -1;\n  var matchedSlash = true;\n  // Track the state of characters (if any) we see before our first dot and\n  // after any path separator we find\n  var preDotState = 0;\n  for (var i = path.length - 1; i >= 0; --i) {\n    var code = path.charCodeAt(i);\n    if (code === 47 /*/*/) {\n        // If we reached a path separator that was not part of a set of path\n        // separators at the end of the string, stop now\n        if (!matchedSlash) {\n          startPart = i + 1;\n          break;\n        }\n        continue;\n      }\n    if (end === -1) {\n      // We saw the first non-path separator, mark this as the end of our\n      // extension\n      matchedSlash = false;\n      end = i + 1;\n    }\n    if (code === 46 /*.*/) {\n        // If this is our first dot, mark it as the start of our extension\n        if (startDot === -1)\n          startDot = i;\n        else if (preDotState !== 1)\n          preDotState = 1;\n    } else if (startDot !== -1) {\n      // We saw a non-dot and non-path separator before our dot, so we should\n      // have a good chance at having a non-empty extension\n      preDotState = -1;\n    }\n  }\n\n  if (startDot === -1 || end === -1 ||\n      // We saw a non-dot character immediately before the dot\n      preDotState === 0 ||\n      // The (right-most) trimmed path component is exactly '..'\n      preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {\n    return '';\n  }\n  return path.slice(startDot, end);\n};\n\nfunction filter (xs, f) {\n    if (xs.filter) return xs.filter(f);\n    var res = [];\n    for (var i = 0; i < xs.length; i++) {\n        if (f(xs[i], i, xs)) res.push(xs[i]);\n    }\n    return res;\n}\n\n// String.prototype.substr - negative index don't work in IE8\nvar substr = 'ab'.substr(-1) === 'b'\n    ? function (str, start, len) { return str.substr(start, len) }\n    : function (str, start, len) {\n        if (start < 0) start = str.length + start;\n        return str.substr(start, len);\n    }\n;\n"],"sourceRoot":""}