{"version":3,"sources":["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","webpack:///./app/javascript/mastodon/components/error_boundary.jsx","webpack:///./app/javascript/mastodon/actions/onboarding.js","webpack:///./app/javascript/hooks/useLinks.ts","webpack:///./app/javascript/mastodon/components/account_bio.tsx","webpack:///./app/javascript/mastodon/components/account_fields.tsx","webpack:///./app/javascript/mastodon/components/hover_card_account.tsx","webpack:///./app/javascript/mastodon/components/hover_card_controller.tsx","webpack:///./app/javascript/mastodon/features/picture_in_picture/components/header.tsx","webpack:///./app/javascript/mastodon/features/picture_in_picture/index.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.tsx","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/material-icons/400-24px/bookmarks.svg","webpack:///./app/javascript/material-icons/400-24px/explore-fill.svg","webpack:///./app/javascript/material-icons/400-24px/home.svg","webpack:///./app/javascript/material-icons/400-24px/list_alt-fill.svg","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.tsx","webpack:///./app/javascript/mastodon/features/ui/components/disabled_account_banner.jsx","webpack:///./app/javascript/mastodon/features/ui/components/list_panel.jsx","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/performance.js","webpack:///./app/javascript/mastodon/main.jsx","webpack:///./app/javascript/entrypoints/application.ts","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"],"names":["StackFrame","FIREFOX_SAFARI_STACK_REGEXP","CHROME_IE_STACK_REGEXP","SAFARI_NATIVE_CODE_REGEXP","parse","error","stacktrace","this","parseOpera","stack","match","parseV8OrIE","parseFFOrSafari","Error","extractLocation","urlLike","indexOf","parts","exec","replace","undefined","split","filter","line","map","sanitizedLine","location","locationParts","functionName","fileName","lineNumber","columnNumber","source","functionNameRegex","matches","e","message","length","parseOpera9","parseOpera11","parseOpera10","lineRE","lines","result","i","len","push","argsRaw","tokens","pop","functionCall","shift","args","backtrace","opts","maxStackSize","curr","arguments","callee","Array","test","toString","RegExp","$1","caller","SourceMap","_xdr","url","Promise","resolve","reject","req","XMLHttpRequest","open","onerror","onreadystatechange","readyState","status","substr","responseText","send","_atob","b64str","window","atob","_parseJson","string","JSON","_findFunctionName","syntaxes","code","maxLines","Math","min","commentPos","index","m","_ensureSupportedEnvironment","Object","defineProperty","create","_ensureStackFrameIsLegit","stackframe","TypeError","_findSourceMappingURL","lastSourceMappingUrl","matchSourceMappingUrl","sourceMappingUrlRegExp","_extractLocationInfoFromSourceMapSource","sourceMapConsumer","sourceCache","loc","originalPositionFor","column","mappedSource","sourceContentFor","name","StackTraceGPS","sourceMapConsumerCache","ajax","_get","isDataUrl","offline","supportedEncodingRegexp","sourceMapStart","encodedSource","xhrPromise","method","then","bind","_getSourceMapConsumer","sourceMappingURL","defaultSourceRoot","sourceMapConsumerPromise","sourceMapSource","sourceRoot","SourceMapConsumer","catch","pinpoint","getMappedLocation","mappedStackFrame","resolveMappedStackFrame","findFunctionName","guessedFunctionName","substring","lastIndexOf","exports","SourceMapGenerator","SourceNode","intToCharMap","encode","number","decode","charCode","util","MappingList","_array","_sorted","_last","generatedLine","generatedColumn","prototype","unsortedForEach","aCallback","aThisArg","forEach","add","aMapping","mappingA","mappingB","lineA","lineB","columnA","columnB","compareByGeneratedPositionsInflated","toArray","sort","binarySearch","ArraySet","base64VLQ","quickSort","aSourceMap","sourceMap","sections","IndexedSourceMapConsumer","BasicSourceMapConsumer","version","getArg","sources","names","sourcesContent","mappings","file","_version","String","normalize","isAbsolute","relative","_names","fromArray","_sources","_mappings","Mapping","originalLine","originalColumn","lastOffset","_sections","s","offset","offsetLine","offsetColumn","generatedOffset","consumer","fromSourceMap","__generatedMappings","get","_parseMappings","__originalMappings","_charIsMappingSeparator","aStr","c","charAt","aSourceRoot","GENERATED_ORDER","ORIGINAL_ORDER","GREATEST_LOWER_BOUND","LEAST_UPPER_BOUND","eachMapping","aContext","aOrder","context","_generatedMappings","_originalMappings","mapping","at","join","allGeneratedPositionsFor","aArgs","needle","has","_findMapping","compareByOriginalPositions","lastColumn","smc","_sourceRoot","_generateSourcesContent","_file","generatedMappings","slice","destGeneratedMappings","destOriginalMappings","srcMapping","destMapping","str","segment","end","value","previousGeneratedColumn","previousOriginalLine","previousOriginalColumn","previousSource","previousName","cachedSegments","temp","originalMappings","rest","compareByGeneratedPositionsDeflated","aNeedle","aMappings","aLineName","aColumnName","aComparator","aBias","search","computeColumnSpans","nextMapping","lastGeneratedColumn","Infinity","hasContentsOfAllSources","size","some","sc","aSource","nullOnMissing","urlParse","fileUriAbsPath","scheme","path","generatedPositionFor","constructor","j","sectionIndex","section","cmp","bias","every","content","generatedPosition","sectionMappings","adjustedMapping","recursiveSearch","aLow","aHigh","aHaystack","aCompare","mid","floor","swap","ary","x","y","doQuickSort","comparator","p","r","low","high","round","random","pivot","q","REGEX_NEWLINE","isSourceNode","aLine","aColumn","aChunks","aName","children","sourceContents","fromStringWithSourceMap","aGeneratedCode","aSourceMapConsumer","aRelativePath","node","remainingLines","shiftNextLine","lastGeneratedLine","lastMapping","nextLine","addMappingWithCode","sourceFile","setSourceContent","aChunk","isArray","chunk","prepend","unshift","walk","aFn","aSep","newChildren","replaceRight","aPattern","aReplacement","lastChild","aSourceFile","aSourceContent","toSetString","walkSourceContents","keys","fromSetString","toStringWithSourceMap","generated","sourceMappingActive","lastOriginalSource","lastOriginalLine","lastOriginalColumn","lastOriginalName","original","addMapping","idx","charCodeAt","sourceContent","ErrorBoundary","PureComponent","_defineProperty","hasError","errorMessage","stackTrace","mappedStackTrace","componentStack","state","textarea","document","createElement","contents","textContent","style","position","body","appendChild","select","execCommand","removeChild","setState","copied","setTimeout","componentDidCatch","info","StackTrace","fromError","stackframes","sf","render","props","likelyBrowserAddonIssue","includes","_jsx","className","FormattedMessage","id","defaultMessage","href","source_url","rel","target","onClick","handleCopyStackTrace","Helmet","INTRODUCTION_VERSION","useLinks","history","useHistory","dispatch","useAppDispatch","handleHashtagClick","useCallback","element","handleMentionClick","openURL","closest","button","ctrlKey","metaKey","classList","contains","preventDefault","_element$textContent","_element$previousSibl","previousSibling","endsWith","isHashtagClick","AccountBio","_ref","note","handleClick","dangerouslySetInnerHTML","__html","onClickCapture","AccountFields","fields","limit","take","pair","_pair$get","classNames","verified","title","Icon","icon","CheckIcon","HoverCardAccount","forwardRef","ref","accountId","account","useAppSelector","accounts","relationships","getIn","useEffect","fetchAccount","_jsx2","role","_jsxs","_Fragment","Link","to","acct","Avatar","DisplayName","localDomain","domain","note_emojified","ShortNumber","followers_count","renderer","FollowersCounter","FollowButton","LoadingIndicator","displayName","popperConfig","strategy","HoverCardController","setOpen","useState","setAccountId","anchor","setAnchor","cardRef","useRef","setLeaveTimeout","cancelLeaveTimeout","useTimeout","setEnterTimeout","cancelEnterTimeout","delayEnterTimeout","setScrollTimeout","useLocation","handleClose","isScrolling","currentAnchor","currentTitle","close","_currentAnchor","removeAttribute","handleMouseEnter","HTMLElement","_currentAnchor2","getAttribute","_target$getAttribute","setAttribute","current","handleMouseLeave","handleScrollEnd","handleScroll","handleMouseMove","addEventListener","passive","capture","removeEventListener","Overlay","rootClose","onHide","show","placement","flip","messages","defineMessages","Header","statusId","onClose","intl","useIntl","IconButton","iconComponent","CloseIcon","formatMessage","PictureInPicture","removePictureInPicture","pipState","picture_in_picture","type","src","currentTime","volume","muted","poster","backgroundColor","foregroundColor","accentColor","player","Video","autoPlay","inline","alwaysVisible","Audio","Footer","Account","connect","me","componentDidMount","dispatchServer","signedIn","identity","openClosedRegistrationsModal","signupUrl","pathname","SearchIcon","sso_redirect","signupButton","registrationsOpen","WordmarkLogo","SymbolLogo","injectIntl","withRouter","withIdentity","openModal","modalType","fetchServer","UploadArea","keyCode","active","stopPropagation","handleKeyUp","componentWillUnmount","Motion","defaultStyle","backgroundOpacity","backgroundScale","spring","stiffness","damping","visibility","opacity","transform","ColumnLoading","otherProps","Column","ColumnHeader","aboutActiveUsers","ServerBanner","server","isLoading","values","mastodon","ServerHeroImage","blurhash","Skeleton","width","minimal","ComposePanel","changeComposing","mountCompose","unmountCompose","onFocus","SearchContainer","openInRoute","ComposeFormContainer","singleColumn","LinkFooter","DrawerLoading","_path","_extends","assign","n","t","hasOwnProperty","call","apply","titleId","xmlns","height","viewBox","d","lastStatusAt","empty","FeaturedTags","ImmutablePureComponent","featuredTags","isEmpty","featuredTag","Hashtag","uses","withGraph","description","date","formatDate","month","day","ImmutablePropTypes","record","list","tagged","PropTypes","object","isRequired","mapStateToProps","getAccount","makeGetAccount","ImmutableList","AccountNavigation","params","normalizeForLookup","DefaultNavigation","showTrends","Trends","NavigationPortal","Switch","Route","exact","component","DisabledAccountBanner","onLogout","disabledAcct","movedToAcct","disabledAccountLink","disabledAccount","movedToAccount","handleLogOutClick","disabledAccountId","movedToAccountId","getOrderedLists","createSelector","lists","toList","item","a","b","localeCompare","ListPanel","useDispatch","useSelector","fetchLists","ColumnLink","ListAltIcon","activeIconComponent","ListAltActiveIcon","text","transparent","SignInBanner","home","notifications","explore","firehose","direct","favourites","bookmarks","preferences","administration","moderation","followsAndFollowers","about","advancedInterface","openedInClassicInterface","followRequests","NotificationsLink","count","selectUnreadNotificationGroupsCount","IconWithBadge","NotificationsIcon","activeIcon","NotificationsActiveIcon","FollowRequestsLink","_state$getIn$size","_state$getIn","fetchFollowRequests","PersonAddIcon","PersonAddActiveIcon","NavigationPanel","Component","startsWith","permissions","banner","transientSingleColumn","HomeIcon","HomeActiveIcon","trendsEnabled","ExploreIcon","ExploreActiveIcon","timelinePreview","isActive","isFirehoseActive","PublicIcon","AlternateEmailIcon","BookmarksIcon","BookmarksActiveIcon","StarIcon","StarActiveIcon","SettingsIcon","canManageReports","optional","ModerationIcon","canViewAdminDashboard","AdministrationIcon","MoreHorizIcon","componentMap","Compose","HomeTimeline","NotificationsWrapper","PublicTimeline","CommunityTimeline","HashtagTimeline","DirectTimeline","FavouritedStatuses","BookmarkedStatuses","ListTimeline","Directory","TabsBarPortal","setTabsBarElement","useColumnsContext","setRef","ColumnsArea","matchMedia","renderComposePanel","mediaQuery","columnId","multiColumn","BundleColumnError","errorType","handleLayoutChange","addListener","isRtlLayout","getElementsByTagName","removeListener","handleChildrenContentChange","modifier","scrollRight","scrollWidth","innerWidth","columns","isModalOpen","toJS","other","BundleContainer","fetchComponent","loading","renderLoading","renderError","SpecificComponent","Children","child","cloneElement","bool","WrappedSwitch","decklessLocation","WrappedRoute","_ref2","componentParams","getDerivedStateFromError","frame","err","console","renderComponent","beforeUnload","keyMap","help","new","forceNew","toggleComposeSpoilers","focusColumn","reply","favourite","boost","mention","openProfile","moveDown","moveUp","back","goToHome","goToNotifications","goToLocal","goToFederated","goToDirect","goToStart","goToFavourites","goToPinned","goToProfile","goToBlocked","goToMuted","goToRequests","toggleHidden","toggleSensitive","openMedia","SwitchingColumnsArea","UNSAFE_componentWillMount","toggle","componentDidUpdate","prevProps","pathName","redirect","Redirect","from","singleUserMode","owner","initialState","username","trendsAsLanding","ColumnsContextProvider","ColumnsAreaContainer","GettingStarted","KeyboardShortcuts","About","PrivacyPolicy","Firehose","feedType","LinkTimeline","NotificationRequests","NotificationRequest","PinnedStatuses","Onboarding","Explore","AccountTimeline","withReplies","Followers","Following","AccountGallery","Status","Reblogs","Favourites","FollowRequests","Blocks","DomainBlocks","FollowedTags","Mutes","Lists","UI","draggingOver","isComposing","hasComposingText","hasMediaAttachments","synchronouslySubmitMarkers","returnValue","focusApp","submitMarkers","immediate","unfocusApp","dragTargets","dataTransfer","types","canUploadMore","dataTransferIsText","dropEffect","files","uploadCompose","el","data","warn","_debounce","clearHeight","trailing","layout","layoutFromWindow","cancel","changeLayout","querySelector","focus","handleHotkeyNew","resetCompose","changeComposeSpoilerness","key","container","scrollTop","offsetTop","scrollIntoView","_history$location","fromMastodon","goBack","hotkeys","handleWindowFocus","handleWindowBlur","handleBeforeUnload","handleResize","handleDragEnter","handleDragOver","handleDrop","handleDragLeave","handleDragEnd","navigator","serviceWorker","handleServiceWorkerPostMessage","fetchMarkers","expandHomeTimeline","initializeNotifications","fetchServerTranslationLanguages","__mousetrap__","stopCallback","tagName","handlers","handleHotkeyToggleHelp","handleHotkeySearch","handleHotkeyForceNew","handleHotkeyToggleComposeSpoilers","handleHotkeyFocusColumn","handleHotkeyBack","handleHotkeyGoToHome","handleHotkeyGoToNotifications","handleHotkeyGoToLocal","handleHotkeyGoToFederated","handleHotkeyGoToDirect","handleHotkeyGoToStart","handleHotkeyGoToFavourites","handleHotkeyGoToPinned","handleHotkeyGoToProfile","handleHotkeyGoToBlocked","handleHotkeyGoToMuted","handleHotkeyGoToRequests","HotKeys","setHotkeysRef","attach","focused","NotificationsContainer","disableHoverCards","LoadingBarContainer","ModalContainer","closeUploadModal","trim","firstLaunch","isProduction","siteTitle","hydrateAction","hydrateStore","store","meta","fetchCustomEmojis","Mastodon","createIdentityContext","disconnect","connectUserStream","shouldUpdateScroll","prevRouterProps","_location$state","_location$state2","_prevRouterProps$loca","mastodonModalKey","IdentityContext","Provider","IntlProvider","ReduxProvider","Router","ScrollContext","defaultTitle","titleTemplate","mark","stop","perf","performance","now","Date","throwIfEmpty","measure","getEntriesByName","getEntriesByType","clearMarks","clearMeasures","entries","marks","startTime","endTime","entry","duration","entryType","arr","splice","insertSorted","isDevelopment","setResourceTimingBufferSize","main","marky","ready","async","mountNode","getElementById","createRoot","setupBrowserNotifications","Workbox","wb","registration","register","Notification","permission","registerPushNotifications","start","loadPolyfills","loadLocale","aDefaultValue","urlRegexp","dataUrlRegexp","aUrl","auth","host","port","urlGenerate","aParsedUrl","aPath","part","up","aRoot","aPathUrl","aRootUrl","joined","level","supportsNullProto","isProtoString","strcmp","aStr1","aStr2","onlyCompareOriginal","onlyCompareGenerated","ErrorStackParser","StackGenerator","_options","_generateError","_merge","first","second","obj","prop","_isShapedLikeParsableError","_filtered","generateArtificially","getSync","gps","all","resolveOriginal","stackFrames","instrument","fn","callback","errback","thisArg","__stacktraceOriginalFn","instrumented","deinstrument","report","errorMsg","requestOptions","setRequestHeader","headers","header","reportPayload","stringify","_isNumber","isNaN","parseFloat","isFinite","_capitalize","toUpperCase","_getter","booleanProps","numericProps","stringProps","arrayProps","objectProps","concat","getArgs","setArgs","v","getEvalOrigin","evalOrigin","setEvalOrigin","getFileName","getLineNumber","getColumnNumber","getFunctionName","getIsEval","fromString","argsStartIndex","argsEndIndex","locationString","Boolean","Number","k","_skipValidation","_sourcesContents","generator","newMapping","_validateMapping","applySourceMap","aSourceMapPath","newSources","newNames","aGenerated","aOriginal","_serializeMappings","next","nameIdx","sourceIdx","previousGeneratedLine","aSources","toJSON","base64","aValue","digit","encoded","vlq","toVLQSigned","VLQ_BASE","aIndex","aOutParam","continuation","shifted","strLen","_set","aArray","aAllowDuplicates","set","getOwnPropertyNames","sStr","isDuplicate","aIdx"],"mappings":"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","file":"js/application-9636925d65301c472793.chunk.js","sourcesContent":["(function(root, factory) {\n    'use strict';\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\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\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\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\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\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\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\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\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\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\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\n        parseOpera: function ErrorStackParser$$parseOpera(e) {\n            if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n                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\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\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\n            return result;\n        },\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\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(\n                        new StackFrame({\n                            functionName: match[3] || undefined,\n                            fileName: match[2],\n                            lineNumber: match[1],\n                            source: lines[i]\n                        })\n                    );\n                }\n            }\n\n            return result;\n        },\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\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\n                    .replace(/<anonymous function(: (\\w+))?>/, '$2')\n                    .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]') ?\n                    undefined : argsRaw.split(',');\n\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}));\n","(function(root, factory) {\n    'use strict';\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\n            if (typeof opts === 'object' && typeof opts.maxStackSize === 'number') {\n                maxStackSize = opts.maxStackSize;\n            }\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({functionName: RegExp.$1 || undefined, args: args}));\n                } else {\n                    stack.push(new StackFrame({args: args}));\n                }\n\n                try {\n                    curr = curr.caller;\n                } catch (e) {\n                    break;\n                }\n            }\n            return stack;\n        }\n    };\n}));\n","(function(root, factory) {\n    'use strict';\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) ||\n                        (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    /**\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\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\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        ];\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\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\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\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' ||\n            stackframe.lineNumber % 1 !== 0 ||\n            stackframe.lineNumber < 1) {\n            throw new TypeError('Given line number must be a positive integer');\n        } else if (typeof stackframe.columnNumber !== 'number' ||\n            stackframe.columnNumber % 1 !== 0 ||\n            stackframe.columnNumber < 0) {\n            throw new TypeError('Given column number must be a non-negative integer');\n        }\n        return true;\n    }\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\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\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\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\n        this.sourceCache = opts.sourceCache || {};\n        this.sourceMapConsumerCache = opts.sourceMapConsumerCache || {};\n\n        this.ajax = opts.ajax || _xdr;\n\n        this._atob = opts.atob || _atob;\n\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 =\n                            /^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, {method: 'get'});\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\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\n                    this.findFunctionName(mappedStackFrame)\n                        .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\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\n                    if (sourceMappingURL[0] !== '/' && !isDataUrl && !(/^https?:\\/\\/|^\\/\\//i).test(sourceMappingURL)) {\n                        sourceMappingURL = defaultSourceRoot + sourceMappingURL;\n                    }\n\n                    return this._getSourceMapConsumer(sourceMappingURL, defaultSourceRoot)\n                        .then(function(sourceMapConsumer) {\n                            return _extractLocationInfoFromSourceMapSource(stackframe, sourceMapConsumer, sourceCache)\n                                .then(resolve)['catch'](function() {\n                                    resolve(stackframe);\n                                });\n                        });\n                }.bind(this), reject)['catch'](reject);\n            }.bind(this));\n        };\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;\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 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};\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 ||\n         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 = {generatedLine: -1, generatedColumn: 0};\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 =\n  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};\n\nexports.MappingList = MappingList;\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 binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap) {\n  var sourceMap = aSourceMap;\n  if (typeof aSourceMap === 'string') {\n    sourceMap = JSON.parse(aSourceMap.replace(/^\\)\\]\\}'/, ''));\n  }\n\n  return sourceMap.sections != null\n    ? new IndexedSourceMapConsumer(sourceMap)\n    : new BasicSourceMapConsumer(sourceMap);\n}\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\n    return this.__generatedMappings;\n  }\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\n    return this.__originalMappings;\n  }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n  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 =\n  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n    throw new Error(\"Subclasses must implement _parseMappings\");\n  };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\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 =\n  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n    var context = aContext || null;\n    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\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\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 =\n  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\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\n    var mappings = [];\n\n    var index = this._findMapping(needle,\n                                  this._originalMappings,\n                                  \"originalLine\",\n                                  \"originalColumn\",\n                                  util.compareByOriginalPositions,\n                                  binarySearch.LEAST_UPPER_BOUND);\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\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\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 &&\n               mapping.originalLine === line &&\n               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\n          mapping = this._originalMappings[++index];\n        }\n      }\n    }\n\n    return mappings;\n  };\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\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\n  sources = sources\n    .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)\n        ? util.relative(sourceRoot, source)\n        : 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\n  this.sourceRoot = sourceRoot;\n  this.sourcesContent = sourcesContent;\n  this._mappings = mappings;\n  this.file = file;\n}\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 =\n  function SourceMapConsumer_fromSourceMap(aSourceMap) {\n    var smc = Object.create(BasicSourceMapConsumer.prototype);\n\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(),\n                                                            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\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\n      if (srcMapping.source) {\n        destMapping.source = sources.indexOf(srcMapping.source);\n        destMapping.originalLine = srcMapping.originalLine;\n        destMapping.originalColumn = srcMapping.originalColumn;\n\n        if (srcMapping.name) {\n          destMapping.name = names.indexOf(srcMapping.name);\n        }\n\n        destOriginalMappings.push(destMapping);\n      }\n\n      destGeneratedMappings.push(destMapping);\n    }\n\n    quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\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 =\n  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\n    while (index < length) {\n      if (aStr.charAt(index) === ';') {\n        generatedLine++;\n        index++;\n        previousGeneratedColumn = 0;\n      }\n      else if (aStr.charAt(index) === ',') {\n        index++;\n      }\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\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\n          if (segment.length === 2) {\n            throw new Error('Found a source, but no line and column');\n          }\n\n          if (segment.length === 3) {\n            throw new Error('Found a source and line, but no column');\n          }\n\n          cachedSegments[str] = segment;\n        }\n\n        // Generated column.\n        mapping.generatedColumn = previousGeneratedColumn + segment[0];\n        previousGeneratedColumn = mapping.generatedColumn;\n\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\n          if (segment.length > 4) {\n            // Original name.\n            mapping.name = previousName + segment[4];\n            previousName += segment[4];\n          }\n        }\n\n        generatedMappings.push(mapping);\n        if (typeof mapping.originalLine === 'number') {\n          originalMappings.push(mapping);\n        }\n      }\n    }\n\n    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n    this.__generatedMappings = generatedMappings;\n\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 =\n  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n                                         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 '\n                          + aNeedle[aLineName]);\n    }\n    if (aNeedle[aColumnName] < 0) {\n      throw new TypeError('Column must be greater than or equal to 0, got '\n                          + aNeedle[aColumnName]);\n    }\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 =\n  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\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 =\n  function SourceMapConsumer_originalPositionFor(aArgs) {\n    var needle = {\n      generatedLine: util.getArg(aArgs, 'line'),\n      generatedColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._generatedMappings,\n      \"generatedLine\",\n      \"generatedColumn\",\n      util.compareByGeneratedPositionsDeflated,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._generatedMappings[index];\n\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\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 =\n  function BasicSourceMapConsumer_hasContentsOfAllSources() {\n    if (!this.sourcesContent) {\n      return false;\n    }\n    return this.sourcesContent.length >= this._sources.size() &&\n      !this.sourcesContent.some(function (sc) { return sc == null; });\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 =\n  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    if (!this.sourcesContent) {\n      return null;\n    }\n\n    if (this.sourceRoot != null) {\n      aSource = util.relative(this.sourceRoot, aSource);\n    }\n\n    if (this._sources.has(aSource)) {\n      return this.sourcesContent[this._sources.indexOf(aSource)];\n    }\n\n    var url;\n    if (this.sourceRoot != null\n        && (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\"\n          && this._sources.has(fileUriAbsPath)) {\n        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n      }\n\n      if ((!url.path || url.path == \"/\")\n          && 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    }\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 =\n  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\n    var needle = {\n      source: source,\n      originalLine: util.getArg(aArgs, 'line'),\n      originalColumn: util.getArg(aArgs, 'column')\n    };\n\n    var index = this._findMapping(\n      needle,\n      this._originalMappings,\n      \"originalLine\",\n      \"originalColumn\",\n      util.compareByOriginalPositions,\n      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n    );\n\n    if (index >= 0) {\n      var mapping = this._originalMappings[index];\n\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\n    return {\n      line: null,\n      column: null,\n      lastColumn: null\n    };\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\n  var version = util.getArg(sourceMap, 'version');\n  var sections = util.getArg(sourceMap, 'sections');\n\n  if (version != this._version) {\n    throw new Error('Unsupported version: ' + version);\n  }\n\n  this._sources = new ArraySet();\n  this._names = new ArraySet();\n\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\n    if (offsetLine < lastOffset.line ||\n        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n      throw new Error('Section offsets must be ordered and non-overlapping.');\n    }\n    lastOffset = offset;\n\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}\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 =\n  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,\n      function(needle, section) {\n        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n        if (cmp) {\n          return cmp;\n        }\n\n        return (needle.generatedColumn -\n                section.generatedOffset.generatedColumn);\n      });\n    var section = this._sections[sectionIndex];\n\n    if (!section) {\n      return {\n        source: null,\n        line: null,\n        column: null,\n        name: null\n      };\n    }\n\n    return section.consumer.originalPositionFor({\n      line: needle.generatedLine -\n        (section.generatedOffset.generatedLine - 1),\n      column: needle.generatedColumn -\n        (section.generatedOffset.generatedLine === needle.generatedLine\n         ? section.generatedOffset.generatedColumn - 1\n         : 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 =\n  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 =\n  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n    for (var i = 0; i < this._sections.length; i++) {\n      var section = this._sections[i];\n\n      var content = section.consumer.sourceContentFor(aSource, true);\n      if (content) {\n        return content;\n      }\n    }\n    if (nullOnMissing) {\n      return null;\n    }\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 =\n  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 +\n            (section.generatedOffset.generatedLine - 1),\n          column: generatedPosition.column +\n            (section.generatedOffset.generatedLine === generatedPosition.line\n             ? section.generatedOffset.generatedColumn - 1\n             : 0)\n        };\n        return ret;\n      }\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 =\n  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\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\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 +\n            (section.generatedOffset.generatedLine - 1),\n          generatedColumn: mapping.generatedColumn +\n            (section.generatedOffset.generatedLine === mapping.generatedLine\n            ? section.generatedOffset.generatedColumn - 1\n            : 0),\n          originalLine: mapping.originalLine,\n          originalColumn: mapping.originalColumn,\n          name: name\n        };\n\n        this.__generatedMappings.push(adjustedMapping);\n        if (typeof adjustedMapping.originalLine === 'number') {\n          this.__originalMappings.push(adjustedMapping);\n        }\n      }\n    }\n\n    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n    quickSort(this.__originalMappings, util.compareByOriginalPositions);\n  };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\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\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  }\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  }\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\n  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n                              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\n  return index;\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// 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\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\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};\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 =\n  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, 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\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 -\n                                        lastGeneratedColumn);\n          remainingLines[0] = nextLine.substr(mapping.generatedColumn -\n                                              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\n    return node;\n\n    function addMappingWithCode(mapping, code) {\n      if (mapping === null || mapping.source === undefined) {\n        node.add(code);\n      } else {\n        var source = aRelativePath\n          ? util.join(aRelativePath, mapping.source)\n          : mapping.source;\n        node.add(new SourceNode(mapping.originalLine,\n                                mapping.originalColumn,\n                                source,\n                                code,\n                                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  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    if (aChunk) {\n      this.children.push(aChunk);\n    }\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\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  }\n  else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n    this.children.unshift(aChunk);\n  }\n  else {\n    throw new TypeError(\n      \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n    );\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    }\n    else {\n      if (chunk !== '') {\n        aFn(chunk, { source: this.source,\n                     line: this.line,\n                     column: this.column,\n                     name: this.name });\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  }\n  else if (typeof lastChild === 'string') {\n    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n  }\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 =\n  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 =\n  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\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\n        && original.line !== null\n        && original.column !== null) {\n      if(lastOriginalSource !== original.source\n         || lastOriginalLine !== original.line\n         || lastOriginalColumn !== original.column\n         || 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\n  return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n","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 {\n      // do nothing\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","import { changeSetting, saveSettings } from './settings';\n\nexport const INTRODUCTION_VERSION = 20181216044202;\n\nexport const closeOnboarding = () => dispatch => {\n  dispatch(changeSetting(['introductionVersion'], INTRODUCTION_VERSION));\n  dispatch(saveSettings());\n};\n","import { useCallback } from 'react';\n\nimport { useHistory } from 'react-router-dom';\n\nimport { openURL } from 'mastodon/actions/search';\nimport { useAppDispatch } from 'mastodon/store';\n\nconst isMentionClick = (element: HTMLAnchorElement) =>\n  element.classList.contains('mention');\n\nconst isHashtagClick = (element: HTMLAnchorElement) =>\n  element.textContent?.[0] === '#' ||\n  element.previousSibling?.textContent?.endsWith('#');\n\nexport const useLinks = () => {\n  const history = useHistory();\n  const dispatch = useAppDispatch();\n\n  const handleHashtagClick = useCallback(\n    (element: HTMLAnchorElement) => {\n      const { textContent } = element;\n\n      if (!textContent) return;\n\n      history.push(`/tags/${textContent.replace(/^#/, '')}`);\n    },\n    [history],\n  );\n\n  const handleMentionClick = useCallback(\n    (element: HTMLAnchorElement) => {\n      dispatch(\n        openURL(element.href, history, () => {\n          window.location.href = element.href;\n        }),\n      );\n    },\n    [dispatch, history],\n  );\n\n  const handleClick = useCallback(\n    (e: React.MouseEvent) => {\n      const target = (e.target as HTMLElement).closest('a');\n\n      if (!target || e.button !== 0 || e.ctrlKey || e.metaKey) {\n        return;\n      }\n\n      if (isMentionClick(target)) {\n        e.preventDefault();\n        handleMentionClick(target);\n      } else if (isHashtagClick(target)) {\n        e.preventDefault();\n        handleHashtagClick(target);\n      }\n    },\n    [handleMentionClick, handleHashtagClick],\n  );\n\n  return handleClick;\n};\n","import { useLinks } from 'mastodon/../hooks/useLinks';\n\nexport const AccountBio: React.FC<{\n  note: string;\n  className: string;\n}> = ({ note, className }) => {\n  const handleClick = useLinks();\n\n  if (note.length === 0 || note === '<p></p>') {\n    return null;\n  }\n\n  return (\n    <div\n      className={`${className} translate`}\n      dangerouslySetInnerHTML={{ __html: note }}\n      onClickCapture={handleClick}\n    />\n  );\n};\n","import classNames from 'classnames';\n\nimport CheckIcon from '@/material-icons/400-24px/check.svg?react';\nimport { useLinks } from 'mastodon/../hooks/useLinks';\nimport { Icon } from 'mastodon/components/icon';\nimport type { Account } from 'mastodon/models/account';\n\nexport const AccountFields: React.FC<{\n  fields: Account['fields'];\n  limit: number;\n}> = ({ fields, limit = -1 }) => {\n  const handleClick = useLinks();\n\n  if (fields.size === 0) {\n    return null;\n  }\n\n  return (\n    <div className='account-fields' onClickCapture={handleClick}>\n      {fields.take(limit).map((pair, i) => (\n        <dl\n          key={i}\n          className={classNames({ verified: pair.get('verified_at') })}\n        >\n          <dt\n            dangerouslySetInnerHTML={{ __html: pair.get('name_emojified') }}\n            className='translate'\n          />\n\n          <dd className='translate' title={pair.get('value_plain') ?? ''}>\n            {pair.get('verified_at') && (\n              <Icon id='check' icon={CheckIcon} className='verified__mark' />\n            )}\n            <span\n              dangerouslySetInnerHTML={{ __html: pair.get('value_emojified') }}\n            />\n          </dd>\n        </dl>\n      ))}\n    </div>\n  );\n};\n","import { useEffect, forwardRef } from 'react';\n\nimport { FormattedMessage } from 'react-intl';\n\nimport classNames from 'classnames';\nimport { Link } from 'react-router-dom';\n\nimport { fetchAccount } from 'mastodon/actions/accounts';\nimport { AccountBio } from 'mastodon/components/account_bio';\nimport { AccountFields } from 'mastodon/components/account_fields';\nimport { Avatar } from 'mastodon/components/avatar';\nimport { FollowersCounter } from 'mastodon/components/counters';\nimport { DisplayName } from 'mastodon/components/display_name';\nimport { FollowButton } from 'mastodon/components/follow_button';\nimport { LoadingIndicator } from 'mastodon/components/loading_indicator';\nimport { ShortNumber } from 'mastodon/components/short_number';\nimport { domain } from 'mastodon/initial_state';\nimport { useAppSelector, useAppDispatch } from 'mastodon/store';\n\nexport const HoverCardAccount = forwardRef<\n  HTMLDivElement,\n  { accountId?: string }\n>(({ accountId }, ref) => {\n  const dispatch = useAppDispatch();\n\n  const account = useAppSelector((state) =>\n    accountId ? state.accounts.get(accountId) : undefined,\n  );\n\n  const note = useAppSelector(\n    (state) =>\n      state.relationships.getIn([accountId, 'note']) as string | undefined,\n  );\n\n  useEffect(() => {\n    if (accountId && !account) {\n      dispatch(fetchAccount(accountId));\n    }\n  }, [dispatch, accountId, account]);\n\n  return (\n    <div\n      ref={ref}\n      id='hover-card'\n      role='tooltip'\n      className={classNames('hover-card dropdown-animation', {\n        'hover-card--loading': !account,\n      })}\n    >\n      {account ? (\n        <>\n          <Link to={`/@${account.acct}`} className='hover-card__name'>\n            <Avatar account={account} size={46} />\n            <DisplayName account={account} localDomain={domain} />\n          </Link>\n\n          <div className='hover-card__text-row'>\n            <AccountBio\n              note={account.note_emojified}\n              className='hover-card__bio'\n            />\n            <AccountFields fields={account.fields} limit={2} />\n            {note && note.length > 0 && (\n              <dl className='hover-card__note'>\n                <dt className='hover-card__note-label'>\n                  <FormattedMessage\n                    id='account.account_note_header'\n                    defaultMessage='Personal note'\n                  />\n                </dt>\n                <dd>{note}</dd>\n              </dl>\n            )}\n          </div>\n\n          <div className='hover-card__number'>\n            <ShortNumber\n              value={account.followers_count}\n              renderer={FollowersCounter}\n            />\n          </div>\n\n          <FollowButton accountId={accountId} />\n        </>\n      ) : (\n        <LoadingIndicator />\n      )}\n    </div>\n  );\n});\n\nHoverCardAccount.displayName = 'HoverCardAccount';\n","import { useEffect, useRef, useState, useCallback } from 'react';\n\nimport { useLocation } from 'react-router-dom';\n\nimport Overlay from 'react-overlays/Overlay';\nimport type {\n  OffsetValue,\n  UsePopperOptions,\n} from 'react-overlays/esm/usePopper';\n\nimport { useTimeout } from 'mastodon/../hooks/useTimeout';\nimport { HoverCardAccount } from 'mastodon/components/hover_card_account';\n\nconst offset = [-12, 4] as OffsetValue;\nconst enterDelay = 750;\nconst leaveDelay = 150;\nconst popperConfig = { strategy: 'fixed' } as UsePopperOptions;\n\nconst isHoverCardAnchor = (element: HTMLElement) =>\n  element.matches('[data-hover-card-account]');\n\nexport const HoverCardController: React.FC = () => {\n  const [open, setOpen] = useState(false);\n  const [accountId, setAccountId] = useState<string | undefined>();\n  const [anchor, setAnchor] = useState<HTMLElement | null>(null);\n  const cardRef = useRef<HTMLDivElement | null>(null);\n  const [setLeaveTimeout, cancelLeaveTimeout] = useTimeout();\n  const [setEnterTimeout, cancelEnterTimeout, delayEnterTimeout] = useTimeout();\n  const [setScrollTimeout] = useTimeout();\n  const location = useLocation();\n\n  const handleClose = useCallback(() => {\n    cancelEnterTimeout();\n    cancelLeaveTimeout();\n    setOpen(false);\n    setAnchor(null);\n  }, [cancelEnterTimeout, cancelLeaveTimeout, setOpen, setAnchor]);\n\n  useEffect(() => {\n    handleClose();\n  }, [handleClose, location]);\n\n  useEffect(() => {\n    let isScrolling = false;\n    let currentAnchor: HTMLElement | null = null;\n    let currentTitle: string | null = null;\n\n    const open = (target: HTMLElement) => {\n      target.setAttribute('aria-describedby', 'hover-card');\n      setOpen(true);\n      setAnchor(target);\n      setAccountId(target.getAttribute('data-hover-card-account') ?? undefined);\n    };\n\n    const close = () => {\n      currentAnchor?.removeAttribute('aria-describedby');\n      currentAnchor = null;\n      setOpen(false);\n      setAnchor(null);\n      setAccountId(undefined);\n    };\n\n    const handleMouseEnter = (e: MouseEvent) => {\n      const { target } = e;\n\n      // We've exited the window\n      if (!(target instanceof HTMLElement)) {\n        close();\n        return;\n      }\n\n      // We've entered an anchor\n      if (!isScrolling && isHoverCardAnchor(target)) {\n        cancelLeaveTimeout();\n\n        currentAnchor?.removeAttribute('aria-describedby');\n        currentAnchor = target;\n\n        currentTitle = target.getAttribute('title');\n        target.removeAttribute('title');\n\n        setEnterTimeout(() => {\n          open(target);\n        }, enterDelay);\n      }\n\n      // We've entered the hover card\n      if (\n        !isScrolling &&\n        (target === currentAnchor || target === cardRef.current)\n      ) {\n        cancelLeaveTimeout();\n      }\n    };\n\n    const handleMouseLeave = (e: MouseEvent) => {\n      const { target } = e;\n\n      if (!currentAnchor) {\n        return;\n      }\n\n      if (\n        currentTitle &&\n        target instanceof HTMLElement &&\n        target === currentAnchor\n      )\n        target.setAttribute('title', currentTitle);\n\n      if (target === currentAnchor || target === cardRef.current) {\n        cancelEnterTimeout();\n\n        setLeaveTimeout(() => {\n          close();\n        }, leaveDelay);\n      }\n    };\n\n    const handleScrollEnd = () => {\n      isScrolling = false;\n    };\n\n    const handleScroll = () => {\n      isScrolling = true;\n      cancelEnterTimeout();\n      setScrollTimeout(handleScrollEnd, 100);\n    };\n\n    const handleMouseMove = () => {\n      delayEnterTimeout(enterDelay);\n    };\n\n    document.body.addEventListener('mouseenter', handleMouseEnter, {\n      passive: true,\n      capture: true,\n    });\n\n    document.body.addEventListener('mousemove', handleMouseMove, {\n      passive: true,\n      capture: false,\n    });\n\n    document.body.addEventListener('mouseleave', handleMouseLeave, {\n      passive: true,\n      capture: true,\n    });\n\n    document.addEventListener('scroll', handleScroll, {\n      passive: true,\n      capture: true,\n    });\n\n    return () => {\n      document.body.removeEventListener('mouseenter', handleMouseEnter);\n      document.body.removeEventListener('mousemove', handleMouseMove);\n      document.body.removeEventListener('mouseleave', handleMouseLeave);\n      document.removeEventListener('scroll', handleScroll);\n    };\n  }, [\n    setEnterTimeout,\n    setLeaveTimeout,\n    setScrollTimeout,\n    cancelEnterTimeout,\n    cancelLeaveTimeout,\n    delayEnterTimeout,\n    setOpen,\n    setAccountId,\n    setAnchor,\n  ]);\n\n  return (\n    <Overlay\n      rootClose\n      onHide={handleClose}\n      show={open}\n      target={anchor}\n      placement='bottom-start'\n      flip\n      offset={offset}\n      popperConfig={popperConfig}\n    >\n      {({ props }) => (\n        <div {...props} className='hover-card-controller'>\n          <HoverCardAccount accountId={accountId} ref={cardRef} />\n        </div>\n      )}\n    </Overlay>\n  );\n};\n","import { defineMessages, useIntl } from 'react-intl';\n\nimport { Link } from 'react-router-dom';\n\nimport CloseIcon from '@/material-icons/400-24px/close.svg?react';\nimport { Avatar } from 'mastodon/components/avatar';\nimport { DisplayName } from 'mastodon/components/display_name';\nimport { IconButton } from 'mastodon/components/icon_button';\nimport { useAppSelector } from 'mastodon/store';\n\nconst messages = defineMessages({\n  close: { id: 'lightbox.close', defaultMessage: 'Close' },\n});\n\ninterface Props {\n  accountId: string;\n  statusId: string;\n  onClose: () => void;\n}\n\nexport const Header: React.FC<Props> = ({ accountId, statusId, onClose }) => {\n  const account = useAppSelector((state) => state.accounts.get(accountId));\n\n  const intl = useIntl();\n\n  if (!account) return null;\n\n  return (\n    <div className='picture-in-picture__header'>\n      <Link\n        to={`/@${account.get('acct')}/${statusId}`}\n        className='picture-in-picture__header__account'\n      >\n        <Avatar account={account} size={36} />\n        <DisplayName account={account} />\n      </Link>\n\n      <IconButton\n        icon='times'\n        iconComponent={CloseIcon}\n        onClick={onClose}\n        title={intl.formatMessage(messages.close)}\n      />\n    </div>\n  );\n};\n","import { useCallback } from 'react';\n\nimport { removePictureInPicture } from 'mastodon/actions/picture_in_picture';\nimport Audio from 'mastodon/features/audio';\nimport Video from 'mastodon/features/video';\nimport { useAppDispatch, useAppSelector } from 'mastodon/store/typed_functions';\n\nimport Footer from './components/footer';\nimport { Header } from './components/header';\n\nexport const PictureInPicture: React.FC = () => {\n  const dispatch = useAppDispatch();\n\n  const handleClose = useCallback(() => {\n    dispatch(removePictureInPicture());\n  }, [dispatch]);\n\n  const pipState = useAppSelector((s) => s.picture_in_picture);\n\n  if (pipState.type === null) {\n    return null;\n  }\n\n  const {\n    type,\n    src,\n    currentTime,\n    accountId,\n    statusId,\n    volume,\n    muted,\n    poster,\n    backgroundColor,\n    foregroundColor,\n    accentColor,\n  } = pipState;\n\n  let player;\n\n  switch (type) {\n    case 'video':\n      player = (\n        <Video\n          src={src}\n          currentTime={currentTime}\n          volume={volume}\n          muted={muted}\n          autoPlay\n          inline\n          alwaysVisible\n        />\n      );\n      break;\n    case 'audio':\n      player = (\n        <Audio\n          src={src}\n          currentTime={currentTime}\n          volume={volume}\n          muted={muted}\n          poster={poster}\n          backgroundColor={backgroundColor}\n          foregroundColor={foregroundColor}\n          accentColor={accentColor}\n          autoPlay\n        />\n      );\n  }\n\n  return (\n    <div className='picture-in-picture'>\n      <Header accountId={accountId} statusId={statusId} onClose={handleClose} />\n\n      {player}\n\n      <Footer statusId={statusId} />\n    </div>\n  );\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 SearchIcon from '@/material-icons/400-24px/search.svg?react';\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 { identityContextPropShape, withIdentity } from 'mastodon/identity_context';\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  static propTypes = {\n    identity: identityContextPropShape,\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.props.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' icon={SearchIcon} /></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(withIdentity(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 Column from 'mastodon/components/column';\nimport { ColumnHeader } from 'mastodon/components/column_header';\nimport type { Props as ColumnHeaderProps } from 'mastodon/components/column_header';\n\nexport const ColumnLoading: React.FC<ColumnHeaderProps> = (otherProps) => (\n  <Column>\n    <ColumnHeader {...otherProps} />\n    <div className='scrollable' />\n  </Column>\n);\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 { 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.is_one_of_many' defaultMessage='{domain} is one of the many independent Mastodon servers you can use to participate in the fediverse.' values={{ domain: <strong>{domain}</strong>, mastodon: <a href='https://joinmastodon.org' target='_blank'>Mastodon</a> }} />\n        </div>\n\n        <Link to='/about'>\n          <ServerHeroImage blurhash={server.getIn(['thumbnail', 'blurhash'])} src={server.getIn(['thumbnail', 'url'])} className='server-banner__hero' />\n        </Link>\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      </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 SearchContainer from 'mastodon/features/compose/containers/search_container';\nimport { identityContextPropShape, withIdentity } from 'mastodon/identity_context';\n\nimport LinkFooter from './link_footer';\n\nclass ComposePanel extends PureComponent {\n  static propTypes = {\n    identity: identityContextPropShape,\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.props.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          <ComposeFormContainer singleColumn />\n        )}\n\n        <LinkFooter />\n      </div>\n    );\n  }\n\n}\n\nexport default connect()(withIdentity(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","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgBookmarks(_ref) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: 24,\n    viewBox: \"0 -960 960 960\",\n    width: 24,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M160-80v-560q0-33 23.5-56.5T240-720h320q33 0 56.5 23.5T640-640v560L400-200 160-80Zm80-121 160-86 160 86v-439H240v439Zm480-39v-560H280v-80h440q33 0 56.5 23.5T800-800v560h-80ZM240-640h320-320Z\"\n  })));\n}\nexport default SvgBookmarks;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgExploreFill(_ref) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: 24,\n    viewBox: \"0 -960 960 960\",\n    width: 24,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"m260-260 300-140 140-300-300 140-140 300Zm220-180q-17 0-28.5-11.5T440-480q0-17 11.5-28.5T480-520q17 0 28.5 11.5T520-480q0 17-11.5 28.5T480-440Zm0 360q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Z\"\n  })));\n}\nexport default SvgExploreFill;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgHome(_ref) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: 24,\n    viewBox: \"0 -960 960 960\",\n    width: 24,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M240-200h120v-240h240v240h120v-360L480-740 240-560v360Zm-80 80v-480l320-240 320 240v480H520v-240h-80v240H160Zm320-350Z\"\n  })));\n}\nexport default SvgHome;","var _path;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgListAltFill(_ref) {\n  let {\n    title,\n    titleId,\n    ...props\n  } = _ref;\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    xmlns: \"http://www.w3.org/2000/svg\",\n    height: 24,\n    viewBox: \"0 -960 960 960\",\n    width: 24,\n    \"aria-labelledby\": titleId\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n    id: titleId\n  }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n    d: \"M320-280q17 0 28.5-11.5T360-320q0-17-11.5-28.5T320-360q-17 0-28.5 11.5T280-320q0 17 11.5 28.5T320-280Zm0-160q17 0 28.5-11.5T360-480q0-17-11.5-28.5T320-520q-17 0-28.5 11.5T280-480q0 17 11.5 28.5T320-440Zm0-160q17 0 28.5-11.5T360-640q0-17-11.5-28.5T320-680q-17 0-28.5 11.5T280-640q0 17 11.5 28.5T320-600Zm120 320h240v-80H440v80Zm0-160h240v-80H440v80Zm0-160h240v-80H440v80ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Z\"\n  })));\n}\nexport default SvgListAltFill;","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 propTypes = {\n    account: ImmutablePropTypes.record,\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            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      <FeaturedTags accountId={accountId} tagged={tagged} />\n    );\n  }\n\n}\n\nexport default connect(mapStateToProps)(AccountNavigation);\n","import { Switch, Route } 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: React.FC = () => (showTrends ? <Trends /> : null);\n\nexport const NavigationPortal: React.FC = () => (\n  <div className='navigation-panel__portal'>\n    <Switch>\n      <Route path='/@:acct' exact component={AccountNavigation} />\n      <Route\n        path='/@:acct/tagged/:tagged?'\n        exact\n        component={AccountNavigation}\n      />\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  </div>\n);\n","import PropTypes from 'prop-types';\nimport { PureComponent } from 'react';\n\nimport { FormattedMessage, 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';\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) => ({\n  onLogout () {\n    dispatch(openModal({ modalType: 'CONFIRM_LOG_OUT' }));\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 { useEffect } from 'react';\n\nimport { createSelector } from '@reduxjs/toolkit';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport ListAltActiveIcon from '@/material-icons/400-24px/list_alt-fill.svg?react';\nimport ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';\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\nexport const ListPanel = () => {\n  const dispatch = useDispatch();\n  const lists = useSelector(state => getOrderedLists(state));\n\n  useEffect(() => {\n    dispatch(fetchLists());\n  }, [dispatch]);\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')} iconComponent={ListAltIcon} activeIconComponent={ListAltActiveIcon} text={list.get('title')} to={`/lists/${list.get('id')}`} transparent />\n      ))}\n    </div>\n  );\n};\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><strong><FormattedMessage id='sign_in_banner.mastodon_is' defaultMessage=\"Mastodon is the best way to keep up with what's happening.\" /></strong></p>\n        <p><FormattedMessage id='sign_in_banner.follow_anyone' defaultMessage='Follow anyone across the fediverse and see it all in chronological order. No algorithms, ads, or clickbait in sight.' /></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><strong><FormattedMessage id='sign_in_banner.mastodon_is' defaultMessage=\"Mastodon is the best way to keep up with what's happening.\" /></strong></p>\n      <p><FormattedMessage id='sign_in_banner.follow_anyone' defaultMessage='Follow anyone across the fediverse and see it all in chronological order. No algorithms, ads, or clickbait in sight.' /></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, useEffect } from 'react';\n\nimport { defineMessages, injectIntl, useIntl } from 'react-intl';\n\nimport { Link } from 'react-router-dom';\n\nimport { useSelector, useDispatch } from 'react-redux';\n\nimport AlternateEmailIcon from '@/material-icons/400-24px/alternate_email.svg?react';\nimport BookmarksActiveIcon from '@/material-icons/400-24px/bookmarks-fill.svg?react';\nimport BookmarksIcon from '@/material-icons/400-24px/bookmarks.svg?react';\nimport ExploreActiveIcon from '@/material-icons/400-24px/explore-fill.svg?react';\nimport ExploreIcon from '@/material-icons/400-24px/explore.svg?react';\nimport ModerationIcon from '@/material-icons/400-24px/gavel.svg?react';\nimport HomeActiveIcon from '@/material-icons/400-24px/home-fill.svg?react';\nimport HomeIcon from '@/material-icons/400-24px/home.svg?react';\nimport ListAltActiveIcon from '@/material-icons/400-24px/list_alt-fill.svg?react';\nimport ListAltIcon from '@/material-icons/400-24px/list_alt.svg?react';\nimport AdministrationIcon from '@/material-icons/400-24px/manufacturing.svg?react';\nimport MoreHorizIcon from '@/material-icons/400-24px/more_horiz.svg?react';\nimport NotificationsActiveIcon from '@/material-icons/400-24px/notifications-fill.svg?react';\nimport NotificationsIcon from '@/material-icons/400-24px/notifications.svg?react';\nimport PersonAddActiveIcon from '@/material-icons/400-24px/person_add-fill.svg?react';\nimport PersonAddIcon from '@/material-icons/400-24px/person_add.svg?react';\nimport PublicIcon from '@/material-icons/400-24px/public.svg?react';\nimport SearchIcon from '@/material-icons/400-24px/search.svg?react';\nimport SettingsIcon from '@/material-icons/400-24px/settings.svg?react';\nimport StarActiveIcon from '@/material-icons/400-24px/star-fill.svg?react';\nimport StarIcon from '@/material-icons/400-24px/star.svg?react';\nimport { fetchFollowRequests } from 'mastodon/actions/accounts';\nimport { IconWithBadge } from 'mastodon/components/icon_with_badge';\nimport { WordmarkLogo } from 'mastodon/components/logo';\nimport { NavigationPortal } from 'mastodon/components/navigation_portal';\nimport { identityContextPropShape, withIdentity } from 'mastodon/identity_context';\nimport { timelinePreview, trendsEnabled } from 'mastodon/initial_state';\nimport { transientSingleColumn } from 'mastodon/is_mobile';\nimport { canManageReports, canViewAdminDashboard } from 'mastodon/permissions';\nimport { selectUnreadNotificationGroupsCount } from 'mastodon/selectors/notifications';\n\nimport ColumnLink from './column_link';\nimport DisabledAccountBanner from './disabled_account_banner';\nimport { ListPanel } from './list_panel';\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  administration: { id: 'navigation_bar.administration', defaultMessage: 'Administration' },\n  moderation: { id: 'navigation_bar.moderation', defaultMessage: 'Moderation' },\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  followRequests: { id: 'navigation_bar.follow_requests', defaultMessage: 'Follow requests' },\n});\n\nconst NotificationsLink = () => {\n\n  const count = useSelector(selectUnreadNotificationGroupsCount);\n  const intl = useIntl();\n\n  return (\n    <ColumnLink\n      key='notifications'\n      transparent\n      to='/notifications'\n      icon={<IconWithBadge id='bell' icon={NotificationsIcon} count={count} className='column-link__icon' />}\n      activeIcon={<IconWithBadge id='bell' icon={NotificationsActiveIcon} count={count} className='column-link__icon' />}\n      text={intl.formatMessage(messages.notifications)}\n    />\n  );\n};\n\nconst FollowRequestsLink = () => {\n  const count = useSelector(state => state.getIn(['user_lists', 'follow_requests', 'items'])?.size ?? 0);\n  const intl = useIntl();\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    dispatch(fetchFollowRequests());\n  }, [dispatch]);\n\n  if (count === 0) {\n    return null;\n  }\n\n  return (\n    <ColumnLink\n      transparent\n      to='/follow_requests'\n      icon={<IconWithBadge id='user-plus' icon={PersonAddIcon} count={count} className='column-link__icon' />}\n      activeIcon={<IconWithBadge id='user-plus' icon={PersonAddActiveIcon} count={count} className='column-link__icon' />}\n      text={intl.formatMessage(messages.followRequests)}\n    />\n  );\n};\n\nclass NavigationPanel extends Component {\n  static propTypes = {\n    identity: identityContextPropShape,\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, permissions } = this.props.identity;\n\n    let banner = undefined;\n\n    if (transientSingleColumn) {\n      banner = (\n        <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    }\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        </div>\n\n        {banner &&\n          <div className='navigation-panel__banner'>\n            {banner}\n          </div>\n        }\n\n        <div className='navigation-panel__menu'>\n          {signedIn && (\n            <>\n              <ColumnLink transparent to='/home' icon='home' iconComponent={HomeIcon} activeIconComponent={HomeActiveIcon} text={intl.formatMessage(messages.home)} />\n              <NotificationsLink />\n              <FollowRequestsLink />\n            </>\n          )}\n\n          {trendsEnabled ? (\n            <ColumnLink transparent to='/explore' icon='explore' iconComponent={ExploreIcon} activeIconComponent={ExploreActiveIcon} text={intl.formatMessage(messages.explore)} />\n          ) : (\n            <ColumnLink transparent to='/search' icon='search' iconComponent={SearchIcon} text={intl.formatMessage(messages.search)} />\n          )}\n\n          {(signedIn || timelinePreview) && (\n            <ColumnLink transparent to='/public/local' isActive={this.isFirehoseActive} icon='globe' iconComponent={PublicIcon} 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' iconComponent={AlternateEmailIcon} text={intl.formatMessage(messages.direct)} />\n              <ColumnLink transparent to='/bookmarks' icon='bookmarks' iconComponent={BookmarksIcon} activeIconComponent={BookmarksActiveIcon} text={intl.formatMessage(messages.bookmarks)} />\n              <ColumnLink transparent to='/favourites' icon='star' iconComponent={StarIcon} activeIconComponent={StarActiveIcon} text={intl.formatMessage(messages.favourites)} />\n              <ColumnLink transparent to='/lists' icon='list-ul' iconComponent={ListAltIcon} activeIconComponent={ListAltActiveIcon} text={intl.formatMessage(messages.lists)} />\n\n              <ListPanel />\n\n              <hr />\n\n              <ColumnLink transparent href='/settings/preferences' icon='cog' iconComponent={SettingsIcon} text={intl.formatMessage(messages.preferences)} />\n\n              {canManageReports(permissions) && <ColumnLink optional transparent href='/admin/reports' icon='flag' iconComponent={ModerationIcon} text={intl.formatMessage(messages.moderation)} />}\n              {canViewAdminDashboard(permissions) && <ColumnLink optional transparent href='/admin/dashboard' icon='tachometer' iconComponent={AdministrationIcon} text={intl.formatMessage(messages.administration)} />}\n            </>\n          )}\n\n          <div className='navigation-panel__legal'>\n            <hr />\n            <ColumnLink transparent to='/about' icon='ellipsis-h' iconComponent={MoreHorizIcon} text={intl.formatMessage(messages.about)} />\n          </div>\n        </div>\n\n        <div className='flex-spacer' />\n\n        <NavigationPortal />\n      </div>\n    );\n  }\n\n}\n\nexport default injectIntl(withIdentity(NavigationPanel));\n","import PropTypes from 'prop-types';\nimport { Children, cloneElement, useCallback } from 'react';\n\nimport ImmutablePropTypes from 'react-immutable-proptypes';\nimport ImmutablePureComponent from 'react-immutable-pure-component';\n\nimport { scrollRight } from '../../../scroll';\nimport BundleContainer from '../containers/bundle_container';\nimport {\n  Compose,\n  NotificationsWrapper,\n  HomeTimeline,\n  CommunityTimeline,\n  PublicTimeline,\n  HashtagTimeline,\n  DirectTimeline,\n  FavouritedStatuses,\n  BookmarkedStatuses,\n  ListTimeline,\n  Directory,\n} from '../util/async-components';\nimport { useColumnsContext } from '../util/columns_context';\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': NotificationsWrapper,\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\nconst TabsBarPortal = () => {\n  const {setTabsBarElement} = useColumnsContext();\n\n  const setRef = useCallback((element) => {\n    if(element)\n      setTabsBarElement(element);\n  }, [setTabsBarElement]);\n\n  return <div id='tabs-bar__portal' ref={setRef} />;\n};\n\nexport default class ColumnsArea extends ImmutablePureComponent {\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 - 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.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  componentWillUnmount () {\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      scrollRight(this.node, (this.node.scrollWidth - window.innerWidth) * modifier);\n    }\n  }\n\n  handleLayoutChange = (e) => {\n    this.setState({ renderComposePanel: !e.matches });\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'><TabsBarPortal /></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, cloneElement, Children } from 'react';\n\nimport { Switch, Route, useLocation } 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 const WrappedSwitch = ({ multiColumn, children }) => {\n  const  location = useLocation();\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\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 { initializeNotifications } from 'mastodon/actions/notifications_migration';\nimport { INTRODUCTION_VERSION } from 'mastodon/actions/onboarding';\nimport { HoverCardController } from 'mastodon/components/hover_card_controller';\nimport { PictureInPicture } from 'mastodon/features/picture_in_picture';\nimport { identityContextPropShape, withIdentity } from 'mastodon/identity_context';\nimport { layoutFromWindow } from 'mastodon/is_mobile';\nimport { WithRouterPropTypes } from 'mastodon/utils/react_router';\n\nimport { uploadCompose, resetCompose, changeComposeSpoilerness } from '../../actions/compose';\nimport { clearHeight } from '../../actions/height_cache';\nimport { fetchServer, fetchServerTranslationLanguages } from '../../actions/server';\nimport { expandHomeTimeline } from '../../actions/timelines';\nimport initialState, { me, owner, singleUserMode, trendsEnabled, trendsAsLanding, disableHoverCards } 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  NotificationsWrapper,\n  NotificationRequests,\n  NotificationRequest,\n  FollowRequests,\n  FavouritedStatuses,\n  BookmarkedStatuses,\n  FollowedTags,\n  LinkTimeline,\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 { ColumnsContextProvider } from './util/columns_context';\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 Mastodon.' },\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 < state.getIn(['server', 'server', 'configuration', 'statuses', 'max_media_attachments']),\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  static propTypes = {\n    identity: identityContextPropShape,\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.props.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    } else {\n      redirect = <Redirect from='/' to='/about' exact />;\n    }\n\n    return (\n      <ColumnsContextProvider multiColumn={!singleColumn}>\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={{...this.props.location, pathname: pathName.slice(5)}} /> : null}\n            {/* Redirect old bookmarks (without /deck) with home-like routes to the advanced interface */}\n            {!singleColumn && pathName === '/getting-started' ? <Redirect from='/getting-started' to='/deck/getting-started' exact /> : null}\n            {!singleColumn && pathName === '/home' ? <Redirect from='/home' 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='/links/:url' component={LinkTimeline} content={children} />\n            <WrappedRoute path='/lists/:id' component={ListTimeline} content={children} />\n            <WrappedRoute path='/notifications' component={NotificationsWrapper} content={children} exact />\n            <WrappedRoute path='/notifications/requests' component={NotificationRequests} content={children} exact />\n            <WrappedRoute path='/notifications/requests/:id' component={NotificationRequest} content={children} exact />\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' 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      </ColumnsContextProvider>\n    );\n  }\n\n}\n\nclass UI extends PureComponent {\n  static propTypes = {\n    identity: identityContextPropShape,\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    intl: PropTypes.object.isRequired,\n    layout: PropTypes.string.isRequired,\n    firstLaunch: PropTypes.bool,\n    username: PropTypes.string,\n    ...WithRouterPropTypes,\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.props.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 {\n      // do nothing\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.props.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.props.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.props.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(initializeNotifications());\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('.autosuggest-textarea__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 { history } = this.props;\n\n    if (history.location?.state?.fromMastodon) {\n      history.goBack();\n    } else {\n      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.props.history.goBack();\n    } else {\n      this.props.history.push('/keyboard-shortcuts');\n    }\n  };\n\n  handleHotkeyGoToHome = () => {\n    this.props.history.push('/home');\n  };\n\n  handleHotkeyGoToNotifications = () => {\n    this.props.history.push('/notifications');\n  };\n\n  handleHotkeyGoToLocal = () => {\n    this.props.history.push('/public/local');\n  };\n\n  handleHotkeyGoToFederated = () => {\n    this.props.history.push('/public');\n  };\n\n  handleHotkeyGoToDirect = () => {\n    this.props.history.push('/conversations');\n  };\n\n  handleHotkeyGoToStart = () => {\n    this.props.history.push('/getting-started');\n  };\n\n  handleHotkeyGoToFavourites = () => {\n    this.props.history.push('/favourites');\n  };\n\n  handleHotkeyGoToPinned = () => {\n    this.props.history.push('/pinned');\n  };\n\n  handleHotkeyGoToProfile = () => {\n    this.props.history.push(`/@${this.props.username}`);\n  };\n\n  handleHotkeyGoToBlocked = () => {\n    this.props.history.push('/blocks');\n  };\n\n  handleHotkeyGoToMuted = () => {\n    this.props.history.push('/mutes');\n  };\n\n  handleHotkeyGoToRequests = () => {\n    this.props.history.push('/follow_requests');\n  };\n\n  render () {\n    const { draggingOver } = this.state;\n    const { children, isComposing, location, 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}>\n          <Header />\n\n          <SwitchingColumnsArea identity={this.props.identity} location={location} singleColumn={layout === 'mobile' || layout === 'single-column'}>\n            {children}\n          </SwitchingColumnsArea>\n\n          {layout !== 'mobile' && <PictureInPicture />}\n          <NotificationsContainer />\n          {!disableHoverCards && <HoverCardController />}\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(withIdentity(UI))));\n","import { 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 { IdentityContext, createIdentityContext } from 'mastodon/identity_context';\nimport initialState, { title as siteTitle } from 'mastodon/initial_state';\nimport { IntlProvider } from 'mastodon/locales';\nimport { store } from 'mastodon/store';\nimport { isProduction } from 'mastodon/utils/environment';\n\nconst title = isProduction() ? siteTitle : `${siteTitle} (Dev)`;\n\nconst hydrateAction = hydrateStore(initialState);\n\nstore.dispatch(hydrateAction);\nif (initialState.meta.me) {\n  store.dispatch(fetchCustomEmojis());\n}\n\nexport default class Mastodon extends PureComponent {\n  identity = createIdentityContext(initialState);\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      <IdentityContext.Provider value={this.identity}>\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={`%s - ${title}`} />\n            </ErrorBoundary>\n          </ReduxProvider>\n        </IntlProvider>\n      </IdentityContext.Provider>\n    );\n  }\n\n}\n","/* global performance */\nvar perf = typeof performance !== 'undefined' && performance;\n\nvar now = perf && perf.now\n  ? function () { return perf.now(); }\n  : function () { 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}\n\nvar mark;\nvar stop;\nvar getEntries;\nvar clear;\n\nif (\n  perf &&\n  perf.mark &&\n  perf.measure &&\n  perf.getEntriesByName &&\n  perf.getEntriesByType &&\n  perf.clearMarks &&\n  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\n  (true )\n) {\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 () { return perf.getEntriesByType('measure'); };\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 () { return entries; };\n  clear = function () {\n    marks = {};\n    entries = [];\n  };\n}\n\nexport { clear, getEntries, mark, stop };\n","//\n// Tools for performance debugging, only enabled in development mode.\n// Open up Chrome Dev Tools, then Timeline, then User Timing to see output.\n// Also see config/webpack/loaders/mark.js for the webpack loader marks.\n\nimport * as marky from 'marky';\n\nimport { isDevelopment } from './utils/environment';\n\nif (isDevelopment()) {\n  if (typeof performance !== 'undefined' && performance.setResourceTimingBufferSize) {\n    // Increase Firefox's performance entry limit; otherwise it's capped to 150.\n    // See: https://bugzilla.mozilla.org/show_bug.cgi?id=1331135\n    performance.setResourceTimingBufferSize(Infinity);\n  }\n\n  // allows us to easily do e.g. ReactPerf.printWasted() while debugging\n  //window.ReactPerf = require('react-addons-perf');\n  //window.ReactPerf.start();\n}\n\nexport function start(name) {\n  if (isDevelopment()) {\n    marky.mark(name);\n  }\n}\n\nexport function stop(name) {\n  if (isDevelopment()) {\n    marky.stop(name);\n  }\n}\n","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\nimport { isProduction } from './utils/environment';\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 (isProduction() && 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: unknown) => {\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;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.]*)(?::(\\d+))?(\\S*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\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;\n\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\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\n  if (path === '') {\n    path = isAbsolute ? '/' : '.';\n  }\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\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\n  var joined = aPath.charAt(0) === '/'\n    ? aPath\n    : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n  if (aRootUrl) {\n    aRootUrl.path = joined;\n    return urlGenerate(aRootUrl);\n  }\n  return joined;\n}\nexports.join = join;\n\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\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\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;\n\nvar supportsNullProto = (function () {\n  var obj = Object.create(null);\n  return !('__proto__' in obj);\n}());\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\n  return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n  if (isProtoString(aStr)) {\n    return aStr.slice(1);\n  }\n\n  return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n  if (!s) {\n    return false;\n  }\n\n  var length = s.length;\n\n  if (length < 9 /* \"__proto__\".length */) {\n    return false;\n  }\n\n  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 2) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n      s.charCodeAt(length - 8) !== 95  /* '_' */ ||\n      s.charCodeAt(length - 9) !== 95  /* '_' */) {\n    return false;\n  }\n\n  for (var i = length - 10; i >= 0; i--) {\n    if (s.charCodeAt(i) !== 36 /* '$' */) {\n      return false;\n    }\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\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0 || onlyCompareOriginal) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.generatedLine - mappingB.generatedLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\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\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0 || onlyCompareGenerated) {\n    return cmp;\n  }\n\n  cmp = mappingA.source - mappingB.source;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return mappingA.name - mappingB.name;\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n  if (aStr1 === aStr2) {\n    return 0;\n  }\n\n  if (aStr1 > aStr2) {\n    return 1;\n  }\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\n  cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = strcmp(mappingA.source, mappingB.source);\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalLine - mappingB.originalLine;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  cmp = mappingA.originalColumn - mappingB.originalColumn;\n  if (cmp !== 0) {\n    return cmp;\n  }\n\n  return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n","(function(root, factory) {\n    'use strict';\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 &&\n                (stackframe.functionName || '').indexOf('ErrorStackParser$$') === -1 &&\n                (stackframe.functionName || '').indexOf('StackTraceGPS$$') === -1 &&\n                (stackframe.functionName || '').indexOf('StackGenerator$$') === -1;\n        },\n        sourceCache: {}\n    };\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\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\n        return target;\n    }\n\n    function _isShapedLikeParsableError(err) {\n        return err.stack || err['opera#sourceloc'];\n    }\n\n    function _filtered(stackframes, filter) {\n        if (typeof filter === 'function') {\n            return stackframes.filter(filter);\n        }\n        return stackframes;\n    }\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        /**\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        /**\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\n                        gps.pinpoint(sf).then(resolve, resolveOriginal)['catch'](resolveOriginal);\n                    });\n                })));\n            }.bind(this));\n        },\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        /**\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\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\n            return instrumented;\n        },\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        /**\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\n                var reportPayload = {stack: stackframes};\n                if (errorMsg !== undefined && errorMsg !== null) {\n                    reportPayload.message = errorMsg;\n                }\n\n                req.send(JSON.stringify(reportPayload));\n            });\n        }\n    };\n}));\n","(function(root, factory) {\n    'use strict';\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    function _isNumber(n) {\n        return !isNaN(parseFloat(n)) && isFinite(n);\n    }\n\n    function _capitalize(str) {\n        return str.charAt(0).toUpperCase() + str.substring(1);\n    }\n\n    function _getter(p) {\n        return function() {\n            return this[p];\n        };\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\n    var props = booleanProps.concat(numericProps, stringProps, arrayProps, objectProps);\n\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\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\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\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\n    StackFrame.fromString = function StackFrame$$fromString(str) {\n        var argsStartIndex = str.indexOf('(');\n        var argsEndIndex = str.lastIndexOf(')');\n\n        var functionName = str.substring(0, argsStartIndex);\n        var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n        var locationString = str.substring(argsEndIndex + 1);\n\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\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\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\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\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\n    return StackFrame;\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\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}\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 =\n  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\n      if (mapping.source != null) {\n        newMapping.source = mapping.source;\n        if (sourceRoot != null) {\n          newMapping.source = util.relative(sourceRoot, newMapping.source);\n        }\n\n        newMapping.original = {\n          line: mapping.originalLine,\n          column: mapping.originalColumn\n        };\n\n        if (mapping.name != null) {\n          newMapping.name = mapping.name;\n        }\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 =\n  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\n    if (!this._skipValidation) {\n      this._validateMapping(generated, original, source, name);\n    }\n\n    if (source != null) {\n      source = String(source);\n      if (!this._sources.has(source)) {\n        this._sources.add(source);\n      }\n    }\n\n    if (name != null) {\n      name = String(name);\n      if (!this._names.has(name)) {\n        this._names.add(name);\n      }\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 =\n  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n    var source = aSourceFile;\n    if (this._sourceRoot != null) {\n      source = util.relative(this._sourceRoot, source);\n    }\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 =\n  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(\n          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n          'or the source map\\'s \"file\" property. Both were omitted.'\n        );\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\n      var source = mapping.source;\n      if (source != null && !newSources.has(source)) {\n        newSources.add(source);\n      }\n\n      var name = mapping.name;\n      if (name != null && !newNames.has(name)) {\n        newNames.add(name);\n      }\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 =\n  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n                                              aName) {\n    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n        && aGenerated.line > 0 && aGenerated.column >= 0\n        && !aOriginal && !aSource && !aName) {\n      // Case 1.\n      return;\n    }\n    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n             && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n             && aGenerated.line > 0 && aGenerated.column >= 0\n             && aOriginal.line > 0 && aOriginal.column >= 0\n             && aSource) {\n      // Cases 2 and 3.\n      return;\n    }\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 =\n  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\n    var mappings = this._mappings.toArray();\n    for (var i = 0, len = mappings.length; i < len; i++) {\n      mapping = mappings[i];\n      next = ''\n\n      if (mapping.generatedLine !== previousGeneratedLine) {\n        previousGeneratedColumn = 0;\n        while (mapping.generatedLine !== previousGeneratedLine) {\n          next += ';';\n          previousGeneratedLine++;\n        }\n      }\n      else {\n        if (i > 0) {\n          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n            continue;\n          }\n          next += ',';\n        }\n      }\n\n      next += base64VLQ.encode(mapping.generatedColumn\n                                 - previousGeneratedColumn);\n      previousGeneratedColumn = mapping.generatedColumn;\n\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\n                                   - previousOriginalLine);\n        previousOriginalLine = mapping.originalLine - 1;\n\n        next += base64VLQ.encode(mapping.originalColumn\n                                   - previousOriginalColumn);\n        previousOriginalColumn = mapping.originalColumn;\n\n        if (mapping.name != null) {\n          nameIdx = this._names.indexOf(mapping.name);\n          next += base64VLQ.encode(nameIdx - previousName);\n          previousName = nameIdx;\n        }\n      }\n\n      result += next;\n    }\n\n    return result;\n  };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n  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)\n        ? this._sourcesContents[key]\n        : null;\n    }, this);\n  };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n  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\n    return map;\n  };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n  function SourceMapGenerator_toString() {\n    return JSON.stringify(this.toJSON());\n  };\n\nexports.SourceMapGenerator = SourceMapGenerator;\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 * 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\n    ? ((-aValue) << 1) + 1\n    : (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\n    ? -shifted\n    : 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\n  var vlq = toVLQSigned(aValue);\n\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\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\n  do {\n    if (aIndex >= strLen) {\n      throw new Error(\"Expected more digits in base 64 VLQ value.\");\n    }\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\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\n  aOutParam.value = fromVLQSigned(result);\n  aOutParam.rest = aIndex;\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\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};\n\nexports.ArraySet = ArraySet;\n"],"sourceRoot":""}