{"version":3,"file":"sentry.bundle.js","mappings":"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","sources":["webpack:///./node_modules/raven-js/src/configError.js","webpack:///./node_modules/raven-js/src/console.js","webpack:///./node_modules/raven-js/src/raven.js","webpack:///./node_modules/raven-js/src/singleton.js","webpack:///./node_modules/raven-js/src/utils.js","webpack:///./node_modules/raven-js/vendor/TraceKit/tracekit.js","webpack:///./node_modules/raven-js/vendor/json-stringify-safe/stringify.js","webpack:///./node_modules/raven-js/vendor/md5/md5.js","webpack:///webpack/bootstrap","webpack:///webpack/runtime/compat get default export","webpack:///webpack/runtime/define property getters","webpack:///webpack/runtime/global","webpack:///webpack/runtime/hasOwnProperty shorthand","webpack:///./js/sentry.js"],"sourcesContent":["function RavenConfigError(message) {\n  this.name = 'RavenConfigError';\n  this.message = message;\n}\nRavenConfigError.prototype = new Error();\nRavenConfigError.prototype.constructor = RavenConfigError;\n\nmodule.exports = RavenConfigError;\n","var utils = require('./utils');\n\nvar wrapMethod = function(console, level, callback) {\n  var originalConsoleLevel = console[level];\n  var originalConsole = console;\n\n  if (!(level in console)) {\n    return;\n  }\n\n  var sentryLevel = level === 'warn' ? 'warning' : level;\n\n  console[level] = function() {\n    var args = [].slice.call(arguments);\n\n    var msg = utils.safeJoin(args, ' ');\n    var data = {level: sentryLevel, logger: 'console', extra: {arguments: args}};\n\n    if (level === 'assert') {\n      if (args[0] === false) {\n        // Default browsers message\n        msg =\n          'Assertion failed: ' + (utils.safeJoin(args.slice(1), ' ') || 'console.assert');\n        data.extra.arguments = args.slice(1);\n        callback && callback(msg, data);\n      }\n    } else {\n      callback && callback(msg, data);\n    }\n\n    // this fails for some browsers. :(\n    if (originalConsoleLevel) {\n      // IE9 doesn't allow calling apply on console functions directly\n      // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193\n      Function.prototype.apply.call(originalConsoleLevel, originalConsole, args);\n    }\n  };\n};\n\nmodule.exports = {\n  wrapMethod: wrapMethod\n};\n","/*global XDomainRequest:false */\n\nvar TraceKit = require('../vendor/TraceKit/tracekit');\nvar stringify = require('../vendor/json-stringify-safe/stringify');\nvar md5 = require('../vendor/md5/md5');\nvar RavenConfigError = require('./configError');\n\nvar utils = require('./utils');\nvar isErrorEvent = utils.isErrorEvent;\nvar isDOMError = utils.isDOMError;\nvar isDOMException = utils.isDOMException;\nvar isError = utils.isError;\nvar isObject = utils.isObject;\nvar isPlainObject = utils.isPlainObject;\nvar isUndefined = utils.isUndefined;\nvar isFunction = utils.isFunction;\nvar isString = utils.isString;\nvar isArray = utils.isArray;\nvar isEmptyObject = utils.isEmptyObject;\nvar each = utils.each;\nvar objectMerge = utils.objectMerge;\nvar truncate = utils.truncate;\nvar objectFrozen = utils.objectFrozen;\nvar hasKey = utils.hasKey;\nvar joinRegExp = utils.joinRegExp;\nvar urlencode = utils.urlencode;\nvar uuid4 = utils.uuid4;\nvar htmlTreeAsString = utils.htmlTreeAsString;\nvar isSameException = utils.isSameException;\nvar isSameStacktrace = utils.isSameStacktrace;\nvar parseUrl = utils.parseUrl;\nvar fill = utils.fill;\nvar supportsFetch = utils.supportsFetch;\nvar supportsReferrerPolicy = utils.supportsReferrerPolicy;\nvar serializeKeysForMessage = utils.serializeKeysForMessage;\nvar serializeException = utils.serializeException;\nvar sanitize = utils.sanitize;\n\nvar wrapConsoleMethod = require('./console').wrapMethod;\n\nvar dsnKeys = 'source protocol user pass host port path'.split(' '),\n  dsnPattern = /^(?:(\\w+):)?\\/\\/(?:(\\w+)(:\\w+)?@)?([\\w\\.-]+)(?::(\\d+))?(\\/.*)/;\n\nfunction now() {\n  return +new Date();\n}\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n  typeof window !== 'undefined'\n    ? window\n    : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _document = _window.document;\nvar _navigator = _window.navigator;\n\nfunction keepOriginalCallback(original, callback) {\n  return isFunction(callback)\n    ? function(data) {\n        return callback(data, original);\n      }\n    : callback;\n}\n\n// First, check for JSON support\n// If there is no JSON, we no-op the core features of Raven\n// since JSON is required to encode the payload\nfunction Raven() {\n  this._hasJSON = !!(typeof JSON === 'object' && JSON.stringify);\n  // Raven can run in contexts where there's no document (react-native)\n  this._hasDocument = !isUndefined(_document);\n  this._hasNavigator = !isUndefined(_navigator);\n  this._lastCapturedException = null;\n  this._lastData = null;\n  this._lastEventId = null;\n  this._globalServer = null;\n  this._globalKey = null;\n  this._globalProject = null;\n  this._globalContext = {};\n  this._globalOptions = {\n    // SENTRY_RELEASE can be injected by https://github.com/getsentry/sentry-webpack-plugin\n    release: _window.SENTRY_RELEASE && _window.SENTRY_RELEASE.id,\n    logger: 'javascript',\n    ignoreErrors: [],\n    ignoreUrls: [],\n    whitelistUrls: [],\n    includePaths: [],\n    headers: null,\n    collectWindowErrors: true,\n    captureUnhandledRejections: true,\n    maxMessageLength: 0,\n    // By default, truncates URL values to 250 chars\n    maxUrlLength: 250,\n    stackTraceLimit: 50,\n    autoBreadcrumbs: true,\n    instrument: true,\n    sampleRate: 1,\n    sanitizeKeys: []\n  };\n  this._fetchDefaults = {\n    method: 'POST',\n    // Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n    // https://caniuse.com/#feat=referrer-policy\n    // It doesn't. And it throw exception instead of ignoring this parameter...\n    // REF: https://github.com/getsentry/raven-js/issues/1233\n    referrerPolicy: supportsReferrerPolicy() ? 'origin' : ''\n  };\n  this._ignoreOnError = 0;\n  this._isRavenInstalled = false;\n  this._originalErrorStackTraceLimit = Error.stackTraceLimit;\n  // capture references to window.console *and* all its methods first\n  // before the console plugin has a chance to monkey patch\n  this._originalConsole = _window.console || {};\n  this._originalConsoleMethods = {};\n  this._plugins = [];\n  this._startTime = now();\n  this._wrappedBuiltIns = [];\n  this._breadcrumbs = [];\n  this._lastCapturedEvent = null;\n  this._keypressTimeout;\n  this._location = _window.location;\n  this._lastHref = this._location && this._location.href;\n  this._resetBackoff();\n\n  // eslint-disable-next-line guard-for-in\n  for (var method in this._originalConsole) {\n    this._originalConsoleMethods[method] = this._originalConsole[method];\n  }\n}\n\n/*\n * The core Raven singleton\n *\n * @this {Raven}\n */\n\nRaven.prototype = {\n  // Hardcode version string so that raven source can be loaded directly via\n  // webpack (using a build step causes webpack #1617). Grunt verifies that\n  // this value matches package.json during build.\n  //   See: https://github.com/getsentry/raven-js/issues/465\n  VERSION: '3.27.2',\n\n  debug: false,\n\n  TraceKit: TraceKit, // alias to TraceKit\n\n  /*\n     * Configure Raven with a DSN and extra options\n     *\n     * @param {string} dsn The public Sentry DSN\n     * @param {object} options Set of global options [optional]\n     * @return {Raven}\n     */\n  config: function(dsn, options) {\n    var self = this;\n\n    if (self._globalServer) {\n      this._logDebug('error', 'Error: Raven has already been configured');\n      return self;\n    }\n    if (!dsn) return self;\n\n    var globalOptions = self._globalOptions;\n\n    // merge in options\n    if (options) {\n      each(options, function(key, value) {\n        // tags and extra are special and need to be put into context\n        if (key === 'tags' || key === 'extra' || key === 'user') {\n          self._globalContext[key] = value;\n        } else {\n          globalOptions[key] = value;\n        }\n      });\n    }\n\n    self.setDSN(dsn);\n\n    // \"Script error.\" is hard coded into browsers for errors that it can't read.\n    // this is the result of a script being pulled in from an external domain and CORS.\n    globalOptions.ignoreErrors.push(/^Script error\\.?$/);\n    globalOptions.ignoreErrors.push(/^Javascript error: Script error\\.? on line 0$/);\n\n    // join regexp rules into one big rule\n    globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);\n    globalOptions.ignoreUrls = globalOptions.ignoreUrls.length\n      ? joinRegExp(globalOptions.ignoreUrls)\n      : false;\n    globalOptions.whitelistUrls = globalOptions.whitelistUrls.length\n      ? joinRegExp(globalOptions.whitelistUrls)\n      : false;\n    globalOptions.includePaths = joinRegExp(globalOptions.includePaths);\n    globalOptions.maxBreadcrumbs = Math.max(\n      0,\n      Math.min(globalOptions.maxBreadcrumbs || 100, 100)\n    ); // default and hard limit is 100\n\n    var autoBreadcrumbDefaults = {\n      xhr: true,\n      console: true,\n      dom: true,\n      location: true,\n      sentry: true\n    };\n\n    var autoBreadcrumbs = globalOptions.autoBreadcrumbs;\n    if ({}.toString.call(autoBreadcrumbs) === '[object Object]') {\n      autoBreadcrumbs = objectMerge(autoBreadcrumbDefaults, autoBreadcrumbs);\n    } else if (autoBreadcrumbs !== false) {\n      autoBreadcrumbs = autoBreadcrumbDefaults;\n    }\n    globalOptions.autoBreadcrumbs = autoBreadcrumbs;\n\n    var instrumentDefaults = {\n      tryCatch: true\n    };\n\n    var instrument = globalOptions.instrument;\n    if ({}.toString.call(instrument) === '[object Object]') {\n      instrument = objectMerge(instrumentDefaults, instrument);\n    } else if (instrument !== false) {\n      instrument = instrumentDefaults;\n    }\n    globalOptions.instrument = instrument;\n\n    TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;\n\n    // return for chaining\n    return self;\n  },\n\n  /*\n     * Installs a global window.onerror error handler\n     * to capture and report uncaught exceptions.\n     * At this point, install() is required to be called due\n     * to the way TraceKit is set up.\n     *\n     * @return {Raven}\n     */\n  install: function() {\n    var self = this;\n    if (self.isSetup() && !self._isRavenInstalled) {\n      TraceKit.report.subscribe(function() {\n        self._handleOnErrorStackInfo.apply(self, arguments);\n      });\n\n      if (self._globalOptions.captureUnhandledRejections) {\n        self._attachPromiseRejectionHandler();\n      }\n\n      self._patchFunctionToString();\n\n      if (self._globalOptions.instrument && self._globalOptions.instrument.tryCatch) {\n        self._instrumentTryCatch();\n      }\n\n      if (self._globalOptions.autoBreadcrumbs) self._instrumentBreadcrumbs();\n\n      // Install all of the plugins\n      self._drainPlugins();\n\n      self._isRavenInstalled = true;\n    }\n\n    Error.stackTraceLimit = self._globalOptions.stackTraceLimit;\n    return this;\n  },\n\n  /*\n     * Set the DSN (can be called multiple time unlike config)\n     *\n     * @param {string} dsn The public Sentry DSN\n     */\n  setDSN: function(dsn) {\n    var self = this,\n      uri = self._parseDSN(dsn),\n      lastSlash = uri.path.lastIndexOf('/'),\n      path = uri.path.substr(1, lastSlash);\n\n    self._dsn = dsn;\n    self._globalKey = uri.user;\n    self._globalSecret = uri.pass && uri.pass.substr(1);\n    self._globalProject = uri.path.substr(lastSlash + 1);\n\n    self._globalServer = self._getGlobalServer(uri);\n\n    self._globalEndpoint =\n      self._globalServer + '/' + path + 'api/' + self._globalProject + '/store/';\n\n    // Reset backoff state since we may be pointing at a\n    // new project/server\n    this._resetBackoff();\n  },\n\n  /*\n     * Wrap code within a context so Raven can capture errors\n     * reliably across domains that is executed immediately.\n     *\n     * @param {object} options A specific set of options for this context [optional]\n     * @param {function} func The callback to be immediately executed within the context\n     * @param {array} args An array of arguments to be called with the callback [optional]\n     */\n  context: function(options, func, args) {\n    if (isFunction(options)) {\n      args = func || [];\n      func = options;\n      options = {};\n    }\n\n    return this.wrap(options, func).apply(this, args);\n  },\n\n  /*\n     * Wrap code within a context and returns back a new function to be executed\n     *\n     * @param {object} options A specific set of options for this context [optional]\n     * @param {function} func The function to be wrapped in a new context\n     * @param {function} _before A function to call before the try/catch wrapper [optional, private]\n     * @return {function} The newly wrapped functions with a context\n     */\n  wrap: function(options, func, _before) {\n    var self = this;\n    // 1 argument has been passed, and it's not a function\n    // so just return it\n    if (isUndefined(func) && !isFunction(options)) {\n      return options;\n    }\n\n    // options is optional\n    if (isFunction(options)) {\n      func = options;\n      options = undefined;\n    }\n\n    // At this point, we've passed along 2 arguments, and the second one\n    // is not a function either, so we'll just return the second argument.\n    if (!isFunction(func)) {\n      return func;\n    }\n\n    // We don't wanna wrap it twice!\n    try {\n      if (func.__raven__) {\n        return func;\n      }\n\n      // If this has already been wrapped in the past, return that\n      if (func.__raven_wrapper__) {\n        return func.__raven_wrapper__;\n      }\n    } catch (e) {\n      // Just accessing custom props in some Selenium environments\n      // can cause a \"Permission denied\" exception (see raven-js#495).\n      // Bail on wrapping and return the function as-is (defers to window.onerror).\n      return func;\n    }\n\n    function wrapped() {\n      var args = [],\n        i = arguments.length,\n        deep = !options || (options && options.deep !== false);\n\n      if (_before && isFunction(_before)) {\n        _before.apply(this, arguments);\n      }\n\n      // Recursively wrap all of a function's arguments that are\n      // functions themselves.\n      while (i--) args[i] = deep ? self.wrap(options, arguments[i]) : arguments[i];\n\n      try {\n        // Attempt to invoke user-land function\n        // NOTE: If you are a Sentry user, and you are seeing this stack frame, it\n        //       means Raven caught an error invoking your application code. This is\n        //       expected behavior and NOT indicative of a bug with Raven.js.\n        return func.apply(this, args);\n      } catch (e) {\n        self._ignoreNextOnError();\n        self.captureException(e, options);\n        throw e;\n      }\n    }\n\n    // copy over properties of the old function\n    for (var property in func) {\n      if (hasKey(func, property)) {\n        wrapped[property] = func[property];\n      }\n    }\n    wrapped.prototype = func.prototype;\n\n    func.__raven_wrapper__ = wrapped;\n    // Signal that this function has been wrapped/filled already\n    // for both debugging and to prevent it to being wrapped/filled twice\n    wrapped.__raven__ = true;\n    wrapped.__orig__ = func;\n\n    return wrapped;\n  },\n\n  /**\n   * Uninstalls the global error handler.\n   *\n   * @return {Raven}\n   */\n  uninstall: function() {\n    TraceKit.report.uninstall();\n\n    this._detachPromiseRejectionHandler();\n    this._unpatchFunctionToString();\n    this._restoreBuiltIns();\n    this._restoreConsole();\n\n    Error.stackTraceLimit = this._originalErrorStackTraceLimit;\n    this._isRavenInstalled = false;\n\n    return this;\n  },\n\n  /**\n   * Callback used for `unhandledrejection` event\n   *\n   * @param {PromiseRejectionEvent} event An object containing\n   *   promise: the Promise that was rejected\n   *   reason: the value with which the Promise was rejected\n   * @return void\n   */\n  _promiseRejectionHandler: function(event) {\n    this._logDebug('debug', 'Raven caught unhandled promise rejection:', event);\n    this.captureException(event.reason, {\n      mechanism: {\n        type: 'onunhandledrejection',\n        handled: false\n      }\n    });\n  },\n\n  /**\n   * Installs the global promise rejection handler.\n   *\n   * @return {raven}\n   */\n  _attachPromiseRejectionHandler: function() {\n    this._promiseRejectionHandler = this._promiseRejectionHandler.bind(this);\n    _window.addEventListener &&\n      _window.addEventListener('unhandledrejection', this._promiseRejectionHandler);\n    return this;\n  },\n\n  /**\n   * Uninstalls the global promise rejection handler.\n   *\n   * @return {raven}\n   */\n  _detachPromiseRejectionHandler: function() {\n    _window.removeEventListener &&\n      _window.removeEventListener('unhandledrejection', this._promiseRejectionHandler);\n    return this;\n  },\n\n  /**\n   * Manually capture an exception and send it over to Sentry\n   *\n   * @param {error} ex An exception to be logged\n   * @param {object} options A specific set of options for this error [optional]\n   * @return {Raven}\n   */\n  captureException: function(ex, options) {\n    options = objectMerge({trimHeadFrames: 0}, options ? options : {});\n\n    if (isErrorEvent(ex) && ex.error) {\n      // If it is an ErrorEvent with `error` property, extract it to get actual Error\n      ex = ex.error;\n    } else if (isDOMError(ex) || isDOMException(ex)) {\n      // If it is a DOMError or DOMException (which are legacy APIs, but still supported in some browsers)\n      // then we just extract the name and message, as they don't provide anything else\n      // https://developer.mozilla.org/en-US/docs/Web/API/DOMError\n      // https://developer.mozilla.org/en-US/docs/Web/API/DOMException\n      var name = ex.name || (isDOMError(ex) ? 'DOMError' : 'DOMException');\n      var message = ex.message ? name + ': ' + ex.message : name;\n\n      return this.captureMessage(\n        message,\n        objectMerge(options, {\n          // neither DOMError or DOMException provide stack trace and we most likely wont get it this way as well\n          // but it's barely any overhead so we may at least try\n          stacktrace: true,\n          trimHeadFrames: options.trimHeadFrames + 1\n        })\n      );\n    } else if (isError(ex)) {\n      // we have a real Error object\n      ex = ex;\n    } else if (isPlainObject(ex)) {\n      // If it is plain Object, serialize it manually and extract options\n      // This will allow us to group events based on top-level keys\n      // which is much better than creating new group when any key/value change\n      options = this._getCaptureExceptionOptionsFromPlainObject(options, ex);\n      ex = new Error(options.message);\n    } else {\n      // If none of previous checks were valid, then it means that\n      // it's not a DOMError/DOMException\n      // it's not a plain Object\n      // it's not a valid ErrorEvent (one with an error property)\n      // it's not an Error\n      // So bail out and capture it as a simple message:\n      return this.captureMessage(\n        ex,\n        objectMerge(options, {\n          stacktrace: true, // if we fall back to captureMessage, default to attempting a new trace\n          trimHeadFrames: options.trimHeadFrames + 1\n        })\n      );\n    }\n\n    // Store the raw exception object for potential debugging and introspection\n    this._lastCapturedException = ex;\n\n    // TraceKit.report will re-raise any exception passed to it,\n    // which means you have to wrap it in try/catch. Instead, we\n    // can wrap it here and only re-raise if TraceKit.report\n    // raises an exception different from the one we asked to\n    // report on.\n    try {\n      var stack = TraceKit.computeStackTrace(ex);\n      this._handleStackInfo(stack, options);\n    } catch (ex1) {\n      if (ex !== ex1) {\n        throw ex1;\n      }\n    }\n\n    return this;\n  },\n\n  _getCaptureExceptionOptionsFromPlainObject: function(currentOptions, ex) {\n    var exKeys = Object.keys(ex).sort();\n    var options = objectMerge(currentOptions, {\n      message:\n        'Non-Error exception captured with keys: ' + serializeKeysForMessage(exKeys),\n      fingerprint: [md5(exKeys)],\n      extra: currentOptions.extra || {}\n    });\n    options.extra.__serialized__ = serializeException(ex);\n\n    return options;\n  },\n\n  /*\n     * Manually send a message to Sentry\n     *\n     * @param {string} msg A plain message to be captured in Sentry\n     * @param {object} options A specific set of options for this message [optional]\n     * @return {Raven}\n     */\n  captureMessage: function(msg, options) {\n    // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an\n    // early call; we'll error on the side of logging anything called before configuration since it's\n    // probably something you should see:\n    if (\n      !!this._globalOptions.ignoreErrors.test &&\n      this._globalOptions.ignoreErrors.test(msg)\n    ) {\n      return;\n    }\n\n    options = options || {};\n    msg = msg + ''; // Make sure it's actually a string\n\n    var data = objectMerge(\n      {\n        message: msg\n      },\n      options\n    );\n\n    var ex;\n    // Generate a \"synthetic\" stack trace from this point.\n    // NOTE: If you are a Sentry user, and you are seeing this stack frame, it is NOT indicative\n    //       of a bug with Raven.js. Sentry generates synthetic traces either by configuration,\n    //       or if it catches a thrown object without a \"stack\" property.\n    try {\n      throw new Error(msg);\n    } catch (ex1) {\n      ex = ex1;\n    }\n\n    // null exception name so `Error` isn't prefixed to msg\n    ex.name = null;\n    var stack = TraceKit.computeStackTrace(ex);\n\n    // stack[0] is `throw new Error(msg)` call itself, we are interested in the frame that was just before that, stack[1]\n    var initialCall = isArray(stack.stack) && stack.stack[1];\n\n    // if stack[1] is `Raven.captureException`, it means that someone passed a string to it and we redirected that call\n    // to be handled by `captureMessage`, thus `initialCall` is the 3rd one, not 2nd\n    // initialCall => captureException(string) => captureMessage(string)\n    if (initialCall && initialCall.func === 'Raven.captureException') {\n      initialCall = stack.stack[2];\n    }\n\n    var fileurl = (initialCall && initialCall.url) || '';\n\n    if (\n      !!this._globalOptions.ignoreUrls.test &&\n      this._globalOptions.ignoreUrls.test(fileurl)\n    ) {\n      return;\n    }\n\n    if (\n      !!this._globalOptions.whitelistUrls.test &&\n      !this._globalOptions.whitelistUrls.test(fileurl)\n    ) {\n      return;\n    }\n\n    // Always attempt to get stacktrace if message is empty.\n    // It's the only way to provide any helpful information to the user.\n    if (this._globalOptions.stacktrace || options.stacktrace || data.message === '') {\n      // fingerprint on msg, not stack trace (legacy behavior, could be revisited)\n      data.fingerprint = data.fingerprint == null ? msg : data.fingerprint;\n\n      options = objectMerge(\n        {\n          trimHeadFrames: 0\n        },\n        options\n      );\n      // Since we know this is a synthetic trace, the top frame (this function call)\n      // MUST be from Raven.js, so mark it for trimming\n      // We add to the trim counter so that callers can choose to trim extra frames, such\n      // as utility functions.\n      options.trimHeadFrames += 1;\n\n      var frames = this._prepareFrames(stack, options);\n      data.stacktrace = {\n        // Sentry expects frames oldest to newest\n        frames: frames.reverse()\n      };\n    }\n\n    // Make sure that fingerprint is always wrapped in an array\n    if (data.fingerprint) {\n      data.fingerprint = isArray(data.fingerprint)\n        ? data.fingerprint\n        : [data.fingerprint];\n    }\n\n    // Fire away!\n    this._send(data);\n\n    return this;\n  },\n\n  captureBreadcrumb: function(obj) {\n    var crumb = objectMerge(\n      {\n        timestamp: now() / 1000\n      },\n      obj\n    );\n\n    if (isFunction(this._globalOptions.breadcrumbCallback)) {\n      var result = this._globalOptions.breadcrumbCallback(crumb);\n\n      if (isObject(result) && !isEmptyObject(result)) {\n        crumb = result;\n      } else if (result === false) {\n        return this;\n      }\n    }\n\n    this._breadcrumbs.push(crumb);\n    if (this._breadcrumbs.length > this._globalOptions.maxBreadcrumbs) {\n      this._breadcrumbs.shift();\n    }\n    return this;\n  },\n\n  addPlugin: function(plugin /*arg1, arg2, ... argN*/) {\n    var pluginArgs = [].slice.call(arguments, 1);\n\n    this._plugins.push([plugin, pluginArgs]);\n    if (this._isRavenInstalled) {\n      this._drainPlugins();\n    }\n\n    return this;\n  },\n\n  /*\n     * Set/clear a user to be sent along with the payload.\n     *\n     * @param {object} user An object representing user data [optional]\n     * @return {Raven}\n     */\n  setUserContext: function(user) {\n    // Intentionally do not merge here since that's an unexpected behavior.\n    this._globalContext.user = user;\n\n    return this;\n  },\n\n  /*\n     * Merge extra attributes to be sent along with the payload.\n     *\n     * @param {object} extra An object representing extra data [optional]\n     * @return {Raven}\n     */\n  setExtraContext: function(extra) {\n    this._mergeContext('extra', extra);\n\n    return this;\n  },\n\n  /*\n     * Merge tags to be sent along with the payload.\n     *\n     * @param {object} tags An object representing tags [optional]\n     * @return {Raven}\n     */\n  setTagsContext: function(tags) {\n    this._mergeContext('tags', tags);\n\n    return this;\n  },\n\n  /*\n     * Clear all of the context.\n     *\n     * @return {Raven}\n     */\n  clearContext: function() {\n    this._globalContext = {};\n\n    return this;\n  },\n\n  /*\n     * Get a copy of the current context. This cannot be mutated.\n     *\n     * @return {object} copy of context\n     */\n  getContext: function() {\n    // lol javascript\n    return JSON.parse(stringify(this._globalContext));\n  },\n\n  /*\n     * Set environment of application\n     *\n     * @param {string} environment Typically something like 'production'.\n     * @return {Raven}\n     */\n  setEnvironment: function(environment) {\n    this._globalOptions.environment = environment;\n\n    return this;\n  },\n\n  /*\n     * Set release version of application\n     *\n     * @param {string} release Typically something like a git SHA to identify version\n     * @return {Raven}\n     */\n  setRelease: function(release) {\n    this._globalOptions.release = release;\n\n    return this;\n  },\n\n  /*\n     * Set the dataCallback option\n     *\n     * @param {function} callback The callback to run which allows the\n     *                            data blob to be mutated before sending\n     * @return {Raven}\n     */\n  setDataCallback: function(callback) {\n    var original = this._globalOptions.dataCallback;\n    this._globalOptions.dataCallback = keepOriginalCallback(original, callback);\n    return this;\n  },\n\n  /*\n     * Set the breadcrumbCallback option\n     *\n     * @param {function} callback The callback to run which allows filtering\n     *                            or mutating breadcrumbs\n     * @return {Raven}\n     */\n  setBreadcrumbCallback: function(callback) {\n    var original = this._globalOptions.breadcrumbCallback;\n    this._globalOptions.breadcrumbCallback = keepOriginalCallback(original, callback);\n    return this;\n  },\n\n  /*\n     * Set the shouldSendCallback option\n     *\n     * @param {function} callback The callback to run which allows\n     *                            introspecting the blob before sending\n     * @return {Raven}\n     */\n  setShouldSendCallback: function(callback) {\n    var original = this._globalOptions.shouldSendCallback;\n    this._globalOptions.shouldSendCallback = keepOriginalCallback(original, callback);\n    return this;\n  },\n\n  /**\n   * Override the default HTTP transport mechanism that transmits data\n   * to the Sentry server.\n   *\n   * @param {function} transport Function invoked instead of the default\n   *                             `makeRequest` handler.\n   *\n   * @return {Raven}\n   */\n  setTransport: function(transport) {\n    this._globalOptions.transport = transport;\n\n    return this;\n  },\n\n  /*\n     * Get the latest raw exception that was captured by Raven.\n     *\n     * @return {error}\n     */\n  lastException: function() {\n    return this._lastCapturedException;\n  },\n\n  /*\n     * Get the last event id\n     *\n     * @return {string}\n     */\n  lastEventId: function() {\n    return this._lastEventId;\n  },\n\n  /*\n     * Determine if Raven is setup and ready to go.\n     *\n     * @return {boolean}\n     */\n  isSetup: function() {\n    if (!this._hasJSON) return false; // needs JSON support\n    if (!this._globalServer) {\n      if (!this.ravenNotConfiguredError) {\n        this.ravenNotConfiguredError = true;\n        this._logDebug('error', 'Error: Raven has not been configured.');\n      }\n      return false;\n    }\n    return true;\n  },\n\n  afterLoad: function() {\n    // TODO: remove window dependence?\n\n    // Attempt to initialize Raven on load\n    var RavenConfig = _window.RavenConfig;\n    if (RavenConfig) {\n      this.config(RavenConfig.dsn, RavenConfig.config).install();\n    }\n  },\n\n  showReportDialog: function(options) {\n    if (\n      !_document // doesn't work without a document (React native)\n    )\n      return;\n\n    options = objectMerge(\n      {\n        eventId: this.lastEventId(),\n        dsn: this._dsn,\n        user: this._globalContext.user || {}\n      },\n      options\n    );\n\n    if (!options.eventId) {\n      throw new RavenConfigError('Missing eventId');\n    }\n\n    if (!options.dsn) {\n      throw new RavenConfigError('Missing DSN');\n    }\n\n    var encode = encodeURIComponent;\n    var encodedOptions = [];\n\n    for (var key in options) {\n      if (key === 'user') {\n        var user = options.user;\n        if (user.name) encodedOptions.push('name=' + encode(user.name));\n        if (user.email) encodedOptions.push('email=' + encode(user.email));\n      } else {\n        encodedOptions.push(encode(key) + '=' + encode(options[key]));\n      }\n    }\n    var globalServer = this._getGlobalServer(this._parseDSN(options.dsn));\n\n    var script = _document.createElement('script');\n    script.async = true;\n    script.src = globalServer + '/api/embed/error-page/?' + encodedOptions.join('&');\n    (_document.head || _document.body).appendChild(script);\n  },\n\n  /**** Private functions ****/\n  _ignoreNextOnError: function() {\n    var self = this;\n    this._ignoreOnError += 1;\n    setTimeout(function() {\n      // onerror should trigger before setTimeout\n      self._ignoreOnError -= 1;\n    });\n  },\n\n  _triggerEvent: function(eventType, options) {\n    // NOTE: `event` is a native browser thing, so let's avoid conflicting wiht it\n    var evt, key;\n\n    if (!this._hasDocument) return;\n\n    options = options || {};\n\n    eventType = 'raven' + eventType.substr(0, 1).toUpperCase() + eventType.substr(1);\n\n    if (_document.createEvent) {\n      evt = _document.createEvent('HTMLEvents');\n      evt.initEvent(eventType, true, true);\n    } else {\n      evt = _document.createEventObject();\n      evt.eventType = eventType;\n    }\n\n    for (key in options)\n      if (hasKey(options, key)) {\n        evt[key] = options[key];\n      }\n\n    if (_document.createEvent) {\n      // IE9 if standards\n      _document.dispatchEvent(evt);\n    } else {\n      // IE8 regardless of Quirks or Standards\n      // IE9 if quirks\n      try {\n        _document.fireEvent('on' + evt.eventType.toLowerCase(), evt);\n      } catch (e) {\n        // Do nothing\n      }\n    }\n  },\n\n  /**\n   * Wraps addEventListener to capture UI breadcrumbs\n   * @param evtName the event name (e.g. \"click\")\n   * @returns {Function}\n   * @private\n   */\n  _breadcrumbEventHandler: function(evtName) {\n    var self = this;\n    return function(evt) {\n      // reset keypress timeout; e.g. triggering a 'click' after\n      // a 'keypress' will reset the keypress debounce so that a new\n      // set of keypresses can be recorded\n      self._keypressTimeout = null;\n\n      // It's possible this handler might trigger multiple times for the same\n      // event (e.g. event propagation through node ancestors). Ignore if we've\n      // already captured the event.\n      if (self._lastCapturedEvent === evt) return;\n\n      self._lastCapturedEvent = evt;\n\n      // try/catch both:\n      // - accessing evt.target (see getsentry/raven-js#838, #768)\n      // - `htmlTreeAsString` because it's complex, and just accessing the DOM incorrectly\n      //   can throw an exception in some circumstances.\n      var target;\n      try {\n        target = htmlTreeAsString(evt.target);\n      } catch (e) {\n        target = '<unknown>';\n      }\n\n      self.captureBreadcrumb({\n        category: 'ui.' + evtName, // e.g. ui.click, ui.input\n        message: target\n      });\n    };\n  },\n\n  /**\n   * Wraps addEventListener to capture keypress UI events\n   * @returns {Function}\n   * @private\n   */\n  _keypressEventHandler: function() {\n    var self = this,\n      debounceDuration = 1000; // milliseconds\n\n    // TODO: if somehow user switches keypress target before\n    //       debounce timeout is triggered, we will only capture\n    //       a single breadcrumb from the FIRST target (acceptable?)\n    return function(evt) {\n      var target;\n      try {\n        target = evt.target;\n      } catch (e) {\n        // just accessing event properties can throw an exception in some rare circumstances\n        // see: https://github.com/getsentry/raven-js/issues/838\n        return;\n      }\n      var tagName = target && target.tagName;\n\n      // only consider keypress events on actual input elements\n      // this will disregard keypresses targeting body (e.g. tabbing\n      // through elements, hotkeys, etc)\n      if (\n        !tagName ||\n        (tagName !== 'INPUT' && tagName !== 'TEXTAREA' && !target.isContentEditable)\n      )\n        return;\n\n      // record first keypress in a series, but ignore subsequent\n      // keypresses until debounce clears\n      var timeout = self._keypressTimeout;\n      if (!timeout) {\n        self._breadcrumbEventHandler('input')(evt);\n      }\n      clearTimeout(timeout);\n      self._keypressTimeout = setTimeout(function() {\n        self._keypressTimeout = null;\n      }, debounceDuration);\n    };\n  },\n\n  /**\n   * Captures a breadcrumb of type \"navigation\", normalizing input URLs\n   * @param to the originating URL\n   * @param from the target URL\n   * @private\n   */\n  _captureUrlChange: function(from, to) {\n    var parsedLoc = parseUrl(this._location.href);\n    var parsedTo = parseUrl(to);\n    var parsedFrom = parseUrl(from);\n\n    // because onpopstate only tells you the \"new\" (to) value of location.href, and\n    // not the previous (from) value, we need to track the value of the current URL\n    // state ourselves\n    this._lastHref = to;\n\n    // Use only the path component of the URL if the URL matches the current\n    // document (almost all the time when using pushState)\n    if (parsedLoc.protocol === parsedTo.protocol && parsedLoc.host === parsedTo.host)\n      to = parsedTo.relative;\n    if (parsedLoc.protocol === parsedFrom.protocol && parsedLoc.host === parsedFrom.host)\n      from = parsedFrom.relative;\n\n    this.captureBreadcrumb({\n      category: 'navigation',\n      data: {\n        to: to,\n        from: from\n      }\n    });\n  },\n\n  _patchFunctionToString: function() {\n    var self = this;\n    self._originalFunctionToString = Function.prototype.toString;\n    // eslint-disable-next-line no-extend-native\n    Function.prototype.toString = function() {\n      if (typeof this === 'function' && this.__raven__) {\n        return self._originalFunctionToString.apply(this.__orig__, arguments);\n      }\n      return self._originalFunctionToString.apply(this, arguments);\n    };\n  },\n\n  _unpatchFunctionToString: function() {\n    if (this._originalFunctionToString) {\n      // eslint-disable-next-line no-extend-native\n      Function.prototype.toString = this._originalFunctionToString;\n    }\n  },\n\n  /**\n   * Wrap timer functions and event targets to catch errors and provide\n   * better metadata.\n   */\n  _instrumentTryCatch: function() {\n    var self = this;\n\n    var wrappedBuiltIns = self._wrappedBuiltIns;\n\n    function wrapTimeFn(orig) {\n      return function(fn, t) {\n        // preserve arity\n        // Make a copy of the arguments to prevent deoptimization\n        // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n        var args = new Array(arguments.length);\n        for (var i = 0; i < args.length; ++i) {\n          args[i] = arguments[i];\n        }\n        var originalCallback = args[0];\n        if (isFunction(originalCallback)) {\n          args[0] = self.wrap(\n            {\n              mechanism: {\n                type: 'instrument',\n                data: {function: orig.name || '<anonymous>'}\n              }\n            },\n            originalCallback\n          );\n        }\n\n        // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it\n        // also supports only two arguments and doesn't care what this is, so we\n        // can just call the original function directly.\n        if (orig.apply) {\n          return orig.apply(this, args);\n        } else {\n          return orig(args[0], args[1]);\n        }\n      };\n    }\n\n    var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n    function wrapEventTarget(global) {\n      var proto = _window[global] && _window[global].prototype;\n      if (proto && proto.hasOwnProperty && proto.hasOwnProperty('addEventListener')) {\n        fill(\n          proto,\n          'addEventListener',\n          function(orig) {\n            return function(evtName, fn, capture, secure) {\n              // preserve arity\n              try {\n                if (fn && fn.handleEvent) {\n                  fn.handleEvent = self.wrap(\n                    {\n                      mechanism: {\n                        type: 'instrument',\n                        data: {\n                          target: global,\n                          function: 'handleEvent',\n                          handler: (fn && fn.name) || '<anonymous>'\n                        }\n                      }\n                    },\n                    fn.handleEvent\n                  );\n                }\n              } catch (err) {\n                // can sometimes get 'Permission denied to access property \"handle Event'\n              }\n\n              // More breadcrumb DOM capture ... done here and not in `_instrumentBreadcrumbs`\n              // so that we don't have more than one wrapper function\n              var before, clickHandler, keypressHandler;\n\n              if (\n                autoBreadcrumbs &&\n                autoBreadcrumbs.dom &&\n                (global === 'EventTarget' || global === 'Node')\n              ) {\n                // NOTE: generating multiple handlers per addEventListener invocation, should\n                //       revisit and verify we can just use one (almost certainly)\n                clickHandler = self._breadcrumbEventHandler('click');\n                keypressHandler = self._keypressEventHandler();\n                before = function(evt) {\n                  // need to intercept every DOM event in `before` argument, in case that\n                  // same wrapped method is re-used for different events (e.g. mousemove THEN click)\n                  // see #724\n                  if (!evt) return;\n\n                  var eventType;\n                  try {\n                    eventType = evt.type;\n                  } catch (e) {\n                    // just accessing event properties can throw an exception in some rare circumstances\n                    // see: https://github.com/getsentry/raven-js/issues/838\n                    return;\n                  }\n                  if (eventType === 'click') return clickHandler(evt);\n                  else if (eventType === 'keypress') return keypressHandler(evt);\n                };\n              }\n              return orig.call(\n                this,\n                evtName,\n                self.wrap(\n                  {\n                    mechanism: {\n                      type: 'instrument',\n                      data: {\n                        target: global,\n                        function: 'addEventListener',\n                        handler: (fn && fn.name) || '<anonymous>'\n                      }\n                    }\n                  },\n                  fn,\n                  before\n                ),\n                capture,\n                secure\n              );\n            };\n          },\n          wrappedBuiltIns\n        );\n        fill(\n          proto,\n          'removeEventListener',\n          function(orig) {\n            return function(evt, fn, capture, secure) {\n              try {\n                fn = fn && (fn.__raven_wrapper__ ? fn.__raven_wrapper__ : fn);\n              } catch (e) {\n                // ignore, accessing __raven_wrapper__ will throw in some Selenium environments\n              }\n              return orig.call(this, evt, fn, capture, secure);\n            };\n          },\n          wrappedBuiltIns\n        );\n      }\n    }\n\n    fill(_window, 'setTimeout', wrapTimeFn, wrappedBuiltIns);\n    fill(_window, 'setInterval', wrapTimeFn, wrappedBuiltIns);\n    if (_window.requestAnimationFrame) {\n      fill(\n        _window,\n        'requestAnimationFrame',\n        function(orig) {\n          return function(cb) {\n            return orig(\n              self.wrap(\n                {\n                  mechanism: {\n                    type: 'instrument',\n                    data: {\n                      function: 'requestAnimationFrame',\n                      handler: (orig && orig.name) || '<anonymous>'\n                    }\n                  }\n                },\n                cb\n              )\n            );\n          };\n        },\n        wrappedBuiltIns\n      );\n    }\n\n    // event targets borrowed from bugsnag-js:\n    // https://github.com/bugsnag/bugsnag-js/blob/master/src/bugsnag.js#L666\n    var eventTargets = [\n      'EventTarget',\n      'Window',\n      'Node',\n      'ApplicationCache',\n      'AudioTrackList',\n      'ChannelMergerNode',\n      'CryptoOperation',\n      'EventSource',\n      'FileReader',\n      'HTMLUnknownElement',\n      'IDBDatabase',\n      'IDBRequest',\n      'IDBTransaction',\n      'KeyOperation',\n      'MediaController',\n      'MessagePort',\n      'ModalWindow',\n      'Notification',\n      'SVGElementInstance',\n      'Screen',\n      'TextTrack',\n      'TextTrackCue',\n      'TextTrackList',\n      'WebSocket',\n      'WebSocketWorker',\n      'Worker',\n      'XMLHttpRequest',\n      'XMLHttpRequestEventTarget',\n      'XMLHttpRequestUpload'\n    ];\n    for (var i = 0; i < eventTargets.length; i++) {\n      wrapEventTarget(eventTargets[i]);\n    }\n  },\n\n  /**\n   * Instrument browser built-ins w/ breadcrumb capturing\n   *  - XMLHttpRequests\n   *  - DOM interactions (click/typing)\n   *  - window.location changes\n   *  - console\n   *\n   * Can be disabled or individually configured via the `autoBreadcrumbs` config option\n   */\n  _instrumentBreadcrumbs: function() {\n    var self = this;\n    var autoBreadcrumbs = this._globalOptions.autoBreadcrumbs;\n\n    var wrappedBuiltIns = self._wrappedBuiltIns;\n\n    function wrapProp(prop, xhr) {\n      if (prop in xhr && isFunction(xhr[prop])) {\n        fill(xhr, prop, function(orig) {\n          return self.wrap(\n            {\n              mechanism: {\n                type: 'instrument',\n                data: {function: prop, handler: (orig && orig.name) || '<anonymous>'}\n              }\n            },\n            orig\n          );\n        }); // intentionally don't track filled methods on XHR instances\n      }\n    }\n\n    if (autoBreadcrumbs.xhr && 'XMLHttpRequest' in _window) {\n      var xhrproto = _window.XMLHttpRequest && _window.XMLHttpRequest.prototype;\n      fill(\n        xhrproto,\n        'open',\n        function(origOpen) {\n          return function(method, url) {\n            // preserve arity\n\n            // if Sentry key appears in URL, don't capture\n            if (isString(url) && url.indexOf(self._globalKey) === -1) {\n              this.__raven_xhr = {\n                method: method,\n                url: url,\n                status_code: null\n              };\n            }\n\n            return origOpen.apply(this, arguments);\n          };\n        },\n        wrappedBuiltIns\n      );\n\n      fill(\n        xhrproto,\n        'send',\n        function(origSend) {\n          return function() {\n            // preserve arity\n            var xhr = this;\n\n            function onreadystatechangeHandler() {\n              if (xhr.__raven_xhr && xhr.readyState === 4) {\n                try {\n                  // touching statusCode in some platforms throws\n                  // an exception\n                  xhr.__raven_xhr.status_code = xhr.status;\n                } catch (e) {\n                  /* do nothing */\n                }\n\n                self.captureBreadcrumb({\n                  type: 'http',\n                  category: 'xhr',\n                  data: xhr.__raven_xhr\n                });\n              }\n            }\n\n            var props = ['onload', 'onerror', 'onprogress'];\n            for (var j = 0; j < props.length; j++) {\n              wrapProp(props[j], xhr);\n            }\n\n            if ('onreadystatechange' in xhr && isFunction(xhr.onreadystatechange)) {\n              fill(\n                xhr,\n                'onreadystatechange',\n                function(orig) {\n                  return self.wrap(\n                    {\n                      mechanism: {\n                        type: 'instrument',\n                        data: {\n                          function: 'onreadystatechange',\n                          handler: (orig && orig.name) || '<anonymous>'\n                        }\n                      }\n                    },\n                    orig,\n                    onreadystatechangeHandler\n                  );\n                } /* intentionally don't track this instrumentation */\n              );\n            } else {\n              // if onreadystatechange wasn't actually set by the page on this xhr, we\n              // are free to set our own and capture the breadcrumb\n              xhr.onreadystatechange = onreadystatechangeHandler;\n            }\n\n            return origSend.apply(this, arguments);\n          };\n        },\n        wrappedBuiltIns\n      );\n    }\n\n    if (autoBreadcrumbs.xhr && supportsFetch()) {\n      fill(\n        _window,\n        'fetch',\n        function(origFetch) {\n          return function() {\n            // preserve arity\n            // Make a copy of the arguments to prevent deoptimization\n            // https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n            var args = new Array(arguments.length);\n            for (var i = 0; i < args.length; ++i) {\n              args[i] = arguments[i];\n            }\n\n            var fetchInput = args[0];\n            var method = 'GET';\n            var url;\n\n            if (typeof fetchInput === 'string') {\n              url = fetchInput;\n            } else if ('Request' in _window && fetchInput instanceof _window.Request) {\n              url = fetchInput.url;\n              if (fetchInput.method) {\n                method = fetchInput.method;\n              }\n            } else {\n              url = '' + fetchInput;\n            }\n\n            // if Sentry key appears in URL, don't capture, as it's our own request\n            if (url.indexOf(self._globalKey) !== -1) {\n              return origFetch.apply(this, args);\n            }\n\n            if (args[1] && args[1].method) {\n              method = args[1].method;\n            }\n\n            var fetchData = {\n              method: method,\n              url: url,\n              status_code: null\n            };\n\n            return origFetch\n              .apply(this, args)\n              .then(function(response) {\n                fetchData.status_code = response.status;\n\n                self.captureBreadcrumb({\n                  type: 'http',\n                  category: 'fetch',\n                  data: fetchData\n                });\n\n                return response;\n              })\n              ['catch'](function(err) {\n                // if there is an error performing the request\n                self.captureBreadcrumb({\n                  type: 'http',\n                  category: 'fetch',\n                  data: fetchData,\n                  level: 'error'\n                });\n\n                throw err;\n              });\n          };\n        },\n        wrappedBuiltIns\n      );\n    }\n\n    // Capture breadcrumbs from any click that is unhandled / bubbled up all the way\n    // to the document. Do this before we instrument addEventListener.\n    if (autoBreadcrumbs.dom && this._hasDocument) {\n      if (_document.addEventListener) {\n        _document.addEventListener('click', self._breadcrumbEventHandler('click'), false);\n        _document.addEventListener('keypress', self._keypressEventHandler(), false);\n      } else if (_document.attachEvent) {\n        // IE8 Compatibility\n        _document.attachEvent('onclick', self._breadcrumbEventHandler('click'));\n        _document.attachEvent('onkeypress', self._keypressEventHandler());\n      }\n    }\n\n    // record navigation (URL) changes\n    // NOTE: in Chrome App environment, touching history.pushState, *even inside\n    //       a try/catch block*, will cause Chrome to output an error to console.error\n    // borrowed from: https://github.com/angular/angular.js/pull/13945/files\n    var chrome = _window.chrome;\n    var isChromePackagedApp = chrome && chrome.app && chrome.app.runtime;\n    var hasPushAndReplaceState =\n      !isChromePackagedApp &&\n      _window.history &&\n      _window.history.pushState &&\n      _window.history.replaceState;\n    if (autoBreadcrumbs.location && hasPushAndReplaceState) {\n      // TODO: remove onpopstate handler on uninstall()\n      var oldOnPopState = _window.onpopstate;\n      _window.onpopstate = function() {\n        var currentHref = self._location.href;\n        self._captureUrlChange(self._lastHref, currentHref);\n\n        if (oldOnPopState) {\n          return oldOnPopState.apply(this, arguments);\n        }\n      };\n\n      var historyReplacementFunction = function(origHistFunction) {\n        // note history.pushState.length is 0; intentionally not declaring\n        // params to preserve 0 arity\n        return function(/* state, title, url */) {\n          var url = arguments.length > 2 ? arguments[2] : undefined;\n\n          // url argument is optional\n          if (url) {\n            // coerce to string (this is what pushState does)\n            self._captureUrlChange(self._lastHref, url + '');\n          }\n\n          return origHistFunction.apply(this, arguments);\n        };\n      };\n\n      fill(_window.history, 'pushState', historyReplacementFunction, wrappedBuiltIns);\n      fill(_window.history, 'replaceState', historyReplacementFunction, wrappedBuiltIns);\n    }\n\n    if (autoBreadcrumbs.console && 'console' in _window && console.log) {\n      // console\n      var consoleMethodCallback = function(msg, data) {\n        self.captureBreadcrumb({\n          message: msg,\n          level: data.level,\n          category: 'console'\n        });\n      };\n\n      each(['debug', 'info', 'warn', 'error', 'log'], function(_, level) {\n        wrapConsoleMethod(console, level, consoleMethodCallback);\n      });\n    }\n  },\n\n  _restoreBuiltIns: function() {\n    // restore any wrapped builtins\n    var builtin;\n    while (this._wrappedBuiltIns.length) {\n      builtin = this._wrappedBuiltIns.shift();\n\n      var obj = builtin[0],\n        name = builtin[1],\n        orig = builtin[2];\n\n      obj[name] = orig;\n    }\n  },\n\n  _restoreConsole: function() {\n    // eslint-disable-next-line guard-for-in\n    for (var method in this._originalConsoleMethods) {\n      this._originalConsole[method] = this._originalConsoleMethods[method];\n    }\n  },\n\n  _drainPlugins: function() {\n    var self = this;\n\n    // FIX ME TODO\n    each(this._plugins, function(_, plugin) {\n      var installer = plugin[0];\n      var args = plugin[1];\n      installer.apply(self, [self].concat(args));\n    });\n  },\n\n  _parseDSN: function(str) {\n    var m = dsnPattern.exec(str),\n      dsn = {},\n      i = 7;\n\n    try {\n      while (i--) dsn[dsnKeys[i]] = m[i] || '';\n    } catch (e) {\n      throw new RavenConfigError('Invalid DSN: ' + str);\n    }\n\n    if (dsn.pass && !this._globalOptions.allowSecretKey) {\n      throw new RavenConfigError(\n        'Do not specify your secret key in the DSN. See: http://bit.ly/raven-secret-key'\n      );\n    }\n\n    return dsn;\n  },\n\n  _getGlobalServer: function(uri) {\n    // assemble the endpoint from the uri pieces\n    var globalServer = '//' + uri.host + (uri.port ? ':' + uri.port : '');\n\n    if (uri.protocol) {\n      globalServer = uri.protocol + ':' + globalServer;\n    }\n    return globalServer;\n  },\n\n  _handleOnErrorStackInfo: function(stackInfo, options) {\n    options = options || {};\n    options.mechanism = options.mechanism || {\n      type: 'onerror',\n      handled: false\n    };\n\n    // if we are intentionally ignoring errors via onerror, bail out\n    if (!this._ignoreOnError) {\n      this._handleStackInfo(stackInfo, options);\n    }\n  },\n\n  _handleStackInfo: function(stackInfo, options) {\n    var frames = this._prepareFrames(stackInfo, options);\n\n    this._triggerEvent('handle', {\n      stackInfo: stackInfo,\n      options: options\n    });\n\n    this._processException(\n      stackInfo.name,\n      stackInfo.message,\n      stackInfo.url,\n      stackInfo.lineno,\n      frames,\n      options\n    );\n  },\n\n  _prepareFrames: function(stackInfo, options) {\n    var self = this;\n    var frames = [];\n    if (stackInfo.stack && stackInfo.stack.length) {\n      each(stackInfo.stack, function(i, stack) {\n        var frame = self._normalizeFrame(stack, stackInfo.url);\n        if (frame) {\n          frames.push(frame);\n        }\n      });\n\n      // e.g. frames captured via captureMessage throw\n      if (options && options.trimHeadFrames) {\n        for (var j = 0; j < options.trimHeadFrames && j < frames.length; j++) {\n          frames[j].in_app = false;\n        }\n      }\n    }\n    frames = frames.slice(0, this._globalOptions.stackTraceLimit);\n    return frames;\n  },\n\n  _normalizeFrame: function(frame, stackInfoUrl) {\n    // normalize the frames data\n    var normalized = {\n      filename: frame.url,\n      lineno: frame.line,\n      colno: frame.column,\n      function: frame.func || '?'\n    };\n\n    // Case when we don't have any information about the error\n    // E.g. throwing a string or raw object, instead of an `Error` in Firefox\n    // Generating synthetic error doesn't add any value here\n    //\n    // We should probably somehow let a user know that they should fix their code\n    if (!frame.url) {\n      normalized.filename = stackInfoUrl; // fallback to whole stacks url from onerror handler\n    }\n\n    normalized.in_app = !// determine if an exception came from outside of our app\n    // first we check the global includePaths list.\n    (\n      (!!this._globalOptions.includePaths.test &&\n        !this._globalOptions.includePaths.test(normalized.filename)) ||\n      // Now we check for fun, if the function name is Raven or TraceKit\n      /(Raven|TraceKit)\\./.test(normalized['function']) ||\n      // finally, we do a last ditch effort and check for raven.min.js\n      /raven\\.(min\\.)?js$/.test(normalized.filename)\n    );\n\n    return normalized;\n  },\n\n  _processException: function(type, message, fileurl, lineno, frames, options) {\n    var prefixedMessage = (type ? type + ': ' : '') + (message || '');\n    if (\n      !!this._globalOptions.ignoreErrors.test &&\n      (this._globalOptions.ignoreErrors.test(message) ||\n        this._globalOptions.ignoreErrors.test(prefixedMessage))\n    ) {\n      return;\n    }\n\n    var stacktrace;\n\n    if (frames && frames.length) {\n      fileurl = frames[0].filename || fileurl;\n      // Sentry expects frames oldest to newest\n      // and JS sends them as newest to oldest\n      frames.reverse();\n      stacktrace = {frames: frames};\n    } else if (fileurl) {\n      stacktrace = {\n        frames: [\n          {\n            filename: fileurl,\n            lineno: lineno,\n            in_app: true\n          }\n        ]\n      };\n    }\n\n    if (\n      !!this._globalOptions.ignoreUrls.test &&\n      this._globalOptions.ignoreUrls.test(fileurl)\n    ) {\n      return;\n    }\n\n    if (\n      !!this._globalOptions.whitelistUrls.test &&\n      !this._globalOptions.whitelistUrls.test(fileurl)\n    ) {\n      return;\n    }\n\n    var data = objectMerge(\n      {\n        // sentry.interfaces.Exception\n        exception: {\n          values: [\n            {\n              type: type,\n              value: message,\n              stacktrace: stacktrace\n            }\n          ]\n        },\n        transaction: fileurl\n      },\n      options\n    );\n\n    var ex = data.exception.values[0];\n    if (ex.type == null && ex.value === '') {\n      ex.value = 'Unrecoverable error caught';\n    }\n\n    // Move mechanism from options to exception interface\n    // We do this, as requiring user to pass `{exception:{mechanism:{ ... }}}` would be\n    // too much\n    if (!data.exception.mechanism && data.mechanism) {\n      data.exception.mechanism = data.mechanism;\n      delete data.mechanism;\n    }\n\n    data.exception.mechanism = objectMerge(\n      {\n        type: 'generic',\n        handled: true\n      },\n      data.exception.mechanism || {}\n    );\n\n    // Fire away!\n    this._send(data);\n  },\n\n  _trimPacket: function(data) {\n    // For now, we only want to truncate the two different messages\n    // but this could/should be expanded to just trim everything\n    var max = this._globalOptions.maxMessageLength;\n    if (data.message) {\n      data.message = truncate(data.message, max);\n    }\n    if (data.exception) {\n      var exception = data.exception.values[0];\n      exception.value = truncate(exception.value, max);\n    }\n\n    var request = data.request;\n    if (request) {\n      if (request.url) {\n        request.url = truncate(request.url, this._globalOptions.maxUrlLength);\n      }\n      if (request.Referer) {\n        request.Referer = truncate(request.Referer, this._globalOptions.maxUrlLength);\n      }\n    }\n\n    if (data.breadcrumbs && data.breadcrumbs.values)\n      this._trimBreadcrumbs(data.breadcrumbs);\n\n    return data;\n  },\n\n  /**\n   * Truncate breadcrumb values (right now just URLs)\n   */\n  _trimBreadcrumbs: function(breadcrumbs) {\n    // known breadcrumb properties with urls\n    // TODO: also consider arbitrary prop values that start with (https?)?://\n    var urlProps = ['to', 'from', 'url'],\n      urlProp,\n      crumb,\n      data;\n\n    for (var i = 0; i < breadcrumbs.values.length; ++i) {\n      crumb = breadcrumbs.values[i];\n      if (\n        !crumb.hasOwnProperty('data') ||\n        !isObject(crumb.data) ||\n        objectFrozen(crumb.data)\n      )\n        continue;\n\n      data = objectMerge({}, crumb.data);\n      for (var j = 0; j < urlProps.length; ++j) {\n        urlProp = urlProps[j];\n        if (data.hasOwnProperty(urlProp) && data[urlProp]) {\n          data[urlProp] = truncate(data[urlProp], this._globalOptions.maxUrlLength);\n        }\n      }\n      breadcrumbs.values[i].data = data;\n    }\n  },\n\n  _getHttpData: function() {\n    if (!this._hasNavigator && !this._hasDocument) return;\n    var httpData = {};\n\n    if (this._hasNavigator && _navigator.userAgent) {\n      httpData.headers = {\n        'User-Agent': _navigator.userAgent\n      };\n    }\n\n    // Check in `window` instead of `document`, as we may be in ServiceWorker environment\n    if (_window.location && _window.location.href) {\n      httpData.url = _window.location.href;\n    }\n\n    if (this._hasDocument && _document.referrer) {\n      if (!httpData.headers) httpData.headers = {};\n      httpData.headers.Referer = _document.referrer;\n    }\n\n    return httpData;\n  },\n\n  _resetBackoff: function() {\n    this._backoffDuration = 0;\n    this._backoffStart = null;\n  },\n\n  _shouldBackoff: function() {\n    return this._backoffDuration && now() - this._backoffStart < this._backoffDuration;\n  },\n\n  /**\n   * Returns true if the in-process data payload matches the signature\n   * of the previously-sent data\n   *\n   * NOTE: This has to be done at this level because TraceKit can generate\n   *       data from window.onerror WITHOUT an exception object (IE8, IE9,\n   *       other old browsers). This can take the form of an \"exception\"\n   *       data object with a single frame (derived from the onerror args).\n   */\n  _isRepeatData: function(current) {\n    var last = this._lastData;\n\n    if (\n      !last ||\n      current.message !== last.message || // defined for captureMessage\n      current.transaction !== last.transaction // defined for captureException/onerror\n    )\n      return false;\n\n    // Stacktrace interface (i.e. from captureMessage)\n    if (current.stacktrace || last.stacktrace) {\n      return isSameStacktrace(current.stacktrace, last.stacktrace);\n    } else if (current.exception || last.exception) {\n      // Exception interface (i.e. from captureException/onerror)\n      return isSameException(current.exception, last.exception);\n    } else if (current.fingerprint || last.fingerprint) {\n      return Boolean(current.fingerprint && last.fingerprint) &&\n        JSON.stringify(current.fingerprint) === JSON.stringify(last.fingerprint)\n    }\n\n    return true;\n  },\n\n  _setBackoffState: function(request) {\n    // If we are already in a backoff state, don't change anything\n    if (this._shouldBackoff()) {\n      return;\n    }\n\n    var status = request.status;\n\n    // 400 - project_id doesn't exist or some other fatal\n    // 401 - invalid/revoked dsn\n    // 429 - too many requests\n    if (!(status === 400 || status === 401 || status === 429)) return;\n\n    var retry;\n    try {\n      // If Retry-After is not in Access-Control-Expose-Headers, most\n      // browsers will throw an exception trying to access it\n      if (supportsFetch()) {\n        retry = request.headers.get('Retry-After');\n      } else {\n        retry = request.getResponseHeader('Retry-After');\n      }\n\n      // Retry-After is returned in seconds\n      retry = parseInt(retry, 10) * 1000;\n    } catch (e) {\n      /* eslint no-empty:0 */\n    }\n\n    this._backoffDuration = retry\n      ? // If Sentry server returned a Retry-After value, use it\n        retry\n      : // Otherwise, double the last backoff duration (starts at 1 sec)\n        this._backoffDuration * 2 || 1000;\n\n    this._backoffStart = now();\n  },\n\n  _send: function(data) {\n    var globalOptions = this._globalOptions;\n\n    var baseData = {\n        project: this._globalProject,\n        logger: globalOptions.logger,\n        platform: 'javascript'\n      },\n      httpData = this._getHttpData();\n\n    if (httpData) {\n      baseData.request = httpData;\n    }\n\n    // HACK: delete `trimHeadFrames` to prevent from appearing in outbound payload\n    if (data.trimHeadFrames) delete data.trimHeadFrames;\n\n    data = objectMerge(baseData, data);\n\n    // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge\n    data.tags = objectMerge(objectMerge({}, this._globalContext.tags), data.tags);\n    data.extra = objectMerge(objectMerge({}, this._globalContext.extra), data.extra);\n\n    // Send along our own collected metadata with extra\n    data.extra['session:duration'] = now() - this._startTime;\n\n    if (this._breadcrumbs && this._breadcrumbs.length > 0) {\n      // intentionally make shallow copy so that additions\n      // to breadcrumbs aren't accidentally sent in this request\n      data.breadcrumbs = {\n        values: [].slice.call(this._breadcrumbs, 0)\n      };\n    }\n\n    if (this._globalContext.user) {\n      // sentry.interfaces.User\n      data.user = this._globalContext.user;\n    }\n\n    // Include the environment if it's defined in globalOptions\n    if (globalOptions.environment) data.environment = globalOptions.environment;\n\n    // Include the release if it's defined in globalOptions\n    if (globalOptions.release) data.release = globalOptions.release;\n\n    // Include server_name if it's defined in globalOptions\n    if (globalOptions.serverName) data.server_name = globalOptions.serverName;\n\n    data = this._sanitizeData(data);\n\n    // Cleanup empty properties before sending them to the server\n    Object.keys(data).forEach(function(key) {\n      if (data[key] == null || data[key] === '' || isEmptyObject(data[key])) {\n        delete data[key];\n      }\n    });\n\n    if (isFunction(globalOptions.dataCallback)) {\n      data = globalOptions.dataCallback(data) || data;\n    }\n\n    // Why??????????\n    if (!data || isEmptyObject(data)) {\n      return;\n    }\n\n    // Check if the request should be filtered or not\n    if (\n      isFunction(globalOptions.shouldSendCallback) &&\n      !globalOptions.shouldSendCallback(data)\n    ) {\n      return;\n    }\n\n    // Backoff state: Sentry server previously responded w/ an error (e.g. 429 - too many requests),\n    // so drop requests until \"cool-off\" period has elapsed.\n    if (this._shouldBackoff()) {\n      this._logDebug('warn', 'Raven dropped error due to backoff: ', data);\n      return;\n    }\n\n    if (typeof globalOptions.sampleRate === 'number') {\n      if (Math.random() < globalOptions.sampleRate) {\n        this._sendProcessedPayload(data);\n      }\n    } else {\n      this._sendProcessedPayload(data);\n    }\n  },\n\n  _sanitizeData: function(data) {\n    return sanitize(data, this._globalOptions.sanitizeKeys);\n  },\n\n  _getUuid: function() {\n    return uuid4();\n  },\n\n  _sendProcessedPayload: function(data, callback) {\n    var self = this;\n    var globalOptions = this._globalOptions;\n\n    if (!this.isSetup()) return;\n\n    // Try and clean up the packet before sending by truncating long values\n    data = this._trimPacket(data);\n\n    // ideally duplicate error testing should occur *before* dataCallback/shouldSendCallback,\n    // but this would require copying an un-truncated copy of the data packet, which can be\n    // arbitrarily deep (extra_data) -- could be worthwhile? will revisit\n    if (!this._globalOptions.allowDuplicates && this._isRepeatData(data)) {\n      this._logDebug('warn', 'Raven dropped repeat event: ', data);\n      return;\n    }\n\n    // Send along an event_id if not explicitly passed.\n    // This event_id can be used to reference the error within Sentry itself.\n    // Set lastEventId after we know the error should actually be sent\n    this._lastEventId = data.event_id || (data.event_id = this._getUuid());\n\n    // Store outbound payload after trim\n    this._lastData = data;\n\n    this._logDebug('debug', 'Raven about to send:', data);\n\n    var auth = {\n      sentry_version: '7',\n      sentry_client: 'raven-js/' + this.VERSION,\n      sentry_key: this._globalKey\n    };\n\n    if (this._globalSecret) {\n      auth.sentry_secret = this._globalSecret;\n    }\n\n    var exception = data.exception && data.exception.values[0];\n\n    // only capture 'sentry' breadcrumb is autoBreadcrumbs is truthy\n    if (\n      this._globalOptions.autoBreadcrumbs &&\n      this._globalOptions.autoBreadcrumbs.sentry\n    ) {\n      this.captureBreadcrumb({\n        category: 'sentry',\n        message: exception\n          ? (exception.type ? exception.type + ': ' : '') + exception.value\n          : data.message,\n        event_id: data.event_id,\n        level: data.level || 'error' // presume error unless specified\n      });\n    }\n\n    var url = this._globalEndpoint;\n    (globalOptions.transport || this._makeRequest).call(this, {\n      url: url,\n      auth: auth,\n      data: data,\n      options: globalOptions,\n      onSuccess: function success() {\n        self._resetBackoff();\n\n        self._triggerEvent('success', {\n          data: data,\n          src: url\n        });\n        callback && callback();\n      },\n      onError: function failure(error) {\n        self._logDebug('error', 'Raven transport failed to send: ', error);\n\n        if (error.request) {\n          self._setBackoffState(error.request);\n        }\n\n        self._triggerEvent('failure', {\n          data: data,\n          src: url\n        });\n        error = error || new Error('Raven send failed (no additional details provided)');\n        callback && callback(error);\n      }\n    });\n  },\n\n  _makeRequest: function(opts) {\n    // Auth is intentionally sent as part of query string (NOT as custom HTTP header) to avoid preflight CORS requests\n    var url = opts.url + '?' + urlencode(opts.auth);\n\n    var evaluatedHeaders = null;\n    var evaluatedFetchParameters = {};\n\n    if (opts.options.headers) {\n      evaluatedHeaders = this._evaluateHash(opts.options.headers);\n    }\n\n    if (opts.options.fetchParameters) {\n      evaluatedFetchParameters = this._evaluateHash(opts.options.fetchParameters);\n    }\n\n    if (supportsFetch()) {\n      evaluatedFetchParameters.body = stringify(opts.data);\n\n      var defaultFetchOptions = objectMerge({}, this._fetchDefaults);\n      var fetchOptions = objectMerge(defaultFetchOptions, evaluatedFetchParameters);\n\n      if (evaluatedHeaders) {\n        fetchOptions.headers = evaluatedHeaders;\n      }\n\n      return _window\n        .fetch(url, fetchOptions)\n        .then(function(response) {\n          if (response.ok) {\n            opts.onSuccess && opts.onSuccess();\n          } else {\n            var error = new Error('Sentry error code: ' + response.status);\n            // It's called request only to keep compatibility with XHR interface\n            // and not add more redundant checks in setBackoffState method\n            error.request = response;\n            opts.onError && opts.onError(error);\n          }\n        })\n        ['catch'](function() {\n          opts.onError &&\n            opts.onError(new Error('Sentry error code: network unavailable'));\n        });\n    }\n\n    var request = _window.XMLHttpRequest && new _window.XMLHttpRequest();\n    if (!request) return;\n\n    // if browser doesn't support CORS (e.g. IE7), we are out of luck\n    var hasCORS = 'withCredentials' in request || typeof XDomainRequest !== 'undefined';\n\n    if (!hasCORS) return;\n\n    if ('withCredentials' in request) {\n      request.onreadystatechange = function() {\n        if (request.readyState !== 4) {\n          return;\n        } else if (request.status === 200) {\n          opts.onSuccess && opts.onSuccess();\n        } else if (opts.onError) {\n          var err = new Error('Sentry error code: ' + request.status);\n          err.request = request;\n          opts.onError(err);\n        }\n      };\n    } else {\n      request = new XDomainRequest();\n      // xdomainrequest cannot go http -> https (or vice versa),\n      // so always use protocol relative\n      url = url.replace(/^https?:/, '');\n\n      // onreadystatechange not supported by XDomainRequest\n      if (opts.onSuccess) {\n        request.onload = opts.onSuccess;\n      }\n      if (opts.onError) {\n        request.onerror = function() {\n          var err = new Error('Sentry error code: XDomainRequest');\n          err.request = request;\n          opts.onError(err);\n        };\n      }\n    }\n\n    request.open('POST', url);\n\n    if (evaluatedHeaders) {\n      each(evaluatedHeaders, function(key, value) {\n        request.setRequestHeader(key, value);\n      });\n    }\n\n    request.send(stringify(opts.data));\n  },\n\n  _evaluateHash: function(hash) {\n    var evaluated = {};\n\n    for (var key in hash) {\n      if (hash.hasOwnProperty(key)) {\n        var value = hash[key];\n        evaluated[key] = typeof value === 'function' ? value() : value;\n      }\n    }\n\n    return evaluated;\n  },\n\n  _logDebug: function(level) {\n    // We allow `Raven.debug` and `Raven.config(DSN, { debug: true })` to not make backward incompatible API change\n    if (\n      this._originalConsoleMethods[level] &&\n      (this.debug || this._globalOptions.debug)\n    ) {\n      // In IE<10 console methods do not have their own 'apply' method\n      Function.prototype.apply.call(\n        this._originalConsoleMethods[level],\n        this._originalConsole,\n        [].slice.call(arguments, 1)\n      );\n    }\n  },\n\n  _mergeContext: function(key, context) {\n    if (isUndefined(context)) {\n      delete this._globalContext[key];\n    } else {\n      this._globalContext[key] = objectMerge(this._globalContext[key] || {}, context);\n    }\n  }\n};\n\n// Deprecations\nRaven.prototype.setUser = Raven.prototype.setUserContext;\nRaven.prototype.setReleaseContext = Raven.prototype.setRelease;\n\nmodule.exports = Raven;\n","/**\n * Enforces a single instance of the Raven client, and the\n * main entry point for Raven. If you are a consumer of the\n * Raven library, you SHOULD load this file (vs raven.js).\n **/\n\nvar RavenConstructor = require('./raven');\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n  typeof window !== 'undefined'\n    ? window\n    : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\nvar _Raven = _window.Raven;\n\nvar Raven = new RavenConstructor();\n\n/*\n * Allow multiple versions of Raven to be installed.\n * Strip Raven from the global context and returns the instance.\n *\n * @return {Raven}\n */\nRaven.noConflict = function() {\n  _window.Raven = _Raven;\n  return Raven;\n};\n\nRaven.afterLoad();\n\nmodule.exports = Raven;\n\n/**\n * DISCLAIMER:\n *\n * Expose `Client` constructor for cases where user want to track multiple \"sub-applications\" in one larger app.\n * It's not meant to be used by a wide audience, so pleaaase make sure that you know what you're doing before using it.\n * Accidentally calling `install` multiple times, may result in an unexpected behavior that's very hard to debug.\n *\n * It's called `Client' to be in-line with Raven Node implementation.\n *\n * HOWTO:\n *\n * import Raven from 'raven-js';\n *\n * const someAppReporter = new Raven.Client();\n * const someOtherAppReporter = new Raven.Client();\n *\n * someAppReporter.config('__DSN__', {\n *   ...config goes here\n * });\n *\n * someOtherAppReporter.config('__OTHER_DSN__', {\n *   ...config goes here\n * });\n *\n * someAppReporter.captureMessage(...);\n * someAppReporter.captureException(...);\n * someAppReporter.captureBreadcrumb(...);\n *\n * someOtherAppReporter.captureMessage(...);\n * someOtherAppReporter.captureException(...);\n * someOtherAppReporter.captureBreadcrumb(...);\n *\n * It should \"just work\".\n */\nmodule.exports.Client = RavenConstructor;\n","var stringify = require('../vendor/json-stringify-safe/stringify');\n\nvar _window =\n  typeof window !== 'undefined'\n    ? window\n    : typeof global !== 'undefined'\n      ? global\n      : typeof self !== 'undefined'\n        ? self\n        : {};\n\nfunction isObject(what) {\n  return typeof what === 'object' && what !== null;\n}\n\n// Yanked from https://git.io/vS8DV re-used under CC0\n// with some tiny modifications\nfunction isError(value) {\n  switch (Object.prototype.toString.call(value)) {\n    case '[object Error]':\n      return true;\n    case '[object Exception]':\n      return true;\n    case '[object DOMException]':\n      return true;\n    default:\n      return value instanceof Error;\n  }\n}\n\nfunction isErrorEvent(value) {\n  return Object.prototype.toString.call(value) === '[object ErrorEvent]';\n}\n\nfunction isDOMError(value) {\n  return Object.prototype.toString.call(value) === '[object DOMError]';\n}\n\nfunction isDOMException(value) {\n  return Object.prototype.toString.call(value) === '[object DOMException]';\n}\n\nfunction isUndefined(what) {\n  return what === void 0;\n}\n\nfunction isFunction(what) {\n  return typeof what === 'function';\n}\n\nfunction isPlainObject(what) {\n  return Object.prototype.toString.call(what) === '[object Object]';\n}\n\nfunction isString(what) {\n  return Object.prototype.toString.call(what) === '[object String]';\n}\n\nfunction isArray(what) {\n  return Object.prototype.toString.call(what) === '[object Array]';\n}\n\nfunction isEmptyObject(what) {\n  if (!isPlainObject(what)) return false;\n\n  for (var _ in what) {\n    if (what.hasOwnProperty(_)) {\n      return false;\n    }\n  }\n  return true;\n}\n\nfunction supportsErrorEvent() {\n  try {\n    new ErrorEvent(''); // eslint-disable-line no-new\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction supportsDOMError() {\n  try {\n    new DOMError(''); // eslint-disable-line no-new\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction supportsDOMException() {\n  try {\n    new DOMException(''); // eslint-disable-line no-new\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction supportsFetch() {\n  if (!('fetch' in _window)) return false;\n\n  try {\n    new Headers(); // eslint-disable-line no-new\n    new Request(''); // eslint-disable-line no-new\n    new Response(); // eslint-disable-line no-new\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\n// Despite all stars in the sky saying that Edge supports old draft syntax, aka 'never', 'always', 'origin' and 'default\n// https://caniuse.com/#feat=referrer-policy\n// It doesn't. And it throw exception instead of ignoring this parameter...\n// REF: https://github.com/getsentry/raven-js/issues/1233\nfunction supportsReferrerPolicy() {\n  if (!supportsFetch()) return false;\n\n  try {\n    // eslint-disable-next-line no-new\n    new Request('pickleRick', {\n      referrerPolicy: 'origin'\n    });\n    return true;\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction supportsPromiseRejectionEvent() {\n  return typeof PromiseRejectionEvent === 'function';\n}\n\nfunction wrappedCallback(callback) {\n  function dataCallback(data, original) {\n    var normalizedData = callback(data) || data;\n    if (original) {\n      return original(normalizedData) || normalizedData;\n    }\n    return normalizedData;\n  }\n\n  return dataCallback;\n}\n\nfunction each(obj, callback) {\n  var i, j;\n\n  if (isUndefined(obj.length)) {\n    for (i in obj) {\n      if (hasKey(obj, i)) {\n        callback.call(null, i, obj[i]);\n      }\n    }\n  } else {\n    j = obj.length;\n    if (j) {\n      for (i = 0; i < j; i++) {\n        callback.call(null, i, obj[i]);\n      }\n    }\n  }\n}\n\nfunction objectMerge(obj1, obj2) {\n  if (!obj2) {\n    return obj1;\n  }\n  each(obj2, function(key, value) {\n    obj1[key] = value;\n  });\n  return obj1;\n}\n\n/**\n * This function is only used for react-native.\n * react-native freezes object that have already been sent over the\n * js bridge. We need this function in order to check if the object is frozen.\n * So it's ok that objectFrozen returns false if Object.isFrozen is not\n * supported because it's not relevant for other \"platforms\". See related issue:\n * https://github.com/getsentry/react-native-sentry/issues/57\n */\nfunction objectFrozen(obj) {\n  if (!Object.isFrozen) {\n    return false;\n  }\n  return Object.isFrozen(obj);\n}\n\nfunction truncate(str, max) {\n  if (typeof max !== 'number') {\n    throw new Error('2nd argument to `truncate` function should be a number');\n  }\n  if (typeof str !== 'string' || max === 0) {\n    return str;\n  }\n  return str.length <= max ? str : str.substr(0, max) + '\\u2026';\n}\n\n/**\n * hasKey, a better form of hasOwnProperty\n * Example: hasKey(MainHostObject, property) === true/false\n *\n * @param {Object} host object to check property\n * @param {string} key to check\n */\nfunction hasKey(object, key) {\n  return Object.prototype.hasOwnProperty.call(object, key);\n}\n\nfunction joinRegExp(patterns) {\n  // Combine an array of regular expressions and strings into one large regexp\n  // Be mad.\n  var sources = [],\n    i = 0,\n    len = patterns.length,\n    pattern;\n\n  for (; i < len; i++) {\n    pattern = patterns[i];\n    if (isString(pattern)) {\n      // If it's a string, we need to escape it\n      // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions\n      sources.push(pattern.replace(/([.*+?^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'));\n    } else if (pattern && pattern.source) {\n      // If it's a regexp already, we want to extract the source\n      sources.push(pattern.source);\n    }\n    // Intentionally skip other cases\n  }\n  return new RegExp(sources.join('|'), 'i');\n}\n\nfunction urlencode(o) {\n  var pairs = [];\n  each(o, function(key, value) {\n    pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(value));\n  });\n  return pairs.join('&');\n}\n\n// borrowed from https://tools.ietf.org/html/rfc3986#appendix-B\n// intentionally using regex and not <a/> href parsing trick because React Native and other\n// environments where DOM might not be available\nfunction parseUrl(url) {\n  if (typeof url !== 'string') return {};\n  var match = url.match(/^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/);\n\n  // coerce to undefined values to empty string so we don't get 'undefined'\n  var query = match[6] || '';\n  var fragment = match[8] || '';\n  return {\n    protocol: match[2],\n    host: match[4],\n    path: match[5],\n    relative: match[5] + query + fragment // everything minus origin\n  };\n}\nfunction uuid4() {\n  var crypto = _window.crypto || _window.msCrypto;\n\n  if (!isUndefined(crypto) && crypto.getRandomValues) {\n    // Use window.crypto API if available\n    // eslint-disable-next-line no-undef\n    var arr = new Uint16Array(8);\n    crypto.getRandomValues(arr);\n\n    // set 4 in byte 7\n    arr[3] = (arr[3] & 0xfff) | 0x4000;\n    // set 2 most significant bits of byte 9 to '10'\n    arr[4] = (arr[4] & 0x3fff) | 0x8000;\n\n    var pad = function(num) {\n      var v = num.toString(16);\n      while (v.length < 4) {\n        v = '0' + v;\n      }\n      return v;\n    };\n\n    return (\n      pad(arr[0]) +\n      pad(arr[1]) +\n      pad(arr[2]) +\n      pad(arr[3]) +\n      pad(arr[4]) +\n      pad(arr[5]) +\n      pad(arr[6]) +\n      pad(arr[7])\n    );\n  } else {\n    // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523\n    return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n      var r = (Math.random() * 16) | 0,\n        v = c === 'x' ? r : (r & 0x3) | 0x8;\n      return v.toString(16);\n    });\n  }\n}\n\n/**\n * Given a child DOM element, returns a query-selector statement describing that\n * and its ancestors\n * e.g. [HTMLElement] => body > div > input#foo.btn[name=baz]\n * @param elem\n * @returns {string}\n */\nfunction htmlTreeAsString(elem) {\n  /* eslint no-extra-parens:0*/\n  var MAX_TRAVERSE_HEIGHT = 5,\n    MAX_OUTPUT_LEN = 80,\n    out = [],\n    height = 0,\n    len = 0,\n    separator = ' > ',\n    sepLength = separator.length,\n    nextStr;\n\n  while (elem && height++ < MAX_TRAVERSE_HEIGHT) {\n    nextStr = htmlElementAsString(elem);\n    // bail out if\n    // - nextStr is the 'html' element\n    // - the length of the string that would be created exceeds MAX_OUTPUT_LEN\n    //   (ignore this limit if we are on the first iteration)\n    if (\n      nextStr === 'html' ||\n      (height > 1 && len + out.length * sepLength + nextStr.length >= MAX_OUTPUT_LEN)\n    ) {\n      break;\n    }\n\n    out.push(nextStr);\n\n    len += nextStr.length;\n    elem = elem.parentNode;\n  }\n\n  return out.reverse().join(separator);\n}\n\n/**\n * Returns a simple, query-selector representation of a DOM element\n * e.g. [HTMLElement] => input#foo.btn[name=baz]\n * @param HTMLElement\n * @returns {string}\n */\nfunction htmlElementAsString(elem) {\n  var out = [],\n    className,\n    classes,\n    key,\n    attr,\n    i;\n\n  if (!elem || !elem.tagName) {\n    return '';\n  }\n\n  out.push(elem.tagName.toLowerCase());\n  if (elem.id) {\n    out.push('#' + elem.id);\n  }\n\n  className = elem.className;\n  if (className && isString(className)) {\n    classes = className.split(/\\s+/);\n    for (i = 0; i < classes.length; i++) {\n      out.push('.' + classes[i]);\n    }\n  }\n  var attrWhitelist = ['type', 'name', 'title', 'alt'];\n  for (i = 0; i < attrWhitelist.length; i++) {\n    key = attrWhitelist[i];\n    attr = elem.getAttribute(key);\n    if (attr) {\n      out.push('[' + key + '=\"' + attr + '\"]');\n    }\n  }\n  return out.join('');\n}\n\n/**\n * Returns true if either a OR b is truthy, but not both\n */\nfunction isOnlyOneTruthy(a, b) {\n  return !!(!!a ^ !!b);\n}\n\n/**\n * Returns true if both parameters are undefined\n */\nfunction isBothUndefined(a, b) {\n  return isUndefined(a) && isUndefined(b);\n}\n\n/**\n * Returns true if the two input exception interfaces have the same content\n */\nfunction isSameException(ex1, ex2) {\n  if (isOnlyOneTruthy(ex1, ex2)) return false;\n\n  ex1 = ex1.values[0];\n  ex2 = ex2.values[0];\n\n  if (ex1.type !== ex2.type || ex1.value !== ex2.value) return false;\n\n  // in case both stacktraces are undefined, we can't decide so default to false\n  if (isBothUndefined(ex1.stacktrace, ex2.stacktrace)) return false;\n\n  return isSameStacktrace(ex1.stacktrace, ex2.stacktrace);\n}\n\n/**\n * Returns true if the two input stack trace interfaces have the same content\n */\nfunction isSameStacktrace(stack1, stack2) {\n  if (isOnlyOneTruthy(stack1, stack2)) return false;\n\n  var frames1 = stack1.frames;\n  var frames2 = stack2.frames;\n\n  // Exit early if stacktrace is malformed\n  if (frames1 === undefined || frames2 === undefined) return false;\n\n  // Exit early if frame count differs\n  if (frames1.length !== frames2.length) return false;\n\n  // Iterate through every frame; bail out if anything differs\n  var a, b;\n  for (var i = 0; i < frames1.length; i++) {\n    a = frames1[i];\n    b = frames2[i];\n    if (\n      a.filename !== b.filename ||\n      a.lineno !== b.lineno ||\n      a.colno !== b.colno ||\n      a['function'] !== b['function']\n    )\n      return false;\n  }\n  return true;\n}\n\n/**\n * Polyfill a method\n * @param obj object e.g. `document`\n * @param name method name present on object e.g. `addEventListener`\n * @param replacement replacement function\n * @param track {optional} record instrumentation to an array\n */\nfunction fill(obj, name, replacement, track) {\n  if (obj == null) return;\n  var orig = obj[name];\n  obj[name] = replacement(orig);\n  obj[name].__raven__ = true;\n  obj[name].__orig__ = orig;\n  if (track) {\n    track.push([obj, name, orig]);\n  }\n}\n\n/**\n * Join values in array\n * @param input array of values to be joined together\n * @param delimiter string to be placed in-between values\n * @returns {string}\n */\nfunction safeJoin(input, delimiter) {\n  if (!isArray(input)) return '';\n\n  var output = [];\n\n  for (var i = 0; i < input.length; i++) {\n    try {\n      output.push(String(input[i]));\n    } catch (e) {\n      output.push('[value cannot be serialized]');\n    }\n  }\n\n  return output.join(delimiter);\n}\n\n// Default Node.js REPL depth\nvar MAX_SERIALIZE_EXCEPTION_DEPTH = 3;\n// 50kB, as 100kB is max payload size, so half sounds reasonable\nvar MAX_SERIALIZE_EXCEPTION_SIZE = 50 * 1024;\nvar MAX_SERIALIZE_KEYS_LENGTH = 40;\n\nfunction utf8Length(value) {\n  return ~-encodeURI(value).split(/%..|./).length;\n}\n\nfunction jsonSize(value) {\n  return utf8Length(JSON.stringify(value));\n}\n\nfunction serializeValue(value) {\n  if (typeof value === 'string') {\n    var maxLength = 40;\n    return truncate(value, maxLength);\n  } else if (\n    typeof value === 'number' ||\n    typeof value === 'boolean' ||\n    typeof value === 'undefined'\n  ) {\n    return value;\n  }\n\n  var type = Object.prototype.toString.call(value);\n\n  // Node.js REPL notation\n  if (type === '[object Object]') return '[Object]';\n  if (type === '[object Array]') return '[Array]';\n  if (type === '[object Function]')\n    return value.name ? '[Function: ' + value.name + ']' : '[Function]';\n\n  return value;\n}\n\nfunction serializeObject(value, depth) {\n  if (depth === 0) return serializeValue(value);\n\n  if (isPlainObject(value)) {\n    return Object.keys(value).reduce(function(acc, key) {\n      acc[key] = serializeObject(value[key], depth - 1);\n      return acc;\n    }, {});\n  } else if (Array.isArray(value)) {\n    return value.map(function(val) {\n      return serializeObject(val, depth - 1);\n    });\n  }\n\n  return serializeValue(value);\n}\n\nfunction serializeException(ex, depth, maxSize) {\n  if (!isPlainObject(ex)) return ex;\n\n  depth = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_DEPTH : depth;\n  maxSize = typeof depth !== 'number' ? MAX_SERIALIZE_EXCEPTION_SIZE : maxSize;\n\n  var serialized = serializeObject(ex, depth);\n\n  if (jsonSize(stringify(serialized)) > maxSize) {\n    return serializeException(ex, depth - 1);\n  }\n\n  return serialized;\n}\n\nfunction serializeKeysForMessage(keys, maxLength) {\n  if (typeof keys === 'number' || typeof keys === 'string') return keys.toString();\n  if (!Array.isArray(keys)) return '';\n\n  keys = keys.filter(function(key) {\n    return typeof key === 'string';\n  });\n  if (keys.length === 0) return '[object has no keys]';\n\n  maxLength = typeof maxLength !== 'number' ? MAX_SERIALIZE_KEYS_LENGTH : maxLength;\n  if (keys[0].length >= maxLength) return keys[0];\n\n  for (var usedKeys = keys.length; usedKeys > 0; usedKeys--) {\n    var serialized = keys.slice(0, usedKeys).join(', ');\n    if (serialized.length > maxLength) continue;\n    if (usedKeys === keys.length) return serialized;\n    return serialized + '\\u2026';\n  }\n\n  return '';\n}\n\nfunction sanitize(input, sanitizeKeys) {\n  if (!isArray(sanitizeKeys) || (isArray(sanitizeKeys) && sanitizeKeys.length === 0))\n    return input;\n\n  var sanitizeRegExp = joinRegExp(sanitizeKeys);\n  var sanitizeMask = '********';\n  var safeInput;\n\n  try {\n    safeInput = JSON.parse(stringify(input));\n  } catch (o_O) {\n    return input;\n  }\n\n  function sanitizeWorker(workerInput) {\n    if (isArray(workerInput)) {\n      return workerInput.map(function(val) {\n        return sanitizeWorker(val);\n      });\n    }\n\n    if (isPlainObject(workerInput)) {\n      return Object.keys(workerInput).reduce(function(acc, k) {\n        if (sanitizeRegExp.test(k)) {\n          acc[k] = sanitizeMask;\n        } else {\n          acc[k] = sanitizeWorker(workerInput[k]);\n        }\n        return acc;\n      }, {});\n    }\n\n    return workerInput;\n  }\n\n  return sanitizeWorker(safeInput);\n}\n\nmodule.exports = {\n  isObject: isObject,\n  isError: isError,\n  isErrorEvent: isErrorEvent,\n  isDOMError: isDOMError,\n  isDOMException: isDOMException,\n  isUndefined: isUndefined,\n  isFunction: isFunction,\n  isPlainObject: isPlainObject,\n  isString: isString,\n  isArray: isArray,\n  isEmptyObject: isEmptyObject,\n  supportsErrorEvent: supportsErrorEvent,\n  supportsDOMError: supportsDOMError,\n  supportsDOMException: supportsDOMException,\n  supportsFetch: supportsFetch,\n  supportsReferrerPolicy: supportsReferrerPolicy,\n  supportsPromiseRejectionEvent: supportsPromiseRejectionEvent,\n  wrappedCallback: wrappedCallback,\n  each: each,\n  objectMerge: objectMerge,\n  truncate: truncate,\n  objectFrozen: objectFrozen,\n  hasKey: hasKey,\n  joinRegExp: joinRegExp,\n  urlencode: urlencode,\n  uuid4: uuid4,\n  htmlTreeAsString: htmlTreeAsString,\n  htmlElementAsString: htmlElementAsString,\n  isSameException: isSameException,\n  isSameStacktrace: isSameStacktrace,\n  parseUrl: parseUrl,\n  fill: fill,\n  safeJoin: safeJoin,\n  serializeException: serializeException,\n  serializeKeysForMessage: serializeKeysForMessage,\n  sanitize: sanitize\n};\n","var utils = require('../../src/utils');\n\n/*\n TraceKit - Cross brower stack traces\n\n This was originally forked from github.com/occ/TraceKit, but has since been\n largely re-written and is now maintained as part of raven-js.  Tests for\n this are in test/vendor.\n\n MIT license\n*/\n\nvar TraceKit = {\n  collectWindowErrors: true,\n  debug: false\n};\n\n// This is to be defensive in environments where window does not exist (see https://github.com/getsentry/raven-js/pull/785)\nvar _window =\n  typeof window !== 'undefined'\n    ? window\n    : typeof global !== 'undefined'\n    ? global\n    : typeof self !== 'undefined'\n    ? self\n    : {};\n\n// global reference to slice\nvar _slice = [].slice;\nvar UNKNOWN_FUNCTION = '?';\n\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error#Error_types\nvar ERROR_TYPES_RE = /^(?:[Uu]ncaught (?:exception: )?)?(?:((?:Eval|Internal|Range|Reference|Syntax|Type|URI|)Error): )?(.*)$/;\n\nfunction getLocationHref() {\n  if (typeof document === 'undefined' || document.location == null) return '';\n  return document.location.href;\n}\n\nfunction getLocationOrigin() {\n  if (typeof document === 'undefined' || document.location == null) return '';\n\n  // Oh dear IE10...\n  if (!document.location.origin) {\n    return (\n      document.location.protocol +\n      '//' +\n      document.location.hostname +\n      (document.location.port ? ':' + document.location.port : '')\n    );\n  }\n\n  return document.location.origin;\n}\n\n/**\n * TraceKit.report: cross-browser processing of unhandled exceptions\n *\n * Syntax:\n *   TraceKit.report.subscribe(function(stackInfo) { ... })\n *   TraceKit.report.unsubscribe(function(stackInfo) { ... })\n *   TraceKit.report(exception)\n *   try { ...code... } catch(ex) { TraceKit.report(ex); }\n *\n * Supports:\n *   - Firefox: full stack trace with line numbers, plus column number\n *              on top frame; column number is not guaranteed\n *   - Opera:   full stack trace with line and column numbers\n *   - Chrome:  full stack trace with line and column numbers\n *   - Safari:  line and column number for the top frame only; some frames\n *              may be missing, and column number is not guaranteed\n *   - IE:      line and column number for the top frame only; some frames\n *              may be missing, and column number is not guaranteed\n *\n * In theory, TraceKit should work on all of the following versions:\n *   - IE5.5+ (only 8.0 tested)\n *   - Firefox 0.9+ (only 3.5+ tested)\n *   - Opera 7+ (only 10.50 tested; versions 9 and earlier may require\n *     Exceptions Have Stacktrace to be enabled in opera:config)\n *   - Safari 3+ (only 4+ tested)\n *   - Chrome 1+ (only 5+ tested)\n *   - Konqueror 3.5+ (untested)\n *\n * Requires TraceKit.computeStackTrace.\n *\n * Tries to catch all unhandled exceptions and report them to the\n * subscribed handlers. Please note that TraceKit.report will rethrow the\n * exception. This is REQUIRED in order to get a useful stack trace in IE.\n * If the exception does not reach the top of the browser, you will only\n * get a stack trace from the point where TraceKit.report was called.\n *\n * Handlers receive a stackInfo object as described in the\n * TraceKit.computeStackTrace docs.\n */\nTraceKit.report = (function reportModuleWrapper() {\n  var handlers = [],\n    lastArgs = null,\n    lastException = null,\n    lastExceptionStack = null;\n\n  /**\n   * Add a crash handler.\n   * @param {Function} handler\n   */\n  function subscribe(handler) {\n    installGlobalHandler();\n    handlers.push(handler);\n  }\n\n  /**\n   * Remove a crash handler.\n   * @param {Function} handler\n   */\n  function unsubscribe(handler) {\n    for (var i = handlers.length - 1; i >= 0; --i) {\n      if (handlers[i] === handler) {\n        handlers.splice(i, 1);\n      }\n    }\n  }\n\n  /**\n   * Remove all crash handlers.\n   */\n  function unsubscribeAll() {\n    uninstallGlobalHandler();\n    handlers = [];\n  }\n\n  /**\n   * Dispatch stack information to all handlers.\n   * @param {Object.<string, *>} stack\n   */\n  function notifyHandlers(stack, isWindowError) {\n    var exception = null;\n    if (isWindowError && !TraceKit.collectWindowErrors) {\n      return;\n    }\n    for (var i in handlers) {\n      if (handlers.hasOwnProperty(i)) {\n        try {\n          handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));\n        } catch (inner) {\n          exception = inner;\n        }\n      }\n    }\n\n    if (exception) {\n      throw exception;\n    }\n  }\n\n  var _oldOnerrorHandler, _onErrorHandlerInstalled;\n\n  /**\n   * Ensures all global unhandled exceptions are recorded.\n   * Supported by Gecko and IE.\n   * @param {string} msg Error message.\n   * @param {string} url URL of script that generated the exception.\n   * @param {(number|string)} lineNo The line number at which the error\n   * occurred.\n   * @param {?(number|string)} colNo The column number at which the error\n   * occurred.\n   * @param {?Error} ex The actual Error object.\n   */\n  function traceKitWindowOnError(msg, url, lineNo, colNo, ex) {\n    var stack = null;\n    // If 'ex' is ErrorEvent, get real Error from inside\n    var exception = utils.isErrorEvent(ex) ? ex.error : ex;\n    // If 'msg' is ErrorEvent, get real message from inside\n    var message = utils.isErrorEvent(msg) ? msg.message : msg;\n\n    if (lastExceptionStack) {\n      TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(\n        lastExceptionStack,\n        url,\n        lineNo,\n        message\n      );\n      processLastException();\n    } else if (exception && utils.isError(exception)) {\n      // non-string `exception` arg; attempt to extract stack trace\n\n      // New chrome and blink send along a real error object\n      // Let's just report that like a normal error.\n      // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror\n      stack = TraceKit.computeStackTrace(exception);\n      notifyHandlers(stack, true);\n    } else {\n      var location = {\n        url: url,\n        line: lineNo,\n        column: colNo\n      };\n\n      var name = undefined;\n      var groups;\n\n      if ({}.toString.call(message) === '[object String]') {\n        var groups = message.match(ERROR_TYPES_RE);\n        if (groups) {\n          name = groups[1];\n          message = groups[2];\n        }\n      }\n\n      location.func = UNKNOWN_FUNCTION;\n\n      stack = {\n        name: name,\n        message: message,\n        url: getLocationHref(),\n        stack: [location]\n      };\n      notifyHandlers(stack, true);\n    }\n\n    if (_oldOnerrorHandler) {\n      return _oldOnerrorHandler.apply(this, arguments);\n    }\n\n    return false;\n  }\n\n  function installGlobalHandler() {\n    if (_onErrorHandlerInstalled) {\n      return;\n    }\n    _oldOnerrorHandler = _window.onerror;\n    _window.onerror = traceKitWindowOnError;\n    _onErrorHandlerInstalled = true;\n  }\n\n  function uninstallGlobalHandler() {\n    if (!_onErrorHandlerInstalled) {\n      return;\n    }\n    _window.onerror = _oldOnerrorHandler;\n    _onErrorHandlerInstalled = false;\n    _oldOnerrorHandler = undefined;\n  }\n\n  function processLastException() {\n    var _lastExceptionStack = lastExceptionStack,\n      _lastArgs = lastArgs;\n    lastArgs = null;\n    lastExceptionStack = null;\n    lastException = null;\n    notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));\n  }\n\n  /**\n   * Reports an unhandled Error to TraceKit.\n   * @param {Error} ex\n   * @param {?boolean} rethrow If false, do not re-throw the exception.\n   * Only used for window.onerror to not cause an infinite loop of\n   * rethrowing.\n   */\n  function report(ex, rethrow) {\n    var args = _slice.call(arguments, 1);\n    if (lastExceptionStack) {\n      if (lastException === ex) {\n        return; // already caught by an inner catch block, ignore\n      } else {\n        processLastException();\n      }\n    }\n\n    var stack = TraceKit.computeStackTrace(ex);\n    lastExceptionStack = stack;\n    lastException = ex;\n    lastArgs = args;\n\n    // If the stack trace is incomplete, wait for 2 seconds for\n    // slow slow IE to see if onerror occurs or not before reporting\n    // this exception; otherwise, we will end up with an incomplete\n    // stack trace\n    setTimeout(\n      function() {\n        if (lastException === ex) {\n          processLastException();\n        }\n      },\n      stack.incomplete ? 2000 : 0\n    );\n\n    if (rethrow !== false) {\n      throw ex; // re-throw to propagate to the top level (and cause window.onerror)\n    }\n  }\n\n  report.subscribe = subscribe;\n  report.unsubscribe = unsubscribe;\n  report.uninstall = unsubscribeAll;\n  return report;\n})();\n\n/**\n * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript\n *\n * Syntax:\n *   s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)\n * Returns:\n *   s.name              - exception name\n *   s.message           - exception message\n *   s.stack[i].url      - JavaScript or HTML file URL\n *   s.stack[i].func     - function name, or empty for anonymous functions (if guessing did not work)\n *   s.stack[i].args     - arguments passed to the function, if known\n *   s.stack[i].line     - line number, if known\n *   s.stack[i].column   - column number, if known\n *\n * Supports:\n *   - Firefox:  full stack trace with line numbers and unreliable column\n *               number on top frame\n *   - Opera 10: full stack trace with line and column numbers\n *   - Opera 9-: full stack trace with line numbers\n *   - Chrome:   full stack trace with line and column numbers\n *   - Safari:   line and column number for the topmost stacktrace element\n *               only\n *   - IE:       no line numbers whatsoever\n *\n * Tries to guess names of anonymous functions by looking for assignments\n * in the source code. In IE and Safari, we have to guess source file names\n * by searching for function bodies inside all page scripts. This will not\n * work for scripts that are loaded cross-domain.\n * Here be dragons: some function names may be guessed incorrectly, and\n * duplicate functions may be mismatched.\n *\n * TraceKit.computeStackTrace should only be used for tracing purposes.\n * Logging of unhandled exceptions should be done with TraceKit.report,\n * which builds on top of TraceKit.computeStackTrace and provides better\n * IE support by utilizing the window.onerror event to retrieve information\n * about the top of the stack.\n *\n * Note: In IE and Safari, no stack trace is recorded on the Error object,\n * so computeStackTrace instead walks its *own* chain of callers.\n * This means that:\n *  * in Safari, some methods may be missing from the stack trace;\n *  * in IE, the topmost function in the stack trace will always be the\n *    caller of computeStackTrace.\n *\n * This is okay for tracing (because you are likely to be calling\n * computeStackTrace from the function you want to be the topmost element\n * of the stack trace anyway), but not okay for logging unhandled\n * exceptions (because your catch block will likely be far away from the\n * inner function that actually caused the exception).\n *\n */\nTraceKit.computeStackTrace = (function computeStackTraceWrapper() {\n  // Contents of Exception in various browsers.\n  //\n  // SAFARI:\n  // ex.message = Can't find variable: qq\n  // ex.line = 59\n  // ex.sourceId = 580238192\n  // ex.sourceURL = http://...\n  // ex.expressionBeginOffset = 96\n  // ex.expressionCaretOffset = 98\n  // ex.expressionEndOffset = 98\n  // ex.name = ReferenceError\n  //\n  // FIREFOX:\n  // ex.message = qq is not defined\n  // ex.fileName = http://...\n  // ex.lineNumber = 59\n  // ex.columnNumber = 69\n  // ex.stack = ...stack trace... (see the example below)\n  // ex.name = ReferenceError\n  //\n  // CHROME:\n  // ex.message = qq is not defined\n  // ex.name = ReferenceError\n  // ex.type = not_defined\n  // ex.arguments = ['aa']\n  // ex.stack = ...stack trace...\n  //\n  // INTERNET EXPLORER:\n  // ex.message = ...\n  // ex.name = ReferenceError\n  //\n  // OPERA:\n  // ex.message = ...message... (see the example below)\n  // ex.name = ReferenceError\n  // ex.opera#sourceloc = 11  (pretty much useless, duplicates the info in ex.message)\n  // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'\n\n  /**\n   * Computes stack trace information from the stack property.\n   * Chrome and Gecko use this property.\n   * @param {Error} ex\n   * @return {?Object.<string, *>} Stack trace information.\n   */\n  function computeStackTraceFromStackProp(ex) {\n    if (typeof ex.stack === 'undefined' || !ex.stack) return;\n\n    var chrome = /^\\s*at (?:(.*?) ?\\()?((?:file|https?|blob|chrome-extension|native|eval|webpack|<anonymous>|[a-z]:|\\/).*?)(?::(\\d+))?(?::(\\d+))?\\)?\\s*$/i;\n    var winjs = /^\\s*at (?:((?:\\[object object\\])?.+) )?\\(?((?:file|ms-appx(?:-web)|https?|webpack|blob):.*?):(\\d+)(?::(\\d+))?\\)?\\s*$/i;\n    // NOTE: blob urls are now supposed to always have an origin, therefore it's format\n    // which is `blob:http://url/path/with-some-uuid`, is matched by `blob.*?:\\/` as well\n    var gecko = /^\\s*(.*?)(?:\\((.*?)\\))?(?:^|@)((?:file|https?|blob|chrome|webpack|resource|moz-extension).*?:\\/.*?|\\[native code\\]|[^@]*(?:bundle|\\d+\\.js))(?::(\\d+))?(?::(\\d+))?\\s*$/i;\n    // Used to additionally parse URL/line/column from eval frames\n    var geckoEval = /(\\S+) line (\\d+)(?: > eval line \\d+)* > eval/i;\n    var chromeEval = /\\((\\S*)(?::(\\d+))(?::(\\d+))\\)/;\n    var lines = ex.stack.split('\\n');\n    var stack = [];\n    var submatch;\n    var parts;\n    var element;\n    var reference = /^(.*) is undefined$/.exec(ex.message);\n\n    for (var i = 0, j = lines.length; i < j; ++i) {\n      if ((parts = chrome.exec(lines[i]))) {\n        var isNative = parts[2] && parts[2].indexOf('native') === 0; // start of line\n        var isEval = parts[2] && parts[2].indexOf('eval') === 0; // start of line\n        if (isEval && (submatch = chromeEval.exec(parts[2]))) {\n          // throw out eval line/column and use top-most line/column number\n          parts[2] = submatch[1]; // url\n          parts[3] = submatch[2]; // line\n          parts[4] = submatch[3]; // column\n        }\n        element = {\n          url: !isNative ? parts[2] : null,\n          func: parts[1] || UNKNOWN_FUNCTION,\n          args: isNative ? [parts[2]] : [],\n          line: parts[3] ? +parts[3] : null,\n          column: parts[4] ? +parts[4] : null\n        };\n      } else if ((parts = winjs.exec(lines[i]))) {\n        element = {\n          url: parts[2],\n          func: parts[1] || UNKNOWN_FUNCTION,\n          args: [],\n          line: +parts[3],\n          column: parts[4] ? +parts[4] : null\n        };\n      } else if ((parts = gecko.exec(lines[i]))) {\n        var isEval = parts[3] && parts[3].indexOf(' > eval') > -1;\n        if (isEval && (submatch = geckoEval.exec(parts[3]))) {\n          // throw out eval line/column and use top-most line number\n          parts[3] = submatch[1];\n          parts[4] = submatch[2];\n          parts[5] = null; // no column when eval\n        } else if (i === 0 && !parts[5] && typeof ex.columnNumber !== 'undefined') {\n          // FireFox uses this awesome columnNumber property for its top frame\n          // Also note, Firefox's column number is 0-based and everything else expects 1-based,\n          // so adding 1\n          // NOTE: this hack doesn't work if top-most frame is eval\n          stack[0].column = ex.columnNumber + 1;\n        }\n        element = {\n          url: parts[3],\n          func: parts[1] || UNKNOWN_FUNCTION,\n          args: parts[2] ? parts[2].split(',') : [],\n          line: parts[4] ? +parts[4] : null,\n          column: parts[5] ? +parts[5] : null\n        };\n      } else {\n        continue;\n      }\n\n      if (!element.func && element.line) {\n        element.func = UNKNOWN_FUNCTION;\n      }\n\n      if (element.url && element.url.substr(0, 5) === 'blob:') {\n        // Special case for handling JavaScript loaded into a blob.\n        // We use a synchronous AJAX request here as a blob is already in\n        // memory - it's not making a network request.  This will generate a warning\n        // in the browser console, but there has already been an error so that's not\n        // that much of an issue.\n        var xhr = new XMLHttpRequest();\n        xhr.open('GET', element.url, false);\n        xhr.send(null);\n\n        // If we failed to download the source, skip this patch\n        if (xhr.status === 200) {\n          var source = xhr.responseText || '';\n\n          // We trim the source down to the last 300 characters as sourceMappingURL is always at the end of the file.\n          // Why 300? To be in line with: https://github.com/getsentry/sentry/blob/4af29e8f2350e20c28a6933354e4f42437b4ba42/src/sentry/lang/javascript/processor.py#L164-L175\n          source = source.slice(-300);\n\n          // Now we dig out the source map URL\n          var sourceMaps = source.match(/\\/\\/# sourceMappingURL=(.*)$/);\n\n          // If we don't find a source map comment or we find more than one, continue on to the next element.\n          if (sourceMaps) {\n            var sourceMapAddress = sourceMaps[1];\n\n            // Now we check to see if it's a relative URL.\n            // If it is, convert it to an absolute one.\n            if (sourceMapAddress.charAt(0) === '~') {\n              sourceMapAddress = getLocationOrigin() + sourceMapAddress.slice(1);\n            }\n\n            // Now we strip the '.map' off of the end of the URL and update the\n            // element so that Sentry can match the map to the blob.\n            element.url = sourceMapAddress.slice(0, -4);\n          }\n        }\n      }\n\n      stack.push(element);\n    }\n\n    if (!stack.length) {\n      return null;\n    }\n\n    return {\n      name: ex.name,\n      message: ex.message,\n      url: getLocationHref(),\n      stack: stack\n    };\n  }\n\n  /**\n   * Adds information about the first frame to incomplete stack traces.\n   * Safari and IE require this to get complete data on the first frame.\n   * @param {Object.<string, *>} stackInfo Stack trace information from\n   * one of the compute* methods.\n   * @param {string} url The URL of the script that caused an error.\n   * @param {(number|string)} lineNo The line number of the script that\n   * caused an error.\n   * @param {string=} message The error generated by the browser, which\n   * hopefully contains the name of the object that caused the error.\n   * @return {boolean} Whether or not the stack information was\n   * augmented.\n   */\n  function augmentStackTraceWithInitialElement(stackInfo, url, lineNo, message) {\n    var initial = {\n      url: url,\n      line: lineNo\n    };\n\n    if (initial.url && initial.line) {\n      stackInfo.incomplete = false;\n\n      if (!initial.func) {\n        initial.func = UNKNOWN_FUNCTION;\n      }\n\n      if (stackInfo.stack.length > 0) {\n        if (stackInfo.stack[0].url === initial.url) {\n          if (stackInfo.stack[0].line === initial.line) {\n            return false; // already in stack trace\n          } else if (\n            !stackInfo.stack[0].line &&\n            stackInfo.stack[0].func === initial.func\n          ) {\n            stackInfo.stack[0].line = initial.line;\n            return false;\n          }\n        }\n      }\n\n      stackInfo.stack.unshift(initial);\n      stackInfo.partial = true;\n      return true;\n    } else {\n      stackInfo.incomplete = true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Computes stack trace information by walking the arguments.caller\n   * chain at the time the exception occurred. This will cause earlier\n   * frames to be missed but is the only way to get any stack trace in\n   * Safari and IE. The top frame is restored by\n   * {@link augmentStackTraceWithInitialElement}.\n   * @param {Error} ex\n   * @return {?Object.<string, *>} Stack trace information.\n   */\n  function computeStackTraceByWalkingCallerChain(ex, depth) {\n    var functionName = /function\\s+([_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*)?\\s*\\(/i,\n      stack = [],\n      funcs = {},\n      recursion = false,\n      parts,\n      item,\n      source;\n\n    for (\n      var curr = computeStackTraceByWalkingCallerChain.caller;\n      curr && !recursion;\n      curr = curr.caller\n    ) {\n      if (curr === computeStackTrace || curr === TraceKit.report) {\n        // console.log('skipping internal function');\n        continue;\n      }\n\n      item = {\n        url: null,\n        func: UNKNOWN_FUNCTION,\n        line: null,\n        column: null\n      };\n\n      if (curr.name) {\n        item.func = curr.name;\n      } else if ((parts = functionName.exec(curr.toString()))) {\n        item.func = parts[1];\n      }\n\n      if (typeof item.func === 'undefined') {\n        try {\n          item.func = parts.input.substring(0, parts.input.indexOf('{'));\n        } catch (e) {}\n      }\n\n      if (funcs['' + curr]) {\n        recursion = true;\n      } else {\n        funcs['' + curr] = true;\n      }\n\n      stack.push(item);\n    }\n\n    if (depth) {\n      // console.log('depth is ' + depth);\n      // console.log('stack is ' + stack.length);\n      stack.splice(0, depth);\n    }\n\n    var result = {\n      name: ex.name,\n      message: ex.message,\n      url: getLocationHref(),\n      stack: stack\n    };\n    augmentStackTraceWithInitialElement(\n      result,\n      ex.sourceURL || ex.fileName,\n      ex.line || ex.lineNumber,\n      ex.message || ex.description\n    );\n    return result;\n  }\n\n  /**\n   * Computes a stack trace for an exception.\n   * @param {Error} ex\n   * @param {(string|number)=} depth\n   */\n  function computeStackTrace(ex, depth) {\n    var stack = null;\n    depth = depth == null ? 0 : +depth;\n\n    try {\n      stack = computeStackTraceFromStackProp(ex);\n      if (stack) {\n        return stack;\n      }\n    } catch (e) {\n      if (TraceKit.debug) {\n        throw e;\n      }\n    }\n\n    try {\n      stack = computeStackTraceByWalkingCallerChain(ex, depth + 1);\n      if (stack) {\n        return stack;\n      }\n    } catch (e) {\n      if (TraceKit.debug) {\n        throw e;\n      }\n    }\n    return {\n      name: ex.name,\n      message: ex.message,\n      url: getLocationHref()\n    };\n  }\n\n  computeStackTrace.augmentStackTraceWithInitialElement = augmentStackTraceWithInitialElement;\n  computeStackTrace.computeStackTraceFromStackProp = computeStackTraceFromStackProp;\n\n  return computeStackTrace;\n})();\n\nmodule.exports = TraceKit;\n","/*\n json-stringify-safe\n Like JSON.stringify, but doesn't throw on circular references.\n\n Originally forked from https://github.com/isaacs/json-stringify-safe\n version 5.0.1 on 3/8/2017 and modified to handle Errors serialization\n and IE8 compatibility. Tests for this are in test/vendor.\n\n ISC license: https://github.com/isaacs/json-stringify-safe/blob/master/LICENSE\n*/\n\nexports = module.exports = stringify;\nexports.getSerialize = serializer;\n\nfunction indexOf(haystack, needle) {\n  for (var i = 0; i < haystack.length; ++i) {\n    if (haystack[i] === needle) return i;\n  }\n  return -1;\n}\n\nfunction stringify(obj, replacer, spaces, cycleReplacer) {\n  return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces);\n}\n\n// https://github.com/ftlabs/js-abbreviate/blob/fa709e5f139e7770a71827b1893f22418097fbda/index.js#L95-L106\nfunction stringifyError(value) {\n  var err = {\n    // These properties are implemented as magical getters and don't show up in for in\n    stack: value.stack,\n    message: value.message,\n    name: value.name\n  };\n\n  for (var i in value) {\n    if (Object.prototype.hasOwnProperty.call(value, i)) {\n      err[i] = value[i];\n    }\n  }\n\n  return err;\n}\n\nfunction serializer(replacer, cycleReplacer) {\n  var stack = [];\n  var keys = [];\n\n  if (cycleReplacer == null) {\n    cycleReplacer = function(key, value) {\n      if (stack[0] === value) {\n        return '[Circular ~]';\n      }\n      return '[Circular ~.' + keys.slice(0, indexOf(stack, value)).join('.') + ']';\n    };\n  }\n\n  return function(key, value) {\n    if (stack.length > 0) {\n      var thisPos = indexOf(stack, this);\n      ~thisPos ? stack.splice(thisPos + 1) : stack.push(this);\n      ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key);\n\n      if (~indexOf(stack, value)) {\n        value = cycleReplacer.call(this, key, value);\n      }\n    } else {\n      stack.push(value);\n    }\n\n    return replacer == null\n      ? value instanceof Error ? stringifyError(value) : value\n      : replacer.call(this, key, value);\n  };\n}\n","/*\n * JavaScript MD5\n * https://github.com/blueimp/JavaScript-MD5\n *\n * Copyright 2011, Sebastian Tschan\n * https://blueimp.net\n *\n * Licensed under the MIT license:\n * https://opensource.org/licenses/MIT\n *\n * Based on\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\n * Digest Algorithm, as defined in RFC 1321.\n * Version 2.2 Copyright (C) Paul Johnston 1999 - 2009\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for more info.\n */\n\n/*\n* Add integers, wrapping at 2^32. This uses 16-bit operations internally\n* to work around bugs in some JS interpreters.\n*/\nfunction safeAdd(x, y) {\n  var lsw = (x & 0xffff) + (y & 0xffff);\n  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\n  return (msw << 16) | (lsw & 0xffff);\n}\n\n/*\n* Bitwise rotate a 32-bit number to the left.\n*/\nfunction bitRotateLeft(num, cnt) {\n  return (num << cnt) | (num >>> (32 - cnt));\n}\n\n/*\n* These functions implement the four basic operations the algorithm uses.\n*/\nfunction md5cmn(q, a, b, x, s, t) {\n  return safeAdd(bitRotateLeft(safeAdd(safeAdd(a, q), safeAdd(x, t)), s), b);\n}\nfunction md5ff(a, b, c, d, x, s, t) {\n  return md5cmn((b & c) | (~b & d), a, b, x, s, t);\n}\nfunction md5gg(a, b, c, d, x, s, t) {\n  return md5cmn((b & d) | (c & ~d), a, b, x, s, t);\n}\nfunction md5hh(a, b, c, d, x, s, t) {\n  return md5cmn(b ^ c ^ d, a, b, x, s, t);\n}\nfunction md5ii(a, b, c, d, x, s, t) {\n  return md5cmn(c ^ (b | ~d), a, b, x, s, t);\n}\n\n/*\n* Calculate the MD5 of an array of little-endian words, and a bit length.\n*/\nfunction binlMD5(x, len) {\n  /* append padding */\n  x[len >> 5] |= 0x80 << (len % 32);\n  x[(((len + 64) >>> 9) << 4) + 14] = len;\n\n  var i;\n  var olda;\n  var oldb;\n  var oldc;\n  var oldd;\n  var a = 1732584193;\n  var b = -271733879;\n  var c = -1732584194;\n  var d = 271733878;\n\n  for (i = 0; i < x.length; i += 16) {\n    olda = a;\n    oldb = b;\n    oldc = c;\n    oldd = d;\n\n    a = md5ff(a, b, c, d, x[i], 7, -680876936);\n    d = md5ff(d, a, b, c, x[i + 1], 12, -389564586);\n    c = md5ff(c, d, a, b, x[i + 2], 17, 606105819);\n    b = md5ff(b, c, d, a, x[i + 3], 22, -1044525330);\n    a = md5ff(a, b, c, d, x[i + 4], 7, -176418897);\n    d = md5ff(d, a, b, c, x[i + 5], 12, 1200080426);\n    c = md5ff(c, d, a, b, x[i + 6], 17, -1473231341);\n    b = md5ff(b, c, d, a, x[i + 7], 22, -45705983);\n    a = md5ff(a, b, c, d, x[i + 8], 7, 1770035416);\n    d = md5ff(d, a, b, c, x[i + 9], 12, -1958414417);\n    c = md5ff(c, d, a, b, x[i + 10], 17, -42063);\n    b = md5ff(b, c, d, a, x[i + 11], 22, -1990404162);\n    a = md5ff(a, b, c, d, x[i + 12], 7, 1804603682);\n    d = md5ff(d, a, b, c, x[i + 13], 12, -40341101);\n    c = md5ff(c, d, a, b, x[i + 14], 17, -1502002290);\n    b = md5ff(b, c, d, a, x[i + 15], 22, 1236535329);\n\n    a = md5gg(a, b, c, d, x[i + 1], 5, -165796510);\n    d = md5gg(d, a, b, c, x[i + 6], 9, -1069501632);\n    c = md5gg(c, d, a, b, x[i + 11], 14, 643717713);\n    b = md5gg(b, c, d, a, x[i], 20, -373897302);\n    a = md5gg(a, b, c, d, x[i + 5], 5, -701558691);\n    d = md5gg(d, a, b, c, x[i + 10], 9, 38016083);\n    c = md5gg(c, d, a, b, x[i + 15], 14, -660478335);\n    b = md5gg(b, c, d, a, x[i + 4], 20, -405537848);\n    a = md5gg(a, b, c, d, x[i + 9], 5, 568446438);\n    d = md5gg(d, a, b, c, x[i + 14], 9, -1019803690);\n    c = md5gg(c, d, a, b, x[i + 3], 14, -187363961);\n    b = md5gg(b, c, d, a, x[i + 8], 20, 1163531501);\n    a = md5gg(a, b, c, d, x[i + 13], 5, -1444681467);\n    d = md5gg(d, a, b, c, x[i + 2], 9, -51403784);\n    c = md5gg(c, d, a, b, x[i + 7], 14, 1735328473);\n    b = md5gg(b, c, d, a, x[i + 12], 20, -1926607734);\n\n    a = md5hh(a, b, c, d, x[i + 5], 4, -378558);\n    d = md5hh(d, a, b, c, x[i + 8], 11, -2022574463);\n    c = md5hh(c, d, a, b, x[i + 11], 16, 1839030562);\n    b = md5hh(b, c, d, a, x[i + 14], 23, -35309556);\n    a = md5hh(a, b, c, d, x[i + 1], 4, -1530992060);\n    d = md5hh(d, a, b, c, x[i + 4], 11, 1272893353);\n    c = md5hh(c, d, a, b, x[i + 7], 16, -155497632);\n    b = md5hh(b, c, d, a, x[i + 10], 23, -1094730640);\n    a = md5hh(a, b, c, d, x[i + 13], 4, 681279174);\n    d = md5hh(d, a, b, c, x[i], 11, -358537222);\n    c = md5hh(c, d, a, b, x[i + 3], 16, -722521979);\n    b = md5hh(b, c, d, a, x[i + 6], 23, 76029189);\n    a = md5hh(a, b, c, d, x[i + 9], 4, -640364487);\n    d = md5hh(d, a, b, c, x[i + 12], 11, -421815835);\n    c = md5hh(c, d, a, b, x[i + 15], 16, 530742520);\n    b = md5hh(b, c, d, a, x[i + 2], 23, -995338651);\n\n    a = md5ii(a, b, c, d, x[i], 6, -198630844);\n    d = md5ii(d, a, b, c, x[i + 7], 10, 1126891415);\n    c = md5ii(c, d, a, b, x[i + 14], 15, -1416354905);\n    b = md5ii(b, c, d, a, x[i + 5], 21, -57434055);\n    a = md5ii(a, b, c, d, x[i + 12], 6, 1700485571);\n    d = md5ii(d, a, b, c, x[i + 3], 10, -1894986606);\n    c = md5ii(c, d, a, b, x[i + 10], 15, -1051523);\n    b = md5ii(b, c, d, a, x[i + 1], 21, -2054922799);\n    a = md5ii(a, b, c, d, x[i + 8], 6, 1873313359);\n    d = md5ii(d, a, b, c, x[i + 15], 10, -30611744);\n    c = md5ii(c, d, a, b, x[i + 6], 15, -1560198380);\n    b = md5ii(b, c, d, a, x[i + 13], 21, 1309151649);\n    a = md5ii(a, b, c, d, x[i + 4], 6, -145523070);\n    d = md5ii(d, a, b, c, x[i + 11], 10, -1120210379);\n    c = md5ii(c, d, a, b, x[i + 2], 15, 718787259);\n    b = md5ii(b, c, d, a, x[i + 9], 21, -343485551);\n\n    a = safeAdd(a, olda);\n    b = safeAdd(b, oldb);\n    c = safeAdd(c, oldc);\n    d = safeAdd(d, oldd);\n  }\n  return [a, b, c, d];\n}\n\n/*\n* Convert an array of little-endian words to a string\n*/\nfunction binl2rstr(input) {\n  var i;\n  var output = '';\n  var length32 = input.length * 32;\n  for (i = 0; i < length32; i += 8) {\n    output += String.fromCharCode((input[i >> 5] >>> (i % 32)) & 0xff);\n  }\n  return output;\n}\n\n/*\n* Convert a raw string to an array of little-endian words\n* Characters >255 have their high-byte silently ignored.\n*/\nfunction rstr2binl(input) {\n  var i;\n  var output = [];\n  output[(input.length >> 2) - 1] = undefined;\n  for (i = 0; i < output.length; i += 1) {\n    output[i] = 0;\n  }\n  var length8 = input.length * 8;\n  for (i = 0; i < length8; i += 8) {\n    output[i >> 5] |= (input.charCodeAt(i / 8) & 0xff) << (i % 32);\n  }\n  return output;\n}\n\n/*\n* Calculate the MD5 of a raw string\n*/\nfunction rstrMD5(s) {\n  return binl2rstr(binlMD5(rstr2binl(s), s.length * 8));\n}\n\n/*\n* Calculate the HMAC-MD5, of a key and some data (raw strings)\n*/\nfunction rstrHMACMD5(key, data) {\n  var i;\n  var bkey = rstr2binl(key);\n  var ipad = [];\n  var opad = [];\n  var hash;\n  ipad[15] = opad[15] = undefined;\n  if (bkey.length > 16) {\n    bkey = binlMD5(bkey, key.length * 8);\n  }\n  for (i = 0; i < 16; i += 1) {\n    ipad[i] = bkey[i] ^ 0x36363636;\n    opad[i] = bkey[i] ^ 0x5c5c5c5c;\n  }\n  hash = binlMD5(ipad.concat(rstr2binl(data)), 512 + data.length * 8);\n  return binl2rstr(binlMD5(opad.concat(hash), 512 + 128));\n}\n\n/*\n* Convert a raw string to a hex string\n*/\nfunction rstr2hex(input) {\n  var hexTab = '0123456789abcdef';\n  var output = '';\n  var x;\n  var i;\n  for (i = 0; i < input.length; i += 1) {\n    x = input.charCodeAt(i);\n    output += hexTab.charAt((x >>> 4) & 0x0f) + hexTab.charAt(x & 0x0f);\n  }\n  return output;\n}\n\n/*\n* Encode a string as utf-8\n*/\nfunction str2rstrUTF8(input) {\n  return unescape(encodeURIComponent(input));\n}\n\n/*\n* Take string arguments and return either raw or hex encoded strings\n*/\nfunction rawMD5(s) {\n  return rstrMD5(str2rstrUTF8(s));\n}\nfunction hexMD5(s) {\n  return rstr2hex(rawMD5(s));\n}\nfunction rawHMACMD5(k, d) {\n  return rstrHMACMD5(str2rstrUTF8(k), str2rstrUTF8(d));\n}\nfunction hexHMACMD5(k, d) {\n  return rstr2hex(rawHMACMD5(k, d));\n}\n\nfunction md5(string, key, raw) {\n  if (!key) {\n    if (!raw) {\n      return hexMD5(string);\n    }\n    return rawMD5(string);\n  }\n  if (!raw) {\n    return hexHMACMD5(key, string);\n  }\n  return rawHMACMD5(key, string);\n}\n\nmodule.exports = md5;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","/******************* Sentry *******************/\n// Import and configure Sentry for error reporting\nimport Raven from 'raven-js'\n\n// We aren't using the more up-to-date Sentry SDK at https://github.com/getsentry/sentry-javascript/tree/master/packages/browser\n// because the version of Sentry we're running is too old and only works with Raven.\n\n// Django will have set up `window.sentry_dsn` and `window.sentry_release` for us;\n// if it's not there, we won't be able to do Sentry reporting.\nif (window.sentry_dsn) {\n  Raven.config(window.sentry_dsn, {\n    release: window.sentry_release\n  }).install();\n} else {\n  console.error(\"window.sentry_dsn not defined - Sentry not enabled\")\n}\n\n\n"],"names":["RavenConfigError","message","this","name","prototype","Error","constructor","module","exports","utils","wrapMethod","console","level","callback","originalConsoleLevel","originalConsole","sentryLevel","args","slice","call","arguments","msg","safeJoin","data","logger","extra","Function","apply","TraceKit","stringify","md5","isErrorEvent","isDOMError","isDOMException","isError","isObject","isPlainObject","isUndefined","isFunction","isString","isArray","isEmptyObject","each","objectMerge","truncate","objectFrozen","hasKey","joinRegExp","urlencode","uuid4","htmlTreeAsString","isSameException","isSameStacktrace","parseUrl","fill","supportsFetch","supportsReferrerPolicy","serializeKeysForMessage","serializeException","sanitize","wrapConsoleMethod","dsnKeys","split","dsnPattern","now","Date","_window","window","g","self","_document","document","_navigator","navigator","keepOriginalCallback","original","Raven","method","_hasJSON","JSON","_hasDocument","_hasNavigator","_lastCapturedException","_lastData","_lastEventId","_globalServer","_globalKey","_globalProject","_globalContext","_globalOptions","release","SENTRY_RELEASE","id","ignoreErrors","ignoreUrls","whitelistUrls","includePaths","headers","collectWindowErrors","captureUnhandledRejections","maxMessageLength","maxUrlLength","stackTraceLimit","autoBreadcrumbs","instrument","sampleRate","sanitizeKeys","_fetchDefaults","referrerPolicy","_ignoreOnError","_isRavenInstalled","_originalErrorStackTraceLimit","_originalConsole","_originalConsoleMethods","_plugins","_startTime","_wrappedBuiltIns","_breadcrumbs","_lastCapturedEvent","_keypressTimeout","_location","location","_lastHref","href","_resetBackoff","VERSION","debug","config","dsn","options","_logDebug","globalOptions","key","value","setDSN","push","length","maxBreadcrumbs","Math","max","min","autoBreadcrumbDefaults","xhr","dom","sentry","toString","instrumentDefaults","tryCatch","install","isSetup","report","subscribe","_handleOnErrorStackInfo","_attachPromiseRejectionHandler","_patchFunctionToString","_instrumentTryCatch","_instrumentBreadcrumbs","_drainPlugins","uri","_parseDSN","lastSlash","path","lastIndexOf","substr","_dsn","user","_globalSecret","pass","_getGlobalServer","_globalEndpoint","context","func","wrap","_before","undefined","__raven__","__raven_wrapper__","e","wrapped","i","deep","_ignoreNextOnError","captureException","property","__orig__","uninstall","_detachPromiseRejectionHandler","_unpatchFunctionToString","_restoreBuiltIns","_restoreConsole","_promiseRejectionHandler","event","reason","mechanism","type","handled","bind","addEventListener","removeEventListener","ex","trimHeadFrames","error","captureMessage","stacktrace","_getCaptureExceptionOptionsFromPlainObject","stack","computeStackTrace","_handleStackInfo","ex1","currentOptions","exKeys","Object","keys","sort","fingerprint","__serialized__","test","initialCall","fileurl","url","frames","_prepareFrames","reverse","_send","captureBreadcrumb","obj","crumb","timestamp","breadcrumbCallback","result","shift","addPlugin","plugin","pluginArgs","setUserContext","setExtraContext","_mergeContext","setTagsContext","tags","clearContext","getContext","parse","setEnvironment","environment","setRelease","setDataCallback","dataCallback","setBreadcrumbCallback","setShouldSendCallback","shouldSendCallback","setTransport","transport","lastException","lastEventId","ravenNotConfiguredError","afterLoad","RavenConfig","showReportDialog","eventId","encode","encodeURIComponent","encodedOptions","email","globalServer","script","createElement","async","src","join","head","body","appendChild","setTimeout","_triggerEvent","eventType","evt","toUpperCase","createEvent","initEvent","createEventObject","dispatchEvent","fireEvent","toLowerCase","_breadcrumbEventHandler","evtName","target","category","_keypressEventHandler","tagName","isContentEditable","timeout","clearTimeout","_captureUrlChange","from","to","parsedLoc","parsedTo","parsedFrom","protocol","host","relative","_originalFunctionToString","wrappedBuiltIns","wrapTimeFn","orig","fn","t","Array","originalCallback","function","wrapEventTarget","global","proto","hasOwnProperty","capture","secure","handleEvent","handler","err","before","clickHandler","keypressHandler","requestAnimationFrame","cb","eventTargets","wrapProp","prop","xhrproto","XMLHttpRequest","origOpen","indexOf","__raven_xhr","status_code","origSend","onreadystatechangeHandler","readyState","status","props","j","onreadystatechange","origFetch","fetchInput","Request","fetchData","then","response","attachEvent","chrome","hasPushAndReplaceState","app","runtime","history","pushState","replaceState","oldOnPopState","onpopstate","currentHref","historyReplacementFunction","origHistFunction","log","consoleMethodCallback","_","builtin","installer","concat","str","m","exec","allowSecretKey","port","stackInfo","_processException","lineno","frame","_normalizeFrame","in_app","stackInfoUrl","normalized","filename","line","colno","column","prefixedMessage","exception","values","transaction","_trimPacket","request","Referer","breadcrumbs","_trimBreadcrumbs","urlProp","urlProps","_getHttpData","httpData","userAgent","referrer","_backoffDuration","_backoffStart","_shouldBackoff","_isRepeatData","current","last","Boolean","_setBackoffState","retry","get","getResponseHeader","parseInt","baseData","project","platform","serverName","server_name","_sanitizeData","forEach","random","_sendProcessedPayload","_getUuid","allowDuplicates","event_id","auth","sentry_version","sentry_client","sentry_key","sentry_secret","_makeRequest","onSuccess","onError","opts","evaluatedHeaders","evaluatedFetchParameters","_evaluateHash","fetchParameters","defaultFetchOptions","fetchOptions","fetch","ok","XDomainRequest","replace","onload","onerror","open","setRequestHeader","send","hash","evaluated","setUser","setReleaseContext","RavenConstructor","_Raven","noConflict","Client","what","Headers","Response","object","patterns","pattern","sources","len","source","RegExp","htmlElementAsString","elem","className","classes","attr","out","attrWhitelist","getAttribute","isOnlyOneTruthy","a","b","stack1","stack2","frames1","frames2","serializeValue","serializeObject","depth","reduce","acc","map","val","supportsErrorEvent","ErrorEvent","supportsDOMError","DOMError","supportsDOMException","DOMException","supportsPromiseRejectionEvent","PromiseRejectionEvent","wrappedCallback","normalizedData","obj1","obj2","isFrozen","o","pairs","crypto","msCrypto","getRandomValues","arr","Uint16Array","pad","num","v","c","r","nextStr","height","separator","parentNode","ex2","match","query","fragment","replacement","track","input","delimiter","output","String","maxSize","serialized","encodeURI","utf8Length","maxLength","filter","usedKeys","safeInput","sanitizeRegExp","o_O","sanitizeWorker","workerInput","k","_slice","UNKNOWN_FUNCTION","ERROR_TYPES_RE","getLocationHref","_oldOnerrorHandler","_onErrorHandlerInstalled","handlers","lastArgs","lastExceptionStack","notifyHandlers","isWindowError","inner","traceKitWindowOnError","lineNo","colNo","augmentStackTraceWithInitialElement","processLastException","groups","_lastExceptionStack","_lastArgs","rethrow","incomplete","unsubscribe","splice","computeStackTraceFromStackProp","submatch","parts","element","winjs","gecko","geckoEval","chromeEval","lines","isNative","columnNumber","responseText","sourceMaps","sourceMapAddress","charAt","origin","hostname","initial","unshift","partial","computeStackTraceByWalkingCallerChain","item","functionName","funcs","recursion","curr","caller","substring","sourceURL","fileName","lineNumber","description","haystack","needle","serializer","replacer","cycleReplacer","thisPos","Infinity","stringifyError","spaces","getSerialize","safeAdd","x","y","lsw","md5cmn","q","s","cnt","md5ff","d","md5gg","md5hh","md5ii","binlMD5","olda","oldb","oldc","oldd","binl2rstr","length32","fromCharCode","rstr2binl","length8","charCodeAt","rstr2hex","hexTab","str2rstrUTF8","unescape","rawMD5","rstrMD5","rawHMACMD5","bkey","ipad","opad","rstrHMACMD5","string","raw","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","definition","defineProperty","enumerable","globalThis","sentry_dsn","sentry_release"],"sourceRoot":""}