{"version":3,"sources":["webpack:///./app/javascript/mastodon/components/error_boundary.jsx","webpack:///./node_modules/react-router/es/Router.js","webpack:///./app/javascript/mastodon/components/router.tsx","webpack:///./node_modules/react-router/es/generatePath.js","webpack:///./node_modules/react-router/es/Redirect.js","webpack:///./node_modules/react-router-dom/es/Redirect.js","webpack:///./app/javascript/mastodon/features/picture_in_picture/components/header.jsx","webpack:///./app/javascript/mastodon/features/picture_in_picture/index.jsx","webpack:///./app/javascript/mastodon/components/logo.tsx","webpack:///./app/javascript/mastodon/features/ui/components/header.jsx","webpack:///./app/javascript/mastodon/features/ui/components/upload_area.jsx","webpack:///./app/javascript/mastodon/features/ui/components/column_loading.jsx","webpack:///./app/javascript/mastodon/components/server_banner.jsx","webpack:///./app/javascript/mastodon/features/ui/components/compose_panel.jsx","webpack:///./app/javascript/mastodon/features/ui/components/drawer_loading.jsx","webpack:///./app/javascript/mastodon/features/account/components/featured_tags.jsx","webpack:///./app/javascript/mastodon/features/account/containers/featured_tags_container.js","webpack:///./app/javascript/mastodon/features/account/navigation.jsx","webpack:///./app/javascript/mastodon/components/navigation_portal.jsx","webpack:///./app/javascript/mastodon/features/ui/components/disabled_account_banner.jsx","webpack:///./app/javascript/mastodon/features/ui/components/follow_requests_column_link.jsx","webpack:///./app/javascript/mastodon/features/ui/components/list_panel.jsx","webpack:///./app/javascript/mastodon/features/ui/components/notifications_counter_icon.js","webpack:///./app/javascript/mastodon/features/ui/components/sign_in_banner.jsx","webpack:///./app/javascript/mastodon/features/ui/components/navigation_panel.jsx","webpack:///./app/javascript/mastodon/features/ui/components/columns_area.jsx","webpack:///./app/javascript/mastodon/features/ui/containers/columns_area_container.js","webpack:///./app/javascript/mastodon/features/ui/util/react_router_helpers.jsx","webpack:///./app/javascript/mastodon/features/ui/index.jsx","webpack:///./app/javascript/mastodon/containers/mastodon.jsx","webpack:///./node_modules/marky/lib/marky.browser.es.js","webpack:///./app/javascript/mastodon/main.jsx","webpack:///./app/javascript/packs/application.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/util.js","webpack:///./node_modules/stacktrace-js/stacktrace.js","webpack:///./node_modules/stackframe/stackframe.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/source-map-generator.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/base64-vlq.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/array-set.js","webpack:///./node_modules/error-stack-parser/error-stack-parser.js","webpack:///./node_modules/stack-generator/stack-generator.js","webpack:///./node_modules/stacktrace-gps/stacktrace-gps.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/source-map.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/base64.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/mapping-list.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/source-map-consumer.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/binary-search.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/quick-sort.js","webpack:///./node_modules/stacktrace-gps/node_modules/source-map/lib/source-node.js"],"names":["ErrorBoundary","PureComponent","constructor","arguments","state","hasError","errorMessage","undefined","stackTrace","mappedStackTrace","componentStack","handleCopyStackTrace","this","textarea","document","createElement","contents","push","textContent","join","style","position","body","appendChild","select","execCommand","e","removeChild","setState","copied","setTimeout","componentDidCatch","error","info","toString","stack","StackTrace","fromError","then","stackframes","map","sf","catch","render","props","children","likelyBrowserAddonIssue","includes","_jsx","className","FormattedMessage","id","defaultMessage","version","href","source_url","rel","target","onClick","Helmet","name","content","_extends","Object","assign","i","length","source","key","prototype","hasOwnProperty","call","_possibleConstructorReturn","self","ReferenceError","_React$Component","Router","_temp","_this","instance","Constructor","TypeError","_classCallCheck","_len","args","Array","_key","apply","concat","match","computeMatch","history","location","pathname","subClass","superClass","create","value","enumerable","writable","configurable","setPrototypeOf","__proto__","_inherits","getChildContext","router","context","route","path","url","params","isExact","componentWillMount","_this2","_props","Children","count","unlisten","listen","componentWillReceiveProps","nextProps","componentWillUnmount","only","Component","propTypes","object","isRequired","node","contextTypes","childContextTypes","browserHistory","createBrowserHistory","originalPush","bind","originalReplace","replace","_state","fromMastodon","layoutFromWindow","startsWith","_browserHistory$locat","_state2","_ref","OriginalRouter","patternCache","cacheCount","pattern","generator","cacheKey","cache","compiledGenerator","compile","pretty","Redirect","isStatic","staticContext","perform","componentDidMount","componentDidUpdate","prevProps","prevTo","to","nextTo","search","computeTo","computedMatch","bool","from","string","oneOfType","defaultProps","shape","func","messages","defineMessages","close","Header","ImmutablePureComponent","account","statusId","onClose","intl","Link","get","Avatar","size","DisplayName","IconButton","icon","title","formatMessage","accountId","PropTypes","ImmutablePropTypes","connect","mapStateToProps","getIn","injectIntl","PictureInPicture","handleClose","dispatch","removePictureInPicture","type","src","currentTime","player","Video","volume","muted","autoPlay","inline","alwaysVisible","Audio","poster","backgroundColor","foregroundColor","accentColor","Footer","WordmarkLogo","viewBox","role","xlinkHref","SymbolLogo","logo","alt","Account","me","dispatchServer","signedIn","identity","openClosedRegistrationsModal","signupUrl","_jsxs","_Fragment","Icon","sso_redirect","signupButton","registrationsOpen","withRouter","openModal","modalType","fetchServer","UploadArea","handleKeyUp","keyCode","active","preventDefault","stopPropagation","window","addEventListener","removeEventListener","Motion","defaultStyle","backgroundOpacity","backgroundScale","spring","stiffness","damping","visibility","opacity","transform","ColumnLoading","multiColumn","Column","ColumnHeader","focusable","placeholder","aboutActiveUsers","ServerBanner","server","isLoading","values","domain","mastodon","ServerHeroImage","blurhash","Skeleton","width","minimal","ShortNumber","ComposePanel","onFocus","changeComposing","onBlur","mountCompose","unmountCompose","SearchContainer","openInRoute","NavigationContainer","ComposeFormContainer","singleColumn","LinkFooter","DrawerLoading","lastStatusAt","empty","FeaturedTags","featuredTags","isEmpty","dangerouslySetInnerHTML","__html","take","featuredTag","Hashtag","uses","withGraph","description","date","formatDate","month","day","list","tagged","getAccount","makeGetAccount","ImmutableList","AccountNavigation","acct","normalizeForLookup","DefaultNavigation","showTrends","Trends","NavigationPortal","Switch","Route","exact","component","logoutMessage","logoutConfirm","DisabledAccountBanner","handleLogOutClick","onLogout","disabledAcct","movedToAcct","disabledAccountLink","disabledAccount","movedToAccount","disabledAccountId","movedToAccountId","mapDispatchToProps","modalProps","message","confirm","closeWhenConfirm","onConfirm","logOut","text","FollowRequestsColumnLink","fetchFollowRequests","ColumnLink","transparent","IconWithBadge","getOrderedLists","createSelector","lists","toList","filter","item","sort","a","b","localeCompare","ListPanel","fetchLists","strict","SignInBanner","useAppDispatch","useCallback","useAppSelector","home","notifications","explore","firehose","direct","favourites","bookmarks","preferences","followsAndFollowers","about","advancedInterface","openedInClassicInterface","NavigationPanel","isFirehoseActive","banner","transientSingleColumn","class","NotificationsCounterIcon","trendsEnabled","timelinePreview","isActive","componentMap","Compose","HomeTimeline","Notifications","PublicTimeline","CommunityTimeline","HashtagTimeline","DirectTimeline","FavouritedStatuses","BookmarkedStatuses","ListTimeline","Directory","ColumnsArea","mediaQuery","matchMedia","renderComposePanel","matches","handleLayoutChange","handleWheel","_interruptScrollAnimation","setRef","renderLoading","columnId","renderError","_jsx2","BundleColumnError","errorType","supportsPassiveEvents","passive","addListener","isRtlLayout","getElementsByTagName","classList","contains","UNSAFE_componentWillUpdate","removeListener","handleChildrenContentChange","modifier","scrollRight","scrollWidth","innerWidth","columns","isModalOpen","ref","column","toJS","other","BundleContainer","fetchComponent","loading","SpecificComponent","child","cloneElement","forwardRef","WrappedSwitch","decklessLocation","slice","WrappedRoute","stacktrace","renderComponent","componentParams","getDerivedStateFromError","frame","err","console","rest","beforeUnload","keyMap","help","new","forceNew","toggleComposeSpoilers","focusColumn","reply","favourite","boost","mention","open","openProfile","moveDown","moveUp","back","goToHome","goToNotifications","goToLocal","goToFederated","goToDirect","goToStart","goToFavourites","goToPinned","goToProfile","goToBlocked","goToMuted","goToRequests","toggleHidden","toggleSensitive","openMedia","SwitchingColumnsArea","c","UNSAFE_componentWillMount","toggle","pathName","redirect","singleUserMode","owner","initialState","accounts","username","trendsAsLanding","ColumnsAreaContainer","GettingStarted","KeyboardShortcuts","About","PrivacyPolicy","Firehose","feedType","PinnedStatuses","Onboarding","Explore","AccountTimeline","withReplies","Followers","Following","AccountGallery","Status","Reblogs","Favourites","FollowRequests","Blocks","DomainBlocks","FollowedTags","Mutes","Lists","UI","draggingOver","handleBeforeUnload","isComposing","hasComposingText","hasMediaAttachments","synchronouslySubmitMarkers","returnValue","handleWindowFocus","focusApp","submitMarkers","immediate","handleWindowBlur","unfocusApp","handleDragEnter","dragTargets","indexOf","dataTransfer","types","canUploadMore","handleDragOver","dataTransferIsText","dropEffect","handleDrop","files","uploadCompose","handleDragLeave","el","closeUploadModal","handleServiceWorkerPostMessage","data","warn","_debounce","clearHeight","trailing","handleResize","layout","cancel","changeLayout","handleHotkeyNew","element","querySelector","focus","handleHotkeySearch","handleHotkeyForceNew","resetCompose","handleHotkeyToggleComposeSpoilers","changeComposeSpoilerness","handleHotkeyFocusColumn","index","container","status","scrollTop","offsetTop","scrollIntoView","handleHotkeyBack","_router$history$locat","goBack","setHotkeysRef","hotkeys","handleHotkeyToggleHelp","handleHotkeyGoToHome","handleHotkeyGoToNotifications","handleHotkeyGoToLocal","handleHotkeyGoToFederated","handleHotkeyGoToDirect","handleHotkeyGoToStart","handleHotkeyGoToFavourites","handleHotkeyGoToPinned","handleHotkeyGoToProfile","handleHotkeyGoToBlocked","handleHotkeyGoToMuted","handleHotkeyGoToRequests","handleDragEnd","navigator","serviceWorker","fetchMarkers","expandHomeTimeline","expandNotifications","fetchServerTranslationLanguages","__mousetrap__","stopCallback","tagName","dropdownMenuIsOpen","handlers","HotKeys","attach","focused","classNames","pointerEvents","NotificationsContainer","LoadingBarContainer","ModalContainer","trim","some","x","firstLaunch","INTRODUCTION_VERSION","siteTitle","hydrateAction","hydrateStore","store","meta","fetchCustomEmojis","Mastodon","disabled_account_id","accessToken","access_token","permissions","disconnect","connectUserStream","shouldUpdateScroll","prevRouterProps","_location$state","_location$state2","_prevRouterProps$loca","mastodonModalKey","IntlProvider","ReduxProvider","ScrollContext","defaultTitle","titleTemplate","perf","performance","now","Date","throwIfEmpty","Error","mark","measure","getEntriesByName","getEntriesByType","clearMarks","clearMeasures","entries","marks","startTime","endTime","entry","duration","entryType","arr","mid","low","high","splice","insertSorted","main","ready","async","mountNode","getElementById","JSON","parse","getAttribute","createRoot","setupBrowserNotifications","Workbox","wb","registration","register","Notification","permission","registerPushNotifications","start","loadPolyfills","loadLocale","exports","getArg","aArgs","aName","aDefaultValue","urlRegexp","dataUrlRegexp","urlParse","aUrl","scheme","auth","host","port","urlGenerate","aParsedUrl","normalize","aPath","part","isAbsolute","parts","split","up","aRoot","aPathUrl","aRootUrl","joined","charAt","relative","level","lastIndexOf","substr","supportsNullProto","s","isProtoString","charCodeAt","strcmp","aStr1","aStr2","toSetString","aStr","fromSetString","compareByOriginalPositions","mappingA","mappingB","onlyCompareOriginal","cmp","originalLine","originalColumn","generatedColumn","generatedLine","compareByGeneratedPositionsDeflated","onlyCompareGenerated","compareByGeneratedPositionsInflated","ErrorStackParser","StackGenerator","StackTraceGPS","_options","stackframe","functionName","sourceCache","_generateError","_merge","first","second","forEach","obj","prop","_isShapedLikeParsableError","_filtered","opts","generateArtificially","getSync","backtrace","gps","Promise","resolve","all","resolveOriginal","pinpoint","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","requestOptions","reject","req","XMLHttpRequest","onerror","onreadystatechange","readyState","responseText","setRequestHeader","headers","header","reportPayload","send","stringify","_isNumber","n","isNaN","parseFloat","isFinite","_capitalize","str","toUpperCase","substring","_getter","p","booleanProps","numericProps","stringProps","arrayProps","objectProps","StackFrame","getArgs","setArgs","v","getEvalOrigin","evalOrigin","setEvalOrigin","fileName","getFileName","lineNumber","getLineNumber","columnNumber","getColumnNumber","getFunctionName","getIsEval","fromString","argsStartIndex","argsEndIndex","locationString","exec","Boolean","j","Number","k","String","base64VLQ","util","ArraySet","MappingList","SourceMapGenerator","_file","_sourceRoot","_skipValidation","_sources","_names","_mappings","_sourcesContents","_version","fromSourceMap","aSourceMapConsumer","sourceRoot","file","eachMapping","mapping","newMapping","generated","line","original","addMapping","sources","sourceFile","sourceContentFor","setSourceContent","_validateMapping","has","add","aSourceFile","aSourceContent","keys","applySourceMap","aSourceMapPath","newSources","newNames","unsortedForEach","originalPositionFor","aGenerated","aOriginal","aSource","_serializeMappings","next","nameIdx","sourceIdx","previousGeneratedColumn","previousGeneratedLine","previousOriginalColumn","previousOriginalLine","previousName","previousSource","result","mappings","toArray","len","encode","_generateSourcesContent","aSources","aSourceRoot","toJSON","names","sourcesContent","base64","aValue","digit","encoded","vlq","toVLQSigned","VLQ_BASE","decode","aIndex","aOutParam","continuation","shifted","strLen","shift","_array","_set","fromArray","aArray","aAllowDuplicates","set","getOwnPropertyNames","sStr","isDuplicate","idx","at","aIdx","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","parseOpera","parseV8OrIE","parseFFOrSafari","extractLocation","urlLike","sanitizedLine","locationParts","functionNameRegex","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","argsRaw","tokens","pop","functionCall","maxStackSize","curr","callee","test","RegExp","$1","caller","SourceMap","_xdr","_atob","b64str","atob","_parseJson","_findFunctionName","syntaxes","code","maxLines","Math","min","commentPos","m","_ensureSupportedEnvironment","defineProperty","_ensureStackFrameIsLegit","_findSourceMappingURL","lastSourceMappingUrl","matchSourceMappingUrl","sourceMappingUrlRegExp","_extractLocationInfoFromSourceMapSource","sourceMapConsumer","loc","mappedSource","sourceMapConsumerCache","ajax","_get","isDataUrl","offline","supportedEncodingRegexp","sourceMapStart","encodedSource","xhrPromise","method","_getSourceMapConsumer","sourceMappingURL","defaultSourceRoot","sourceMapConsumerPromise","sourceMapSource","SourceMapConsumer","getMappedLocation","mappedStackFrame","resolveMappedStackFrame","findFunctionName","guessedFunctionName","SourceNode","intToCharMap","number","charCode","_sorted","_last","aCallback","aThisArg","aMapping","lineA","lineB","columnA","columnB","binarySearch","quickSort","aSourceMap","sourceMap","sections","IndexedSourceMapConsumer","BasicSourceMapConsumer","Mapping","lastOffset","_sections","offset","offsetLine","offsetColumn","generatedOffset","consumer","__generatedMappings","_parseMappings","__originalMappings","_charIsMappingSeparator","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","aContext","aOrder","_generatedMappings","_originalMappings","allGeneratedPositionsFor","needle","_findMapping","lastColumn","smc","generatedMappings","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","segment","end","cachedSegments","temp","originalMappings","aNeedle","aMappings","aLineName","aColumnName","aComparator","aBias","computeColumnSpans","nextMapping","lastGeneratedColumn","Infinity","hasContentsOfAllSources","sc","nullOnMissing","fileUriAbsPath","generatedPositionFor","sectionIndex","section","bias","every","generatedPosition","sectionMappings","adjustedMapping","recursiveSearch","aLow","aHigh","aHaystack","aCompare","floor","swap","ary","y","doQuickSort","comparator","r","round","random","pivot","q","REGEX_NEWLINE","isSourceNode","aLine","aColumn","aChunks","sourceContents","fromStringWithSourceMap","aGeneratedCode","aRelativePath","remainingLines","shiftNextLine","lastGeneratedLine","lastMapping","nextLine","addMappingWithCode","aChunk","isArray","chunk","prepend","unshift","walk","aFn","aSep","newChildren","replaceRight","aPattern","aReplacement","lastChild","walkSourceContents","toStringWithSourceMap","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","sourceContent"],"mappings":"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","file":"js/application-a64b6efbd71e39981ead.chunk.js","sourcesContent":["import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { FormattedMessage } from 'react-intl';\n\nimport { Helmet } from 'react-helmet';\n\nimport StackTrace from 'stacktrace-js';\n\nimport { version, source_url } from 'mastodon/initial_state';\n\nexport default class ErrorBoundary extends PureComponent {\n\n  static propTypes = {\n    children: PropTypes.node,\n  };\n\n  state = {\n    hasError: false,\n    errorMessage: undefined,\n    stackTrace: undefined,\n    mappedStackTrace: undefined,\n    componentStack: undefined,\n  };\n\n  componentDidCatch (error, info) {\n    this.setState({\n      hasError: true,\n      errorMessage: error.toString(),\n      stackTrace: error.stack,\n      componentStack: info && info.componentStack,\n      mappedStackTrace: undefined,\n    });\n\n    StackTrace.fromError(error).then((stackframes) => {\n      this.setState({\n        mappedStackTrace: stackframes.map((sf) => sf.toString()).join('\\n'),\n      });\n    }).catch(() => {\n      this.setState({\n        mappedStackTrace: undefined,\n      });\n    });\n  }\n\n  handleCopyStackTrace = () => {\n    const { errorMessage, stackTrace, mappedStackTrace } = this.state;\n    const textarea = document.createElement('textarea');\n\n    let contents = [errorMessage, stackTrace];\n    if (mappedStackTrace) {\n      contents.push(mappedStackTrace);\n    }\n\n    textarea.textContent    = contents.join('\\n\\n\\n');\n    textarea.style.position = 'fixed';\n\n    document.body.appendChild(textarea);\n\n    try {\n      textarea.select();\n      document.execCommand('copy');\n    } catch (e) {\n\n    } finally {\n      document.body.removeChild(textarea);\n    }\n\n    this.setState({ copied: true });\n    setTimeout(() => this.setState({ copied: false }), 700);\n  };\n\n  render() {\n    const { hasError, copied, errorMessage } = this.state;\n\n    if (!hasError) {\n      return this.props.children;\n    }\n\n    const likelyBrowserAddonIssue = errorMessage && errorMessage.includes('NotFoundError');\n\n    return (\n      <div className='error-boundary'>\n        <div>\n          <p className='error-boundary__error'>\n            { likelyBrowserAddonIssue ? (\n              <FormattedMessage id='error.unexpected_crash.explanation_addons' defaultMessage='This page could not be displayed correctly. This error is likely caused by a browser add-on or automatic translation tools.' />\n            ) : (\n              <FormattedMessage id='error.unexpected_crash.explanation' defaultMessage='Due to a bug in our code or a browser compatibility issue, this page could not be displayed correctly.' />\n            )}\n          </p>\n\n          <p>\n            { likelyBrowserAddonIssue ? (\n              <FormattedMessage id='error.unexpected_crash.next_steps_addons' defaultMessage='Try disabling them and refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' />\n            ) : (\n              <FormattedMessage id='error.unexpected_crash.next_steps' defaultMessage='Try refreshing the page. If that does not help, you may still be able to use Mastodon through a different browser or native app.' />\n            )}\n          </p>\n\n          <p className='error-boundary__footer'>Mastodon v{version} · <a href={source_url} rel='noopener noreferrer' target='_blank'><FormattedMessage id='errors.unexpected_crash.report_issue' defaultMessage='Report issue' /></a> · <button onClick={this.handleCopyStackTrace} className={copied ? 'copied' : ''}><FormattedMessage id='errors.unexpected_crash.copy_stacktrace' defaultMessage='Copy stacktrace to clipboard' /></button></p>\n        </div>\n\n        <Helmet>\n          <meta name='robots' content='noindex' />\n        </Helmet>\n      </div>\n    );\n  }\n\n}\n","var _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n  return target;\n};\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\nfunction _possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\nimport warning from \"warning\";\nimport invariant from \"invariant\";\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\n/**\n * The public API for putting history on context.\n */\n\nvar Router = function (_React$Component) {\n  _inherits(Router, _React$Component);\n  function Router() {\n    var _temp, _this, _ret;\n    _classCallCheck(this, Router);\n    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _React$Component.call.apply(_React$Component, [this].concat(args))), _this), _this.state = {\n      match: _this.computeMatch(_this.props.history.location.pathname)\n    }, _temp), _possibleConstructorReturn(_this, _ret);\n  }\n  Router.prototype.getChildContext = function getChildContext() {\n    return {\n      router: _extends({}, this.context.router, {\n        history: this.props.history,\n        route: {\n          location: this.props.history.location,\n          match: this.state.match\n        }\n      })\n    };\n  };\n  Router.prototype.computeMatch = function computeMatch(pathname) {\n    return {\n      path: \"/\",\n      url: \"/\",\n      params: {},\n      isExact: pathname === \"/\"\n    };\n  };\n  Router.prototype.componentWillMount = function componentWillMount() {\n    var _this2 = this;\n    var _props = this.props,\n      children = _props.children,\n      history = _props.history;\n    invariant(children == null || React.Children.count(children) === 1, \"A <Router> may have only one child element\");\n\n    // Do this here so we can setState when a <Redirect> changes the\n    // location in componentWillMount. This happens e.g. when doing\n    // server rendering using a <StaticRouter>.\n    this.unlisten = history.listen(function () {\n      _this2.setState({\n        match: _this2.computeMatch(history.location.pathname)\n      });\n    });\n  };\n  Router.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {\n    warning(this.props.history === nextProps.history, \"You cannot change <Router history>\");\n  };\n  Router.prototype.componentWillUnmount = function componentWillUnmount() {\n    this.unlisten();\n  };\n  Router.prototype.render = function render() {\n    var children = this.props.children;\n    return children ? React.Children.only(children) : null;\n  };\n  return Router;\n}(React.Component);\nRouter.propTypes = {\n  history: PropTypes.object.isRequired,\n  children: PropTypes.node\n};\nRouter.contextTypes = {\n  router: PropTypes.object\n};\nRouter.childContextTypes = {\n  router: PropTypes.object.isRequired\n};\nexport default Router;","import type { PropsWithChildren } from 'react';\nimport React from 'react';\n\nimport { createBrowserHistory } from 'history';\nimport { Router as OriginalRouter } from 'react-router';\n\nimport { layoutFromWindow } from 'mastodon/is_mobile';\n\ninterface MastodonLocationState {\n  fromMastodon?: boolean;\n  mastodonModalKey?: string;\n}\n\nconst browserHistory = createBrowserHistory<\n  MastodonLocationState | undefined\n>();\nconst originalPush = browserHistory.push.bind(browserHistory);\nconst originalReplace = browserHistory.replace.bind(browserHistory);\n\nbrowserHistory.push = (path: string, state?: MastodonLocationState) => {\n  state = state ?? {};\n  state.fromMastodon = true;\n\n  if (layoutFromWindow() === 'multi-column' && !path.startsWith('/deck')) {\n    originalPush(`/deck${path}`, state);\n  } else {\n    originalPush(path, state);\n  }\n};\n\nbrowserHistory.replace = (path: string, state?: MastodonLocationState) => {\n  if (browserHistory.location.state?.fromMastodon) {\n    state = state ?? {};\n    state.fromMastodon = true;\n  }\n\n  if (layoutFromWindow() === 'multi-column' && !path.startsWith('/deck')) {\n    originalReplace(`/deck${path}`, state);\n  } else {\n    originalReplace(path, state);\n  }\n};\n\nexport const Router: React.FC<PropsWithChildren> = ({ children }) => {\n  return <OriginalRouter history={browserHistory}>{children}</OriginalRouter>;\n};\n","import pathToRegexp from \"path-to-regexp\";\nvar patternCache = {};\nvar cacheLimit = 10000;\nvar cacheCount = 0;\nvar compileGenerator = function compileGenerator(pattern) {\n  var cacheKey = pattern;\n  var cache = patternCache[cacheKey] || (patternCache[cacheKey] = {});\n  if (cache[pattern]) return cache[pattern];\n  var compiledGenerator = pathToRegexp.compile(pattern);\n  if (cacheCount < cacheLimit) {\n    cache[pattern] = compiledGenerator;\n    cacheCount++;\n  }\n  return compiledGenerator;\n};\n\n/**\n * Public API for generating a URL pathname from a pattern and parameters.\n */\nvar generatePath = function generatePath() {\n  var pattern = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : \"/\";\n  var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n  if (pattern === \"/\") {\n    return pattern;\n  }\n  var generator = compileGenerator(pattern);\n  return generator(params, {\n    pretty: true\n  });\n};\nexport default generatePath;","var _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n  return target;\n};\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\nfunction _possibleConstructorReturn(self, call) {\n  if (!self) {\n    throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n  }\n  return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\nfunction _inherits(subClass, superClass) {\n  if (typeof superClass !== \"function\" && superClass !== null) {\n    throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n  }\n  subClass.prototype = Object.create(superClass && superClass.prototype, {\n    constructor: {\n      value: subClass,\n      enumerable: false,\n      writable: true,\n      configurable: true\n    }\n  });\n  if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;\n}\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport warning from \"warning\";\nimport invariant from \"invariant\";\nimport { createLocation, locationsAreEqual } from \"history\";\nimport generatePath from \"./generatePath\";\n\n/**\n * The public API for updating the location programmatically\n * with a component.\n */\n\nvar Redirect = function (_React$Component) {\n  _inherits(Redirect, _React$Component);\n  function Redirect() {\n    _classCallCheck(this, Redirect);\n    return _possibleConstructorReturn(this, _React$Component.apply(this, arguments));\n  }\n  Redirect.prototype.isStatic = function isStatic() {\n    return this.context.router && this.context.router.staticContext;\n  };\n  Redirect.prototype.componentWillMount = function componentWillMount() {\n    invariant(this.context.router, \"You should not use <Redirect> outside a <Router>\");\n    if (this.isStatic()) this.perform();\n  };\n  Redirect.prototype.componentDidMount = function componentDidMount() {\n    if (!this.isStatic()) this.perform();\n  };\n  Redirect.prototype.componentDidUpdate = function componentDidUpdate(prevProps) {\n    var prevTo = createLocation(prevProps.to);\n    var nextTo = createLocation(this.props.to);\n    if (locationsAreEqual(prevTo, nextTo)) {\n      warning(false, \"You tried to redirect to the same route you're currently on: \" + (\"\\\"\" + nextTo.pathname + nextTo.search + \"\\\"\"));\n      return;\n    }\n    this.perform();\n  };\n  Redirect.prototype.computeTo = function computeTo(_ref) {\n    var computedMatch = _ref.computedMatch,\n      to = _ref.to;\n    if (computedMatch) {\n      if (typeof to === \"string\") {\n        return generatePath(to, computedMatch.params);\n      } else {\n        return _extends({}, to, {\n          pathname: generatePath(to.pathname, computedMatch.params)\n        });\n      }\n    }\n    return to;\n  };\n  Redirect.prototype.perform = function perform() {\n    var history = this.context.router.history;\n    var push = this.props.push;\n    var to = this.computeTo(this.props);\n    if (push) {\n      history.push(to);\n    } else {\n      history.replace(to);\n    }\n  };\n  Redirect.prototype.render = function render() {\n    return null;\n  };\n  return Redirect;\n}(React.Component);\nRedirect.propTypes = {\n  computedMatch: PropTypes.object,\n  // private, from <Switch>\n  push: PropTypes.bool,\n  from: PropTypes.string,\n  to: PropTypes.oneOfType([PropTypes.string, PropTypes.object]).isRequired\n};\nRedirect.defaultProps = {\n  push: false\n};\nRedirect.contextTypes = {\n  router: PropTypes.shape({\n    history: PropTypes.shape({\n      push: PropTypes.func.isRequired,\n      replace: PropTypes.func.isRequired\n    }).isRequired,\n    staticContext: PropTypes.object\n  }).isRequired\n};\nexport default Redirect;","// Written in this round about way for babel-transform-imports\nimport Redirect from \"react-router/es/Redirect\";\nexport default Redirect;","import PropTypes from 'prop-types';\n\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { Link } from 'react-router-dom';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { connect } from 'react-redux';\n\nimport { Avatar } from 'mastodon/components/avatar';\nimport { DisplayName } from 'mastodon/components/display_name';\nimport { IconButton } from 'mastodon/components/icon_button';\n\nconst messages = defineMessages({\n  close: { id: 'lightbox.close', defaultMessage: 'Close' },\n});\n\nconst mapStateToProps = (state, { accountId }) => ({\n  account: state.getIn(['accounts', accountId]),\n});\n\nclass Header extends ImmutablePureComponent {\n\n  static propTypes = {\n    accountId: PropTypes.string.isRequired,\n    statusId: PropTypes.string.isRequired,\n    account: ImmutablePropTypes.map.isRequired,\n    onClose: PropTypes.func.isRequired,\n    intl: PropTypes.object.isRequired,\n  };\n\n  render () {\n    const { account, statusId, onClose, intl } = this.props;\n\n    return (\n      <div className='picture-in-picture__header'>\n        <Link to={`/@${account.get('acct')}/${statusId}`} className='picture-in-picture__header__account'>\n          <Avatar account={account} size={36} />\n          <DisplayName account={account} />\n        </Link>\n\n        <IconButton icon='times' onClick={onClose} title={intl.formatMessage(messages.close)} />\n      </div>\n    );\n  }\n\n}\n\nexport default connect(mapStateToProps)(injectIntl(Header));\n","import PropTypes from 'prop-types';\nimport { Component } from 'react';\n\nimport { connect } from 'react-redux';\n\nimport { removePictureInPicture } from 'mastodon/actions/picture_in_picture';\nimport Audio from 'mastodon/features/audio';\nimport Video from 'mastodon/features/video';\n\nimport Footer from './components/footer';\nimport Header from './components/header';\n\nconst mapStateToProps = state => ({\n  ...state.get('picture_in_picture'),\n});\n\nclass PictureInPicture extends Component {\n\n  static propTypes = {\n    statusId: PropTypes.string,\n    accountId: PropTypes.string,\n    type: PropTypes.string,\n    src: PropTypes.string,\n    muted: PropTypes.bool,\n    volume: PropTypes.number,\n    currentTime: PropTypes.number,\n    poster: PropTypes.string,\n    backgroundColor: PropTypes.string,\n    foregroundColor: PropTypes.string,\n    accentColor: PropTypes.string,\n    dispatch: PropTypes.func.isRequired,\n  };\n\n  handleClose = () => {\n    const { dispatch } = this.props;\n    dispatch(removePictureInPicture());\n  };\n\n  render () {\n    const { type, src, currentTime, accountId, statusId } = this.props;\n\n    if (!currentTime) {\n      return null;\n    }\n\n    let player;\n\n    if (type === 'video') {\n      player = (\n        <Video\n          src={src}\n          currentTime={this.props.currentTime}\n          volume={this.props.volume}\n          muted={this.props.muted}\n          autoPlay\n          inline\n          alwaysVisible\n        />\n      );\n    } else if (type === 'audio') {\n      player = (\n        <Audio\n          src={src}\n          currentTime={this.props.currentTime}\n          volume={this.props.volume}\n          muted={this.props.muted}\n          poster={this.props.poster}\n          backgroundColor={this.props.backgroundColor}\n          foregroundColor={this.props.foregroundColor}\n          accentColor={this.props.accentColor}\n          autoPlay\n        />\n      );\n    }\n\n    return (\n      <div className='picture-in-picture'>\n        <Header accountId={accountId} statusId={statusId} onClose={this.handleClose} />\n\n        {player}\n\n        <Footer statusId={statusId} />\n      </div>\n    );\n  }\n\n}\n\nexport default connect(mapStateToProps)(PictureInPicture);\n","import logo from 'mastodon/../images/logo.svg';\n\nexport const WordmarkLogo: React.FC = () => (\n  <svg viewBox='0 0 261 66' className='logo logo--wordmark' role='img'>\n    <title>Mastodon</title>\n    <use xlinkHref='#logo-symbol-wordmark' />\n  </svg>\n);\n\nexport const SymbolLogo: React.FC = () => (\n  <img src={logo} alt='Mastodon' className='logo logo--icon' />\n);\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport { Link, withRouter } from 'react-router-dom';\n\nimport { connect } from 'react-redux';\n\nimport { openModal } from 'mastodon/actions/modal';\nimport { fetchServer } from 'mastodon/actions/server';\nimport { Avatar } from 'mastodon/components/avatar';\nimport { Icon } from 'mastodon/components/icon';\nimport { WordmarkLogo, SymbolLogo } from 'mastodon/components/logo';\nimport { registrationsOpen, me, sso_redirect } from 'mastodon/initial_state';\n\nconst Account = connect(state => ({\n  account: state.getIn(['accounts', me]),\n}))(({ account }) => (\n  <Link to={`/@${account.get('acct')}`} title={account.get('acct')}>\n    <Avatar account={account} size={35} />\n  </Link>\n));\n\nconst messages = defineMessages({\n  search: { id: 'navigation_bar.search', defaultMessage: 'Search' },\n});\n\nconst mapStateToProps = (state) => ({\n  signupUrl: state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up',\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n  openClosedRegistrationsModal() {\n    dispatch(openModal({ modalType: 'CLOSED_REGISTRATIONS' }));\n  },\n  dispatchServer() {\n    dispatch(fetchServer());\n  }\n});\n\nclass Header extends PureComponent {\n\n  static contextTypes = {\n    identity: PropTypes.object,\n  };\n\n  static propTypes = {\n    openClosedRegistrationsModal: PropTypes.func,\n    location: PropTypes.object,\n    signupUrl: PropTypes.string.isRequired,\n    dispatchServer: PropTypes.func,\n    intl: PropTypes.object.isRequired,\n  };\n\n  componentDidMount () {\n    const { dispatchServer } = this.props;\n    dispatchServer();\n  }\n\n  render () {\n    const { signedIn } = this.context.identity;\n    const { location, openClosedRegistrationsModal, signupUrl, intl } = this.props;\n\n    let content;\n\n    if (signedIn) {\n      content = (\n        <>\n          {location.pathname !== '/search' && <Link to='/search' className='button button-secondary' aria-label={intl.formatMessage(messages.search)}><Icon id='search' /></Link>}\n          {location.pathname !== '/publish' && <Link to='/publish' className='button button-secondary'><FormattedMessage id='compose_form.publish_form' defaultMessage='New post' /></Link>}\n          <Account />\n        </>\n      );\n    } else {\n\n      if (sso_redirect) {\n        content = (\n            <a href={sso_redirect} data-method='post' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sso_redirect' defaultMessage='Login or Register' /></a>\n        )\n      } else {\n        let signupButton;\n\n        if (registrationsOpen) {\n          signupButton = (\n            <a href={signupUrl} className='button'>\n              <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />\n            </a>\n          );\n        } else {\n          signupButton = (\n            <button className='button' onClick={openClosedRegistrationsModal}>\n              <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />\n            </button>\n          );\n        }\n\n        content = (\n          <>\n            {signupButton}\n            <a href='/auth/sign_in' className='button button-tertiary'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Login' /></a>\n          </>\n        );\n      }\n    }\n\n    return (\n      <div className='ui__header'>\n        <Link to='/' className='ui__header__logo'>\n          <WordmarkLogo />\n          <SymbolLogo />\n        </Link>\n\n        <div className='ui__header__links'>\n          {content}\n        </div>\n      </div>\n    );\n  }\n\n}\n\nexport default injectIntl(withRouter(connect(mapStateToProps, mapDispatchToProps)(Header)));\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { FormattedMessage } from 'react-intl';\n\nimport spring from 'react-motion/lib/spring';\n\nimport Motion from '../util/optional_motion';\n\nexport default class UploadArea extends PureComponent {\n\n  static propTypes = {\n    active: PropTypes.bool,\n    onClose: PropTypes.func,\n  };\n\n  handleKeyUp = (e) => {\n    const keyCode = e.keyCode;\n    if (this.props.active) {\n      switch(keyCode) {\n      case 27:\n        e.preventDefault();\n        e.stopPropagation();\n        this.props.onClose();\n        break;\n      }\n    }\n  };\n\n  componentDidMount () {\n    window.addEventListener('keyup', this.handleKeyUp, false);\n  }\n\n  componentWillUnmount () {\n    window.removeEventListener('keyup', this.handleKeyUp);\n  }\n\n  render () {\n    const { active } = this.props;\n\n    return (\n      <Motion defaultStyle={{ backgroundOpacity: 0, backgroundScale: 0.95 }} style={{ backgroundOpacity: spring(active ? 1 : 0, { stiffness: 150, damping: 15 }), backgroundScale: spring(active ? 1 : 0.95, { stiffness: 200, damping: 3 }) }}>\n        {({ backgroundOpacity, backgroundScale }) => (\n          <div className='upload-area' style={{ visibility: active ? 'visible' : 'hidden', opacity: backgroundOpacity }}>\n            <div className='upload-area__drop'>\n              <div className='upload-area__background' style={{ transform: `scale(${backgroundScale})` }} />\n              <div className='upload-area__content'><FormattedMessage id='upload_area.title' defaultMessage='Drag & drop to upload' /></div>\n            </div>\n          </div>\n        )}\n      </Motion>\n    );\n  }\n\n}\n","import PropTypes from 'prop-types';\n\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nimport Column from '../../../components/column';\nimport ColumnHeader from '../../../components/column_header';\n\nexport default class ColumnLoading extends ImmutablePureComponent {\n\n  static propTypes = {\n    title: PropTypes.oneOfType([PropTypes.node, PropTypes.string]),\n    icon: PropTypes.string,\n    multiColumn: PropTypes.bool,\n  };\n\n  static defaultProps = {\n    title: '',\n    icon: '',\n  };\n\n  render() {\n    let { title, icon, multiColumn } = this.props;\n\n    return (\n      <Column>\n        <ColumnHeader icon={icon} title={title} multiColumn={multiColumn} focusable={false} placeholder />\n        <div className='scrollable' />\n      </Column>\n    );\n  }\n\n}\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport { connect } from 'react-redux';\n\nimport { fetchServer } from 'mastodon/actions/server';\nimport { ServerHeroImage } from 'mastodon/components/server_hero_image';\nimport { ShortNumber } from 'mastodon/components/short_number';\nimport { Skeleton } from 'mastodon/components/skeleton';\nimport Account from 'mastodon/containers/account_container';\nimport { domain } from 'mastodon/initial_state';\n\nconst messages = defineMessages({\n  aboutActiveUsers: { id: 'server_banner.about_active_users', defaultMessage: 'People using this server during the last 30 days (Monthly Active Users)' },\n});\n\nconst mapStateToProps = state => ({\n  server: state.getIn(['server', 'server']),\n});\n\nclass ServerBanner extends PureComponent {\n\n  static propTypes = {\n    server: PropTypes.object,\n    dispatch: PropTypes.func,\n    intl: PropTypes.object,\n  };\n\n  componentDidMount () {\n    const { dispatch } = this.props;\n    dispatch(fetchServer());\n  }\n\n  render () {\n    const { server, intl } = this.props;\n    const isLoading = server.get('isLoading');\n\n    return (\n      <div className='server-banner'>\n        <div className='server-banner__introduction'>\n          <FormattedMessage id='server_banner.introduction' defaultMessage='{domain} is part of the decentralized social network powered by {mastodon}.' values={{ domain: <strong>{domain}</strong>, mastodon: <a href='https://joinmastodon.org' target='_blank'>Mastodon</a> }} />\n        </div>\n\n        <ServerHeroImage blurhash={server.getIn(['thumbnail', 'blurhash'])} src={server.getIn(['thumbnail', 'url'])} className='server-banner__hero' />\n\n        <div className='server-banner__description'>\n          {isLoading ? (\n            <>\n              <Skeleton width='100%' />\n              <br />\n              <Skeleton width='100%' />\n              <br />\n              <Skeleton width='70%' />\n            </>\n          ) : server.get('description')}\n        </div>\n\n        <div className='server-banner__meta'>\n          <div className='server-banner__meta__column'>\n            <h4><FormattedMessage id='server_banner.administered_by' defaultMessage='Administered by:' /></h4>\n\n            <Account id={server.getIn(['contact', 'account', 'id'])} size={36} minimal />\n          </div>\n\n          <div className='server-banner__meta__column'>\n            <h4><FormattedMessage id='server_banner.server_stats' defaultMessage='Server stats:' /></h4>\n\n            {isLoading ? (\n              <>\n                <strong className='server-banner__number'><Skeleton width='10ch' /></strong>\n                <br />\n                <span className='server-banner__number-label'><Skeleton width='5ch' /></span>\n              </>\n            ) : (\n              <>\n                <strong className='server-banner__number'><ShortNumber value={server.getIn(['usage', 'users', 'active_month'])} /></strong>\n                <br />\n                <span className='server-banner__number-label' title={intl.formatMessage(messages.aboutActiveUsers)}><FormattedMessage id='server_banner.active_users' defaultMessage='active users' /></span>\n              </>\n            )}\n          </div>\n        </div>\n\n        <hr className='spacer' />\n\n        <a className='button button--block button-secondary' href='/about'><FormattedMessage id='server_banner.learn_more' defaultMessage='Learn more' /></a>\n      </div>\n    );\n  }\n\n}\n\nexport default connect(mapStateToProps)(injectIntl(ServerBanner));\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { connect } from 'react-redux';\n\nimport { changeComposing, mountCompose, unmountCompose } from 'mastodon/actions/compose';\nimport ServerBanner from 'mastodon/components/server_banner';\nimport ComposeFormContainer from 'mastodon/features/compose/containers/compose_form_container';\nimport NavigationContainer from 'mastodon/features/compose/containers/navigation_container';\nimport SearchContainer from 'mastodon/features/compose/containers/search_container';\n\nimport LinkFooter from './link_footer';\n\nclass ComposePanel extends PureComponent {\n\n  static contextTypes = {\n    identity: PropTypes.object.isRequired,\n  };\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n  };\n\n  onFocus = () => {\n    const { dispatch } = this.props;\n    dispatch(changeComposing(true));\n  };\n\n  onBlur = () => {\n    const { dispatch } = this.props;\n    dispatch(changeComposing(false));\n  };\n\n  componentDidMount () {\n    const { dispatch } = this.props;\n    dispatch(mountCompose());\n  }\n\n  componentWillUnmount () {\n    const { dispatch } = this.props;\n    dispatch(unmountCompose());\n  }\n\n  render() {\n    const { signedIn } = this.context.identity;\n\n    return (\n      <div className='compose-panel' onFocus={this.onFocus}>\n        <SearchContainer openInRoute />\n\n        {!signedIn && (\n          <>\n            <ServerBanner />\n            <div className='flex-spacer' />\n          </>\n        )}\n\n        {signedIn && (\n          <>\n            <NavigationContainer onClose={this.onBlur} />\n            <ComposeFormContainer singleColumn />\n          </>\n        )}\n\n        <LinkFooter />\n      </div>\n    );\n  }\n\n}\n\nexport default connect()(ComposePanel);\n","const DrawerLoading = () => (\n  <div className='drawer'>\n    <div className='drawer__pager'>\n      <div className='drawer__inner' />\n    </div>\n  </div>\n);\n\nexport default DrawerLoading;\n","import PropTypes from 'prop-types';\n\nimport { defineMessages, injectIntl, FormattedMessage } from 'react-intl';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nimport Hashtag from 'mastodon/components/hashtag';\n\nconst messages = defineMessages({\n  lastStatusAt: { id: 'account.featured_tags.last_status_at', defaultMessage: 'Last post on {date}' },\n  empty: { id: 'account.featured_tags.last_status_never', defaultMessage: 'No posts' },\n});\n\nclass FeaturedTags extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  static propTypes = {\n    account: ImmutablePropTypes.map,\n    featuredTags: ImmutablePropTypes.list,\n    tagged: PropTypes.string,\n    intl: PropTypes.object.isRequired,\n  };\n\n  render () {\n    const { account, featuredTags, intl } = this.props;\n\n    if (!account || account.get('suspended') || featuredTags.isEmpty()) {\n      return null;\n    }\n\n    return (\n      <div className='getting-started__trends'>\n        <h4><FormattedMessage id='account.featured_tags.title' defaultMessage=\"{name}'s featured hashtags\" values={{ name: <bdi dangerouslySetInnerHTML={{ __html: account.get('display_name_html') }} /> }} /></h4>\n\n        {featuredTags.take(3).map(featuredTag => (\n          <Hashtag\n            key={featuredTag.get('name')}\n            name={featuredTag.get('name')}\n            href={featuredTag.get('url')}\n            to={`/@${account.get('acct')}/tagged/${featuredTag.get('name')}`}\n            uses={featuredTag.get('statuses_count') * 1}\n            withGraph={false}\n            description={((featuredTag.get('statuses_count') * 1) > 0) ? intl.formatMessage(messages.lastStatusAt, { date: intl.formatDate(featuredTag.get('last_status_at'), { month: 'short', day: '2-digit' }) }) : intl.formatMessage(messages.empty)}\n          />\n        ))}\n      </div>\n    );\n  }\n\n}\n\nexport default injectIntl(FeaturedTags);\n","import { List as ImmutableList } from 'immutable';\nimport { connect } from 'react-redux';\n\nimport { makeGetAccount } from 'mastodon/selectors';\n\nimport FeaturedTags from '../components/featured_tags';\n\nconst mapStateToProps = () => {\n  const getAccount = makeGetAccount();\n\n  return (state, { accountId }) => ({\n    account: getAccount(state, accountId),\n    featuredTags: state.getIn(['user_lists', 'featured_tags', accountId, 'items'], ImmutableList()),\n  });\n};\n\nexport default connect(mapStateToProps)(FeaturedTags);\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { connect } from 'react-redux';\n\nimport FeaturedTags from 'mastodon/features/account/containers/featured_tags_container';\nimport { normalizeForLookup } from 'mastodon/reducers/accounts_map';\n\nconst mapStateToProps = (state, { match: { params: { acct } } }) => {\n  const accountId = state.getIn(['accounts_map', normalizeForLookup(acct)]);\n\n  if (!accountId) {\n    return {\n      isLoading: true,\n    };\n  }\n\n  return {\n    accountId,\n    isLoading: false,\n  };\n};\n\nclass AccountNavigation extends PureComponent {\n\n  static propTypes = {\n    match: PropTypes.shape({\n      params: PropTypes.shape({\n        acct: PropTypes.string,\n        tagged: PropTypes.string,\n      }).isRequired,\n    }).isRequired,\n\n    accountId: PropTypes.string,\n    isLoading: PropTypes.bool,\n  };\n\n  render () {\n    const { accountId, isLoading, match: { params: { tagged } } } = this.props;\n\n    if (isLoading) {\n      return null;\n    }\n\n    return (\n      <>\n        <div className='flex-spacer' />\n        <FeaturedTags accountId={accountId} tagged={tagged} />\n      </>\n    );\n  }\n\n}\n\nexport default connect(mapStateToProps)(AccountNavigation);\n","import { PureComponent } from 'react';\n\nimport { Switch, Route, withRouter } from 'react-router-dom';\n\nimport AccountNavigation from 'mastodon/features/account/navigation';\nimport Trends from 'mastodon/features/getting_started/containers/trends_container';\nimport { showTrends } from 'mastodon/initial_state';\n\nconst DefaultNavigation = () => (\n  showTrends ? (\n    <>\n      <div className='flex-spacer' />\n      <Trends />\n    </>\n  ) : null\n);\n\nclass NavigationPortal extends PureComponent {\n\n  render () {\n    return (\n      <Switch>\n        <Route path='/@:acct' exact component={AccountNavigation} />\n        <Route path='/@:acct/tagged/:tagged?' exact component={AccountNavigation} />\n        <Route path='/@:acct/with_replies' exact component={AccountNavigation} />\n        <Route path='/@:acct/followers' exact component={AccountNavigation} />\n        <Route path='/@:acct/following' exact component={AccountNavigation} />\n        <Route path='/@:acct/media' exact component={AccountNavigation} />\n        <Route component={DefaultNavigation} />\n      </Switch>\n    );\n  }\n\n}\nexport default withRouter(NavigationPortal);\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { FormattedMessage, defineMessages, injectIntl } from 'react-intl';\n\nimport { Link } from 'react-router-dom';\n\nimport { connect } from 'react-redux';\n\nimport { openModal } from 'mastodon/actions/modal';\nimport { disabledAccountId, movedToAccountId, domain } from 'mastodon/initial_state';\nimport { logOut } from 'mastodon/utils/log_out';\n\nconst messages = defineMessages({\n  logoutMessage: { id: 'confirmations.logout.message', defaultMessage: 'Are you sure you want to log out?' },\n  logoutConfirm: { id: 'confirmations.logout.confirm', defaultMessage: 'Log out' },\n});\n\nconst mapStateToProps = (state) => ({\n  disabledAcct: state.getIn(['accounts', disabledAccountId, 'acct']),\n  movedToAcct: movedToAccountId ? state.getIn(['accounts', movedToAccountId, 'acct']) : undefined,\n});\n\nconst mapDispatchToProps = (dispatch, { intl }) => ({\n  onLogout () {\n    dispatch(openModal({\n      modalType: 'CONFIRM',\n      modalProps: {\n        message: intl.formatMessage(messages.logoutMessage),\n        confirm: intl.formatMessage(messages.logoutConfirm),\n        closeWhenConfirm: false,\n        onConfirm: () => logOut(),\n      },\n    }));\n  },\n});\n\nclass DisabledAccountBanner extends PureComponent {\n\n  static propTypes = {\n    disabledAcct: PropTypes.string.isRequired,\n    movedToAcct: PropTypes.string,\n    onLogout: PropTypes.func.isRequired,\n    intl: PropTypes.object.isRequired,\n  };\n\n  handleLogOutClick = e => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    this.props.onLogout();\n\n    return false;\n  };\n\n  render () {\n    const { disabledAcct, movedToAcct } = this.props;\n\n    const disabledAccountLink = (\n      <Link to={`/@${disabledAcct}`}>\n        {disabledAcct}@{domain}\n      </Link>\n    );\n\n    return (\n      <div className='sign-in-banner'>\n        <p>\n          {movedToAcct ? (\n            <FormattedMessage\n              id='moved_to_account_banner.text'\n              defaultMessage='Your account {disabledAccount} is currently disabled because you moved to {movedToAccount}.'\n              values={{\n                disabledAccount: disabledAccountLink,\n                movedToAccount: <Link to={`/@${movedToAcct}`}>{movedToAcct.includes('@') ? movedToAcct : `${movedToAcct}@${domain}`}</Link>,\n              }}\n            />\n          ) : (\n            <FormattedMessage\n              id='disabled_account_banner.text'\n              defaultMessage='Your account {disabledAccount} is currently disabled.'\n              values={{\n                disabledAccount: disabledAccountLink,\n              }}\n            />\n          )}\n        </p>\n        <a href='/auth/edit' className='button button--block'>\n          <FormattedMessage id='disabled_account_banner.account_settings' defaultMessage='Account settings' />\n        </a>\n        <button type='button' className='button button--block button-tertiary' onClick={this.handleLogOutClick}>\n          <FormattedMessage id='confirmations.logout.confirm' defaultMessage='Log out' />\n        </button>\n      </div>\n    );\n  }\n\n}\n\nexport default injectIntl(connect(mapStateToProps, mapDispatchToProps)(DisabledAccountBanner));\n","import PropTypes from 'prop-types';\nimport { Component } from 'react';\n\nimport { injectIntl, defineMessages } from 'react-intl';\n\nimport { List as ImmutableList } from 'immutable';\nimport { connect } from 'react-redux';\n\nimport { fetchFollowRequests } from 'mastodon/actions/accounts';\nimport { IconWithBadge } from 'mastodon/components/icon_with_badge';\nimport ColumnLink from 'mastodon/features/ui/components/column_link';\n\nconst messages = defineMessages({\n  text: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },\n});\n\nconst mapStateToProps = state => ({\n  count: state.getIn(['user_lists', 'follow_requests', 'items'], ImmutableList()).size,\n});\n\nclass FollowRequestsColumnLink extends Component {\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n    count: PropTypes.number.isRequired,\n    intl: PropTypes.object.isRequired,\n  };\n\n  componentDidMount () {\n    const { dispatch } = this.props;\n\n    dispatch(fetchFollowRequests());\n  }\n\n  render () {\n    const { count, intl } = this.props;\n\n    if (count === 0) {\n      return null;\n    }\n\n    return (\n      <ColumnLink\n        transparent\n        to='/follow_requests'\n        icon={<IconWithBadge className='column-link__icon' id='user-plus' count={count} />}\n        text={intl.formatMessage(messages.text)}\n      />\n    );\n  }\n\n}\n\nexport default injectIntl(connect(mapStateToProps)(FollowRequestsColumnLink));\n","import PropTypes from 'prop-types';\n\nimport { withRouter } from 'react-router-dom';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\nimport { connect } from 'react-redux';\nimport { createSelector } from 'reselect';\n\nimport { fetchLists } from 'mastodon/actions/lists';\n\nimport ColumnLink from './column_link';\n\nconst getOrderedLists = createSelector([state => state.get('lists')], lists => {\n  if (!lists) {\n    return lists;\n  }\n\n  return lists.toList().filter(item => !!item).sort((a, b) => a.get('title').localeCompare(b.get('title'))).take(4);\n});\n\nconst mapStateToProps = state => ({\n  lists: getOrderedLists(state),\n});\n\nclass ListPanel extends ImmutablePureComponent {\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n    lists: ImmutablePropTypes.list,\n  };\n\n  componentDidMount () {\n    const { dispatch } = this.props;\n    dispatch(fetchLists());\n  }\n\n  render () {\n    const { lists } = this.props;\n\n    if (!lists || lists.isEmpty()) {\n      return null;\n    }\n\n    return (\n      <div className='list-panel'>\n        <hr />\n\n        {lists.map(list => (\n          <ColumnLink icon='list-ul' key={list.get('id')} strict text={list.get('title')} to={`/lists/${list.get('id')}`} transparent />\n        ))}\n      </div>\n    );\n  }\n\n}\n\nexport default withRouter(connect(mapStateToProps)(ListPanel));\n","import { connect } from 'react-redux';\n\nimport { IconWithBadge } from 'mastodon/components/icon_with_badge';\n\nconst mapStateToProps = state => ({\n  count: state.getIn(['notifications', 'unread']),\n  id: 'bell',\n});\n\nexport default connect(mapStateToProps)(IconWithBadge);\n","import { useCallback } from 'react';\n\nimport { FormattedMessage } from 'react-intl';\n\n\nimport { openModal } from 'mastodon/actions/modal';\nimport { registrationsOpen, sso_redirect } from 'mastodon/initial_state';\nimport { useAppDispatch, useAppSelector } from 'mastodon/store';\n\nconst SignInBanner = () => {\n  const dispatch = useAppDispatch();\n\n  const openClosedRegistrationsModal = useCallback(\n    () => dispatch(openModal({ modalType: 'CLOSED_REGISTRATIONS' })),\n    [dispatch],\n  );\n\n  let signupButton;\n\n  const signupUrl = useAppSelector((state) => state.getIn(['server', 'server', 'registrations', 'url'], null) || '/auth/sign_up');\n\n  if (sso_redirect) {\n    return (\n      <div className='sign-in-banner'>\n        <p><FormattedMessage id='sign_in_banner.text' defaultMessage='Login to follow profiles or hashtags, favorite, share and reply to posts. You can also interact from your account on a different server.' /></p>\n        <a href={sso_redirect} data-method='post' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sso_redirect' defaultMessage='Login or Register' /></a>\n      </div>\n    )\n  }\n\n  if (registrationsOpen) {\n    signupButton = (\n      <a href={signupUrl} className='button button--block'>\n        <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />\n      </a>\n    );\n  } else {\n    signupButton = (\n      <button className='button button--block' onClick={openClosedRegistrationsModal}>\n        <FormattedMessage id='sign_in_banner.create_account' defaultMessage='Create account' />\n      </button>\n    );\n  }\n\n  return (\n    <div className='sign-in-banner'>\n      <p><FormattedMessage id='sign_in_banner.text' defaultMessage='Login to follow profiles or hashtags, favorite, share and reply to posts. You can also interact from your account on a different server.' /></p>\n      {signupButton}\n      <a href='/auth/sign_in' className='button button--block button-tertiary'><FormattedMessage id='sign_in_banner.sign_in' defaultMessage='Login' /></a>\n    </div>\n  );\n};\n\nexport default SignInBanner;\n","import PropTypes from 'prop-types';\nimport { Component } from 'react';\n\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport { Link } from 'react-router-dom';\n\nimport { WordmarkLogo } from 'mastodon/components/logo';\nimport NavigationPortal from 'mastodon/components/navigation_portal';\nimport { timelinePreview, trendsEnabled } from 'mastodon/initial_state';\nimport { transientSingleColumn } from 'mastodon/is_mobile';\n\nimport ColumnLink from './column_link';\nimport DisabledAccountBanner from './disabled_account_banner';\nimport FollowRequestsColumnLink from './follow_requests_column_link';\nimport ListPanel from './list_panel';\nimport NotificationsCounterIcon from './notifications_counter_icon';\nimport SignInBanner from './sign_in_banner';\n\nconst messages = defineMessages({\n  home: { id: 'tabs_bar.home', defaultMessage: 'Home' },\n  notifications: { id: 'tabs_bar.notifications', defaultMessage: 'Notifications' },\n  explore: { id: 'explore.title', defaultMessage: 'Explore' },\n  firehose: { id: 'column.firehose', defaultMessage: 'Live feeds' },\n  direct: { id: 'navigation_bar.direct', defaultMessage: 'Private mentions' },\n  favourites: { id: 'navigation_bar.favourites', defaultMessage: 'Favorites' },\n  bookmarks: { id: 'navigation_bar.bookmarks', defaultMessage: 'Bookmarks' },\n  lists: { id: 'navigation_bar.lists', defaultMessage: 'Lists' },\n  preferences: { id: 'navigation_bar.preferences', defaultMessage: 'Preferences' },\n  followsAndFollowers: { id: 'navigation_bar.follows_and_followers', defaultMessage: 'Follows and followers' },\n  about: { id: 'navigation_bar.about', defaultMessage: 'About' },\n  search: { id: 'navigation_bar.search', defaultMessage: 'Search' },\n  advancedInterface: { id: 'navigation_bar.advanced_interface', defaultMessage: 'Open in advanced web interface' },\n  openedInClassicInterface: { id: 'navigation_bar.opened_in_classic_interface', defaultMessage: 'Posts, accounts, and other specific pages are opened by default in the classic web interface.' },\n});\n\nclass NavigationPanel extends Component {\n\n  static contextTypes = {\n    router: PropTypes.object.isRequired,\n    identity: PropTypes.object.isRequired,\n  };\n\n  static propTypes = {\n    intl: PropTypes.object.isRequired,\n  };\n\n  isFirehoseActive = (match, location) => {\n    return match || location.pathname.startsWith('/public');\n  };\n\n  render () {\n    const { intl } = this.props;\n    const { signedIn, disabledAccountId } = this.context.identity;\n\n    let banner = undefined;\n\n    if(transientSingleColumn)\n      banner = (<div className='switch-to-advanced'>\n        {intl.formatMessage(messages.openedInClassicInterface)}\n        {\" \"}\n        <a href={`/deck${location.pathname}`} className='switch-to-advanced__toggle'>\n          {intl.formatMessage(messages.advancedInterface)}\n        </a>\n      </div>);\n\n    return (\n      <div className='navigation-panel'>\n        <div className='navigation-panel__logo'>\n          <Link to='/' className='column-link column-link--logo'><WordmarkLogo /></Link>\n          {!banner && <hr />}\n        </div>\n\n        {banner &&\n          <div class='navigation-panel__banner'>\n            {banner}\n          </div>\n        }\n\n        {signedIn && (\n          <>\n            <ColumnLink transparent to='/home' icon='home' text={intl.formatMessage(messages.home)} />\n            <ColumnLink transparent to='/notifications' icon={<NotificationsCounterIcon className='column-link__icon' />} text={intl.formatMessage(messages.notifications)} />\n            <FollowRequestsColumnLink />\n          </>\n        )}\n\n        {trendsEnabled ? (\n          <ColumnLink transparent to='/explore' icon='hashtag' text={intl.formatMessage(messages.explore)} />\n        ) : (\n          <ColumnLink transparent to='/search' icon='search' text={intl.formatMessage(messages.search)} />\n        )}\n\n        {(signedIn || timelinePreview) && (\n          <ColumnLink transparent to='/public/local' isActive={this.isFirehoseActive} icon='globe' text={intl.formatMessage(messages.firehose)} />\n        )}\n\n        {!signedIn && (\n          <div className='navigation-panel__sign-in-banner'>\n            <hr />\n            { disabledAccountId ? <DisabledAccountBanner /> : <SignInBanner /> }\n          </div>\n        )}\n\n        {signedIn && (\n          <>\n            <ColumnLink transparent to='/conversations' icon='at' text={intl.formatMessage(messages.direct)} />\n            <ColumnLink transparent to='/bookmarks' icon='bookmark' text={intl.formatMessage(messages.bookmarks)} />\n            <ColumnLink transparent to='/favourites' icon='star' text={intl.formatMessage(messages.favourites)} />\n            <ColumnLink transparent to='/lists' icon='list-ul' text={intl.formatMessage(messages.lists)} />\n\n            <ListPanel />\n\n            <hr />\n\n            <ColumnLink transparent href='/settings/preferences' icon='cog' text={intl.formatMessage(messages.preferences)} />\n          </>\n        )}\n\n        <div className='navigation-panel__legal'>\n          <hr />\n          <ColumnLink transparent to='/about' icon='ellipsis-h' text={intl.formatMessage(messages.about)} />\n        </div>\n\n        <NavigationPortal />\n      </div>\n    );\n  }\n\n}\n\nexport default injectIntl(NavigationPanel);\n","import PropTypes from 'prop-types';\nimport { Children, cloneElement } from 'react';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nimport { supportsPassiveEvents } from 'detect-passive-events';\n\nimport { scrollRight } from '../../../scroll';\nimport BundleContainer from '../containers/bundle_container';\nimport {\n  Compose,\n  Notifications,\n  HomeTimeline,\n  CommunityTimeline,\n  PublicTimeline,\n  HashtagTimeline,\n  DirectTimeline,\n  FavouritedStatuses,\n  BookmarkedStatuses,\n  ListTimeline,\n  Directory,\n} from '../util/async-components';\n\nimport BundleColumnError from './bundle_column_error';\nimport ColumnLoading from './column_loading';\nimport ComposePanel from './compose_panel';\nimport DrawerLoading from './drawer_loading';\nimport NavigationPanel from './navigation_panel';\n\nconst componentMap = {\n  'COMPOSE': Compose,\n  'HOME': HomeTimeline,\n  'NOTIFICATIONS': Notifications,\n  'PUBLIC': PublicTimeline,\n  'REMOTE': PublicTimeline,\n  'COMMUNITY': CommunityTimeline,\n  'HASHTAG': HashtagTimeline,\n  'DIRECT': DirectTimeline,\n  'FAVOURITES': FavouritedStatuses,\n  'BOOKMARKS': BookmarkedStatuses,\n  'LIST': ListTimeline,\n  'DIRECTORY': Directory,\n};\n\nexport default class ColumnsArea extends ImmutablePureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object.isRequired,\n  };\n\n  static propTypes = {\n    columns: ImmutablePropTypes.list.isRequired,\n    isModalOpen: PropTypes.bool.isRequired,\n    singleColumn: PropTypes.bool,\n    children: PropTypes.node,\n  };\n\n  // Corresponds to (max-width: $no-gap-breakpoint + 285px - 1px) in SCSS\n  mediaQuery = 'matchMedia' in window && window.matchMedia('(max-width: 1174px)');\n\n  state = {\n    renderComposePanel: !(this.mediaQuery && this.mediaQuery.matches),\n  };\n\n  componentDidMount() {\n    if (!this.props.singleColumn) {\n      this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false);\n    }\n\n    if (this.mediaQuery) {\n      if (this.mediaQuery.addEventListener) {\n        this.mediaQuery.addEventListener('change', this.handleLayoutChange);\n      } else {\n        this.mediaQuery.addListener(this.handleLayoutChange);\n      }\n      this.setState({ renderComposePanel: !this.mediaQuery.matches });\n    }\n\n    this.isRtlLayout = document.getElementsByTagName('body')[0].classList.contains('rtl');\n  }\n\n  UNSAFE_componentWillUpdate(nextProps) {\n    if (this.props.singleColumn !== nextProps.singleColumn && nextProps.singleColumn) {\n      this.node.removeEventListener('wheel', this.handleWheel);\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    if (this.props.singleColumn !== prevProps.singleColumn && !this.props.singleColumn) {\n      this.node.addEventListener('wheel', this.handleWheel, supportsPassiveEvents ? { passive: true } : false);\n    }\n  }\n\n  componentWillUnmount () {\n    if (!this.props.singleColumn) {\n      this.node.removeEventListener('wheel', this.handleWheel);\n    }\n\n    if (this.mediaQuery) {\n      if (this.mediaQuery.removeEventListener) {\n        this.mediaQuery.removeEventListener('change', this.handleLayoutChange);\n      } else {\n        this.mediaQuery.removeListener(this.handleLayoutChange);\n      }\n    }\n  }\n\n  handleChildrenContentChange() {\n    if (!this.props.singleColumn) {\n      const modifier = this.isRtlLayout ? -1 : 1;\n      this._interruptScrollAnimation = scrollRight(this.node, (this.node.scrollWidth - window.innerWidth) * modifier);\n    }\n  }\n\n  handleLayoutChange = (e) => {\n    this.setState({ renderComposePanel: !e.matches });\n  };\n\n  handleWheel = () => {\n    if (typeof this._interruptScrollAnimation !== 'function') {\n      return;\n    }\n\n    this._interruptScrollAnimation();\n  };\n\n  setRef = (node) => {\n    this.node = node;\n  };\n\n  renderLoading = columnId => () => {\n    return columnId === 'COMPOSE' ? <DrawerLoading /> : <ColumnLoading multiColumn />;\n  };\n\n  renderError = (props) => {\n    return <BundleColumnError multiColumn errorType='network' {...props} />;\n  };\n\n  render () {\n    const { columns, children, singleColumn, isModalOpen } = this.props;\n    const { renderComposePanel } = this.state;\n\n    if (singleColumn) {\n      return (\n        <div className='columns-area__panels'>\n          <div className='columns-area__panels__pane columns-area__panels__pane--compositional'>\n            <div className='columns-area__panels__pane__inner'>\n              {renderComposePanel && <ComposePanel />}\n            </div>\n          </div>\n\n          <div className='columns-area__panels__main'>\n            <div className='tabs-bar__wrapper'><div id='tabs-bar__portal' /></div>\n            <div className='columns-area columns-area--mobile'>{children}</div>\n          </div>\n\n          <div className='columns-area__panels__pane columns-area__panels__pane--start columns-area__panels__pane--navigational'>\n            <div className='columns-area__panels__pane__inner'>\n              <NavigationPanel />\n            </div>\n          </div>\n        </div>\n      );\n    }\n\n    return (\n      <div className={`columns-area ${ isModalOpen ? 'unscrollable' : '' }`} ref={this.setRef}>\n        {columns.map(column => {\n          const params = column.get('params', null) === null ? null : column.get('params').toJS();\n          const other  = params && params.other ? params.other : {};\n\n          return (\n            <BundleContainer key={column.get('uuid')} fetchComponent={componentMap[column.get('id')]} loading={this.renderLoading(column.get('id'))} error={this.renderError}>\n              {SpecificComponent => <SpecificComponent columnId={column.get('uuid')} params={params} multiColumn {...other} />}\n            </BundleContainer>\n          );\n        })}\n\n        {Children.map(children, child => cloneElement(child, { multiColumn: true }))}\n      </div>\n    );\n  }\n\n}\n","import { connect } from 'react-redux';\n\nimport ColumnsArea from '../components/columns_area';\n\nconst mapStateToProps = state => ({\n  columns: state.getIn(['settings', 'columns']),\n  isModalOpen: !!state.get('modal').modalType,\n});\n\nexport default connect(mapStateToProps, null, null, { forwardRef: true })(ColumnsArea);\n","import PropTypes from 'prop-types';\nimport { Component, PureComponent, cloneElement, Children } from 'react';\n\nimport { Switch, Route } from 'react-router-dom';\n\nimport StackTrace from 'stacktrace-js';\n\nimport BundleColumnError from '../components/bundle_column_error';\nimport ColumnLoading from '../components/column_loading';\nimport BundleContainer from '../containers/bundle_container';\n\n// Small wrapper to pass multiColumn to the route components\nexport class WrappedSwitch extends PureComponent {\n  static contextTypes = {\n    router: PropTypes.object,\n  };\n\n  render () {\n    const { multiColumn, children } = this.props;\n    const { location } = this.context.router.route;\n\n    const decklessLocation = multiColumn && location.pathname.startsWith('/deck')\n      ? {...location, pathname: location.pathname.slice(5)}\n      : location;\n\n    return (\n      <Switch location={decklessLocation}>\n        {Children.map(children, child => child ? cloneElement(child, { multiColumn }) : null)}\n      </Switch>\n    );\n  }\n\n}\n\nWrappedSwitch.propTypes = {\n  multiColumn: PropTypes.bool,\n  children: PropTypes.node,\n};\n\n// Small Wrapper to extract the params from the route and pass\n// them to the rendered component, together with the content to\n// be rendered inside (the children)\nexport class WrappedRoute extends Component {\n\n  static propTypes = {\n    component: PropTypes.func.isRequired,\n    content: PropTypes.node,\n    multiColumn: PropTypes.bool,\n    componentParams: PropTypes.object,\n  };\n\n  static defaultProps = {\n    componentParams: {},\n  };\n\n  static getDerivedStateFromError () {\n    return {\n      hasError: true,\n    };\n  }\n\n  state = {\n    hasError: false,\n    stacktrace: '',\n  };\n\n  componentDidCatch (error) {\n    StackTrace.fromError(error).then(stackframes => {\n      this.setState({ stacktrace: error.toString() + '\\n' + stackframes.map(frame => frame.toString()).join('\\n') });\n    }).catch(err => {\n      console.error(err);\n    });\n  }\n\n  renderComponent = ({ match }) => {\n    const { component, content, multiColumn, componentParams } = this.props;\n    const { hasError, stacktrace } = this.state;\n\n    if (hasError) {\n      return (\n        <BundleColumnError\n          stacktrace={stacktrace}\n          multiColumn={multiColumn}\n          errorType='error'\n        />\n      );\n    }\n\n    return (\n      <BundleContainer fetchComponent={component} loading={this.renderLoading} error={this.renderError}>\n        {Component => <Component params={match.params} multiColumn={multiColumn} {...componentParams}>{content}</Component>}\n      </BundleContainer>\n    );\n  };\n\n  renderLoading = () => {\n    const { multiColumn } = this.props;\n\n    return <ColumnLoading multiColumn={multiColumn} />;\n  };\n\n  renderError = (props) => {\n    return <BundleColumnError {...props} errorType='network' />;\n  };\n\n  render () {\n    const { component: Component, content, ...rest } = this.props;\n\n    return <Route {...rest} render={this.renderComponent} />;\n  }\n\n}\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { defineMessages, injectIntl } from 'react-intl';\n\nimport classNames from 'classnames';\nimport { Redirect, Route, withRouter } from 'react-router-dom';\n\nimport { connect } from 'react-redux';\n\nimport { debounce } from 'lodash';\nimport { HotKeys } from 'react-hotkeys';\n\nimport { focusApp, unfocusApp, changeLayout } from 'mastodon/actions/app';\nimport { synchronouslySubmitMarkers, submitMarkers, fetchMarkers } from 'mastodon/actions/markers';\nimport { INTRODUCTION_VERSION } from 'mastodon/actions/onboarding';\nimport PictureInPicture from 'mastodon/features/picture_in_picture';\nimport { layoutFromWindow } from 'mastodon/is_mobile';\n\nimport { uploadCompose, resetCompose, changeComposeSpoilerness } from '../../actions/compose';\nimport { clearHeight } from '../../actions/height_cache';\nimport { expandNotifications } from '../../actions/notifications';\nimport { fetchServer, fetchServerTranslationLanguages } from '../../actions/server';\nimport { expandHomeTimeline } from '../../actions/timelines';\nimport initialState, { me, owner, singleUserMode, trendsEnabled, trendsAsLanding } from '../../initial_state';\n\nimport BundleColumnError from './components/bundle_column_error';\nimport Header from './components/header';\nimport UploadArea from './components/upload_area';\nimport ColumnsAreaContainer from './containers/columns_area_container';\nimport LoadingBarContainer from './containers/loading_bar_container';\nimport ModalContainer from './containers/modal_container';\nimport NotificationsContainer from './containers/notifications_container';\nimport {\n  Compose,\n  Status,\n  GettingStarted,\n  KeyboardShortcuts,\n  Firehose,\n  AccountTimeline,\n  AccountGallery,\n  HomeTimeline,\n  Followers,\n  Following,\n  Reblogs,\n  Favourites,\n  DirectTimeline,\n  HashtagTimeline,\n  Notifications,\n  FollowRequests,\n  FavouritedStatuses,\n  BookmarkedStatuses,\n  FollowedTags,\n  ListTimeline,\n  Blocks,\n  DomainBlocks,\n  Mutes,\n  PinnedStatuses,\n  Lists,\n  Directory,\n  Explore,\n  Onboarding,\n  About,\n  PrivacyPolicy,\n} from './util/async-components';\nimport { WrappedSwitch, WrappedRoute } from './util/react_router_helpers';\n\n// Dummy import, to make sure that <Status /> ends up in the application bundle.\n// Without this it ends up in ~8 very commonly used bundles.\nimport '../../components/status';\n\nconst messages = defineMessages({\n  beforeUnload: { id: 'ui.beforeunload', defaultMessage: 'Your draft will be lost if you leave.' },\n});\n\nconst mapStateToProps = state => ({\n  layout: state.getIn(['meta', 'layout']),\n  isComposing: state.getIn(['compose', 'is_composing']),\n  hasComposingText: state.getIn(['compose', 'text']).trim().length !== 0,\n  hasMediaAttachments: state.getIn(['compose', 'media_attachments']).size > 0,\n  canUploadMore: !state.getIn(['compose', 'media_attachments']).some(x => ['audio', 'video'].includes(x.get('type'))) && state.getIn(['compose', 'media_attachments']).size < 4,\n  dropdownMenuIsOpen: state.getIn(['dropdown_menu', 'openId']) !== null,\n  firstLaunch: state.getIn(['settings', 'introductionVersion'], 0) < INTRODUCTION_VERSION,\n  username: state.getIn(['accounts', me, 'username']),\n});\n\nconst keyMap = {\n  help: '?',\n  new: 'n',\n  search: 's',\n  forceNew: 'option+n',\n  toggleComposeSpoilers: 'option+x',\n  focusColumn: ['1', '2', '3', '4', '5', '6', '7', '8', '9'],\n  reply: 'r',\n  favourite: 'f',\n  boost: 'b',\n  mention: 'm',\n  open: ['enter', 'o'],\n  openProfile: 'p',\n  moveDown: ['down', 'j'],\n  moveUp: ['up', 'k'],\n  back: 'backspace',\n  goToHome: 'g h',\n  goToNotifications: 'g n',\n  goToLocal: 'g l',\n  goToFederated: 'g t',\n  goToDirect: 'g d',\n  goToStart: 'g s',\n  goToFavourites: 'g f',\n  goToPinned: 'g p',\n  goToProfile: 'g u',\n  goToBlocked: 'g b',\n  goToMuted: 'g m',\n  goToRequests: 'g r',\n  toggleHidden: 'x',\n  toggleSensitive: 'h',\n  openMedia: 'e',\n};\n\nclass SwitchingColumnsArea extends PureComponent {\n\n  static contextTypes = {\n    identity: PropTypes.object,\n  };\n\n  static propTypes = {\n    children: PropTypes.node,\n    location: PropTypes.object,\n    singleColumn: PropTypes.bool,\n  };\n\n  UNSAFE_componentWillMount () {\n    if (this.props.singleColumn) {\n      document.body.classList.toggle('layout-single-column', true);\n      document.body.classList.toggle('layout-multiple-columns', false);\n    } else {\n      document.body.classList.toggle('layout-single-column', false);\n      document.body.classList.toggle('layout-multiple-columns', true);\n    }\n  }\n\n  componentDidUpdate (prevProps) {\n    if (![this.props.location.pathname, '/'].includes(prevProps.location.pathname)) {\n      this.node.handleChildrenContentChange();\n    }\n\n    if (prevProps.singleColumn !== this.props.singleColumn) {\n      document.body.classList.toggle('layout-single-column', this.props.singleColumn);\n      document.body.classList.toggle('layout-multiple-columns', !this.props.singleColumn);\n    }\n  }\n\n  setRef = c => {\n    if (c) {\n      this.node = c;\n    }\n  };\n\n  render () {\n    const { children, singleColumn } = this.props;\n    const { signedIn } = this.context.identity;\n    const pathName = this.props.location.pathname;\n\n    let redirect;\n\n    if (signedIn) {\n      if (singleColumn) {\n        redirect = <Redirect from='/' to='/home' exact />;\n      } else {\n        redirect = <Redirect from='/' to='/deck/getting-started' exact />;\n      }\n    } else if (singleUserMode && owner && initialState?.accounts[owner]) {\n      redirect = <Redirect from='/' to={`/@${initialState.accounts[owner].username}`} exact />;\n    } else if (trendsEnabled && trendsAsLanding) {\n      redirect = <Redirect from='/' to='/explore' exact />;\n      // Hometown: if signed-out landing page is the about page, don't render the app shell, just redirect\n    } else if (window.location.pathname === '/' || window.location.pathname === '') {\n      window.location = '/about';\n      return null;\n    } else {\n      redirect = <Redirect from='/' to='/about' exact />;\n    }\n\n    return (\n      <ColumnsAreaContainer ref={this.setRef} singleColumn={singleColumn}>\n        <WrappedSwitch>\n          {redirect}\n\n          {singleColumn ? <Redirect from='/deck' to='/home' exact /> : null}\n          {singleColumn && pathName.startsWith('/deck/') ? <Redirect from={pathName} to={pathName.slice(5)} /> : null}\n          {!singleColumn && pathName === '/getting-started' ? <Redirect from='/getting-started' to='/deck/getting-started' exact /> : null}\n\n          <WrappedRoute path='/getting-started' component={GettingStarted} content={children} />\n          <WrappedRoute path='/keyboard-shortcuts' component={KeyboardShortcuts} content={children} />\n          <WrappedRoute path='/about' component={About} content={children} />\n          <WrappedRoute path='/privacy-policy' component={PrivacyPolicy} content={children} />\n\n          <WrappedRoute path={['/home', '/timelines/home']} component={HomeTimeline} content={children} />\n          <Redirect from='/timelines/public' to='/public' exact />\n          <Redirect from='/timelines/public/local' to='/public/local' exact />\n          <WrappedRoute path='/public' exact component={Firehose} componentParams={{ feedType: 'public' }} content={children} />\n          <WrappedRoute path='/public/local' exact component={Firehose} componentParams={{ feedType: 'community' }} content={children} />\n          <WrappedRoute path='/public/remote' exact component={Firehose} componentParams={{ feedType: 'public:remote' }} content={children} />\n          <WrappedRoute path={['/conversations', '/timelines/direct']} component={DirectTimeline} content={children} />\n          <WrappedRoute path='/tags/:id' component={HashtagTimeline} content={children} />\n          <WrappedRoute path='/lists/:id' component={ListTimeline} content={children} />\n          <WrappedRoute path='/notifications' component={Notifications} content={children} />\n          <WrappedRoute path='/favourites' component={FavouritedStatuses} content={children} />\n\n          <WrappedRoute path='/bookmarks' component={BookmarkedStatuses} content={children} />\n          <WrappedRoute path='/pinned' component={PinnedStatuses} content={children} />\n\n          <WrappedRoute path='/start' exact component={Onboarding} content={children} />\n          <WrappedRoute path='/directory' component={Directory} content={children} />\n          <WrappedRoute path={['/explore', '/search']} component={Explore} content={children} />\n          <WrappedRoute path={['/publish', '/statuses/new']} component={Compose} content={children} />\n\n          <WrappedRoute path={['/@:acct', '/accounts/:id']} exact component={AccountTimeline} content={children} />\n          <WrappedRoute path='/@:acct/tagged/:tagged?' exact component={AccountTimeline} content={children} />\n          <WrappedRoute path={['/@:acct/with_replies', '/accounts/:id/with_replies']} component={AccountTimeline} content={children} componentParams={{ withReplies: true }} />\n          <WrappedRoute path={['/accounts/:id/followers', '/users/:acct/followers', '/@:acct/followers']} component={Followers} content={children} />\n          <WrappedRoute path={['/accounts/:id/following', '/users/:acct/following', '/@:acct/following']} component={Following} content={children} />\n          <WrappedRoute path={['/@:acct/media', '/accounts/:id/media']} component={AccountGallery} content={children} />\n          <WrappedRoute path='/@:acct/:statusId' exact component={Status} content={children} />\n          <WrappedRoute path='/@:acct/:statusId/reblogs' component={Reblogs} content={children} />\n          <WrappedRoute path='/@:acct/:statusId/favourites' component={Favourites} content={children} />\n\n          {/* Legacy routes, cannot be easily factored with other routes because they share a param name */}\n          <WrappedRoute path='/timelines/tag/:id' component={HashtagTimeline} content={children} />\n          <WrappedRoute path='/timelines/list/:id' component={ListTimeline} content={children} />\n          <WrappedRoute path='/statuses/:statusId' exact component={Status} content={children} />\n          <WrappedRoute path='/statuses/:statusId/reblogs' component={Reblogs} content={children} />\n          <WrappedRoute path='/statuses/:statusId/favourites' component={Favourites} content={children} />\n\n          <WrappedRoute path='/follow_requests' component={FollowRequests} content={children} />\n          <WrappedRoute path='/blocks' component={Blocks} content={children} />\n          <WrappedRoute path='/domain_blocks' component={DomainBlocks} content={children} />\n          <WrappedRoute path='/followed_tags' component={FollowedTags} content={children} />\n          <WrappedRoute path='/mutes' component={Mutes} content={children} />\n          <WrappedRoute path='/lists' component={Lists} content={children} />\n\n          <Route component={BundleColumnError} />\n        </WrappedSwitch>\n      </ColumnsAreaContainer>\n    );\n  }\n\n}\n\nclass UI extends PureComponent {\n\n  static contextTypes = {\n    router: PropTypes.object.isRequired,\n    identity: PropTypes.object.isRequired,\n  };\n\n  static propTypes = {\n    dispatch: PropTypes.func.isRequired,\n    children: PropTypes.node,\n    isComposing: PropTypes.bool,\n    hasComposingText: PropTypes.bool,\n    hasMediaAttachments: PropTypes.bool,\n    canUploadMore: PropTypes.bool,\n    location: PropTypes.object,\n    intl: PropTypes.object.isRequired,\n    dropdownMenuIsOpen: PropTypes.bool,\n    layout: PropTypes.string.isRequired,\n    firstLaunch: PropTypes.bool,\n    username: PropTypes.string,\n  };\n\n  state = {\n    draggingOver: false,\n  };\n\n  handleBeforeUnload = e => {\n    const { intl, dispatch, isComposing, hasComposingText, hasMediaAttachments } = this.props;\n\n    dispatch(synchronouslySubmitMarkers());\n\n    if (isComposing && (hasComposingText || hasMediaAttachments)) {\n      e.preventDefault();\n      // Setting returnValue to any string causes confirmation dialog.\n      // Many browsers no longer display this text to users,\n      // but we set user-friendly message for other browsers, e.g. Edge.\n      e.returnValue = intl.formatMessage(messages.beforeUnload);\n    }\n  };\n\n  handleWindowFocus = () => {\n    this.props.dispatch(focusApp());\n    this.props.dispatch(submitMarkers({ immediate: true }));\n  };\n\n  handleWindowBlur = () => {\n    this.props.dispatch(unfocusApp());\n  };\n\n  handleDragEnter = (e) => {\n    e.preventDefault();\n\n    if (!this.dragTargets) {\n      this.dragTargets = [];\n    }\n\n    if (this.dragTargets.indexOf(e.target) === -1) {\n      this.dragTargets.push(e.target);\n    }\n\n    if (e.dataTransfer && Array.from(e.dataTransfer.types).includes('Files') && this.props.canUploadMore && this.context.identity.signedIn) {\n      this.setState({ draggingOver: true });\n    }\n  };\n\n  handleDragOver = (e) => {\n    if (this.dataTransferIsText(e.dataTransfer)) return false;\n\n    e.preventDefault();\n    e.stopPropagation();\n\n    try {\n      e.dataTransfer.dropEffect = 'copy';\n    } catch (err) {\n\n    }\n\n    return false;\n  };\n\n  handleDrop = (e) => {\n    if (this.dataTransferIsText(e.dataTransfer)) return;\n\n    e.preventDefault();\n\n    this.setState({ draggingOver: false });\n    this.dragTargets = [];\n\n    if (e.dataTransfer && e.dataTransfer.files.length >= 1 && this.props.canUploadMore && this.context.identity.signedIn) {\n      this.props.dispatch(uploadCompose(e.dataTransfer.files));\n    }\n  };\n\n  handleDragLeave = (e) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    this.dragTargets = this.dragTargets.filter(el => el !== e.target && this.node.contains(el));\n\n    if (this.dragTargets.length > 0) {\n      return;\n    }\n\n    this.setState({ draggingOver: false });\n  };\n\n  dataTransferIsText = (dataTransfer) => {\n    return (dataTransfer && Array.from(dataTransfer.types).filter((type) => type === 'text/plain').length === 1);\n  };\n\n  closeUploadModal = () => {\n    this.setState({ draggingOver: false });\n  };\n\n  handleServiceWorkerPostMessage = ({ data }) => {\n    if (data.type === 'navigate') {\n      this.context.router.history.push(data.path);\n    } else {\n      console.warn('Unknown message type:', data.type);\n    }\n  };\n\n  handleLayoutChange = debounce(() => {\n    this.props.dispatch(clearHeight()); // The cached heights are no longer accurate, invalidate\n  }, 500, {\n    trailing: true,\n  });\n\n  handleResize = () => {\n    const layout = layoutFromWindow();\n\n    if (layout !== this.props.layout) {\n      this.handleLayoutChange.cancel();\n      this.props.dispatch(changeLayout({ layout }));\n    } else {\n      this.handleLayoutChange();\n    }\n  };\n\n  componentDidMount () {\n    const { signedIn } = this.context.identity;\n\n    window.addEventListener('focus', this.handleWindowFocus, false);\n    window.addEventListener('blur', this.handleWindowBlur, false);\n    window.addEventListener('beforeunload', this.handleBeforeUnload, false);\n    window.addEventListener('resize', this.handleResize, { passive: true });\n\n    document.addEventListener('dragenter', this.handleDragEnter, false);\n    document.addEventListener('dragover', this.handleDragOver, false);\n    document.addEventListener('drop', this.handleDrop, false);\n    document.addEventListener('dragleave', this.handleDragLeave, false);\n    document.addEventListener('dragend', this.handleDragEnd, false);\n\n    if ('serviceWorker' in  navigator) {\n      navigator.serviceWorker.addEventListener('message', this.handleServiceWorkerPostMessage);\n    }\n\n    if (signedIn) {\n      this.props.dispatch(fetchMarkers());\n      this.props.dispatch(expandHomeTimeline());\n      this.props.dispatch(expandNotifications());\n      this.props.dispatch(fetchServerTranslationLanguages());\n\n      setTimeout(() => this.props.dispatch(fetchServer()), 3000);\n    }\n\n    this.hotkeys.__mousetrap__.stopCallback = (e, element) => {\n      return ['TEXTAREA', 'SELECT', 'INPUT'].includes(element.tagName);\n    };\n  }\n\n  componentWillUnmount () {\n    window.removeEventListener('focus', this.handleWindowFocus);\n    window.removeEventListener('blur', this.handleWindowBlur);\n    window.removeEventListener('beforeunload', this.handleBeforeUnload);\n    window.removeEventListener('resize', this.handleResize);\n\n    document.removeEventListener('dragenter', this.handleDragEnter);\n    document.removeEventListener('dragover', this.handleDragOver);\n    document.removeEventListener('drop', this.handleDrop);\n    document.removeEventListener('dragleave', this.handleDragLeave);\n    document.removeEventListener('dragend', this.handleDragEnd);\n  }\n\n  setRef = c => {\n    this.node = c;\n  };\n\n  handleHotkeyNew = e => {\n    e.preventDefault();\n\n    const element = this.node.querySelector('.compose-form__autosuggest-wrapper textarea');\n\n    if (element) {\n      element.focus();\n    }\n  };\n\n  handleHotkeySearch = e => {\n    e.preventDefault();\n\n    const element = this.node.querySelector('.search__input');\n\n    if (element) {\n      element.focus();\n    }\n  };\n\n  handleHotkeyForceNew = e => {\n    this.handleHotkeyNew(e);\n    this.props.dispatch(resetCompose());\n  };\n\n  handleHotkeyToggleComposeSpoilers = e => {\n    e.preventDefault();\n    this.props.dispatch(changeComposeSpoilerness());\n  };\n\n  handleHotkeyFocusColumn = e => {\n    const index  = (e.key * 1) + 1; // First child is drawer, skip that\n    const column = this.node.querySelector(`.column:nth-child(${index})`);\n    if (!column) return;\n    const container = column.querySelector('.scrollable');\n\n    if (container) {\n      const status = container.querySelector('.focusable');\n\n      if (status) {\n        if (container.scrollTop > status.offsetTop) {\n          status.scrollIntoView(true);\n        }\n        status.focus();\n      }\n    }\n  };\n\n  handleHotkeyBack = () => {\n    const { router } = this.context;\n\n    if (router.history.location?.state?.fromMastodon) {\n      router.history.goBack();\n    } else {\n      router.history.push('/');\n    }\n  };\n\n  setHotkeysRef = c => {\n    this.hotkeys = c;\n  };\n\n  handleHotkeyToggleHelp = () => {\n    if (this.props.location.pathname === '/keyboard-shortcuts') {\n      this.context.router.history.goBack();\n    } else {\n      this.context.router.history.push('/keyboard-shortcuts');\n    }\n  };\n\n  handleHotkeyGoToHome = () => {\n    this.context.router.history.push('/home');\n  };\n\n  handleHotkeyGoToNotifications = () => {\n    this.context.router.history.push('/notifications');\n  };\n\n  handleHotkeyGoToLocal = () => {\n    this.context.router.history.push('/public/local');\n  };\n\n  handleHotkeyGoToFederated = () => {\n    this.context.router.history.push('/public');\n  };\n\n  handleHotkeyGoToDirect = () => {\n    this.context.router.history.push('/conversations');\n  };\n\n  handleHotkeyGoToStart = () => {\n    this.context.router.history.push('/getting-started');\n  };\n\n  handleHotkeyGoToFavourites = () => {\n    this.context.router.history.push('/favourites');\n  };\n\n  handleHotkeyGoToPinned = () => {\n    this.context.router.history.push('/pinned');\n  };\n\n  handleHotkeyGoToProfile = () => {\n    this.context.router.history.push(`/@${this.props.username}`);\n  };\n\n  handleHotkeyGoToBlocked = () => {\n    this.context.router.history.push('/blocks');\n  };\n\n  handleHotkeyGoToMuted = () => {\n    this.context.router.history.push('/mutes');\n  };\n\n  handleHotkeyGoToRequests = () => {\n    this.context.router.history.push('/follow_requests');\n  };\n\n  render () {\n    const { draggingOver } = this.state;\n    const { children, isComposing, location, dropdownMenuIsOpen, layout } = this.props;\n\n    const handlers = {\n      help: this.handleHotkeyToggleHelp,\n      new: this.handleHotkeyNew,\n      search: this.handleHotkeySearch,\n      forceNew: this.handleHotkeyForceNew,\n      toggleComposeSpoilers: this.handleHotkeyToggleComposeSpoilers,\n      focusColumn: this.handleHotkeyFocusColumn,\n      back: this.handleHotkeyBack,\n      goToHome: this.handleHotkeyGoToHome,\n      goToNotifications: this.handleHotkeyGoToNotifications,\n      goToLocal: this.handleHotkeyGoToLocal,\n      goToFederated: this.handleHotkeyGoToFederated,\n      goToDirect: this.handleHotkeyGoToDirect,\n      goToStart: this.handleHotkeyGoToStart,\n      goToFavourites: this.handleHotkeyGoToFavourites,\n      goToPinned: this.handleHotkeyGoToPinned,\n      goToProfile: this.handleHotkeyGoToProfile,\n      goToBlocked: this.handleHotkeyGoToBlocked,\n      goToMuted: this.handleHotkeyGoToMuted,\n      goToRequests: this.handleHotkeyGoToRequests,\n    };\n\n    return (\n      <HotKeys keyMap={keyMap} handlers={handlers} ref={this.setHotkeysRef} attach={window} focused>\n        <div className={classNames('ui', { 'is-composing': isComposing })} ref={this.setRef} style={{ pointerEvents: dropdownMenuIsOpen ? 'none' : null }}>\n          <Header />\n\n          <SwitchingColumnsArea location={location} singleColumn={layout === 'mobile' || layout === 'single-column'}>\n            {children}\n          </SwitchingColumnsArea>\n\n          {layout !== 'mobile' && <PictureInPicture />}\n          <NotificationsContainer />\n          <LoadingBarContainer className='loading-bar' />\n          <ModalContainer />\n          <UploadArea active={draggingOver} onClose={this.closeUploadModal} />\n        </div>\n      </HotKeys>\n    );\n  }\n\n}\n\nexport default connect(mapStateToProps)(injectIntl(withRouter(UI)));\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { Helmet } from 'react-helmet';\nimport { Route } from 'react-router-dom';\n\nimport { Provider as ReduxProvider } from 'react-redux';\n\nimport { ScrollContext } from 'react-router-scroll-4';\n\nimport { fetchCustomEmojis } from 'mastodon/actions/custom_emojis';\nimport { hydrateStore } from 'mastodon/actions/store';\nimport { connectUserStream } from 'mastodon/actions/streaming';\nimport ErrorBoundary from 'mastodon/components/error_boundary';\nimport { Router } from 'mastodon/components/router';\nimport UI from 'mastodon/features/ui';\nimport initialState, { title as siteTitle } from 'mastodon/initial_state';\nimport { IntlProvider } from 'mastodon/locales';\nimport { store } from 'mastodon/store';\n\nconst title = process.env.NODE_ENV === 'production' ? siteTitle : `${siteTitle} (Dev)`;\n\nconst hydrateAction = hydrateStore(initialState);\n\nstore.dispatch(hydrateAction);\nif (initialState.meta.me) {\n  store.dispatch(fetchCustomEmojis());\n}\n\nconst createIdentityContext = state => ({\n  signedIn: !!state.meta.me,\n  accountId: state.meta.me,\n  disabledAccountId: state.meta.disabled_account_id,\n  accessToken: state.meta.access_token,\n  permissions: state.role ? state.role.permissions : 0,\n});\n\nexport default class Mastodon extends PureComponent {\n\n  static childContextTypes = {\n    identity: PropTypes.shape({\n      signedIn: PropTypes.bool.isRequired,\n      accountId: PropTypes.string,\n      disabledAccountId: PropTypes.string,\n      accessToken: PropTypes.string,\n    }).isRequired,\n  };\n\n  identity = createIdentityContext(initialState);\n\n  getChildContext() {\n    return {\n      identity: this.identity,\n    };\n  }\n\n  componentDidMount() {\n    if (this.identity.signedIn) {\n      this.disconnect = store.dispatch(connectUserStream());\n    }\n  }\n\n  componentWillUnmount () {\n    if (this.disconnect) {\n      this.disconnect();\n      this.disconnect = null;\n    }\n  }\n\n  shouldUpdateScroll (prevRouterProps, { location }) {\n    return !(location.state?.mastodonModalKey && location.state?.mastodonModalKey !== prevRouterProps?.location?.state?.mastodonModalKey);\n  }\n\n  render () {\n    return (\n      <IntlProvider>\n        <ReduxProvider store={store}>\n          <ErrorBoundary>\n            <Router>\n              <ScrollContext shouldUpdateScroll={this.shouldUpdateScroll}>\n                <Route path='/' component={UI} />\n              </ScrollContext>\n            </Router>\n\n            <Helmet defaultTitle={title} titleTemplate={`${title} - %s`} />\n          </ErrorBoundary>\n        </ReduxProvider>\n      </IntlProvider>\n    );\n  }\n\n}\n","/* global performance */\nvar perf = typeof performance !== 'undefined' && performance;\nvar now = perf && perf.now ? function () {\n  return perf.now();\n} : function () {\n  return Date.now();\n};\nfunction throwIfEmpty(name) {\n  if (!name) {\n    throw new Error('name must be non-empty');\n  }\n}\n\n// simple binary sort insertion\nfunction insertSorted(arr, item) {\n  var low = 0;\n  var high = arr.length;\n  var mid;\n  while (low < high) {\n    mid = low + high >>> 1; // like (num / 2) but faster\n    if (arr[mid].startTime < item.startTime) {\n      low = mid + 1;\n    } else {\n      high = mid;\n    }\n  }\n  arr.splice(low, 0, item);\n}\nvar mark;\nvar stop;\nvar getEntries;\nvar clear;\nif (perf && perf.mark && perf.measure && perf.getEntriesByName && perf.getEntriesByType && perf.clearMarks && perf.clearMeasures &&\n// In Node, we want to detect that this perf/correctness fix [1] is available, which\n// landed in Node 16.15.0, 17.6.0, and 18.0.0. However, it's not observable, and\n// we don't want to rely on fragile version checks.\n// So we can rely on this observable change [2] to add clearResourceTimings, which\n// landed a bit later (18.2.0), but is close enough for our purposes.\n// [1]: https://github.com/nodejs/node/pull/42032\n// [2]: https://github.com/nodejs/node/pull/42725\ntrue) {\n  mark = function (name) {\n    throwIfEmpty(name);\n    perf.mark(\"start \" + name);\n  };\n  stop = function (name) {\n    throwIfEmpty(name);\n    perf.mark(\"end \" + name);\n    var measure = perf.measure(name, \"start \" + name, \"end \" + name);\n    if (measure) {\n      // return value from performance.measure not supported in all browsers\n      // https://developer.mozilla.org/en-US/docs/Web/API/Performance/measure#browser_compatibility\n      return measure;\n    }\n    var entries = perf.getEntriesByName(name);\n    return entries[entries.length - 1];\n  };\n  getEntries = function () {\n    return perf.getEntriesByType('measure');\n  };\n  clear = function () {\n    perf.clearMarks();\n    perf.clearMeasures();\n  };\n} else {\n  var marks = {};\n  var entries = [];\n  mark = function (name) {\n    throwIfEmpty(name);\n    var startTime = now();\n    marks['$' + name] = startTime;\n  };\n  stop = function (name) {\n    throwIfEmpty(name);\n    var endTime = now();\n    var startTime = marks['$' + name];\n    if (!startTime) {\n      throw new Error(\"no known mark: \" + name);\n    }\n    var entry = {\n      startTime: startTime,\n      name: name,\n      duration: endTime - startTime,\n      entryType: 'measure'\n    };\n    // per the spec this should be at least 150:\n    // https://www.w3.org/TR/resource-timing-1/#extensions-performance-interface\n    // we just have no limit, per Chrome and Edge's de-facto behavior\n    insertSorted(entries, entry);\n    return entry;\n  };\n  getEntries = function () {\n    return entries;\n  };\n  clear = function () {\n    marks = {};\n    entries = [];\n  };\n}\nexport { clear, getEntries, mark, stop };","import { createRoot } from 'react-dom/client';\n\nimport { setupBrowserNotifications } from 'mastodon/actions/notifications';\nimport Mastodon from 'mastodon/containers/mastodon';\nimport { me } from 'mastodon/initial_state';\nimport * as perf from 'mastodon/performance';\nimport ready from 'mastodon/ready';\nimport { store } from 'mastodon/store';\n\n/**\n * @returns {Promise<void>}\n */\nfunction main() {\n  perf.start('main()');\n\n  return ready(async () => {\n    const mountNode = document.getElementById('mastodon');\n    const props = JSON.parse(mountNode.getAttribute('data-props'));\n\n    const root = createRoot(mountNode);\n    root.render(<Mastodon {...props} />);\n    store.dispatch(setupBrowserNotifications());\n\n    if (process.env.NODE_ENV === 'production' && me && 'serviceWorker' in navigator) {\n      const { Workbox } = await import('workbox-window');\n      const wb = new Workbox('/sw.js');\n      /** @type {ServiceWorkerRegistration} */\n      let registration;\n\n      try {\n        registration = await wb.register();\n      } catch (err) {\n        console.error(err);\n      }\n\n      if (registration && 'Notification' in window && Notification.permission === 'granted') {\n        const registerPushNotifications = await import('mastodon/actions/push_notifications');\n\n        store.dispatch(registerPushNotifications.register());\n      }\n    }\n\n    perf.stop('main()');\n  });\n}\n\nexport default main;\n","import './public-path';\nimport main from \"mastodon/main\"\n\nimport { start } from '../mastodon/common';\nimport { loadLocale } from '../mastodon/locales';\nimport { loadPolyfills } from '../mastodon/polyfills';\n\nstart();\n\nloadPolyfills()\n  .then(loadLocale)\n  .then(main)\n  .catch(e => {\n    console.error(e);\n  });\n","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n  if (aName in aArgs) {\n    return aArgs[aName];\n  } else if (arguments.length === 3) {\n    return aDefaultValue;\n  } else {\n    throw new Error('\"' + aName + '\" is a required argument.');\n  }\n}\nexports.getArg = getArg;\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\nfunction urlParse(aUrl) {\n  var match = aUrl.match(urlRegexp);\n  if (!match) {\n    return null;\n  }\n  return {\n    scheme: match[1],\n    auth: match[2],\n    host: match[3],\n    port: match[4],\n    path: match[5]\n  };\n}\nexports.urlParse = urlParse;\nfunction urlGenerate(aParsedUrl) {\n  var url = '';\n  if (aParsedUrl.scheme) {\n    url += aParsedUrl.scheme + ':';\n  }\n  url += '//';\n  if (aParsedUrl.auth) {\n    url += aParsedUrl.auth + '@';\n  }\n  if (aParsedUrl.host) {\n    url += aParsedUrl.host;\n  }\n  if (aParsedUrl.port) {\n    url += \":\" + aParsedUrl.port;\n  }\n  if (aParsedUrl.path) {\n    url += aParsedUrl.path;\n  }\n  return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n  var path = aPath;\n  var url = urlParse(aPath);\n  if (url) {\n    if (!url.path) {\n      return aPath;\n    }\n    path = url.path;\n  }\n  var isAbsolute = exports.isAbsolute(path);\n  var parts = path.split(/\\/+/);\n  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n    part = parts[i];\n    if (part === '.') {\n      parts.splice(i, 1);\n    } else if (part === '..') {\n      up++;\n    } else if (up > 0) {\n      if (part === '') {\n        // The first part is blank if the path is absolute. Trying to go\n        // above the root is a no-op. Therefore we can remove all '..' parts\n        // directly after the root.\n        parts.splice(i + 1, up);\n        up = 0;\n      } else {\n        parts.splice(i, 2);\n        up--;\n      }\n    }\n  }\n  path = parts.join('/');\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\n  if (url) {\n    url.path = path;\n    return urlGenerate(url);\n  }\n  return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n *   first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n *   is updated with the result and aRoot is returned. Otherwise the result\n *   is returned.\n *   - If aPath is absolute, the result is aPath.\n *   - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  if (aPath === \"\") {\n    aPath = \".\";\n  }\n  var aPathUrl = urlParse(aPath);\n  var aRootUrl = urlParse(aRoot);\n  if (aRootUrl) {\n    aRoot = aRootUrl.path || '/';\n  }\n\n  // `join(foo, '//www.example.org')`\n  if (aPathUrl && !aPathUrl.scheme) {\n    if (aRootUrl) {\n      aPathUrl.scheme = aRootUrl.scheme;\n    }\n    return urlGenerate(aPathUrl);\n  }\n  if (aPathUrl || aPath.match(dataUrlRegexp)) {\n    return aPath;\n  }\n\n  // `join('http://', 'www.example.com')`\n  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n    aRootUrl.host = aPath;\n    return urlGenerate(aRootUrl);\n  }\n  var joined = aPath.charAt(0) === '/' ? aPath : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\nexports.isAbsolute = function (aPath) {\n  return aPath.charAt(0) === '/' || !!aPath.match(urlRegexp);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n  if (aRoot === \"\") {\n    aRoot = \".\";\n  }\n  aRoot = aRoot.replace(/\\/$/, '');\n\n  // It is possible for the path to be above the root. In this case, simply\n  // checking whether the root is a prefix of the path won't work. Instead, we\n  // need to remove components from the root one by one, until either we find\n  // a prefix that fits, or we run out of components to remove.\n  var level = 0;\n  while (aPath.indexOf(aRoot + '/') !== 0) {\n    var index = aRoot.lastIndexOf(\"/\");\n    if (index < 0) {\n      return aPath;\n    }\n\n    // If the only part of the root that is left is the scheme (i.e. http://,\n    // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n    // have exhausted all components, so the path is not relative to the root.\n    aRoot = aRoot.slice(0, index);\n    if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n      return aPath;\n    }\n    ++level;\n  }\n\n  // Make sure we add a \"../\" for each component we removed from the root.\n  return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\nvar supportsNullProto = function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}();\nfunction identity(s) {\n  return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return '$' + aStr;\n  }\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n  var length = s.length;\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n  if (s.charCodeAt(length - 1) !== 95 /* '_' */ || s.charCodeAt(length - 2) !== 95 /* '_' */ || s.charCodeAt(length - 3) !== 111 /* 'o' */ || s.charCodeAt(length - 4) !== 116 /* 't' */ || s.charCodeAt(length - 5) !== 111 /* 'o' */ || s.charCodeAt(length - 6) !== 114 /* 'r' */ || s.charCodeAt(length - 7) !== 112 /* 'p' */ || s.charCodeAt(length - 8) !== 95 /* '_' */ || s.charCodeAt(length - 9) !== 95 /* '_' */) {\n    return false;\n  }\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\n  }\n  return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n  var cmp = mappingA.source - mappingB.source;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  return mappingA.name - mappingB.name;\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n  cmp = mappingA.source - mappingB.source;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n  if (aStr1 > aStr2) {\n    return 1;\n  }\n  return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n  var cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('stacktrace', ['error-stack-parser', 'stack-generator', 'stacktrace-gps'], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory(require('error-stack-parser'), require('stack-generator'), require('stacktrace-gps'));\n  } else {\n    root.StackTrace = factory(root.ErrorStackParser, root.StackGenerator, root.StackTraceGPS);\n  }\n})(this, function StackTrace(ErrorStackParser, StackGenerator, StackTraceGPS) {\n  var _options = {\n    filter: function (stackframe) {\n      // Filter out stackframes for this library by default\n      return (stackframe.functionName || '').indexOf('StackTrace$$') === -1 && (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 && (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 && (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n    },\n    sourceCache: {}\n  };\n  var _generateError = function StackTrace$$GenerateError() {\n    try {\n      // Error must be thrown to get stack in IE\n      throw new Error();\n    } catch (err) {\n      return err;\n    }\n  };\n\n  /**\n   * Merge 2 given Objects. If a conflict occurs the second object wins.\n   * Does not do deep merges.\n   *\n   * @param {Object} first base object\n   * @param {Object} second overrides\n   * @returns {Object} merged first and second\n   * @private\n   */\n  function _merge(first, second) {\n    var target = {};\n    [first, second].forEach(function (obj) {\n      for (var prop in obj) {\n        if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n          target[prop] = obj[prop];\n        }\n      }\n      return target;\n    });\n    return target;\n  }\n  function _isShapedLikeParsableError(err) {\n    return err.stack || err['opera#sourceloc'];\n  }\n  function _filtered(stackframes, filter) {\n    if (typeof filter === 'function') {\n      return stackframes.filter(filter);\n    }\n    return stackframes;\n  }\n  return {\n    /**\n     * Get a backtrace from invocation point.\n     *\n     * @param {Object} opts\n     * @returns {Array} of StackFrame\n     */\n    get: function StackTrace$$get(opts) {\n      var err = _generateError();\n      return _isShapedLikeParsableError(err) ? this.fromError(err, opts) : this.generateArtificially(opts);\n    },\n    /**\n     * Get a backtrace from invocation point.\n     * IMPORTANT: Does not handle source maps or guess function names!\n     *\n     * @param {Object} opts\n     * @returns {Array} of StackFrame\n     */\n    getSync: function StackTrace$$getSync(opts) {\n      opts = _merge(_options, opts);\n      var err = _generateError();\n      var stack = _isShapedLikeParsableError(err) ? ErrorStackParser.parse(err) : StackGenerator.backtrace(opts);\n      return _filtered(stack, opts.filter);\n    },\n    /**\n     * Given an error object, parse it.\n     *\n     * @param {Error} error object\n     * @param {Object} opts\n     * @returns {Promise} for Array[StackFrame}\n     */\n    fromError: function StackTrace$$fromError(error, opts) {\n      opts = _merge(_options, opts);\n      var gps = new StackTraceGPS(opts);\n      return new Promise(function (resolve) {\n        var stackframes = _filtered(ErrorStackParser.parse(error), opts.filter);\n        resolve(Promise.all(stackframes.map(function (sf) {\n          return new Promise(function (resolve) {\n            function resolveOriginal() {\n              resolve(sf);\n            }\n            gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n          });\n        })));\n      }.bind(this));\n    },\n    /**\n     * Use StackGenerator to generate a backtrace.\n     *\n     * @param {Object} opts\n     * @returns {Promise} of Array[StackFrame]\n     */\n    generateArtificially: function StackTrace$$generateArtificially(opts) {\n      opts = _merge(_options, opts);\n      var stackFrames = StackGenerator.backtrace(opts);\n      if (typeof opts.filter === 'function') {\n        stackFrames = stackFrames.filter(opts.filter);\n      }\n      return Promise.resolve(stackFrames);\n    },\n    /**\n     * Given a function, wrap it such that invocations trigger a callback that\n     * is called with a stack trace.\n     *\n     * @param {Function} fn to be instrumented\n     * @param {Function} callback function to call with a stack trace on invocation\n     * @param {Function} errback optional function to call with error if unable to get stack trace.\n     * @param {Object} thisArg optional context object (e.g. window)\n     */\n    instrument: function StackTrace$$instrument(fn, callback, errback, thisArg) {\n      if (typeof fn !== 'function') {\n        throw new Error('Cannot instrument non-function object');\n      } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n        // Already instrumented, return given Function\n        return fn;\n      }\n      var instrumented = function StackTrace$$instrumented() {\n        try {\n          this.get().then(callback, errback)['catch'](errback);\n          return fn.apply(thisArg || this, arguments);\n        } catch (e) {\n          if (_isShapedLikeParsableError(e)) {\n            this.fromError(e).then(callback, errback)['catch'](errback);\n          }\n          throw e;\n        }\n      }.bind(this);\n      instrumented.__stacktraceOriginalFn = fn;\n      return instrumented;\n    },\n    /**\n     * Given a function that has been instrumented,\n     * revert the function to it's original (non-instrumented) state.\n     *\n     * @param {Function} fn to de-instrument\n     */\n    deinstrument: function StackTrace$$deinstrument(fn) {\n      if (typeof fn !== 'function') {\n        throw new Error('Cannot de-instrument non-function object');\n      } else if (typeof fn.__stacktraceOriginalFn === 'function') {\n        return fn.__stacktraceOriginalFn;\n      } else {\n        // Function not instrumented, return original\n        return fn;\n      }\n    },\n    /**\n     * Given an error message and Array of StackFrames, serialize and POST to given URL.\n     *\n     * @param {Array} stackframes\n     * @param {String} url\n     * @param {String} errorMsg\n     * @param {Object} requestOptions\n     */\n    report: function StackTrace$$report(stackframes, url, errorMsg, requestOptions) {\n      return new Promise(function (resolve, reject) {\n        var req = new XMLHttpRequest();\n        req.onerror = reject;\n        req.onreadystatechange = function onreadystatechange() {\n          if (req.readyState === 4) {\n            if (req.status >= 200 && req.status < 400) {\n              resolve(req.responseText);\n            } else {\n              reject(new Error('POST to ' + url + ' failed with status: ' + req.status));\n            }\n          }\n        };\n        req.open('post', url);\n\n        // Set request headers\n        req.setRequestHeader('Content-Type', 'application/json');\n        if (requestOptions && typeof requestOptions.headers === 'object') {\n          var headers = requestOptions.headers;\n          for (var header in headers) {\n            if (Object.prototype.hasOwnProperty.call(headers, header)) {\n              req.setRequestHeader(header, headers[header]);\n            }\n          }\n        }\n        var reportPayload = {\n          stack: stackframes\n        };\n        if (errorMsg !== undefined && errorMsg !== null) {\n          reportPayload.message = errorMsg;\n        }\n        req.send(JSON.stringify(reportPayload));\n      });\n    }\n  };\n});","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('stackframe', [], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory();\n  } else {\n    root.StackFrame = factory();\n  }\n})(this, function () {\n  'use strict';\n\n  function _isNumber(n) {\n    return !isNaN(parseFloat(n)) && isFinite(n);\n  }\n  function _capitalize(str) {\n    return str.charAt(0).toUpperCase() + str.substring(1);\n  }\n  function _getter(p) {\n    return function () {\n      return this[p];\n    };\n  }\n  var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n  var numericProps = ['columnNumber', 'lineNumber'];\n  var stringProps = ['fileName', 'functionName', 'source'];\n  var arrayProps = ['args'];\n  var objectProps = ['evalOrigin'];\n  var props = booleanProps.concat(numericProps, stringProps, arrayProps, objectProps);\n  function StackFrame(obj) {\n    if (!obj) return;\n    for (var i = 0; i < props.length; i++) {\n      if (obj[props[i]] !== undefined) {\n        this['set' + _capitalize(props[i])](obj[props[i]]);\n      }\n    }\n  }\n  StackFrame.prototype = {\n    getArgs: function () {\n      return this.args;\n    },\n    setArgs: function (v) {\n      if (Object.prototype.toString.call(v) !== '[object Array]') {\n        throw new TypeError('Args must be an Array');\n      }\n      this.args = v;\n    },\n    getEvalOrigin: function () {\n      return this.evalOrigin;\n    },\n    setEvalOrigin: function (v) {\n      if (v instanceof StackFrame) {\n        this.evalOrigin = v;\n      } else if (v instanceof Object) {\n        this.evalOrigin = new StackFrame(v);\n      } else {\n        throw new TypeError('Eval Origin must be an Object or StackFrame');\n      }\n    },\n    toString: function () {\n      var fileName = this.getFileName() || '';\n      var lineNumber = this.getLineNumber() || '';\n      var columnNumber = this.getColumnNumber() || '';\n      var functionName = this.getFunctionName() || '';\n      if (this.getIsEval()) {\n        if (fileName) {\n          return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n        }\n        return '[eval]:' + lineNumber + ':' + columnNumber;\n      }\n      if (functionName) {\n        return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n      }\n      return fileName + ':' + lineNumber + ':' + columnNumber;\n    }\n  };\n  StackFrame.fromString = function StackFrame$$fromString(str) {\n    var argsStartIndex = str.indexOf('(');\n    var argsEndIndex = str.lastIndexOf(')');\n    var functionName = str.substring(0, argsStartIndex);\n    var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n    var locationString = str.substring(argsEndIndex + 1);\n    if (locationString.indexOf('@') === 0) {\n      var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n      var fileName = parts[1];\n      var lineNumber = parts[2];\n      var columnNumber = parts[3];\n    }\n    return new StackFrame({\n      functionName: functionName,\n      args: args || undefined,\n      fileName: fileName,\n      lineNumber: lineNumber || undefined,\n      columnNumber: columnNumber || undefined\n    });\n  };\n  for (var i = 0; i < booleanProps.length; i++) {\n    StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n    StackFrame.prototype['set' + _capitalize(booleanProps[i])] = function (p) {\n      return function (v) {\n        this[p] = Boolean(v);\n      };\n    }(booleanProps[i]);\n  }\n  for (var j = 0; j < numericProps.length; j++) {\n    StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n    StackFrame.prototype['set' + _capitalize(numericProps[j])] = function (p) {\n      return function (v) {\n        if (!_isNumber(v)) {\n          throw new TypeError(p + ' must be a Number');\n        }\n        this[p] = Number(v);\n      };\n    }(numericProps[j]);\n  }\n  for (var k = 0; k < stringProps.length; k++) {\n    StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n    StackFrame.prototype['set' + _capitalize(stringProps[k])] = function (p) {\n      return function (v) {\n        this[p] = String(v);\n      };\n    }(stringProps[k]);\n  }\n  return StackFrame;\n});","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n *   - file: The filename of the generated source.\n *   - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n  if (!aArgs) {\n    aArgs = {};\n  }\n  this._file = util.getArg(aArgs, 'file', null);\n  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  this._mappings = new MappingList();\n  this._sourcesContents = null;\n}\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap = function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n  var sourceRoot = aSourceMapConsumer.sourceRoot;\n  var generator = new SourceMapGenerator({\n    file: aSourceMapConsumer.file,\n    sourceRoot: sourceRoot\n  });\n  aSourceMapConsumer.eachMapping(function (mapping) {\n    var newMapping = {\n      generated: {\n        line: mapping.generatedLine,\n        column: mapping.generatedColumn\n      }\n    };\n    if (mapping.source != null) {\n      newMapping.source = mapping.source;\n      if (sourceRoot != null) {\n        newMapping.source = util.relative(sourceRoot, newMapping.source);\n      }\n      newMapping.original = {\n        line: mapping.originalLine,\n        column: mapping.originalColumn\n      };\n      if (mapping.name != null) {\n        newMapping.name = mapping.name;\n      }\n    }\n    generator.addMapping(newMapping);\n  });\n  aSourceMapConsumer.sources.forEach(function (sourceFile) {\n    var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n    if (content != null) {\n      generator.setSourceContent(sourceFile, content);\n    }\n  });\n  return generator;\n};\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n *   - generated: An object with the generated line and column positions.\n *   - original: An object with the original line and column positions.\n *   - source: The original source file (relative to the sourceRoot).\n *   - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping = function SourceMapGenerator_addMapping(aArgs) {\n  var generated = util.getArg(aArgs, 'generated');\n  var original = util.getArg(aArgs, 'original', null);\n  var source = util.getArg(aArgs, 'source', null);\n  var name = util.getArg(aArgs, 'name', null);\n  if (!this._skipValidation) {\n    this._validateMapping(generated, original, source, name);\n  }\n  if (source != null) {\n    source = String(source);\n    if (!this._sources.has(source)) {\n      this._sources.add(source);\n    }\n  }\n  if (name != null) {\n    name = String(name);\n    if (!this._names.has(name)) {\n      this._names.add(name);\n    }\n  }\n  this._mappings.add({\n    generatedLine: generated.line,\n    generatedColumn: generated.column,\n    originalLine: original != null && original.line,\n    originalColumn: original != null && original.column,\n    source: source,\n    name: name\n  });\n};\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent = function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n  var source = aSourceFile;\n  if (this._sourceRoot != null) {\n    source = util.relative(this._sourceRoot, source);\n  }\n  if (aSourceContent != null) {\n    // Add the source content to the _sourcesContents map.\n    // Create a new _sourcesContents map if the property is null.\n    if (!this._sourcesContents) {\n      this._sourcesContents = Object.create(null);\n    }\n    this._sourcesContents[util.toSetString(source)] = aSourceContent;\n  } else if (this._sourcesContents) {\n    // Remove the source file from the _sourcesContents map.\n    // If the _sourcesContents map is empty, set the property to null.\n    delete this._sourcesContents[util.toSetString(source)];\n    if (Object.keys(this._sourcesContents).length === 0) {\n      this._sourcesContents = null;\n    }\n  }\n};\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n *        If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n *        to be applied. If relative, it is relative to the SourceMapConsumer.\n *        This parameter is needed when the two source maps aren't in the same\n *        directory, and the source map to be applied contains relative source\n *        paths. If so, those relative source paths need to be rewritten\n *        relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap = function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n  var sourceFile = aSourceFile;\n  // If aSourceFile is omitted, we will use the file property of the SourceMap\n  if (aSourceFile == null) {\n    if (aSourceMapConsumer.file == null) {\n      throw new Error('SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + 'or the source map\\'s \"file\" property. Both were omitted.');\n    }\n    sourceFile = aSourceMapConsumer.file;\n  }\n  var sourceRoot = this._sourceRoot;\n  // Make \"sourceFile\" relative if an absolute Url is passed.\n  if (sourceRoot != null) {\n    sourceFile = util.relative(sourceRoot, sourceFile);\n  }\n  // Applying the SourceMap can add and remove items from the sources and\n  // the names array.\n  var newSources = new ArraySet();\n  var newNames = new ArraySet();\n\n  // Find mappings for the \"sourceFile\"\n  this._mappings.unsortedForEach(function (mapping) {\n    if (mapping.source === sourceFile && mapping.originalLine != null) {\n      // Check if it can be mapped by the source map, then update the mapping.\n      var original = aSourceMapConsumer.originalPositionFor({\n        line: mapping.originalLine,\n        column: mapping.originalColumn\n      });\n      if (original.source != null) {\n        // Copy mapping\n        mapping.source = original.source;\n        if (aSourceMapPath != null) {\n          mapping.source = util.join(aSourceMapPath, mapping.source);\n        }\n        if (sourceRoot != null) {\n          mapping.source = util.relative(sourceRoot, mapping.source);\n        }\n        mapping.originalLine = original.line;\n        mapping.originalColumn = original.column;\n        if (original.name != null) {\n          mapping.name = original.name;\n        }\n      }\n    }\n    var source = mapping.source;\n    if (source != null && !newSources.has(source)) {\n      newSources.add(source);\n    }\n    var name = mapping.name;\n    if (name != null && !newNames.has(name)) {\n      newNames.add(name);\n    }\n  }, this);\n  this._sources = newSources;\n  this._names = newNames;\n\n  // Copy sourcesContents of applied map.\n  aSourceMapConsumer.sources.forEach(function (sourceFile) {\n    var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n    if (content != null) {\n      if (aSourceMapPath != null) {\n        sourceFile = util.join(aSourceMapPath, sourceFile);\n      }\n      if (sourceRoot != null) {\n        sourceFile = util.relative(sourceRoot, sourceFile);\n      }\n      this.setSourceContent(sourceFile, content);\n    }\n  }, this);\n};\n\n/**\n * A mapping can have one of the three levels of data:\n *\n *   1. Just the generated position.\n *   2. The Generated position, original position, and original source.\n *   3. Generated and original position, original source, as well as a name\n *      token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping = function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, aName) {\n  if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aGenerated.line > 0 && aGenerated.column >= 0 && !aOriginal && !aSource && !aName) {\n    // Case 1.\n    return;\n  } else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated && aOriginal && 'line' in aOriginal && 'column' in aOriginal && aGenerated.line > 0 && aGenerated.column >= 0 && aOriginal.line > 0 && aOriginal.column >= 0 && aSource) {\n    // Cases 2 and 3.\n    return;\n  } else {\n    throw new Error('Invalid mapping: ' + JSON.stringify({\n      generated: aGenerated,\n      source: aSource,\n      original: aOriginal,\n      name: aName\n    }));\n  }\n};\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings = function SourceMapGenerator_serializeMappings() {\n  var previousGeneratedColumn = 0;\n  var previousGeneratedLine = 1;\n  var previousOriginalColumn = 0;\n  var previousOriginalLine = 0;\n  var previousName = 0;\n  var previousSource = 0;\n  var result = '';\n  var next;\n  var mapping;\n  var nameIdx;\n  var sourceIdx;\n  var mappings = this._mappings.toArray();\n  for (var i = 0, len = mappings.length; i < len; i++) {\n    mapping = mappings[i];\n    next = '';\n    if (mapping.generatedLine !== previousGeneratedLine) {\n      previousGeneratedColumn = 0;\n      while (mapping.generatedLine !== previousGeneratedLine) {\n        next += ';';\n        previousGeneratedLine++;\n      }\n    } else {\n      if (i > 0) {\n        if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n          continue;\n        }\n        next += ',';\n      }\n    }\n    next += base64VLQ.encode(mapping.generatedColumn - previousGeneratedColumn);\n    previousGeneratedColumn = mapping.generatedColumn;\n    if (mapping.source != null) {\n      sourceIdx = this._sources.indexOf(mapping.source);\n      next += base64VLQ.encode(sourceIdx - previousSource);\n      previousSource = sourceIdx;\n\n      // lines are stored 0-based in SourceMap spec version 3\n      next += base64VLQ.encode(mapping.originalLine - 1 - previousOriginalLine);\n      previousOriginalLine = mapping.originalLine - 1;\n      next += base64VLQ.encode(mapping.originalColumn - previousOriginalColumn);\n      previousOriginalColumn = mapping.originalColumn;\n      if (mapping.name != null) {\n        nameIdx = this._names.indexOf(mapping.name);\n        next += base64VLQ.encode(nameIdx - previousName);\n        previousName = nameIdx;\n      }\n    }\n    result += next;\n  }\n  return result;\n};\nSourceMapGenerator.prototype._generateSourcesContent = function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n  return aSources.map(function (source) {\n    if (!this._sourcesContents) {\n      return null;\n    }\n    if (aSourceRoot != null) {\n      source = util.relative(aSourceRoot, source);\n    }\n    var key = util.toSetString(source);\n    return Object.prototype.hasOwnProperty.call(this._sourcesContents, key) ? this._sourcesContents[key] : null;\n  }, this);\n};\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON = function SourceMapGenerator_toJSON() {\n  var map = {\n    version: this._version,\n    sources: this._sources.toArray(),\n    names: this._names.toArray(),\n    mappings: this._serializeMappings()\n  };\n  if (this._file != null) {\n    map.file = this._file;\n  }\n  if (this._sourceRoot != null) {\n    map.sourceRoot = this._sourceRoot;\n  }\n  if (this._sourcesContents) {\n    map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n  }\n  return map;\n};\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString = function SourceMapGenerator_toString() {\n  return JSON.stringify(this.toJSON());\n};\nexports.SourceMapGenerator = SourceMapGenerator;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n *  * Redistributions of source code must retain the above copyright\n *    notice, this list of conditions and the following disclaimer.\n *  * Redistributions in binary form must reproduce the above\n *    copyright notice, this list of conditions and the following\n *    disclaimer in the documentation and/or other materials provided\n *    with the distribution.\n *  * Neither the name of Google Inc. nor the names of its\n *    contributors may be used to endorse or promote products derived\n *    from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n//   Continuation\n//   |    Sign\n//   |    |\n//   V    V\n//   101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n  return aValue < 0 ? (-aValue << 1) + 1 : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit.  For example, as decimals:\n *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n  var isNegative = (aValue & 1) === 1;\n  var shifted = aValue >> 1;\n  return isNegative ? -shifted : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n  var encoded = \"\";\n  var digit;\n  var vlq = toVLQSigned(aValue);\n  do {\n    digit = vlq & VLQ_BASE_MASK;\n    vlq >>>= VLQ_BASE_SHIFT;\n    if (vlq > 0) {\n      // There are still more digits in this value, so we must make sure the\n      // continuation bit is marked.\n      digit |= VLQ_CONTINUATION_BIT;\n    }\n    encoded += base64.encode(digit);\n  } while (vlq > 0);\n  return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n  var strLen = aStr.length;\n  var result = 0;\n  var shift = 0;\n  var continuation, digit;\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\n    digit = base64.decode(aStr.charCodeAt(aIndex++));\n    if (digit === -1) {\n      throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n    }\n    continuation = !!(digit & VLQ_CONTINUATION_BIT);\n    digit &= VLQ_BASE_MASK;\n    result = result + (digit << shift);\n    shift += VLQ_BASE_SHIFT;\n  } while (continuation);\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n  this._array = [];\n  this._set = Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n  var set = new ArraySet();\n  for (var i = 0, len = aArray.length; i < len; i++) {\n    set.add(aArray[i], aAllowDuplicates);\n  }\n  return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n  return Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n  var sStr = util.toSetString(aStr);\n  var isDuplicate = has.call(this._set, sStr);\n  var idx = this._array.length;\n  if (!isDuplicate || aAllowDuplicates) {\n    this._array.push(aStr);\n  }\n  if (!isDuplicate) {\n    this._set[sStr] = idx;\n  }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n  var sStr = util.toSetString(aStr);\n  return has.call(this._set, sStr);\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n  var sStr = util.toSetString(aStr);\n  if (has.call(this._set, sStr)) {\n    return this._set[sStr];\n  }\n  throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n  if (aIdx >= 0 && aIdx < this._array.length) {\n    return this._array[aIdx];\n  }\n  throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n  return this._array.slice();\n};\nexports.ArraySet = ArraySet;","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('error-stack-parser', ['stackframe'], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory(require('stackframe'));\n  } else {\n    root.ErrorStackParser = factory(root.StackFrame);\n  }\n})(this, function ErrorStackParser(StackFrame) {\n  'use strict';\n\n  var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\n  var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\n  var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\n  return {\n    /**\n     * Given an Error object, extract the most information from it.\n     *\n     * @param {Error} error object\n     * @return {Array} of StackFrames\n     */\n    parse: function ErrorStackParser$$parse(error) {\n      if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n        return this.parseOpera(error);\n      } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n        return this.parseV8OrIE(error);\n      } else if (error.stack) {\n        return this.parseFFOrSafari(error);\n      } else {\n        throw new Error('Cannot parse given Error object');\n      }\n    },\n    // Separate line and column numbers from a string of the form: (URI:Line:Column)\n    extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n      // Fail-fast but return locations like \"(native)\"\n      if (urlLike.indexOf(':') === -1) {\n        return [urlLike];\n      }\n      var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n      var parts = regExp.exec(urlLike.replace(/[()]/g, ''));\n      return [parts[1], parts[2] || undefined, parts[3] || undefined];\n    },\n    parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n      var filtered = error.stack.split('\\n').filter(function (line) {\n        return !!line.match(CHROME_IE_STACK_REGEXP);\n      }, this);\n      return filtered.map(function (line) {\n        if (line.indexOf('(eval ') > -1) {\n          // Throw away eval information until we implement stacktrace.js/stackframe#8\n          line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(,.*$)/g, '');\n        }\n        var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').replace(/^.*?\\s+/, '');\n\n        // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n        // case it has spaces in it, as the string is split on \\s+ later on\n        var location = sanitizedLine.match(/ (\\(.+\\)$)/);\n\n        // remove the parenthesized location from the line, if it was matched\n        sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n\n        // if a location was matched, pass it to extractLocation() otherwise pass all sanitizedLine\n        // because this line doesn't have function name\n        var locationParts = this.extractLocation(location ? location[1] : sanitizedLine);\n        var functionName = location && sanitizedLine || undefined;\n        var fileName = ['eval', '<anonymous>'].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n        return new StackFrame({\n          functionName: functionName,\n          fileName: fileName,\n          lineNumber: locationParts[1],\n          columnNumber: locationParts[2],\n          source: line\n        });\n      }, this);\n    },\n    parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n      var filtered = error.stack.split('\\n').filter(function (line) {\n        return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n      }, this);\n      return filtered.map(function (line) {\n        // Throw away eval information until we implement stacktrace.js/stackframe#8\n        if (line.indexOf(' > eval') > -1) {\n          line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, ':$1');\n        }\n        if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n          // Safari eval frames only have function names and nothing else\n          return new StackFrame({\n            functionName: line\n          });\n        } else {\n          var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n          var matches = line.match(functionNameRegex);\n          var functionName = matches && matches[1] ? matches[1] : undefined;\n          var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n          return new StackFrame({\n            functionName: functionName,\n            fileName: locationParts[0],\n            lineNumber: locationParts[1],\n            columnNumber: locationParts[2],\n            source: line\n          });\n        }\n      }, this);\n    },\n    parseOpera: function ErrorStackParser$$parseOpera(e) {\n      if (!e.stacktrace || e.message.indexOf('\\n') > -1 && e.message.split('\\n').length > e.stacktrace.split('\\n').length) {\n        return this.parseOpera9(e);\n      } else if (!e.stack) {\n        return this.parseOpera10(e);\n      } else {\n        return this.parseOpera11(e);\n      }\n    },\n    parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n      var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n      var lines = e.message.split('\\n');\n      var result = [];\n      for (var i = 2, len = lines.length; i < len; i += 2) {\n        var match = lineRE.exec(lines[i]);\n        if (match) {\n          result.push(new StackFrame({\n            fileName: match[2],\n            lineNumber: match[1],\n            source: lines[i]\n          }));\n        }\n      }\n      return result;\n    },\n    parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n      var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n      var lines = e.stacktrace.split('\\n');\n      var result = [];\n      for (var i = 0, len = lines.length; i < len; i += 2) {\n        var match = lineRE.exec(lines[i]);\n        if (match) {\n          result.push(new StackFrame({\n            functionName: match[3] || undefined,\n            fileName: match[2],\n            lineNumber: match[1],\n            source: lines[i]\n          }));\n        }\n      }\n      return result;\n    },\n    // Opera 10.65+ Error.stack very similar to FF/Safari\n    parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n      var filtered = error.stack.split('\\n').filter(function (line) {\n        return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n      }, this);\n      return filtered.map(function (line) {\n        var tokens = line.split('@');\n        var locationParts = this.extractLocation(tokens.pop());\n        var functionCall = tokens.shift() || '';\n        var functionName = functionCall.replace(/<anonymous function(: (\\w+))?>/, '$2').replace(/\\([^)]*\\)/g, '') || undefined;\n        var argsRaw;\n        if (functionCall.match(/\\(([^)]*)\\)/)) {\n          argsRaw = functionCall.replace(/^[^(]+\\(([^)]*)\\)$/, '$1');\n        }\n        var args = argsRaw === undefined || argsRaw === '[arguments not available]' ? undefined : argsRaw.split(',');\n        return new StackFrame({\n          functionName: functionName,\n          args: args,\n          fileName: locationParts[0],\n          lineNumber: locationParts[1],\n          columnNumber: locationParts[2],\n          source: line\n        });\n      }, this);\n    }\n  };\n});","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('stack-generator', ['stackframe'], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory(require('stackframe'));\n  } else {\n    root.StackGenerator = factory(root.StackFrame);\n  }\n})(this, function (StackFrame) {\n  return {\n    backtrace: function StackGenerator$$backtrace(opts) {\n      var stack = [];\n      var maxStackSize = 10;\n      if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n        maxStackSize = opts.maxStackSize;\n      }\n      var curr = arguments.callee;\n      while (curr && stack.length < maxStackSize && curr['arguments']) {\n        // Allow V8 optimizations\n        var args = new Array(curr['arguments'].length);\n        for (var i = 0; i < args.length; ++i) {\n          args[i] = curr['arguments'][i];\n        }\n        if (/function(?:\\s+([\\w$]+))+\\s*\\(/.test(curr.toString())) {\n          stack.push(new StackFrame({\n            functionName: RegExp.$1 || undefined,\n            args: args\n          }));\n        } else {\n          stack.push(new StackFrame({\n            args: args\n          }));\n        }\n        try {\n          curr = curr.caller;\n        } catch (e) {\n          break;\n        }\n      }\n      return stack;\n    }\n  };\n});","(function (root, factory) {\n  'use strict';\n\n  // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n  /* istanbul ignore next */\n  if (typeof define === 'function' && define.amd) {\n    define('stacktrace-gps', ['source-map', 'stackframe'], factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory(require('source-map/lib/source-map-consumer'), require('stackframe'));\n  } else {\n    root.StackTraceGPS = factory(root.SourceMap || root.sourceMap, root.StackFrame);\n  }\n})(this, function (SourceMap, StackFrame) {\n  'use strict';\n\n  /**\n   * Make a X-Domain request to url and callback.\n   *\n   * @param {String} url\n   * @returns {Promise} with response text if fulfilled\n   */\n  function _xdr(url) {\n    return new Promise(function (resolve, reject) {\n      var req = new XMLHttpRequest();\n      req.open('get', url);\n      req.onerror = reject;\n      req.onreadystatechange = function onreadystatechange() {\n        if (req.readyState === 4) {\n          if (req.status >= 200 && req.status < 300 || url.substr(0, 7) === 'file://' && req.responseText) {\n            resolve(req.responseText);\n          } else {\n            reject(new Error('HTTP status: ' + req.status + ' retrieving ' + url));\n          }\n        }\n      };\n      req.send();\n    });\n  }\n\n  /**\n   * Convert a Base64-encoded string into its original representation.\n   * Used for inline sourcemaps.\n   *\n   * @param {String} b64str Base-64 encoded string\n   * @returns {String} original representation of the base64-encoded string.\n   */\n  function _atob(b64str) {\n    if (typeof window !== 'undefined' && window.atob) {\n      return window.atob(b64str);\n    } else {\n      throw new Error('You must supply a polyfill for window.atob in this environment');\n    }\n  }\n  function _parseJson(string) {\n    if (typeof JSON !== 'undefined' && JSON.parse) {\n      return JSON.parse(string);\n    } else {\n      throw new Error('You must supply a polyfill for JSON.parse in this environment');\n    }\n  }\n  function _findFunctionName(source, lineNumber /*, columnNumber*/) {\n    var syntaxes = [\n    // {name} = function ({args}) TODO args capture\n    /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*function\\b/,\n    // function {name}({args}) m[1]=name m[2]=args\n    /function\\s+([^('\"`]*?)\\s*\\(([^)]*)\\)/,\n    // {name} = eval()\n    /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*(?:eval|new Function)\\b/,\n    // fn_name() {\n    /\\b(?!(?:if|for|switch|while|with|catch)\\b)(?:(?:static)\\s+)?(\\S+)\\s*\\(.*?\\)\\s*\\{/,\n    // {name} = () => {\n    /['\"]?([$_A-Za-z][$_A-Za-z0-9]*)['\"]?\\s*[:=]\\s*\\(.*?\\)\\s*=>/];\n    var lines = source.split('\\n');\n\n    // Walk backwards in the source lines until we find the line which matches one of the patterns above\n    var code = '';\n    var maxLines = Math.min(lineNumber, 20);\n    for (var i = 0; i < maxLines; ++i) {\n      // lineNo is 1-based, source[] is 0-based\n      var line = lines[lineNumber - i - 1];\n      var commentPos = line.indexOf('//');\n      if (commentPos >= 0) {\n        line = line.substr(0, commentPos);\n      }\n      if (line) {\n        code = line + code;\n        var len = syntaxes.length;\n        for (var index = 0; index < len; index++) {\n          var m = syntaxes[index].exec(code);\n          if (m && m[1]) {\n            return m[1];\n          }\n        }\n      }\n    }\n    return undefined;\n  }\n  function _ensureSupportedEnvironment() {\n    if (typeof Object.defineProperty !== 'function' || typeof Object.create !== 'function') {\n      throw new Error('Unable to consume source maps in older browsers');\n    }\n  }\n  function _ensureStackFrameIsLegit(stackframe) {\n    if (typeof stackframe !== 'object') {\n      throw new TypeError('Given StackFrame is not an object');\n    } else if (typeof stackframe.fileName !== 'string') {\n      throw new TypeError('Given file name is not a String');\n    } else if (typeof stackframe.lineNumber !== 'number' || stackframe.lineNumber % 1 !== 0 || stackframe.lineNumber < 1) {\n      throw new TypeError('Given line number must be a positive integer');\n    } else if (typeof stackframe.columnNumber !== 'number' || stackframe.columnNumber % 1 !== 0 || stackframe.columnNumber < 0) {\n      throw new TypeError('Given column number must be a non-negative integer');\n    }\n    return true;\n  }\n  function _findSourceMappingURL(source) {\n    var sourceMappingUrlRegExp = /\\/\\/[#@] ?sourceMappingURL=([^\\s'\"]+)\\s*$/mg;\n    var lastSourceMappingUrl;\n    var matchSourceMappingUrl;\n    // eslint-disable-next-line no-cond-assign\n    while (matchSourceMappingUrl = sourceMappingUrlRegExp.exec(source)) {\n      lastSourceMappingUrl = matchSourceMappingUrl[1];\n    }\n    if (lastSourceMappingUrl) {\n      return lastSourceMappingUrl;\n    } else {\n      throw new Error('sourceMappingURL not found');\n    }\n  }\n  function _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache) {\n    return new Promise(function (resolve, reject) {\n      var loc = sourceMapConsumer.originalPositionFor({\n        line: stackframe.lineNumber,\n        column: stackframe.columnNumber\n      });\n      if (loc.source) {\n        // cache mapped sources\n        var mappedSource = sourceMapConsumer.sourceContentFor(loc.source);\n        if (mappedSource) {\n          sourceCache[loc.source] = mappedSource;\n        }\n        resolve(\n        // given stackframe and source location, update stackframe\n        new StackFrame({\n          functionName: loc.name || stackframe.functionName,\n          args: stackframe.args,\n          fileName: loc.source,\n          lineNumber: loc.line,\n          columnNumber: loc.column\n        }));\n      } else {\n        reject(new Error('Could not get original source for given stackframe and source map'));\n      }\n    });\n  }\n\n  /**\n   * @constructor\n   * @param {Object} opts\n   *      opts.sourceCache = {url: \"Source String\"} => preload source cache\n   *      opts.sourceMapConsumerCache = {/path/file.js.map: SourceMapConsumer}\n   *      opts.offline = True to prevent network requests.\n   *              Best effort without sources or source maps.\n   *      opts.ajax = Promise returning function to make X-Domain requests\n   */\n  return function StackTraceGPS(opts) {\n    if (!(this instanceof StackTraceGPS)) {\n      return new StackTraceGPS(opts);\n    }\n    opts = opts || {};\n    this.sourceCache = opts.sourceCache || {};\n    this.sourceMapConsumerCache = opts.sourceMapConsumerCache || {};\n    this.ajax = opts.ajax || _xdr;\n    this._atob = opts.atob || _atob;\n    this._get = function _get(location) {\n      return new Promise(function (resolve, reject) {\n        var isDataUrl = location.substr(0, 5) === 'data:';\n        if (this.sourceCache[location]) {\n          resolve(this.sourceCache[location]);\n        } else if (opts.offline && !isDataUrl) {\n          reject(new Error('Cannot make network requests in offline mode'));\n        } else {\n          if (isDataUrl) {\n            // data URLs can have parameters.\n            // see http://tools.ietf.org/html/rfc2397\n            var supportedEncodingRegexp = /^data:application\\/json;([\\w=:\"-]+;)*base64,/;\n            var match = location.match(supportedEncodingRegexp);\n            if (match) {\n              var sourceMapStart = match[0].length;\n              var encodedSource = location.substr(sourceMapStart);\n              var source = this._atob(encodedSource);\n              this.sourceCache[location] = source;\n              resolve(source);\n            } else {\n              reject(new Error('The encoding of the inline sourcemap is not supported'));\n            }\n          } else {\n            var xhrPromise = this.ajax(location, {\n              method: 'get'\n            });\n            // Cache the Promise to prevent duplicate in-flight requests\n            this.sourceCache[location] = xhrPromise;\n            xhrPromise.then(resolve, reject);\n          }\n        }\n      }.bind(this));\n    };\n\n    /**\n     * Creating SourceMapConsumers is expensive, so this wraps the creation of a\n     * SourceMapConsumer in a per-instance cache.\n     *\n     * @param {String} sourceMappingURL = URL to fetch source map from\n     * @param {String} defaultSourceRoot = Default source root for source map if undefined\n     * @returns {Promise} that resolves a SourceMapConsumer\n     */\n    this._getSourceMapConsumer = function _getSourceMapConsumer(sourceMappingURL, defaultSourceRoot) {\n      return new Promise(function (resolve) {\n        if (this.sourceMapConsumerCache[sourceMappingURL]) {\n          resolve(this.sourceMapConsumerCache[sourceMappingURL]);\n        } else {\n          var sourceMapConsumerPromise = new Promise(function (resolve, reject) {\n            return this._get(sourceMappingURL).then(function (sourceMapSource) {\n              if (typeof sourceMapSource === 'string') {\n                sourceMapSource = _parseJson(sourceMapSource.replace(/^\\)\\]\\}'/, ''));\n              }\n              if (typeof sourceMapSource.sourceRoot === 'undefined') {\n                sourceMapSource.sourceRoot = defaultSourceRoot;\n              }\n              resolve(new SourceMap.SourceMapConsumer(sourceMapSource));\n            }).catch(reject);\n          }.bind(this));\n          this.sourceMapConsumerCache[sourceMappingURL] = sourceMapConsumerPromise;\n          resolve(sourceMapConsumerPromise);\n        }\n      }.bind(this));\n    };\n\n    /**\n     * Given a StackFrame, enhance function name and use source maps for a\n     * better StackFrame.\n     *\n     * @param {StackFrame} stackframe object\n     * @returns {Promise} that resolves with with source-mapped StackFrame\n     */\n    this.pinpoint = function StackTraceGPS$$pinpoint(stackframe) {\n      return new Promise(function (resolve, reject) {\n        this.getMappedLocation(stackframe).then(function (mappedStackFrame) {\n          function resolveMappedStackFrame() {\n            resolve(mappedStackFrame);\n          }\n          this.findFunctionName(mappedStackFrame).then(resolve, resolveMappedStackFrame)\n          // eslint-disable-next-line no-unexpected-multiline\n          ['catch'](resolveMappedStackFrame);\n        }.bind(this), reject);\n      }.bind(this));\n    };\n\n    /**\n     * Given a StackFrame, guess function name from location information.\n     *\n     * @param {StackFrame} stackframe\n     * @returns {Promise} that resolves with enhanced StackFrame.\n     */\n    this.findFunctionName = function StackTraceGPS$$findFunctionName(stackframe) {\n      return new Promise(function (resolve, reject) {\n        _ensureStackFrameIsLegit(stackframe);\n        this._get(stackframe.fileName).then(function getSourceCallback(source) {\n          var lineNumber = stackframe.lineNumber;\n          var columnNumber = stackframe.columnNumber;\n          var guessedFunctionName = _findFunctionName(source, lineNumber, columnNumber);\n          // Only replace functionName if we found something\n          if (guessedFunctionName) {\n            resolve(new StackFrame({\n              functionName: guessedFunctionName,\n              args: stackframe.args,\n              fileName: stackframe.fileName,\n              lineNumber: lineNumber,\n              columnNumber: columnNumber\n            }));\n          } else {\n            resolve(stackframe);\n          }\n        }, reject)['catch'](reject);\n      }.bind(this));\n    };\n\n    /**\n     * Given a StackFrame, seek source-mapped location and return new enhanced StackFrame.\n     *\n     * @param {StackFrame} stackframe\n     * @returns {Promise} that resolves with enhanced StackFrame.\n     */\n    this.getMappedLocation = function StackTraceGPS$$getMappedLocation(stackframe) {\n      return new Promise(function (resolve, reject) {\n        _ensureSupportedEnvironment();\n        _ensureStackFrameIsLegit(stackframe);\n        var sourceCache = this.sourceCache;\n        var fileName = stackframe.fileName;\n        this._get(fileName).then(function (source) {\n          var sourceMappingURL = _findSourceMappingURL(source);\n          var isDataUrl = sourceMappingURL.substr(0, 5) === 'data:';\n          var defaultSourceRoot = fileName.substring(0, fileName.lastIndexOf('/') + 1);\n          if (sourceMappingURL[0] !== '/' && !isDataUrl && !/^https?:\\/\\/|^\\/\\//i.test(sourceMappingURL)) {\n            sourceMappingURL = defaultSourceRoot + sourceMappingURL;\n          }\n          return this._getSourceMapConsumer(sourceMappingURL, defaultSourceRoot).then(function (sourceMapConsumer) {\n            return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache).then(resolve)['catch'](function () {\n              resolve(stackframe);\n            });\n          });\n        }.bind(this), reject)['catch'](reject);\n      }.bind(this));\n    };\n  };\n});","/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n  if (0 <= number && number < intToCharMap.length) {\n    return intToCharMap[number];\n  }\n  throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n  var bigA = 65; // 'A'\n  var bigZ = 90; // 'Z'\n\n  var littleA = 97; // 'a'\n  var littleZ = 122; // 'z'\n\n  var zero = 48; // '0'\n  var nine = 57; // '9'\n\n  var plus = 43; // '+'\n  var slash = 47; // '/'\n\n  var littleOffset = 26;\n  var numberOffset = 52;\n\n  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n  if (bigA <= charCode && charCode <= bigZ) {\n    return charCode - bigA;\n  }\n\n  // 26 - 51: abcdefghijklmnopqrstuvwxyz\n  if (littleA <= charCode && charCode <= littleZ) {\n    return charCode - littleA + littleOffset;\n  }\n\n  // 52 - 61: 0123456789\n  if (zero <= charCode && charCode <= nine) {\n    return charCode - zero + numberOffset;\n  }\n\n  // 62: +\n  if (charCode == plus) {\n    return 62;\n  }\n\n  // 63: /\n  if (charCode == slash) {\n    return 63;\n  }\n\n  // Invalid base64 digit.\n  return -1;\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n  // Optimized for most common case\n  var lineA = mappingA.generatedLine;\n  var lineB = mappingB.generatedLine;\n  var columnA = mappingA.generatedColumn;\n  var columnB = mappingB.generatedColumn;\n  return lineB > lineA || lineB == lineA && columnB >= columnA || util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n  this._array = [];\n  this._sorted = true;\n  // Serves as infimum\n  this._last = {\n    generatedLine: -1,\n    generatedColumn: 0\n  };\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach = function MappingList_forEach(aCallback, aThisArg) {\n  this._array.forEach(aCallback, aThisArg);\n};\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n  if (generatedPositionAfter(this._last, aMapping)) {\n    this._last = aMapping;\n    this._array.push(aMapping);\n  } else {\n    this._sorted = false;\n    this._array.push(aMapping);\n  }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n  if (!this._sorted) {\n    this._array.sort(util.compareByGeneratedPositionsInflated);\n    this._sorted = true;\n  }\n  return this._array;\n};\nexports.MappingList = MappingList;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\nfunction SourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n  return sourceMap.sections != null ? new IndexedSourceMapConsumer(sourceMap) : new BasicSourceMapConsumer(sourceMap);\n}\nSourceMapConsumer.fromSourceMap = function (aSourceMap) {\n  return BasicSourceMapConsumer.fromSourceMap(aSourceMap);\n};\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n//     {\n//       generatedLine: The line number in the generated code,\n//       generatedColumn: The column number in the generated code,\n//       source: The path to the original source file that generated this\n//               chunk of code,\n//       originalLine: The line number in the original source that\n//                     corresponds to this chunk of generated code,\n//       originalColumn: The column number in the original source that\n//                       corresponds to this chunk of generated code,\n//       name: The name of the original symbol which generated this chunk of\n//             code.\n//     }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n  get: function () {\n    if (!this.__generatedMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n    return this.__generatedMappings;\n  }\n});\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n  get: function () {\n    if (!this.__originalMappings) {\n      this._parseMappings(this._mappings, this.sourceRoot);\n    }\n    return this.__originalMappings;\n  }\n});\nSourceMapConsumer.prototype._charIsMappingSeparator = function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n  var c = aStr.charAt(index);\n  return c === \";\" || c === \",\";\n};\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n  throw new Error(\"Subclasses must implement _parseMappings\");\n};\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n *        The function that is called with each mapping.\n * @param Object aContext\n *        Optional. If specified, this object will be the value of `this` every\n *        time that `aCallback` is called.\n * @param aOrder\n *        Either `SourceMapConsumer.GENERATED_ORDER` or\n *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n *        iterate over the mappings sorted by the generated file's line/column\n *        order or the original's source/line/column order, respectively. Defaults to\n *        `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping = function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n  var context = aContext || null;\n  var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n  var mappings;\n  switch (order) {\n    case SourceMapConsumer.GENERATED_ORDER:\n      mappings = this._generatedMappings;\n      break;\n    case SourceMapConsumer.ORIGINAL_ORDER:\n      mappings = this._originalMappings;\n      break;\n    default:\n      throw new Error(\"Unknown order of iteration.\");\n  }\n  var sourceRoot = this.sourceRoot;\n  mappings.map(function (mapping) {\n    var source = mapping.source === null ? null : this._sources.at(mapping.source);\n    if (source != null && sourceRoot != null) {\n      source = util.join(sourceRoot, source);\n    }\n    return {\n      source: source,\n      generatedLine: mapping.generatedLine,\n      generatedColumn: mapping.generatedColumn,\n      originalLine: mapping.originalLine,\n      originalColumn: mapping.originalColumn,\n      name: mapping.name === null ? null : this._names.at(mapping.name)\n    };\n  }, this).forEach(aCallback, context);\n};\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: Optional. the column number in the original source.\n *\n * and an array of objects is returned, each with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor = function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n  var line = util.getArg(aArgs, 'line');\n\n  // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n  // returns the index of the closest mapping less than the needle. By\n  // setting needle.originalColumn to 0, we thus find the last mapping for\n  // the given line, provided such a mapping exists.\n  var needle = {\n    source: util.getArg(aArgs, 'source'),\n    originalLine: line,\n    originalColumn: util.getArg(aArgs, 'column', 0)\n  };\n  if (this.sourceRoot != null) {\n    needle.source = util.relative(this.sourceRoot, needle.source);\n  }\n  if (!this._sources.has(needle.source)) {\n    return [];\n  }\n  needle.source = this._sources.indexOf(needle.source);\n  var mappings = [];\n  var index = this._findMapping(needle, this._originalMappings, \"originalLine\", \"originalColumn\", util.compareByOriginalPositions, binarySearch.LEAST_UPPER_BOUND);\n  if (index >= 0) {\n    var mapping = this._originalMappings[index];\n    if (aArgs.column === undefined) {\n      var originalLine = mapping.originalLine;\n\n      // Iterate until either we run out of mappings, or we run into\n      // a mapping for a different line than the one we found. Since\n      // mappings are sorted, this is guaranteed to find all mappings for\n      // the line we found.\n      while (mapping && mapping.originalLine === originalLine) {\n        mappings.push({\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        });\n        mapping = this._originalMappings[++index];\n      }\n    } else {\n      var originalColumn = mapping.originalColumn;\n\n      // Iterate until either we run out of mappings, or we run into\n      // a mapping for a different line than the one we were searching for.\n      // Since mappings are sorted, this is guaranteed to find all mappings for\n      // the line we are searching for.\n      while (mapping && mapping.originalLine === line && mapping.originalColumn == originalColumn) {\n        mappings.push({\n          line: util.getArg(mapping, 'generatedLine', null),\n          column: util.getArg(mapping, 'generatedColumn', null),\n          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n        });\n        mapping = this._originalMappings[++index];\n      }\n    }\n  }\n  return mappings;\n};\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The only parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - sources: An array of URLs to the original source files.\n *   - names: An array of identifiers which can be referrenced by individual mappings.\n *   - sourceRoot: Optional. The URL root from which all sources are relative.\n *   - sourcesContent: Optional. An array of contents of the original source files.\n *   - mappings: A string of base64 VLQs which contain the actual mappings.\n *   - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n *     {\n *       version : 3,\n *       file: \"out.js\",\n *       sourceRoot : \"\",\n *       sources: [\"foo.js\", \"bar.js\"],\n *       names: [\"src\", \"maps\", \"are\", \"fun\"],\n *       mappings: \"AA,AB;;ABCDE;\"\n *     }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n  var version = util.getArg(sourceMap, 'version');\n  var sources = util.getArg(sourceMap, 'sources');\n  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n  // requires the array) to play nice here.\n  var names = util.getArg(sourceMap, 'names', []);\n  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n  var mappings = util.getArg(sourceMap, 'mappings');\n  var file = util.getArg(sourceMap, 'file', null);\n\n  // Once again, Sass deviates from the spec and supplies the version as a\n  // string rather than a number, so we use loose equality checking here.\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n  sources = sources.map(String)\n  // Some source maps produce relative source paths like \"./foo.js\" instead of\n  // \"foo.js\".  Normalize these first so that future comparisons will succeed.\n  // See bugzil.la/1090768.\n  .map(util.normalize)\n  // Always ensure that absolute sources are internally stored relative to\n  // the source root, if the source root is absolute. Not doing this would\n  // be particularly problematic when the source root is a prefix of the\n  // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n  .map(function (source) {\n    return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source) ? util.relative(sourceRoot, source) : source;\n  });\n\n  // Pass `true` below to allow duplicate names and sources. While source maps\n  // are intended to be compressed and deduplicated, the TypeScript compiler\n  // sometimes generates source maps with duplicates in them. See Github issue\n  // #72 and bugzil.la/889492.\n  this._names = ArraySet.fromArray(names.map(String), true);\n  this._sources = ArraySet.fromArray(sources, true);\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this.file = file;\n}\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n *        The source map that will be consumed.\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap = function SourceMapConsumer_fromSourceMap(aSourceMap) {\n  var smc = Object.create(BasicSourceMapConsumer.prototype);\n  var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n  var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n  smc.sourceRoot = aSourceMap._sourceRoot;\n  smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), smc.sourceRoot);\n  smc.file = aSourceMap._file;\n\n  // Because we are modifying the entries (by converting string sources and\n  // names to indices into the sources and names ArraySets), we have to make\n  // a copy of the entry or else bad things happen. Shared mutable state\n  // strikes again! See github issue #191.\n\n  var generatedMappings = aSourceMap._mappings.toArray().slice();\n  var destGeneratedMappings = smc.__generatedMappings = [];\n  var destOriginalMappings = smc.__originalMappings = [];\n  for (var i = 0, length = generatedMappings.length; i < length; i++) {\n    var srcMapping = generatedMappings[i];\n    var destMapping = new Mapping();\n    destMapping.generatedLine = srcMapping.generatedLine;\n    destMapping.generatedColumn = srcMapping.generatedColumn;\n    if (srcMapping.source) {\n      destMapping.source = sources.indexOf(srcMapping.source);\n      destMapping.originalLine = srcMapping.originalLine;\n      destMapping.originalColumn = srcMapping.originalColumn;\n      if (srcMapping.name) {\n        destMapping.name = names.indexOf(srcMapping.name);\n      }\n      destOriginalMappings.push(destMapping);\n    }\n    destGeneratedMappings.push(destMapping);\n  }\n  quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n  return smc;\n};\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    return this._sources.toArray().map(function (s) {\n      return this.sourceRoot != null ? util.join(this.sourceRoot, s) : s;\n    }, this);\n  }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n  this.generatedLine = 0;\n  this.generatedColumn = 0;\n  this.source = null;\n  this.originalLine = null;\n  this.originalColumn = null;\n  this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings = function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n  var generatedLine = 1;\n  var previousGeneratedColumn = 0;\n  var previousOriginalLine = 0;\n  var previousOriginalColumn = 0;\n  var previousSource = 0;\n  var previousName = 0;\n  var length = aStr.length;\n  var index = 0;\n  var cachedSegments = {};\n  var temp = {};\n  var originalMappings = [];\n  var generatedMappings = [];\n  var mapping, str, segment, end, value;\n  while (index < length) {\n    if (aStr.charAt(index) === ';') {\n      generatedLine++;\n      index++;\n      previousGeneratedColumn = 0;\n    } else if (aStr.charAt(index) === ',') {\n      index++;\n    } else {\n      mapping = new Mapping();\n      mapping.generatedLine = generatedLine;\n\n      // Because each offset is encoded relative to the previous one,\n      // many segments often have the same encoding. We can exploit this\n      // fact by caching the parsed variable length fields of each segment,\n      // allowing us to avoid a second parse if we encounter the same\n      // segment again.\n      for (end = index; end < length; end++) {\n        if (this._charIsMappingSeparator(aStr, end)) {\n          break;\n        }\n      }\n      str = aStr.slice(index, end);\n      segment = cachedSegments[str];\n      if (segment) {\n        index += str.length;\n      } else {\n        segment = [];\n        while (index < end) {\n          base64VLQ.decode(aStr, index, temp);\n          value = temp.value;\n          index = temp.rest;\n          segment.push(value);\n        }\n        if (segment.length === 2) {\n          throw new Error('Found a source, but no line and column');\n        }\n        if (segment.length === 3) {\n          throw new Error('Found a source and line, but no column');\n        }\n        cachedSegments[str] = segment;\n      }\n\n      // Generated column.\n      mapping.generatedColumn = previousGeneratedColumn + segment[0];\n      previousGeneratedColumn = mapping.generatedColumn;\n      if (segment.length > 1) {\n        // Original source.\n        mapping.source = previousSource + segment[1];\n        previousSource += segment[1];\n\n        // Original line.\n        mapping.originalLine = previousOriginalLine + segment[2];\n        previousOriginalLine = mapping.originalLine;\n        // Lines are stored 0-based\n        mapping.originalLine += 1;\n\n        // Original column.\n        mapping.originalColumn = previousOriginalColumn + segment[3];\n        previousOriginalColumn = mapping.originalColumn;\n        if (segment.length > 4) {\n          // Original name.\n          mapping.name = previousName + segment[4];\n          previousName += segment[4];\n        }\n      }\n      generatedMappings.push(mapping);\n      if (typeof mapping.originalLine === 'number') {\n        originalMappings.push(mapping);\n      }\n    }\n  }\n  quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n  this.__generatedMappings = generatedMappings;\n  quickSort(originalMappings, util.compareByOriginalPositions);\n  this.__originalMappings = originalMappings;\n};\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping = function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, aColumnName, aComparator, aBias) {\n  // To return the position we are searching for, we must first find the\n  // mapping for the given position and then return the opposite position it\n  // points to. Because the mappings are sorted, we can use binary search to\n  // find the best mapping.\n\n  if (aNeedle[aLineName] <= 0) {\n    throw new TypeError('Line must be greater than or equal to 1, got ' + aNeedle[aLineName]);\n  }\n  if (aNeedle[aColumnName] < 0) {\n    throw new TypeError('Column must be greater than or equal to 0, got ' + aNeedle[aColumnName]);\n  }\n  return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n};\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans = function SourceMapConsumer_computeColumnSpans() {\n  for (var index = 0; index < this._generatedMappings.length; ++index) {\n    var mapping = this._generatedMappings[index];\n\n    // Mappings do not contain a field for the last generated columnt. We\n    // can come up with an optimistic estimate, however, by assuming that\n    // mappings are contiguous (i.e. given two consecutive mappings, the\n    // first mapping ends where the second one starts).\n    if (index + 1 < this._generatedMappings.length) {\n      var nextMapping = this._generatedMappings[index + 1];\n      if (mapping.generatedLine === nextMapping.generatedLine) {\n        mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n        continue;\n      }\n    }\n\n    // The last mapping for each line spans the entire line.\n    mapping.lastGeneratedColumn = Infinity;\n  }\n};\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.\n *   - column: The column number in the generated source.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.\n *   - column: The column number in the original source, or null.\n *   - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor = function SourceMapConsumer_originalPositionFor(aArgs) {\n  var needle = {\n    generatedLine: util.getArg(aArgs, 'line'),\n    generatedColumn: util.getArg(aArgs, 'column')\n  };\n  var index = this._findMapping(needle, this._generatedMappings, \"generatedLine\", \"generatedColumn\", util.compareByGeneratedPositionsDeflated, util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND));\n  if (index >= 0) {\n    var mapping = this._generatedMappings[index];\n    if (mapping.generatedLine === needle.generatedLine) {\n      var source = util.getArg(mapping, 'source', null);\n      if (source !== null) {\n        source = this._sources.at(source);\n        if (this.sourceRoot != null) {\n          source = util.join(this.sourceRoot, source);\n        }\n      }\n      var name = util.getArg(mapping, 'name', null);\n      if (name !== null) {\n        name = this._names.at(name);\n      }\n      return {\n        source: source,\n        line: util.getArg(mapping, 'originalLine', null),\n        column: util.getArg(mapping, 'originalColumn', null),\n        name: name\n      };\n    }\n  }\n  return {\n    source: null,\n    line: null,\n    column: null,\n    name: null\n  };\n};\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources = function BasicSourceMapConsumer_hasContentsOfAllSources() {\n  if (!this.sourcesContent) {\n    return false;\n  }\n  return this.sourcesContent.length >= this._sources.size() && !this.sourcesContent.some(function (sc) {\n    return sc == null;\n  });\n};\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor = function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n  if (!this.sourcesContent) {\n    return null;\n  }\n  if (this.sourceRoot != null) {\n    aSource = util.relative(this.sourceRoot, aSource);\n  }\n  if (this._sources.has(aSource)) {\n    return this.sourcesContent[this._sources.indexOf(aSource)];\n  }\n  var url;\n  if (this.sourceRoot != null && (url = util.urlParse(this.sourceRoot))) {\n    // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n    // many users. We can help them out when they expect file:// URIs to\n    // behave like it would if they were running a local HTTP server. See\n    // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n    var fileUriAbsPath = aSource.replace(/^file:\\/\\//, \"\");\n    if (url.scheme == \"file\" && this._sources.has(fileUriAbsPath)) {\n      return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)];\n    }\n    if ((!url.path || url.path == \"/\") && this._sources.has(\"/\" + aSource)) {\n      return this.sourcesContent[this._sources.indexOf(\"/\" + aSource)];\n    }\n  }\n\n  // This function is used recursively from\n  // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n  // don't want to throw if we can't find the source - we just want to\n  // return null, so we provide a flag to exit gracefully.\n  if (nullOnMissing) {\n    return null;\n  } else {\n    throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n  }\n};\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: The column number in the original source.\n *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor = function SourceMapConsumer_generatedPositionFor(aArgs) {\n  var source = util.getArg(aArgs, 'source');\n  if (this.sourceRoot != null) {\n    source = util.relative(this.sourceRoot, source);\n  }\n  if (!this._sources.has(source)) {\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\n  }\n  source = this._sources.indexOf(source);\n  var needle = {\n    source: source,\n    originalLine: util.getArg(aArgs, 'line'),\n    originalColumn: util.getArg(aArgs, 'column')\n  };\n  var index = this._findMapping(needle, this._originalMappings, \"originalLine\", \"originalColumn\", util.compareByOriginalPositions, util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND));\n  if (index >= 0) {\n    var mapping = this._originalMappings[index];\n    if (mapping.source === needle.source) {\n      return {\n        line: util.getArg(mapping, 'generatedLine', null),\n        column: util.getArg(mapping, 'generatedColumn', null),\n        lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n      };\n    }\n  }\n  return {\n    line: null,\n    column: null,\n    lastColumn: null\n  };\n};\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The only parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n *   - version: Which version of the source map spec this map is following.\n *   - file: Optional. The generated file this source map is associated with.\n *   - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n *   - offset: The offset into the original specified at which this section\n *       begins to apply, defined as an object with a \"line\" and \"column\"\n *       field.\n *   - map: A source map definition. This source map could also be indexed,\n *       but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n *  {\n *    version : 3,\n *    file: \"app.js\",\n *    sections: [{\n *      offset: {line:100, column:10},\n *      map: {\n *        version : 3,\n *        file: \"section.js\",\n *        sources: [\"foo.js\", \"bar.js\"],\n *        names: [\"src\", \"maps\", \"are\", \"fun\"],\n *        mappings: \"AAAA,E;;ABCDE;\"\n *      }\n *    }],\n *  }\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n  var lastOffset = {\n    line: -1,\n    column: 0\n  };\n  this._sections = sections.map(function (s) {\n    if (s.url) {\n      // The url field will require support for asynchronicity.\n      // See https://github.com/mozilla/source-map/issues/16\n      throw new Error('Support for url field in sections not implemented.');\n    }\n    var offset = util.getArg(s, 'offset');\n    var offsetLine = util.getArg(offset, 'line');\n    var offsetColumn = util.getArg(offset, 'column');\n    if (offsetLine < lastOffset.line || offsetLine === lastOffset.line && offsetColumn < lastOffset.column) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n    return {\n      generatedOffset: {\n        // The offset fields are 0-based, but we use 1-based indices when\n        // encoding/decoding from VLQ.\n        generatedLine: offsetLine + 1,\n        generatedColumn: offsetColumn + 1\n      },\n      consumer: new SourceMapConsumer(util.getArg(s, 'map'))\n    };\n  });\n}\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n  get: function () {\n    var sources = [];\n    for (var i = 0; i < this._sections.length; i++) {\n      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n        sources.push(this._sections[i].consumer.sources[j]);\n      }\n    }\n    return sources;\n  }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n *   - line: The line number in the generated source.\n *   - column: The column number in the generated source.\n *\n * and an object is returned with the following properties:\n *\n *   - source: The original source file, or null.\n *   - line: The line number in the original source, or null.\n *   - column: The column number in the original source, or null.\n *   - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor = function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n  var needle = {\n    generatedLine: util.getArg(aArgs, 'line'),\n    generatedColumn: util.getArg(aArgs, 'column')\n  };\n\n  // Find the section containing the generated position we're trying to map\n  // to an original position.\n  var sectionIndex = binarySearch.search(needle, this._sections, function (needle, section) {\n    var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n    if (cmp) {\n      return cmp;\n    }\n    return needle.generatedColumn - section.generatedOffset.generatedColumn;\n  });\n  var section = this._sections[sectionIndex];\n  if (!section) {\n    return {\n      source: null,\n      line: null,\n      column: null,\n      name: null\n    };\n  }\n  return section.consumer.originalPositionFor({\n    line: needle.generatedLine - (section.generatedOffset.generatedLine - 1),\n    column: needle.generatedColumn - (section.generatedOffset.generatedLine === needle.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0),\n    bias: aArgs.bias\n  });\n};\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources = function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n  return this._sections.every(function (s) {\n    return s.consumer.hasContentsOfAllSources();\n  });\n};\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor = function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n  for (var i = 0; i < this._sections.length; i++) {\n    var section = this._sections[i];\n    var content = section.consumer.sourceContentFor(aSource, true);\n    if (content) {\n      return content;\n    }\n  }\n  if (nullOnMissing) {\n    return null;\n  } else {\n    throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n  }\n};\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n *   - source: The filename of the original source.\n *   - line: The line number in the original source.\n *   - column: The column number in the original source.\n *\n * and an object is returned with the following properties:\n *\n *   - line: The line number in the generated source, or null.\n *   - column: The column number in the generated source, or null.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor = function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n  for (var i = 0; i < this._sections.length; i++) {\n    var section = this._sections[i];\n\n    // Only consider this section if the requested source is in the list of\n    // sources of the consumer.\n    if (section.consumer.sources.indexOf(util.getArg(aArgs, 'source')) === -1) {\n      continue;\n    }\n    var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n    if (generatedPosition) {\n      var ret = {\n        line: generatedPosition.line + (section.generatedOffset.generatedLine - 1),\n        column: generatedPosition.column + (section.generatedOffset.generatedLine === generatedPosition.line ? section.generatedOffset.generatedColumn - 1 : 0)\n      };\n      return ret;\n    }\n  }\n  return {\n    line: null,\n    column: null\n  };\n};\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings = function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n  this.__generatedMappings = [];\n  this.__originalMappings = [];\n  for (var i = 0; i < this._sections.length; i++) {\n    var section = this._sections[i];\n    var sectionMappings = section.consumer._generatedMappings;\n    for (var j = 0; j < sectionMappings.length; j++) {\n      var mapping = sectionMappings[j];\n      var source = section.consumer._sources.at(mapping.source);\n      if (section.consumer.sourceRoot !== null) {\n        source = util.join(section.consumer.sourceRoot, source);\n      }\n      this._sources.add(source);\n      source = this._sources.indexOf(source);\n      var name = section.consumer._names.at(mapping.name);\n      this._names.add(name);\n      name = this._names.indexOf(name);\n\n      // The mappings coming from the consumer for the section have\n      // generated positions relative to the start of the section, so we\n      // need to offset them to be relative to the start of the concatenated\n      // generated file.\n      var adjustedMapping = {\n        source: source,\n        generatedLine: mapping.generatedLine + (section.generatedOffset.generatedLine - 1),\n        generatedColumn: mapping.generatedColumn + (section.generatedOffset.generatedLine === mapping.generatedLine ? section.generatedOffset.generatedColumn - 1 : 0),\n        originalLine: mapping.originalLine,\n        originalColumn: mapping.originalColumn,\n        name: name\n      };\n      this.__generatedMappings.push(adjustedMapping);\n      if (typeof adjustedMapping.originalLine === 'number') {\n        this.__originalMappings.push(adjustedMapping);\n      }\n    }\n  }\n  quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n  quickSort(this.__originalMappings, util.compareByOriginalPositions);\n};\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n  // This function terminates when one of the following is true:\n  //\n  //   1. We find the exact element we are looking for.\n  //\n  //   2. We did not find the exact element, but we can return the index of\n  //      the next-closest element.\n  //\n  //   3. We did not find the exact element, and there is no next-closest\n  //      element than the one we are searching for, so we return -1.\n  var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n  var cmp = aCompare(aNeedle, aHaystack[mid], true);\n  if (cmp === 0) {\n    // Found the element we are looking for.\n    return mid;\n  } else if (cmp > 0) {\n    // Our needle is greater than aHaystack[mid].\n    if (aHigh - mid > 1) {\n      // The element is in the upper half.\n      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // The exact needle element was not found in this haystack. Determine if\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return aHigh < aHaystack.length ? aHigh : -1;\n    } else {\n      return mid;\n    }\n  } else {\n    // Our needle is less than aHaystack[mid].\n    if (mid - aLow > 1) {\n      // The element is in the lower half.\n      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n    }\n\n    // we are in termination case (3) or (2) and return the appropriate thing.\n    if (aBias == exports.LEAST_UPPER_BOUND) {\n      return mid;\n    } else {\n      return aLow < 0 ? -1 : aLow;\n    }\n  }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n *     array and returns -1, 0, or 1 depending on whether the needle is less\n *     than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n *     closest element that is smaller than or greater than the one we are\n *     searching for, respectively, if the exact element cannot be found.\n *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n  if (aHaystack.length === 0) {\n    return -1;\n  }\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n  if (index < 0) {\n    return -1;\n  }\n\n  // We have found either the exact element, or the next-closest element than\n  // the one we are searching for. However, there may be more than one such\n  // element. Make sure we always return the smallest of these.\n  while (index - 1 >= 0) {\n    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n      break;\n    }\n    --index;\n  }\n  return index;\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n *        The array.\n * @param {Number} x\n *        The index of the first item.\n * @param {Number} y\n *        The index of the second item.\n */\nfunction swap(ary, x, y) {\n  var temp = ary[x];\n  ary[x] = ary[y];\n  ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n *        The lower bound on the range.\n * @param {Number} high\n *        The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n  return Math.round(low + Math.random() * (high - low));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n * @param {Number} p\n *        Start index of the array\n * @param {Number} r\n *        End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n  // If our lower bound is less than our upper bound, we (1) partition the\n  // array into two pieces and (2) recurse on each half. If it is not, this is\n  // the empty array and our base case.\n\n  if (p < r) {\n    // (1) Partitioning.\n    //\n    // The partitioning chooses a pivot between `p` and `r` and moves all\n    // elements that are less than or equal to the pivot to the before it, and\n    // all the elements that are greater than it after it. The effect is that\n    // once partition is done, the pivot is in the exact place it will be when\n    // the array is put in sorted order, and it will not need to be moved\n    // again. This runs in O(n) time.\n\n    // Always choose a random pivot so that an input array which is reverse\n    // sorted does not cause O(n^2) running time.\n    var pivotIndex = randomIntInRange(p, r);\n    var i = p - 1;\n    swap(ary, pivotIndex, r);\n    var pivot = ary[r];\n\n    // Immediately after `j` is incremented in this loop, the following hold\n    // true:\n    //\n    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.\n    //\n    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n    for (var j = p; j < r; j++) {\n      if (comparator(ary[j], pivot) <= 0) {\n        i += 1;\n        swap(ary, i, j);\n      }\n    }\n    swap(ary, i + 1, j);\n    var q = i + 1;\n\n    // (2) Recurse on each half.\n\n    doQuickSort(ary, comparator, p, q - 1);\n    doQuickSort(ary, comparator, q + 1, r);\n  }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n *        An array to sort.\n * @param {function} comparator\n *        Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n  doQuickSort(ary, comparator, 0, ary.length - 1);\n};","/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n *        generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n  this.children = [];\n  this.sourceContents = {};\n  this.line = aLine == null ? null : aLine;\n  this.column = aColumn == null ? null : aColumn;\n  this.source = aSource == null ? null : aSource;\n  this.name = aName == null ? null : aName;\n  this[isSourceNode] = true;\n  if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n *        SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap = function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n  // The SourceNode we want to fill with the generated code\n  // and the SourceMap\n  var node = new SourceNode();\n\n  // All even indices of this array are one line of the generated code,\n  // while all odd indices are the newlines between two adjacent lines\n  // (since `REGEX_NEWLINE` captures its match).\n  // Processed fragments are removed from this array, by calling `shiftNextLine`.\n  var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n  var shiftNextLine = function () {\n    var lineContents = remainingLines.shift();\n    // The last line of a file might not have a newline.\n    var newLine = remainingLines.shift() || \"\";\n    return lineContents + newLine;\n  };\n\n  // We need to remember the position of \"remainingLines\"\n  var lastGeneratedLine = 1,\n    lastGeneratedColumn = 0;\n\n  // The generate SourceNodes we need a code range.\n  // To extract it current and last mapping is used.\n  // Here we store the last mapping.\n  var lastMapping = null;\n  aSourceMapConsumer.eachMapping(function (mapping) {\n    if (lastMapping !== null) {\n      // We add the code from \"lastMapping\" to \"mapping\":\n      // First check if there is a new line in between.\n      if (lastGeneratedLine < mapping.generatedLine) {\n        // Associate first line with \"lastMapping\"\n        addMappingWithCode(lastMapping, shiftNextLine());\n        lastGeneratedLine++;\n        lastGeneratedColumn = 0;\n        // The remaining code is added without mapping\n      } else {\n        // There is no new line in between.\n        // Associate the code between \"lastGeneratedColumn\" and\n        // \"mapping.generatedColumn\" with \"lastMapping\"\n        var nextLine = remainingLines[0];\n        var code = nextLine.substr(0, mapping.generatedColumn - lastGeneratedColumn);\n        remainingLines[0] = nextLine.substr(mapping.generatedColumn - lastGeneratedColumn);\n        lastGeneratedColumn = mapping.generatedColumn;\n        addMappingWithCode(lastMapping, code);\n        // No more remaining code, continue\n        lastMapping = mapping;\n        return;\n      }\n    }\n    // We add the generated code until the first mapping\n    // to the SourceNode without any mapping.\n    // Each line is added as separate string.\n    while (lastGeneratedLine < mapping.generatedLine) {\n      node.add(shiftNextLine());\n      lastGeneratedLine++;\n    }\n    if (lastGeneratedColumn < mapping.generatedColumn) {\n      var nextLine = remainingLines[0];\n      node.add(nextLine.substr(0, mapping.generatedColumn));\n      remainingLines[0] = nextLine.substr(mapping.generatedColumn);\n      lastGeneratedColumn = mapping.generatedColumn;\n    }\n    lastMapping = mapping;\n  }, this);\n  // We have processed all mappings.\n  if (remainingLines.length > 0) {\n    if (lastMapping) {\n      // Associate the remaining code in the current line with \"lastMapping\"\n      addMappingWithCode(lastMapping, shiftNextLine());\n    }\n    // and add the remaining lines without any mapping\n    node.add(remainingLines.join(\"\"));\n  }\n\n  // Copy sourcesContent into SourceNode\n  aSourceMapConsumer.sources.forEach(function (sourceFile) {\n    var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n    if (content != null) {\n      if (aRelativePath != null) {\n        sourceFile = util.join(aRelativePath, sourceFile);\n      }\n      node.setSourceContent(sourceFile, content);\n    }\n  });\n  return node;\n  function addMappingWithCode(mapping, code) {\n    if (mapping === null || mapping.source === undefined) {\n      node.add(code);\n    } else {\n      var source = aRelativePath ? util.join(aRelativePath, mapping.source) : mapping.source;\n      node.add(new SourceNode(mapping.originalLine, mapping.originalColumn, source, code, mapping.name));\n    }\n  }\n};\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n  if (Array.isArray(aChunk)) {\n    aChunk.forEach(function (chunk) {\n      this.add(chunk);\n    }, this);\n  } else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  } else {\n    throw new TypeError(\"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk);\n  }\n  return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n *        SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n  if (Array.isArray(aChunk)) {\n    for (var i = aChunk.length - 1; i >= 0; i--) {\n      this.prepend(aChunk[i]);\n    }\n  } else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  } else {\n    throw new TypeError(\"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk);\n  }\n  return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n  var chunk;\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    chunk = this.children[i];\n    if (chunk[isSourceNode]) {\n      chunk.walk(aFn);\n    } else {\n      if (chunk !== '') {\n        aFn(chunk, {\n          source: this.source,\n          line: this.line,\n          column: this.column,\n          name: this.name\n        });\n      }\n    }\n  }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n  var newChildren;\n  var i;\n  var len = this.children.length;\n  if (len > 0) {\n    newChildren = [];\n    for (i = 0; i < len - 1; i++) {\n      newChildren.push(this.children[i]);\n      newChildren.push(aSep);\n    }\n    newChildren.push(this.children[i]);\n    this.children = newChildren;\n  }\n  return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n  var lastChild = this.children[this.children.length - 1];\n  if (lastChild[isSourceNode]) {\n    lastChild.replaceRight(aPattern, aReplacement);\n  } else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  } else {\n    this.children.push(''.replace(aPattern, aReplacement));\n  }\n  return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent = function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n  this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n};\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents = function SourceNode_walkSourceContents(aFn) {\n  for (var i = 0, len = this.children.length; i < len; i++) {\n    if (this.children[i][isSourceNode]) {\n      this.children[i].walkSourceContents(aFn);\n    }\n  }\n  var sources = Object.keys(this.sourceContents);\n  for (var i = 0, len = sources.length; i < len; i++) {\n    aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n  }\n};\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n  var str = \"\";\n  this.walk(function (chunk) {\n    str += chunk;\n  });\n  return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n  var generated = {\n    code: \"\",\n    line: 1,\n    column: 0\n  };\n  var map = new SourceMapGenerator(aArgs);\n  var sourceMappingActive = false;\n  var lastOriginalSource = null;\n  var lastOriginalLine = null;\n  var lastOriginalColumn = null;\n  var lastOriginalName = null;\n  this.walk(function (chunk, original) {\n    generated.code += chunk;\n    if (original.source !== null && original.line !== null && original.column !== null) {\n      if (lastOriginalSource !== original.source || lastOriginalLine !== original.line || lastOriginalColumn !== original.column || lastOriginalName !== original.name) {\n        map.addMapping({\n          source: original.source,\n          original: {\n            line: original.line,\n            column: original.column\n          },\n          generated: {\n            line: generated.line,\n            column: generated.column\n          },\n          name: original.name\n        });\n      }\n      lastOriginalSource = original.source;\n      lastOriginalLine = original.line;\n      lastOriginalColumn = original.column;\n      lastOriginalName = original.name;\n      sourceMappingActive = true;\n    } else if (sourceMappingActive) {\n      map.addMapping({\n        generated: {\n          line: generated.line,\n          column: generated.column\n        }\n      });\n      lastOriginalSource = null;\n      sourceMappingActive = false;\n    }\n    for (var idx = 0, length = chunk.length; idx < length; idx++) {\n      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n        generated.line++;\n        generated.column = 0;\n        // Mappings end at eol\n        if (idx + 1 === length) {\n          lastOriginalSource = null;\n          sourceMappingActive = false;\n        } else if (sourceMappingActive) {\n          map.addMapping({\n            source: original.source,\n            original: {\n              line: original.line,\n              column: original.column\n            },\n            generated: {\n              line: generated.line,\n              column: generated.column\n            },\n            name: original.name\n          });\n        }\n      } else {\n        generated.column++;\n      }\n    }\n  });\n  this.walkSourceContents(function (sourceFile, sourceContent) {\n    map.setSourceContent(sourceFile, sourceContent);\n  });\n  return {\n    code: generated.code,\n    map: map\n  };\n};\nexports.SourceNode = SourceNode;"],"sourceRoot":""}