From 53de0411949bb6faa0d058d5efc26adffcc5ecf4 Mon Sep 17 00:00:00 2001 From: flarum-bot Date: Sat, 19 Oct 2024 11:05:48 +0000 Subject: [PATCH] Bundled output for commit 5d26a72e98a5e9d71b1da4108180f7801befa802 Includes transpiled JS/TS, and Typescript declaration files (typings). [skip ci] --- .../core/js/dist-typings/forum/utils/DiscussionControls.d.ts | 4 ++-- framework/core/js/dist/forum.js.map | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/core/js/dist-typings/forum/utils/DiscussionControls.d.ts b/framework/core/js/dist-typings/forum/utils/DiscussionControls.d.ts index fef390985..262c36fd0 100644 --- a/framework/core/js/dist-typings/forum/utils/DiscussionControls.d.ts +++ b/framework/core/js/dist-typings/forum/utils/DiscussionControls.d.ts @@ -49,9 +49,9 @@ declare namespace DiscussionControls { * @param {boolean} goToLast Whether or not to scroll down to the last post if the discussion is being viewed. * @param {boolean} forceRefresh Whether or not to force a reload of the composer component, even if it is already open for this discussion. * - * @return {Promise} + * @return {Promise} */ - function replyAction(goToLast: boolean, forceRefresh: boolean): Promise; + function replyAction(goToLast: boolean, forceRefresh: boolean): Promise; /** * Hide a discussion. * diff --git a/framework/core/js/dist/forum.js.map b/framework/core/js/dist/forum.js.map index dbe6be153..fae462d51 100644 --- a/framework/core/js/dist/forum.js.map +++ b/framework/core/js/dist/forum.js.map @@ -1 +1 @@ -{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/core/webpack/runtime/load script","webpack://@flarum/core/./src/common/Application.tsx","webpack://@flarum/core/./src/common/Component.ts","webpack://@flarum/core/./src/common/Model.ts","webpack://@flarum/core/./src/common/query/discussions/AuthorGambit.ts","webpack://@flarum/core/./src/common/query/discussions/CreatedGambit.ts","webpack://@flarum/core/./src/common/query/discussions/HiddenGambit.ts","webpack://@flarum/core/./src/common/query/discussions/UnreadGambit.ts","webpack://@flarum/core/./src/common/query/users/EmailGambit.ts","webpack://@flarum/core/./src/common/query/users/GroupGambit.ts","webpack://@flarum/core/./src/common/query/discussions/DiscussionGambit.ts","webpack://@flarum/core/./src/common/GambitManager.ts","webpack://@flarum/core/./src/common/SearchManager.ts","webpack://@flarum/core/./src/common/Session.ts","webpack://@flarum/core/./src/common/Store.ts","webpack://@flarum/core/./src/common/Translator.tsx","webpack://@flarum/core/./src/common/app.ts","webpack://@flarum/core/./src/common/components/Alert.tsx","webpack://@flarum/core/./src/common/components/AlertManager.tsx","webpack://@flarum/core/./src/common/components/Avatar.tsx","webpack://@flarum/core/./src/common/components/Badge.tsx","webpack://@flarum/core/./src/common/helpers/fireDebugWarning.ts","webpack://@flarum/core/./src/common/components/Button.tsx","webpack://@flarum/core/./src/common/components/Checkbox.tsx","webpack://@flarum/core/./src/common/components/Dropdown.tsx","webpack://@flarum/core/./src/common/components/FieldSet.tsx","webpack://@flarum/core/./src/common/components/Form.tsx","webpack://@flarum/core/./src/common/components/FormModal.tsx","webpack://@flarum/core/./src/common/components/GroupBadge.tsx","webpack://@flarum/core/./src/common/components/Icon.tsx","webpack://@flarum/core/./src/common/components/InfoTile.tsx","webpack://@flarum/core/./src/common/components/Input.tsx","webpack://@flarum/core/./src/common/components/LoadingIndicator.tsx","webpack://@flarum/core/./src/common/components/Modal.tsx","webpack://@flarum/core/./src/common/components/ModalManager.tsx","webpack://@flarum/core/./src/common/components/Navigation.tsx","webpack://@flarum/core/./src/common/components/Page.tsx","webpack://@flarum/core/./src/common/components/RequestErrorModal.tsx","webpack://@flarum/core/./src/common/components/SelectDropdown.tsx","webpack://@flarum/core/./src/common/components/SplitDropdown.tsx","webpack://@flarum/core/./src/common/components/Switch.tsx","webpack://@flarum/core/./src/common/components/ThemeMode.tsx","webpack://@flarum/core/./src/common/components/Tooltip.tsx","webpack://@flarum/core/./src/common/components/UserSearchResult.tsx","webpack://@flarum/core/./src/common/extend.ts","webpack://@flarum/core/./src/common/helpers/fireApplicationError.ts","webpack://@flarum/core/./src/common/helpers/fullTime.tsx","webpack://@flarum/core/./src/common/helpers/highlight.tsx","webpack://@flarum/core/./src/common/helpers/humanTime.tsx","webpack://@flarum/core/./src/common/helpers/listItems.tsx","webpack://@flarum/core/./src/common/helpers/textContrastClass.ts","webpack://@flarum/core/./src/common/helpers/userOnline.tsx","webpack://@flarum/core/./src/common/helpers/username.tsx","webpack://@flarum/core/./src/common/models/AccessToken.ts","webpack://@flarum/core/./src/common/models/Discussion.tsx","webpack://@flarum/core/./src/common/models/Forum.ts","webpack://@flarum/core/./src/common/models/Group.ts","webpack://@flarum/core/./src/common/models/Notification.ts","webpack://@flarum/core/./src/common/models/Post.ts","webpack://@flarum/core/./src/common/models/User.tsx","webpack://@flarum/core/./src/common/query/IGambit.ts","webpack://@flarum/core/./src/common/resolvers/DefaultResolver.tsx","webpack://@flarum/core/./src/common/states/AlertManagerState.ts","webpack://@flarum/core/./src/common/states/ModalManagerState.ts","webpack://@flarum/core/./src/common/states/PageState.ts","webpack://@flarum/core/./src/common/states/PaginatedListState.ts","webpack://@flarum/core/./src/common/states/SearchState.ts","webpack://@flarum/core/./src/common/utils/AutocompleteReader.ts","webpack://@flarum/core/./src/common/utils/BasicEditorDriver.ts","webpack://@flarum/core/./src/common/utils/EventEmitter.ts","webpack://@flarum/core/./src/common/utils/GambitsAutocomplete.tsx","webpack://@flarum/core/./src/common/utils/ItemList.ts","webpack://@flarum/core/./src/common/utils/KeyboardNavigatable.ts","webpack://@flarum/core/./src/common/utils/RequestError.ts","webpack://@flarum/core/./src/common/utils/Stream.ts","webpack://@flarum/core/./src/common/utils/SubtreeRetainer.ts","webpack://@flarum/core/./src/common/utils/abbreviateNumber.ts","webpack://@flarum/core/./src/common/utils/arrayFlatPolyfill.ts","webpack://@flarum/core/../../../node_modules/clsx/dist/clsx.m.js","webpack://@flarum/core/./src/common/utils/classList.ts","webpack://@flarum/core/./src/common/utils/computed.ts","webpack://@flarum/core/./src/common/utils/escapeRegExp.ts","webpack://@flarum/core/./src/common/utils/extract.ts","webpack://@flarum/core/./src/common/utils/extractText.ts","webpack://@flarum/core/./src/common/utils/focusTrap.ts","webpack://@flarum/core/./src/common/utils/formatNumber.ts","webpack://@flarum/core/./src/common/utils/humanTime.ts","webpack://@flarum/core/./src/common/utils/insertText.ts","webpack://@flarum/core/./src/common/utils/isDark.ts","webpack://@flarum/core/./src/common/utils/isObject.ts","webpack://@flarum/core/./src/common/utils/liveHumanTimes.ts","webpack://@flarum/core/./src/common/utils/mapRoutes.ts","webpack://@flarum/core/./src/common/utils/setRouteWithForcedRefresh.ts","webpack://@flarum/core/./src/common/utils/string.ts","webpack://@flarum/core/./src/common/utils/stringToColor.ts","webpack://@flarum/core/./src/common/utils/withAttr.ts","webpack://@flarum/core/./src/forum/utils/isSafariMobile.ts","webpack://@flarum/core/./src/forum/components/Notices.tsx","webpack://@flarum/core/./src/forum/components/Footer.tsx","webpack://@flarum/core/./src/forum/ForumApplication.tsx","webpack://@flarum/core/./src/forum/app.ts","webpack://@flarum/core/./src/forum/components/DiscussionListItem.tsx","webpack://@flarum/core/./src/forum/components/DiscussionPage.tsx","webpack://@flarum/core/./src/forum/components/DiscussionRenamedNotification.tsx","webpack://@flarum/core/./src/forum/components/DiscussionsSearchSource.tsx","webpack://@flarum/core/./src/forum/components/HeaderPrimary.tsx","webpack://@flarum/core/./src/forum/components/IndexPage.tsx","webpack://@flarum/core/./src/forum/components/IndexSidebar.tsx","webpack://@flarum/core/./src/forum/components/LoadingPost.tsx","webpack://@flarum/core/./src/forum/components/MinimalDiscussionListItem.tsx","webpack://@flarum/core/./src/forum/components/HeaderListItem.tsx","webpack://@flarum/core/./src/forum/components/Notification.tsx","webpack://@flarum/core/./src/forum/components/HeaderDropdown.tsx","webpack://@flarum/core/./src/forum/components/NotificationsDropdown.tsx","webpack://@flarum/core/./src/forum/components/PageStructure.tsx","webpack://@flarum/core/./src/forum/components/AbstractPost.tsx","webpack://@flarum/core/./src/forum/components/Post.tsx","webpack://@flarum/core/./src/forum/components/PostListItem.tsx","webpack://@flarum/core/./src/forum/components/PostList.tsx","webpack://@flarum/core/./src/forum/components/PostMeta.tsx","webpack://@flarum/core/./src/forum/components/PostUser.tsx","webpack://@flarum/core/./src/forum/components/PostsPage.tsx","webpack://@flarum/core/./src/forum/components/PostsUserPage.tsx","webpack://@flarum/core/./src/forum/components/RenameDiscussionModal.tsx","webpack://@flarum/core/./src/forum/components/PostsSearchSource.tsx","webpack://@flarum/core/./src/common/components/AbstractSearch.tsx","webpack://@flarum/core/./src/forum/components/Search.tsx","webpack://@flarum/core/./src/forum/components/SessionDropdown.tsx","webpack://@flarum/core/./src/forum/components/UserPage.tsx","webpack://@flarum/core/./src/forum/components/UsersSearchSource.tsx","webpack://@flarum/core/./src/forum/components/WelcomeHero.tsx","webpack://@flarum/core/./src/forum/resolvers/DiscussionPageResolver.ts","webpack://@flarum/core/./src/forum/routes.ts","webpack://@flarum/core/./src/forum/states/ComposerState.tsx","webpack://@flarum/core/./src/forum/states/DiscussionListState.ts","webpack://@flarum/core/./src/forum/states/GlobalSearchState.ts","webpack://@flarum/core/./src/forum/states/NotificationListState.ts","webpack://@flarum/core/./src/forum/states/PostListState.ts","webpack://@flarum/core/./src/forum/states/PostStreamState.ts","webpack://@flarum/core/./src/forum/utils/History.ts","webpack://@flarum/core/../source/utilities.js","webpack://@flarum/core/../source/defaultRichHandler.js","webpack://@flarum/core/../source/RichMessageFormatter.js","webpack://@flarum/core/../source/mithrilRichHandler.js","webpack://@flarum/core/array-utils.js","webpack://@flarum/core/function-utils.js","webpack://@flarum/core/../source/pluralTypeHandler.js","webpack://@flarum/core/../source/MessageFormatter.js","webpack://@flarum/core/../source/selectTypeHandler.js","webpack://@flarum/core/../../../node_modules/body-scroll-lock/lib/bodyScrollLock.esm.js","webpack://@flarum/core/../../../node_modules/bootstrap/js/affix.js","webpack://@flarum/core/../../../node_modules/bootstrap/js/dropdown.js","webpack://@flarum/core/../../../node_modules/bootstrap/js/tooltip.js","webpack://@flarum/core/../../../node_modules/bootstrap/js/transition.js","webpack://@flarum/core/../../../node_modules/color-thief-browser/dist/color-thief.min.js","webpack://@flarum/core/../../../node_modules/dayjs/dayjs.min.js","webpack://@flarum/core/../../../node_modules/dayjs/plugin/localizedFormat.js","webpack://@flarum/core/../../../node_modules/dayjs/plugin/relativeTime.js","webpack://@flarum/core/../../../node_modules/expose-loader/dist/runtime/getGlobalThis.js","webpack://@flarum/core/../index.js","webpack://@flarum/core/../../../node_modules/jquery.hotkeys/jquery.hotkeys.js","webpack://@flarum/core/../../../node_modules/jquery/dist/jquery.js","webpack://@flarum/core/../../../node_modules/mithril/api/mount-redraw.js","webpack://@flarum/core/../../../node_modules/mithril/api/router.js","webpack://@flarum/core/../../../node_modules/mithril/hyperscript.js","webpack://@flarum/core/../../../node_modules/mithril/index.js","webpack://@flarum/core/../../../node_modules/mithril/mount-redraw.js","webpack://@flarum/core/../../../node_modules/mithril/pathname/build.js","webpack://@flarum/core/../../../node_modules/mithril/pathname/compileTemplate.js","webpack://@flarum/core/../../../node_modules/mithril/pathname/parse.js","webpack://@flarum/core/../../../node_modules/mithril/promise/polyfill.js","webpack://@flarum/core/../../../node_modules/mithril/promise/promise.js","webpack://@flarum/core/../../../node_modules/mithril/querystring/build.js","webpack://@flarum/core/../../../node_modules/mithril/querystring/parse.js","webpack://@flarum/core/../../../node_modules/mithril/render.js","webpack://@flarum/core/../../../node_modules/mithril/render/fragment.js","webpack://@flarum/core/../../../node_modules/mithril/render/hyperscript.js","webpack://@flarum/core/../../../node_modules/mithril/render/hyperscriptVnode.js","webpack://@flarum/core/../../../node_modules/mithril/render/render.js","webpack://@flarum/core/../../../node_modules/mithril/render/trust.js","webpack://@flarum/core/../../../node_modules/mithril/render/vnode.js","webpack://@flarum/core/../../../node_modules/mithril/request.js","webpack://@flarum/core/../../../node_modules/mithril/request/request.js","webpack://@flarum/core/../../../node_modules/mithril/route.js","webpack://@flarum/core/../../../node_modules/mithril/stream.js","webpack://@flarum/core/../../../node_modules/mithril/stream/stream.js","webpack://@flarum/core/../../../node_modules/mithril/util/assign.js","webpack://@flarum/core/../../../node_modules/mithril/util/censor.js","webpack://@flarum/core/../../../node_modules/mithril/util/hasOwn.js","webpack://@flarum/core/../../../node_modules/punycode/punycode.es6.js","webpack://@flarum/core/../src/index.js","webpack://@flarum/core/../../../node_modules/textarea-caret/index.js","webpack://@flarum/core/../../../node_modules/jquery/dist/jquery-exposed.js","webpack://@flarum/core/../../../node_modules/color-thief-browser/dist/color-thief.min-exposed.js","webpack://@flarum/core/../../../node_modules/dayjs/dayjs.min-exposed.js","webpack://@flarum/core/../../../node_modules/mithril/index-exposed.js","webpack://@flarum/core/../../../node_modules/punycode/punycode.es6-exposed.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/classCallCheck.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/createClass.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/defineProperty.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/inherits.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/slicedToArray.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/toPrimitive.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/toPropertyKey.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/typeof.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack://@flarum/core/./src/common/components/Link.js","webpack://@flarum/core/./src/common/components/LinkButton.js","webpack://@flarum/core/./src/common/components/Placeholder.js","webpack://@flarum/core/./src/common/components/Separator.js","webpack://@flarum/core/./src/common/components/TextEditor.js","webpack://@flarum/core/./src/common/utils/Drawer.js","webpack://@flarum/core/./src/common/utils/ScrollListener.js","webpack://@flarum/core/./src/common/utils/anchorScroll.js","webpack://@flarum/core/./src/common/utils/subclassOf.js","webpack://@flarum/core/./src/forum/components/AffixedSidebar.js","webpack://@flarum/core/./src/forum/components/AvatarEditor.js","webpack://@flarum/core/./src/forum/components/Comment.tsx","webpack://@flarum/core/./src/forum/components/CommentPost.js","webpack://@flarum/core/./src/forum/components/ComposerPostPreview.js","webpack://@flarum/core/./src/forum/components/DiscussionHero.js","webpack://@flarum/core/./src/forum/components/DiscussionList.js","webpack://@flarum/core/./src/forum/components/DiscussionListPane.js","webpack://@flarum/core/./src/forum/components/DiscussionRenamedPost.js","webpack://@flarum/core/./src/forum/components/EventPost.js","webpack://@flarum/core/./src/forum/components/HeaderSecondary.js","webpack://@flarum/core/./src/forum/components/LogInButtons.js","webpack://@flarum/core/./src/forum/components/HeaderList.tsx","webpack://@flarum/core/./src/forum/components/HeaderListGroup.tsx","webpack://@flarum/core/./src/forum/components/NotificationType.tsx","webpack://@flarum/core/./src/forum/components/NotificationList.js","webpack://@flarum/core/./src/forum/components/PostEdited.js","webpack://@flarum/core/./src/forum/components/TerminalPost.js","webpack://@flarum/core/./src/forum/components/UserCard.js","webpack://@flarum/core/./src/forum/utils/DiscussionControls.js","webpack://@flarum/core/./src/forum/utils/Pane.js","webpack://@flarum/core/./src/forum/utils/PostControls.js","webpack://@flarum/core/./src/forum/utils/UserControls.js","webpack://@flarum/core/./src/forum/utils/slidable.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/core/../throttle.js","webpack://@flarum/core/../debounce.js","webpack://@flarum/core/webpack/bootstrap","webpack://@flarum/core/webpack/runtime/compat get default export","webpack://@flarum/core/webpack/runtime/define property getters","webpack://@flarum/core/webpack/runtime/ensure chunk","webpack://@flarum/core/webpack/runtime/get javascript chunk filename","webpack://@flarum/core/webpack/runtime/global","webpack://@flarum/core/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/core/webpack/runtime/make namespace object","webpack://@flarum/core/webpack/runtime/publicPath","webpack://@flarum/core/webpack/runtime/compat","webpack://@flarum/core/webpack/runtime/jsonp chunk loading","webpack://@flarum/core/./src/common/utils/bidi.js","webpack://@flarum/core/./src/common/registry.ts","webpack://@flarum/core/./src/common/ExportRegistry.ts","webpack://@flarum/core/./src/common/utils/patchMithril.js","webpack://@flarum/core/./src/common/index.ts","webpack://@flarum/core/./src/common/extenders/Model.ts","webpack://@flarum/core/./src/common/extenders/PostTypes.ts","webpack://@flarum/core/./src/common/extenders/Routes.ts","webpack://@flarum/core/./src/common/extenders/Store.ts","webpack://@flarum/core/./src/common/extenders/Search.ts","webpack://@flarum/core/./src/common/extenders/Notification.ts","webpack://@flarum/core/./src/common/extenders/ThemeMode.ts","webpack://@flarum/core/./src/common/extenders/Admin.ts","webpack://@flarum/core/./src/common/extenders/index.ts","webpack://@flarum/core/./src/common/utils/mixin.js","webpack://@flarum/core/./src/common/utils/styleSelectedText.ts","webpack://@flarum/core/./src/common/utils/throttleDebounce.ts","webpack://@flarum/core/./src/common/utils/formatAmount.ts","webpack://@flarum/core/../../../node_modules/nanoid/index.browser.js","webpack://@flarum/core/./src/common/utils/generateElementId.ts","webpack://@flarum/core/./src/common/components/DetailedDropdownItem.tsx","webpack://@flarum/core/./src/common/components/Select.tsx","webpack://@flarum/core/./src/common/components/ColorPreviewInput.tsx","webpack://@flarum/core/./src/common/components/Pill.tsx","webpack://@flarum/core/./src/common/components/UserSelectionModal.tsx","webpack://@flarum/core/./src/common/components/TextEditorButton.js","webpack://@flarum/core/./src/common/components/AutocompleteDropdown.tsx","webpack://@flarum/core/./src/common/components/GambitsAutocompleteDropdown.tsx","webpack://@flarum/core/./src/common/components/UploadImageButton.tsx","webpack://@flarum/core/./src/common/components/MultiSelect.tsx","webpack://@flarum/core/./src/common/components/FormGroup.tsx","webpack://@flarum/core/./src/common/helpers/punctuateSeries.js","webpack://@flarum/core/./src/common/Fragment.ts","webpack://@flarum/core/./src/forum/components/LogInButton.js","webpack://@flarum/core/./src/forum/components/PostPreview.js"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"flarum.core:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../common/app';\nimport ItemList from './utils/ItemList';\nimport Button from './components/Button';\nimport ModalManager from './components/ModalManager';\nimport AlertManager from './components/AlertManager';\nimport RequestErrorModal from './components/RequestErrorModal';\nimport Translator from './Translator';\nimport Store, { payloadIsPlural } from './Store';\nimport Session from './Session';\nimport extract from './utils/extract';\nimport extractText from './utils/extractText';\nimport Drawer from './utils/Drawer';\nimport mapRoutes from './utils/mapRoutes';\nimport RequestError from './utils/RequestError';\nimport ScrollListener from './utils/ScrollListener';\nimport liveHumanTimes from './utils/liveHumanTimes';\n// @ts-expect-error We need to explicitly use the prefix to distinguish between the extend folder.\nimport { extend } from './extend.ts';\nimport Forum from './models/Forum';\nimport User from './models/User';\nimport Discussion from './models/Discussion';\nimport Post from './models/Post';\nimport Group from './models/Group';\nimport Notification from './models/Notification';\nimport PageState from './states/PageState';\nimport ModalManagerState from './states/ModalManagerState';\nimport AlertManagerState from './states/AlertManagerState';\nimport fireApplicationError from './helpers/fireApplicationError';\nimport AccessToken from './models/AccessToken';\nimport { ColorScheme } from './components/ThemeMode';\n\n/**\n * A valid route definition.\n */\n\nexport let MaintenanceMode = /*#__PURE__*/function (MaintenanceMode) {\n MaintenanceMode[\"NO_MAINTENANCE\"] = \"none\";\n MaintenanceMode[\"HIGH_MAINTENANCE\"] = \"high\";\n MaintenanceMode[\"LOW_MAINTENANCE\"] = \"low\";\n MaintenanceMode[\"SAFE_MODE\"] = \"safe\";\n return MaintenanceMode;\n}({});\n/**\n * The `App` class provides a container for an application, as well as various\n * utilities for the rest of the app to use.\n */\nexport default class Application {\n constructor() {\n /**\n * The forum model for this application.\n */\n _defineProperty(this, \"forum\", void 0);\n /**\n * A map of routes, keyed by a unique route name. Each route is an object\n * containing the following properties:\n *\n * - `path` The path that the route is accessed at.\n * - `component` The Mithril component to render when this route is active.\n *\n * @example\n * app.routes.discussion = { path: '/d/:id', component: DiscussionPage };\n */\n _defineProperty(this, \"routes\", {});\n /**\n * An ordered list of initializers to bootstrap the application.\n */\n _defineProperty(this, \"initializers\", new ItemList());\n /**\n * The app's session.\n *\n * Stores info about the current user.\n */\n _defineProperty(this, \"session\", void 0);\n /**\n * The app's translator.\n */\n _defineProperty(this, \"translator\", new Translator());\n /**\n * The app's data store.\n */\n _defineProperty(this, \"store\", new Store({\n 'access-tokens': AccessToken,\n forums: Forum,\n users: User,\n discussions: Discussion,\n posts: Post,\n groups: Group,\n notifications: Notification\n }));\n _defineProperty(this, \"search\", void 0);\n /**\n * A local cache that can be used to store data at the application level, so\n * that is persists between different routes.\n */\n _defineProperty(this, \"cache\", {});\n /**\n * Whether or not the app has been booted.\n */\n _defineProperty(this, \"booted\", false);\n /**\n * The page the app is currently on.\n *\n * This object holds information about the type of page we are currently\n * visiting, and sometimes additional arbitrary page state that may be\n * relevant to lower-level components.\n */\n _defineProperty(this, \"current\", new PageState(null));\n /**\n * The page the app was on before the current page.\n *\n * Once the application navigates to another page, the object previously\n * assigned to this.current will be moved to this.previous, while this.current\n * is re-initialized.\n */\n _defineProperty(this, \"previous\", new PageState(null));\n /**\n * An object that manages modal state.\n */\n _defineProperty(this, \"modal\", new ModalManagerState());\n /**\n * An object that manages the state of active alerts.\n */\n _defineProperty(this, \"alerts\", new AlertManagerState());\n /**\n * An object that manages the state of the navigation drawer.\n */\n _defineProperty(this, \"drawer\", void 0);\n _defineProperty(this, \"history\", null);\n _defineProperty(this, \"pane\", null);\n _defineProperty(this, \"data\", void 0);\n _defineProperty(this, \"allowUserColorScheme\", void 0);\n _defineProperty(this, \"refs\", {\n fontawesome: 'https://fontawesome.com/v6/icons?o=r&m=free'\n });\n _defineProperty(this, \"_title\", '');\n _defineProperty(this, \"_titleCount\", 0);\n /**\n * The key for an Alert that was shown as a result of an AJAX request error.\n * If present, it will be dismissed on the next successful request.\n */\n _defineProperty(this, \"requestErrorAlert\", null);\n _defineProperty(this, \"initialRoute\", void 0);\n }\n set title(val) {\n this._title = val;\n }\n get title() {\n return this._title;\n }\n set titleCount(val) {\n this._titleCount = val;\n }\n get titleCount() {\n return this._titleCount;\n }\n load(payload) {\n this.data = payload;\n this.translator.setLocale(payload.locale);\n }\n initialize() {\n const caughtInitializationErrors = [];\n this.initializers.toArray().forEach(initializer => {\n try {\n initializer(this);\n } catch (e) {\n const extension = initializer.itemName.includes('/') ? initializer.itemName.replace(/(\\/flarum-ext-)|(\\/flarum-)/g, '-') : initializer.itemName;\n caughtInitializationErrors.push(() => fireApplicationError(extractText(app.translator.trans('core.lib.error.extension_initialiation_failed_message', {\n extension\n })), \"\".concat(extension, \" failed to initialize\"), e));\n }\n });\n return caughtInitializationErrors;\n }\n boot() {\n var _this$store$getById;\n const caughtInitializationErrors = this.initialize();\n this.store.pushPayload({\n data: this.data.resources\n });\n this.forum = this.store.getById('forums', '1');\n this.session = new Session((_this$store$getById = this.store.getById('users', String(this.data.session.userId))) != null ? _this$store$getById : null, this.data.session.csrfToken);\n this.beforeMount();\n this.mount();\n this.initialRoute = window.location.href;\n caughtInitializationErrors.forEach(handler => handler());\n }\n beforeMount() {\n // ...\n }\n bootExtensions(extensions) {\n Object.keys(extensions).forEach(name => {\n const extension = extensions[name];\n\n // If an extension doesn't define extenders, there's nothing more to do here.\n if (!extension.extend) return;\n const extenders = extension.extend.flat(Infinity);\n for (const extender of extenders) {\n extender.extend(this, {\n name,\n exports: extension\n });\n }\n });\n }\n mount(basePath) {\n if (basePath === void 0) {\n basePath = '';\n }\n // An object with a callable view property is used in order to pass arguments to the component; see https://mithril.js.org/mount.html\n m.mount(document.getElementById('modal'), {\n view: () => m(ModalManager, {\n state: this.modal\n })\n });\n m.mount(document.getElementById('alerts'), {\n view: () => m(AlertManager, {\n state: this.alerts\n })\n });\n this.drawer = new Drawer();\n m.route(document.getElementById('content'), basePath + '/', mapRoutes(this.routes, basePath));\n const appEl = document.getElementById('app');\n const appHeaderEl = document.querySelector('.App-header');\n\n // Add a class to the body which indicates that the page has been scrolled\n // down. When this happens, we'll add classes to the header and app body\n // which will set the navbar's position to fixed. We don't want to always\n // have it fixed, as that could overlap with custom headers.\n const scrollListener = new ScrollListener(top => {\n const offset = appEl.getBoundingClientRect().top + document.body.scrollTop;\n appEl.classList.toggle('affix', top >= offset);\n appEl.classList.toggle('scrolled', top > offset);\n appHeaderEl.classList.toggle('navbar-fixed-top', top >= offset);\n });\n scrollListener.start();\n scrollListener.update();\n document.body.classList.add('ontouchstart' in window ? 'touch' : 'no-touch');\n this.initColorScheme();\n liveHumanTimes();\n }\n initColorScheme(forumDefault) {\n var _forumDefault, _app$forum$attribute, _this$session$user;\n if (forumDefault === void 0) {\n forumDefault = null;\n }\n (_forumDefault = forumDefault) != null ? _forumDefault : forumDefault = (_app$forum$attribute = app.forum.attribute('colorScheme')) != null ? _app$forum$attribute : 'auto';\n this.allowUserColorScheme = forumDefault === 'auto';\n const userConfiguredPreference = (_this$session$user = this.session.user) == null || (_this$session$user = _this$session$user.preferences()) == null ? void 0 : _this$session$user.colorScheme;\n let scheme;\n if (this.allowUserColorScheme) {\n scheme = userConfiguredPreference;\n }\n scheme || (scheme = forumDefault);\n this.setColorScheme(scheme);\n\n // Listen for browser color scheme changes and update the theme accordingly\n if (this.allowUserColorScheme) {\n this.watchSystemColorSchemePreference(() => {\n this.initColorScheme(forumDefault);\n });\n }\n }\n getSystemColorSchemePreference() {\n let colorScheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n if (window.matchMedia('(prefers-contrast: more)').matches) {\n colorScheme += '-hc';\n }\n return colorScheme;\n }\n watchSystemColorSchemePreference(callback) {\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', callback);\n window.matchMedia('(prefers-contrast: more)').addEventListener('change', callback);\n }\n setColorScheme(scheme) {\n if (scheme === ColorScheme.Auto) {\n scheme = this.getSystemColorSchemePreference();\n }\n document.documentElement.setAttribute('data-theme', scheme);\n }\n setColoredHeader(value) {\n document.documentElement.setAttribute('data-colored-header', value ? 'true' : 'false');\n }\n\n /**\n * Get the API response document that has been preloaded into the application.\n */\n\n preloadedApiDocument() {\n // If the URL has changed, the preloaded Api document is invalid.\n if (this.data.apiDocument && window.location.href === this.initialRoute) {\n const results = payloadIsPlural(this.data.apiDocument) ? this.store.pushPayload(this.data.apiDocument) : this.store.pushPayload(this.data.apiDocument);\n this.data.apiDocument = null;\n return results;\n }\n return null;\n }\n\n /**\n * Determine the current screen mode, based on our media queries.\n */\n screen() {\n const styles = getComputedStyle(document.documentElement);\n return styles.getPropertyValue('--flarum-screen');\n }\n\n /**\n * Set the `` of the page.\n *\n * @param title New page title\n */\n setTitle(title) {\n this.title = title;\n this.updateTitle();\n }\n\n /**\n * Set a number to display in the `<title>` of the page.\n *\n * @param count Number to display in title\n */\n setTitleCount(count) {\n this.titleCount = count;\n this.updateTitle();\n }\n updateTitle() {\n const count = this.titleCount ? \"(\".concat(this.titleCount, \") \") : '';\n const onHomepage = m.route.get() === this.forum.attribute('basePath') + '/';\n const params = {\n pageTitle: this.title,\n forumName: this.forum.attribute('title'),\n // Until we add page numbers to the frontend, this is constant at 1\n // so that the page number portion doesn't show up in the URL.\n pageNumber: 1\n };\n let title = onHomepage || !this.title ? extractText(app.translator.trans('core.lib.meta_titles.without_page_title', params)) : extractText(app.translator.trans('core.lib.meta_titles.with_page_title', params));\n title = count + title;\n\n // We pass the title through a DOMParser to allow HTML entities\n // to be rendered correctly, while still preventing XSS attacks\n // from user input by using a script-disabled environment.\n // https://github.com/flarum/framework/issues/3514\n // https://github.com/flarum/framework/pull/3684\n // This is only a temporary solution for 1.x,\n // and the actual source of the issue will be fixed in 2.x\n // Actual source of the issue: https://github.com/flarum/framework/issues/3685\n const parser = new DOMParser();\n document.title = parser.parseFromString(title, 'text/html').body.innerText;\n }\n transformRequestOptions(flarumOptions) {\n const {\n background,\n deserialize,\n modifyText,\n ...tmpOptions\n } = {\n ...flarumOptions\n };\n\n // Unless specified otherwise, requests should run asynchronously in the\n // background, so that they don't prevent redraws from occurring.\n const defaultBackground = true;\n\n // When we deserialize JSON data, if for some reason the server has provided\n // a dud response, we don't want the application to crash. We'll show an\n // error message to the user instead.\n\n const defaultDeserialize = response => response;\n const options = {\n background: background != null ? background : defaultBackground,\n deserialize: deserialize != null ? deserialize : defaultDeserialize,\n ...tmpOptions\n };\n extend(options, 'config', (_, xhr) => {\n xhr.setRequestHeader('X-CSRF-Token', this.session.csrfToken);\n });\n\n // If the method is something like PATCH or DELETE, which not all servers\n // and clients support, then we'll send it as a POST request with the\n // intended method specified in the X-HTTP-Method-Override header.\n if (options.method && !['GET', 'POST'].includes(options.method)) {\n const method = options.method;\n extend(options, 'config', (_, xhr) => {\n xhr.setRequestHeader('X-HTTP-Method-Override', method);\n });\n options.method = 'POST';\n }\n\n // When extracting the data from the response, we can check the server\n // response code and show an error message to the user if something's gone\n // awry.\n options.extract = xhr => {\n let responseText;\n if (modifyText) {\n responseText = modifyText(xhr.responseText);\n } else {\n responseText = xhr.responseText;\n }\n const status = xhr.status;\n if (status < 200 || status > 299) {\n throw new RequestError(status, \"\".concat(responseText), options, xhr);\n }\n if (xhr.getResponseHeader) {\n const csrfToken = xhr.getResponseHeader('X-CSRF-Token');\n if (csrfToken) app.session.csrfToken = csrfToken;\n }\n try {\n if (responseText === '') {\n return null;\n }\n return JSON.parse(responseText);\n } catch (e) {\n throw new RequestError(500, \"\".concat(responseText), options, xhr);\n }\n };\n return options;\n }\n\n /**\n * Make an AJAX request, handling any low-level errors that may occur.\n *\n * @see https://mithril.js.org/request.html\n */\n request(originalOptions) {\n const options = this.transformRequestOptions(originalOptions);\n if (this.requestErrorAlert) this.alerts.dismiss(this.requestErrorAlert);\n return m.request(options).catch(e => this.requestErrorCatch(e, originalOptions.errorHandler));\n }\n\n /**\n * By default, show an error alert, and log the error to the console.\n */\n requestErrorCatch(error, customErrorHandler) {\n var _error$response$error, _error$response, _error$response2, _app$session$user;\n // the details property is decoded to transform escaped characters such as '\\n'\n const formattedErrors = (_error$response$error = (_error$response = error.response) == null || (_error$response = _error$response.errors) == null ? void 0 : _error$response.map(e => {\n var _e$detail;\n return decodeURI((_e$detail = e.detail) != null ? _e$detail : '');\n })) != null ? _error$response$error : [];\n let content;\n switch (error.status) {\n case 422:\n content = formattedErrors.map(detail => [detail, m(\"br\", null)]).flat().slice(0, -1);\n break;\n case 401:\n case 403:\n content = app.translator.trans('core.lib.error.permission_denied_message');\n break;\n case 404:\n case 410:\n content = app.translator.trans('core.lib.error.not_found_message');\n break;\n case 413:\n content = app.translator.trans('core.lib.error.payload_too_large_message');\n break;\n case 429:\n content = app.translator.trans('core.lib.error.rate_limit_exceeded_message');\n break;\n default:\n const code = (_error$response2 = error.response) == null || (_error$response2 = _error$response2.errors) == null || (_error$response2 = _error$response2[0]) == null ? void 0 : _error$response2.code;\n if (code === 'db_error' && (_app$session$user = app.session.user) != null && _app$session$user.isAdmin()) {\n content = app.translator.trans('core.lib.error.db_error_message');\n } else if (this.requestWasCrossOrigin(error)) {\n content = app.translator.trans('core.lib.error.generic_cross_origin_message');\n } else {\n content = app.translator.trans('core.lib.error.generic_message');\n }\n }\n const isDebug = app.forum.attribute('debug');\n error.alert = {\n type: 'error',\n content,\n controls: isDebug && [m(Button, {\n className: \"Button Button--link\",\n onclick: this.showDebug.bind(this, error, formattedErrors)\n }, app.translator.trans('core.lib.debug_button'))]\n };\n if (customErrorHandler) {\n customErrorHandler(error);\n } else {\n this.requestErrorDefaultHandler(error, isDebug, formattedErrors);\n }\n return Promise.reject(error);\n }\n\n /**\n * Used to modify the error message shown on the page to help troubleshooting.\n * While not certain, a failing cross-origin request likely indicates a missing redirect to Flarum canonical URL.\n * Because XHR errors do not expose CORS information, we can only compare the requested URL origin to the page origin.\n *\n * @param error\n * @protected\n */\n requestWasCrossOrigin(error) {\n return new URL(error.options.url, document.baseURI).origin !== window.location.origin;\n }\n requestErrorDefaultHandler(e, isDebug, formattedErrors) {\n if (e instanceof RequestError) {\n if (isDebug && e.xhr) {\n const {\n method,\n url\n } = e.options;\n const {\n status = ''\n } = e.xhr;\n console.group(\"\".concat(method, \" \").concat(url, \" \").concat(status));\n if (formattedErrors.length) {\n console.error(...formattedErrors);\n } else {\n console.error(e);\n }\n console.groupEnd();\n }\n if (e.status === 500 && isDebug) {\n app.modal.show(RequestErrorModal, {\n error: e,\n formattedError: formattedErrors\n });\n } else if (e.alert) {\n this.requestErrorAlert = this.alerts.show(e.alert, e.alert.content);\n }\n } else {\n throw e;\n }\n }\n showDebug(error, formattedError) {\n if (this.requestErrorAlert !== null) this.alerts.dismiss(this.requestErrorAlert);\n this.modal.show(RequestErrorModal, {\n error,\n formattedError\n });\n }\n\n /**\n * Construct a URL to the route with the given name.\n */\n route(name, params) {\n if (params === void 0) {\n params = {};\n }\n const route = this.routes[name];\n if (!route) throw new Error(\"Route '\".concat(name, \"' does not exist\"));\n const url = route.path.replace(/:([^\\/]+)/g, (m, key) => \"\".concat(extract(params, key)));\n\n // Remove falsy values in params to avoid having urls like '/?sort&q'\n for (const key in params) {\n if (params.hasOwnProperty(key) && !params[key]) delete params[key];\n }\n const queryString = m.buildQueryString(params);\n const prefix = m.route.prefix === '' ? this.forum.attribute('basePath') : '';\n return prefix + url + (queryString ? '?' + queryString : '');\n }\n}\nflarum.reg.add('core', 'common/Application', Application);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/**\n * The `Component` class defines a user interface 'building block'. A component\n * generates a virtual DOM to be rendered on each redraw.\n *\n * Essentially, this is a wrapper for Mithril's components that adds several useful features:\n *\n * - In the `oninit` and `onbeforeupdate` lifecycle hooks, we store vnode attrs in `this.attrs.\n * This allows us to use attrs across components without having to pass the vnode to every single\n * method.\n * - The static `initAttrs` method allows a convenient way to provide defaults (or to otherwise modify)\n * the attrs that have been passed into a component.\n * - When the component is created in the DOM, we store its DOM element under `this.element`; this lets\n * us use jQuery to modify child DOM state from internal methods via the `this.$()` method.\n * - A convenience `component` method, which serves as an alternative to hyperscript and JSX.\n *\n * As with other Mithril components, components extending Component can be initialized\n * and nested using JSX, hyperscript, or a combination of both. The `component` method can also\n * be used.\n *\n * @example\n * return m('div', <MyComponent foo=\"bar\"><p>Hello World</p></MyComponent>);\n *\n * @example\n * return m('div', MyComponent.component({foo: 'bar'), m('p', 'Hello World!'));\n *\n * @see https://mithril.js.org/components.html\n */\nexport default class Component {\n constructor() {\n /**\n * The root DOM element for the component.\n */\n _defineProperty(this, \"element\", void 0);\n /**\n * The attributes passed into the component.\n *\n * @see https://mithril.js.org/components.html#passing-data-to-components\n */\n _defineProperty(this, \"attrs\", void 0);\n /**\n * Class component state that is persisted between redraws.\n *\n * Updating this will **not** automatically trigger a redraw, unlike\n * other frameworks.\n *\n * This is different to Vnode state, which is always an instance of your\n * class component.\n *\n * This is `undefined` by default.\n */\n _defineProperty(this, \"state\", void 0);\n }\n /**\n * @inheritdoc\n */\n /**\n * @inheritdoc\n */\n oninit(vnode) {\n this.setAttrs(vnode.attrs);\n }\n\n /**\n * @inheritdoc\n */\n oncreate(vnode) {\n this.element = vnode.dom;\n }\n\n /**\n * @inheritdoc\n */\n onbeforeupdate(vnode) {\n this.setAttrs(vnode.attrs);\n }\n\n /**\n * @inheritdoc\n */\n onupdate(vnode) {}\n\n /**\n * @inheritdoc\n */\n onbeforeremove(vnode) {}\n\n /**\n * @inheritdoc\n */\n onremove(vnode) {}\n\n /**\n * Returns a jQuery object for this component's element. If you pass in a\n * selector string, this method will return a jQuery object, using the current\n * element as its buffer.\n *\n * For example, calling `component.$('li')` will return a jQuery object\n * containing all of the `li` elements inside the DOM element of this\n * component.\n *\n * @param [selector] a jQuery-compatible selector string\n * @returns the jQuery object for the DOM node\n * @final\n */\n $(selector) {\n const $element = $(this.element);\n return selector ? $element.find(selector) : $element;\n }\n\n /**\n * Convenience method to attach a component without JSX.\n * Has the same effect as calling `m(THIS_CLASS, attrs, children)`.\n *\n * @see https://mithril.js.org/hyperscript.html#mselector,-attributes,-children\n */\n static component(attrs, children) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (children === void 0) {\n children = null;\n }\n const componentAttrs = {\n ...attrs\n };\n return m(this, componentAttrs, children);\n }\n\n /**\n * Saves a reference to the vnode attrs after running them through initAttrs,\n * and checking for common issues.\n */\n setAttrs(attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n this.constructor.initAttrs(attrs);\n if (attrs) {\n if ('children' in attrs) {\n throw new Error(\"[\".concat(this.constructor.name, \"] The \\\"children\\\" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute\"));\n }\n if ('tag' in attrs) {\n throw new Error(\"[\".concat(this.constructor.name, \"] You cannot use the \\\"tag\\\" attribute name with Mithril 2.\"));\n }\n }\n this.attrs = attrs;\n }\n\n /**\n * Initialize the component's attrs.\n *\n * This can be used to assign default values for missing, optional attrs.\n */\n static initAttrs(attrs) {}\n}\nflarum.reg.add('core', 'common/Component', Component);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../common/app';\n/**\n * The `Model` class represents a local data resource. It provides methods to\n * persist changes via the API.\n */\nexport default class Model {\n /**\n * @param data A resource object from the API.\n * @param store The data store that this model should be persisted to.\n */\n constructor(data, store) {\n if (data === void 0) {\n data = {};\n }\n if (store === void 0) {\n store = app.store;\n }\n /**\n * The resource object from the API.\n */\n _defineProperty(this, \"data\", {});\n /**\n * The time at which the model's data was last updated. Watching the value\n * of this property is a fast way to retain/cache a subtree if data hasn't\n * changed.\n */\n _defineProperty(this, \"freshness\", new Date());\n /**\n * Whether or not the resource exists on the server.\n */\n _defineProperty(this, \"exists\", false);\n /**\n * The data store that this resource should be persisted to.\n */\n _defineProperty(this, \"store\", void 0);\n this.data = data;\n this.store = store;\n }\n\n /**\n * Get the model's ID.\n *\n * @final\n */\n id() {\n return 'id' in this.data ? this.data.id : undefined;\n }\n\n /**\n * Get one of the model's attributes.\n *\n * @final\n */\n attribute(attribute) {\n var _this$data;\n return (_this$data = this.data) == null || (_this$data = _this$data.attributes) == null ? void 0 : _this$data[attribute];\n }\n\n /**\n * Merge new data into this model locally.\n *\n * @param data A resource object to merge into this model\n */\n pushData(data) {\n if ('id' in data) {\n this.data.id = data.id;\n }\n if ('type' in data) {\n this.data.type = data.type;\n }\n if ('attributes' in data) {\n var _this$data2;\n (_this$data2 = this.data).attributes || (_this$data2.attributes = {});\n\n // Filter out relationships that got in by accident.\n for (const key in data.attributes) {\n const val = data.attributes[key];\n if (val && val instanceof Model) {\n delete data.attributes[key];\n }\n }\n Object.assign(this.data.attributes, data.attributes);\n }\n if ('relationships' in data) {\n var _this$data$relationsh;\n const relationships = (_this$data$relationsh = this.data.relationships) != null ? _this$data$relationsh : {};\n\n // For every relationship field, we need to check if we've\n // been handed a Model instance. If so, we will convert it to a\n // relationship data object.\n for (const r in data.relationships) {\n const relationship = data.relationships[r];\n if (relationship === null) {\n delete relationships[r];\n delete data.relationships[r];\n continue;\n }\n let identifier;\n if (relationship instanceof Model) {\n identifier = {\n data: Model.getIdentifier(relationship)\n };\n } else if (relationship instanceof Array) {\n identifier = {\n data: relationship.map(Model.getIdentifier)\n };\n } else {\n identifier = relationship;\n }\n data.relationships[r] = identifier;\n relationships[r] = identifier;\n }\n this.data.relationships = relationships;\n }\n\n // Now that we've updated the data, we can say that the model is fresh.\n // This is an easy way to invalidate retained subtrees etc.\n this.freshness = new Date();\n return this;\n }\n\n /**\n * Merge new attributes into this model locally.\n *\n * @param attributes The attributes to merge.\n */\n pushAttributes(attributes) {\n this.pushData({\n attributes\n });\n }\n\n /**\n * Merge new attributes into this model, both locally and with persistence.\n *\n * @param attributes The attributes to save. If a 'relationships' key\n * exists, it will be extracted and relationships will also be saved.\n */\n save(attributes, options) {\n if (options === void 0) {\n options = {};\n }\n const data = {\n type: this.data.type,\n attributes\n };\n if ('id' in this.data) {\n data.id = this.data.id;\n }\n\n // If a 'relationships' key exists, extract it from the attributes hash and\n // set it on the top-level data object instead. We will be sending this data\n // object to the API for persistence.\n if (attributes.relationships) {\n data.relationships = {};\n for (const key in attributes.relationships) {\n const model = attributes.relationships[key];\n if (model === null) continue;\n data.relationships[key] = {\n data: model instanceof Array ? model.map(Model.getIdentifier) : Model.getIdentifier(model)\n };\n }\n delete attributes.relationships;\n }\n\n // Before we update the model's data, we should make a copy of the model's\n // old data so that we can revert back to it if something goes awry during\n // persistence.\n const oldData = this.copyData();\n this.pushData(data);\n const request = {\n data,\n meta: options.meta || undefined\n };\n return app.request({\n method: this.exists ? 'PATCH' : 'POST',\n url: app.forum.attribute('apiUrl') + this.apiEndpoint(),\n body: request,\n ...options\n }).then(\n // If everything went well, we'll make sure the store knows that this\n // model exists now (if it didn't already), and we'll push the data that\n // the API returned into the store.\n payload => {\n return this.store.pushPayload(payload);\n },\n // If something went wrong, though... good thing we backed up our model's\n // old data! We'll revert to that and let others handle the error.\n err => {\n this.pushData(oldData);\n m.redraw();\n throw err;\n });\n }\n\n /**\n * Send a request to delete the resource.\n *\n * @param body Data to send along with the DELETE request.\n */\n delete(body, options) {\n if (body === void 0) {\n body = {};\n }\n if (options === void 0) {\n options = {};\n }\n if (!this.exists) return Promise.resolve();\n return app.request({\n method: 'DELETE',\n url: app.forum.attribute('apiUrl') + this.apiEndpoint(),\n body,\n ...options\n }).then(() => {\n this.exists = false;\n this.store.remove(this);\n });\n }\n\n /**\n * Construct a path to the API endpoint for this resource.\n */\n apiEndpoint() {\n return '/' + this.data.type + ('id' in this.data ? '/' + this.data.id : '');\n }\n copyData() {\n return JSON.parse(JSON.stringify(this.data));\n }\n rawRelationship(relationship) {\n var _this$data$relationsh2;\n return (_this$data$relationsh2 = this.data.relationships) == null || (_this$data$relationsh2 = _this$data$relationsh2[relationship]) == null ? void 0 : _this$data$relationsh2.data;\n }\n\n /**\n * Generate a function which returns the value of the given attribute.\n *\n * @param transform A function to transform the attribute value\n */\n\n static attribute(name, transform) {\n return function () {\n if (transform) {\n return transform(this.attribute(name));\n }\n return this.attribute(name);\n };\n }\n\n /**\n * Generate a function which returns the value of the given has-one\n * relationship.\n *\n * @return false if no information about the\n * relationship exists; undefined if the relationship exists but the model\n * has not been loaded; or the model if it has been loaded.\n */\n\n static hasOne(name) {\n return function () {\n var _this$data$relationsh3;\n const relationshipData = (_this$data$relationsh3 = this.data.relationships) == null || (_this$data$relationsh3 = _this$data$relationsh3[name]) == null ? void 0 : _this$data$relationsh3.data;\n if (relationshipData && relationshipData instanceof Array) {\n throw new Error(\"Relationship \".concat(name, \" on model \").concat(this.data.type, \" is plural, so the hasOne method cannot be used to access it.\"));\n }\n if (relationshipData) {\n return this.store.getById(relationshipData.type, relationshipData.id);\n }\n return false;\n };\n }\n\n /**\n * Generate a function which returns the value of the given has-many\n * relationship.\n *\n * @return false if no information about the relationship\n * exists; an array if it does, containing models if they have been\n * loaded, and undefined for those that have not.\n */\n static hasMany(name) {\n return function () {\n var _this$data$relationsh4;\n const relationshipData = (_this$data$relationsh4 = this.data.relationships) == null || (_this$data$relationsh4 = _this$data$relationsh4[name]) == null ? void 0 : _this$data$relationsh4.data;\n if (relationshipData && !(relationshipData instanceof Array)) {\n throw new Error(\"Relationship \".concat(name, \" on model \").concat(this.data.type, \" is singular, so the hasMany method cannot be used to access it.\"));\n }\n if (relationshipData) {\n return relationshipData.map(data => this.store.getById(data.type, data.id));\n }\n return false;\n };\n }\n\n /**\n * Transform the given value into a Date object.\n */\n\n static transformDate(value) {\n return value != null ? new Date(value) : value;\n }\n\n /**\n * Get a resource identifier object for the given model.\n */\n\n static getIdentifier(model) {\n if (!model || !model.data || !('id' in model.data)) return null;\n return {\n type: model.data.type,\n id: model.data.id\n };\n }\n}\nflarum.reg.add('core', 'common/Model', Model);","import app from '../../app';\nimport { KeyValueGambit } from '../IGambit';\nexport default class AuthorGambit extends KeyValueGambit {\n key() {\n return app.translator.trans('core.lib.gambits.discussions.author.key', {}, true);\n }\n hint() {\n return app.translator.trans('core.lib.gambits.discussions.author.hint', {}, true);\n }\n filterKey() {\n return 'author';\n }\n}\nflarum.reg.add('core', 'common/query/discussions/AuthorGambit', AuthorGambit);","import app from '../../app';\nimport { KeyValueGambit } from '../IGambit';\nexport default class CreatedGambit extends KeyValueGambit {\n key() {\n return app.translator.trans('core.lib.gambits.discussions.created.key', {}, true);\n }\n hint() {\n return app.translator.trans('core.lib.gambits.discussions.created.hint', {}, true);\n }\n valuePattern() {\n return '(\\\\d{4}\\\\-\\\\d\\\\d\\\\-\\\\d\\\\d(?:\\\\.\\\\.(\\\\d{4}\\\\-\\\\d\\\\d\\\\-\\\\d\\\\d))?)';\n }\n filterKey() {\n return 'created';\n }\n}\nflarum.reg.add('core', 'common/query/discussions/CreatedGambit', CreatedGambit);","import app from '../../app';\nimport { BooleanGambit } from '../IGambit';\nexport default class HiddenGambit extends BooleanGambit {\n key() {\n return app.translator.trans('core.lib.gambits.discussions.hidden.key', {}, true);\n }\n filterKey() {\n return 'hidden';\n }\n enabled() {\n return !!app.session.user;\n }\n}\nflarum.reg.add('core', 'common/query/discussions/HiddenGambit', HiddenGambit);","import app from '../../app';\nimport { BooleanGambit } from '../IGambit';\nexport default class UnreadGambit extends BooleanGambit {\n key() {\n return app.translator.trans('core.lib.gambits.discussions.unread.key', {}, true);\n }\n filterKey() {\n return 'unread';\n }\n enabled() {\n return !!app.session.user;\n }\n}\nflarum.reg.add('core', 'common/query/discussions/UnreadGambit', UnreadGambit);","import app from '../../app';\nimport { KeyValueGambit } from '../IGambit';\nexport default class EmailGambit extends KeyValueGambit {\n key() {\n return app.translator.trans('core.lib.gambits.users.email.key', {}, true);\n }\n hint() {\n return app.translator.trans('core.lib.gambits.users.email.hint', {}, true);\n }\n filterKey() {\n return 'email';\n }\n enabled() {\n return !!(app.session.user && app.forum.attribute('canEditUserCredentials'));\n }\n}\nflarum.reg.add('core', 'common/query/users/EmailGambit', EmailGambit);","import app from '../../app';\nimport { KeyValueGambit } from '../IGambit';\nexport default class GroupGambit extends KeyValueGambit {\n key() {\n return app.translator.trans('core.lib.gambits.users.group.key', {}, true);\n }\n hint() {\n return app.translator.trans('core.lib.gambits.users.group.hint', {}, true);\n }\n filterKey() {\n return 'group';\n }\n}\nflarum.reg.add('core', 'common/query/users/GroupGambit', GroupGambit);","import app from '../../app';\nimport { KeyValueGambit } from '../IGambit';\nexport default class DiscussionGambit extends KeyValueGambit {\n key() {\n return app.translator.trans('core.lib.gambits.posts.discussion.key', {}, true);\n }\n hint() {\n return app.translator.trans('core.lib.gambits.posts.discussion.hint', {}, true);\n }\n filterKey() {\n return 'discussion';\n }\n}\nflarum.reg.add('core', 'common/query/discussions/DiscussionGambit', DiscussionGambit);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AuthorGambit from './query/discussions/AuthorGambit';\nimport CreatedGambit from './query/discussions/CreatedGambit';\nimport HiddenGambit from './query/discussions/HiddenGambit';\nimport UnreadGambit from './query/discussions/UnreadGambit';\nimport EmailGambit from './query/users/EmailGambit';\nimport GroupGambit from './query/users/GroupGambit';\nimport DiscussionGambit from './query/discussions/DiscussionGambit';\n\n/**\n * The gambit registry. A map of resource types to gambit classes that\n * should be used to filter resources of that type. Gambits are automatically\n * converted to API filters when requesting resources. Gambits must be applied\n * on a filter object that has a `q` property containing the search query.\n */\nexport default class GambitManager {\n constructor() {\n _defineProperty(this, \"gambits\", {\n discussions: [AuthorGambit, CreatedGambit, HiddenGambit, UnreadGambit],\n posts: [AuthorGambit, DiscussionGambit],\n users: [EmailGambit, GroupGambit]\n });\n }\n apply(type, filter) {\n filter.q = this.match(type, filter.q, (gambit, matches, negate) => {\n const additions = gambit.toFilter(matches, negate);\n Object.keys(additions).forEach(key => {\n if (key in filter && gambit.predicates && Array.isArray(additions[key])) {\n filter[key] = filter[key].concat(additions[key]);\n } else {\n filter[key] = additions[key];\n }\n });\n });\n return filter;\n }\n match(type, query, onmatch) {\n const gambits = this.for(type).filter(gambit => gambit.enabled());\n if (gambits.length === 0) return query;\n const bits = query.split(' ');\n for (const gambit of gambits) {\n for (const bit of bits) {\n const pattern = new RegExp(\"^(-?)\".concat(gambit.pattern(), \"$\"), 'i');\n let matches = bit.match(pattern);\n if (matches) {\n const negate = matches[1] === '-';\n matches.splice(1, 1);\n onmatch(gambit, matches, negate, bit);\n query = query.replace(bit, '');\n }\n }\n }\n query = query.trim().replace(/\\s+/g, ' ');\n return query;\n }\n from(type, q, filter) {\n const gambits = this.for(type);\n if (gambits.length === 0) return q;\n Object.keys(filter).forEach(key => {\n for (const gambit of gambits) {\n const negate = key[0] === '-';\n if (negate) key = key.substring(1);\n if (gambit.filterKey() !== key) continue;\n q += \" \".concat(gambit.fromFilter(filter[key], negate));\n }\n });\n return q;\n }\n for(type) {\n return (this.gambits[type] || []).map(gambitClass => new gambitClass());\n }\n}\nflarum.reg.add('core', 'common/GambitManager', GambitManager);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport GambitManager from './GambitManager';\nexport default class SearchManager {\n constructor(state) {\n /**\n * An object which stores previously searched queries and provides convenient\n * tools for retrieving and managing search values.\n */\n _defineProperty(this, \"state\", void 0);\n /**\n * The gambit manager that will convert search query gambits\n * into API filters.\n */\n _defineProperty(this, \"gambits\", new GambitManager());\n this.state = state;\n }\n}\n/**\n * The minimum query length before sources are searched.\n */\n_defineProperty(SearchManager, \"MIN_SEARCH_LEN\", 3);\nflarum.reg.add('core', 'common/SearchManager', SearchManager);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../common/app';\n/**\n * The `Session` class defines the current user session. It stores a reference\n * to the current authenticated user, and provides methods to log in/out.\n */\nexport default class Session {\n constructor(user, csrfToken) {\n /**\n * The current authenticated user.\n */\n _defineProperty(this, \"user\", void 0);\n /**\n * The CSRF token.\n */\n _defineProperty(this, \"csrfToken\", void 0);\n this.user = user;\n this.csrfToken = csrfToken;\n }\n\n /**\n * Attempt to log in a user.\n */\n login(body, options) {\n if (options === void 0) {\n options = {};\n }\n return app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('baseUrl'), \"/login\"),\n body,\n ...options\n });\n }\n\n /**\n * Log the user out.\n */\n logout() {\n window.location.href = \"\".concat(app.forum.attribute('baseUrl'), \"/logout?token=\").concat(this.csrfToken);\n }\n}\nflarum.reg.add('core', 'common/Session', Session);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../common/app';\nexport function payloadIsPlural(payload) {\n return Array.isArray(payload.data);\n}\n\n/**\n * The `Store` class defines a local data store, and provides methods to\n * retrieve data from the API.\n */\nexport default class Store {\n constructor(models) {\n /**\n * The local data store. A tree of resource types to IDs, such that\n * accessing data[type][id] will return the model for that type/ID.\n */\n _defineProperty(this, \"data\", {});\n /**\n * The model registry. A map of resource types to the model class that\n * should be used to represent resources of that type.\n */\n _defineProperty(this, \"models\", void 0);\n this.models = models;\n }\n\n /**\n * Push resources contained within an API payload into the store.\n *\n * @return The model(s) representing the resource(s) contained\n * within the 'data' key of the payload.\n */\n\n pushPayload(payload) {\n if (payload.included) payload.included.map(this.pushObject.bind(this));\n const models = payload.data instanceof Array ? payload.data.map(o => this.pushObject(o)) : this.pushObject(payload.data);\n const result = models;\n\n // Attach the original payload to the model that we give back. This is\n // useful to consumers as it allows them to access meta information\n // associated with their request.\n result.payload = payload;\n return result;\n }\n\n /**\n * Create a model to represent a resource object (or update an existing one),\n * and push it into the store.\n *\n * @param data The resource object\n * @return The model, or null if no model class has been\n * registered for this resource type.\n */\n\n pushObject(data) {\n if (!this.models[data.type]) {\n setTimeout(() => {\n throw new Error(\"Pushing object of type `\".concat(data.type, \"` not allowed, as type not yet registered in the store.\"));\n });\n return null;\n }\n const type = this.data[data.type] = this.data[data.type] || {};\n\n // Necessary for TS to narrow correctly.\n const curr = type[data.id];\n const instance = curr ? curr.pushData(data) : this.createRecord(data.type, data);\n type[data.id] = instance;\n instance.exists = true;\n return instance;\n }\n\n /**\n * Make a request to the API to find record(s) of a specific type.\n */\n\n async find(type, idOrParams, query, options) {\n var _params;\n if (query === void 0) {\n query = {};\n }\n if (options === void 0) {\n options = {};\n }\n let params = query;\n let url = app.forum.attribute('apiUrl') + '/' + type;\n if (idOrParams instanceof Array) {\n url += '?filter[id]=' + idOrParams.join(',');\n } else if (typeof idOrParams === 'object') {\n params = idOrParams;\n } else if (idOrParams) {\n url += '/' + idOrParams;\n }\n if ('filter' in params && (_params = params) != null && (_params = _params.filter) != null && _params.q) {\n params.filter = app.search.gambits.apply(type, params.filter);\n }\n return app.request({\n method: 'GET',\n url,\n params,\n ...options\n }).then(payload => {\n if (payloadIsPlural(payload)) {\n return this.pushPayload(payload);\n } else {\n return this.pushPayload(payload);\n }\n });\n }\n\n /**\n * Get a record from the store by ID.\n */\n getById(type, id) {\n var _this$data;\n return (_this$data = this.data) == null || (_this$data = _this$data[type]) == null ? void 0 : _this$data[id];\n }\n\n /**\n * Get a record from the store by the value of a model attribute.\n *\n * @param type The resource type.\n * @param key The name of the method on the model.\n * @param value The value of the model attribute.\n */\n getBy(type, key, value) {\n // @ts-expect-error No way to do this safely, unfortunately.\n return this.all(type).filter(model => model[key]() === value)[0];\n }\n\n /**\n * Get all loaded records of a specific type.\n */\n all(type) {\n const records = this.data[type];\n return records ? Object.values(records) : [];\n }\n\n /**\n * Remove the given model from the store.\n */\n remove(model) {\n delete this.data[model.data.type][model.id()];\n }\n\n /**\n * Create a new record of the given type.\n *\n * @param type The resource type\n * @param data Any data to initialize the model with\n */\n createRecord(type, data) {\n if (data === void 0) {\n data = {};\n }\n data.type = data.type || type;\n\n // @ts-expect-error this will complain about initializing abstract models,\n // but we can safely assume that all models registered with the store are\n // not abstract.\n return new this.models[type](data, this);\n }\n}\nflarum.reg.add('core', 'common/Store', Store);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { RichMessageFormatter, mithrilRichHandler } from '@askvortsov/rich-icu-message-formatter';\nimport { pluralTypeHandler, selectTypeHandler } from '@ultraq/icu-message-formatter';\nimport username from './helpers/username';\nimport extract from './utils/extract';\nimport extractText from './utils/extractText';\nexport default class Translator {\n constructor() {\n /**\n * A map of translation keys to their translated values.\n */\n _defineProperty(this, \"translations\", {});\n /**\n * The underlying ICU MessageFormatter util.\n */\n _defineProperty(this, \"formatter\", new RichMessageFormatter(null, this.formatterTypeHandlers(), mithrilRichHandler));\n }\n /**\n * Sets the formatter's locale to the provided value.\n */\n setLocale(locale) {\n this.formatter.locale = locale;\n }\n\n /**\n * Returns the formatter's current locale.\n */\n getLocale() {\n return this.formatter.locale;\n }\n addTranslations(translations) {\n Object.assign(this.translations, translations);\n }\n\n /**\n * An extensible entrypoint for extenders to register type handlers for translations.\n */\n formatterTypeHandlers() {\n return {\n plural: pluralTypeHandler,\n select: selectTypeHandler\n };\n }\n\n /**\n * A temporary system to preprocess parameters.\n * Should not be used by extensions.\n * TODO: An extender will be added in v1.x.\n *\n * @internal\n */\n preprocessParameters(parameters) {\n // If we've been given a user model as one of the input parameters, then\n // we'll extract the username and use that for the translation. In the\n // future there should be a hook here to inspect the user and change the\n // translation key. This will allow a gender property to determine which\n // translation key is used.\n\n if ('user' in parameters) {\n const user = extract(parameters, 'user');\n if (!parameters.username) parameters.username = username(user);\n }\n return parameters;\n }\n trans(id, parameters, extract) {\n if (parameters === void 0) {\n parameters = {};\n }\n if (extract === void 0) {\n extract = false;\n }\n const translation = this.translations[id];\n if (translation) {\n parameters = this.preprocessParameters(parameters);\n const locale = this.formatter.rich(translation, parameters);\n if (extract) return extractText(locale);\n return locale;\n }\n return id;\n }\n}\nflarum.reg.add('core', 'common/Translator', Translator);","// Used to fix typings\nconst w = window;\n\n/**\n * Proxy app. Common JS is run first, at which point `window.app` is not\n * set as this is done by the namespaced JS.\n *\n * When the corrent value is set, this code would retain the reference to\n * the original invalid value.\n *\n * By using a proxy, we can ensure that our `window.app` value is always\n * up-to-date with the latest reference.\n */\nconst appProxy = new Proxy({}, {\n get(_, properties) {\n return Reflect.get(w.app, properties, w.app);\n },\n set(_, properties, value) {\n return Reflect.set(w.app, properties, value, w.app);\n }\n});\n\n/**\n * The instance of Application within the common namespace.\n */\nexport default appProxy;\nflarum.reg.add('core', 'common/app', appProxy);","import Component from '../Component';\nimport Button from './Button';\nimport listItems from '../helpers/listItems';\nimport extract from '../utils/extract';\nimport classList from '../utils/classList';\nimport app from '../app';\nimport Icon from './Icon';\n/**\n * The `Alert` component represents an alert box, which contains a message,\n * some controls, and may be dismissible.\n */\nexport default class Alert extends Component {\n view(vnode) {\n const attrs = Object.assign({}, this.attrs);\n const type = extract(attrs, 'type');\n attrs.className = classList('Alert', \"Alert--\".concat(type), attrs.className);\n const title = extract(attrs, 'title');\n const icon = extract(attrs, 'icon');\n const content = extract(attrs, 'content') || vnode.children;\n const controls = extract(attrs, 'controls') || [];\n\n // If the alert is meant to be dismissible (which is the case by default),\n // then we will create a dismiss button to append as the final control in\n // the alert.\n const dismissible = extract(attrs, 'dismissible');\n const ondismiss = extract(attrs, 'ondismiss');\n const dismissControl = [];\n if (dismissible || dismissible === undefined) {\n dismissControl.push(m(Button, {\n \"aria-label\": app.translator.trans('core.lib.alert.dismiss_a11y_label'),\n icon: \"fas fa-times\",\n className: \"Button Button--link Button--icon Alert-dismiss\",\n onclick: ondismiss\n }));\n }\n return m(\"div\", attrs, m(\"div\", {\n className: classList('Alert-container', attrs.containerClassName)\n }, !!title && m(\"div\", {\n className: \"Alert-title\"\n }, !!icon && m(\"span\", {\n className: \"Alert-title-icon\"\n }, m(Icon, {\n name: icon\n })), m(\"span\", {\n className: \"Alert-title-text\"\n }, title)), m(\"span\", {\n className: \"Alert-body\"\n }, content), m(\"ul\", {\n className: \"Alert-controls\"\n }, listItems(controls.concat(dismissControl)))));\n }\n}\nflarum.reg.add('core', 'common/components/Alert', Alert);","import Component from '../Component';\n/**\n * The `AlertManager` component provides an area in which `Alert` components can\n * be shown and dismissed.\n */\nexport default class AlertManager extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n this.state = this.attrs.state;\n }\n view() {\n const activeAlerts = this.state.getActiveAlerts();\n return m(\"div\", {\n className: \"AlertManager\"\n }, Object.keys(activeAlerts).map(Number).map(key => {\n const alert = activeAlerts[key];\n const urgent = alert.attrs.type === 'error';\n return m(\"div\", {\n className: \"AlertManager-alert\",\n role: \"alert\",\n \"aria-live\": urgent ? 'assertive' : 'polite'\n }, m(alert.componentClass, Object.assign({}, alert.attrs, {\n ondismiss: this.state.dismiss.bind(this.state, key)\n }), alert.children));\n }));\n }\n}\nflarum.reg.add('core', 'common/components/AlertManager', AlertManager);","import classList from '../utils/classList';\nimport Component from '../Component';\nexport default class Avatar extends Component {\n view(vnode) {\n var _attrs$loading;\n const {\n user,\n ...attrs\n } = vnode.attrs;\n attrs.className = classList('Avatar', attrs.className);\n (_attrs$loading = attrs.loading) != null ? _attrs$loading : attrs.loading = 'lazy';\n let content = '';\n\n // If the `title` attribute is set to null or false, we don't want to give the\n // avatar a title. On the other hand, if it hasn't been given at all, we can\n // safely default it to the user's username.\n const hasTitle = attrs.title === 'undefined' || attrs.title;\n if (!hasTitle) delete attrs.title;\n\n // If a user has been passed, then we will set up an avatar using their\n // uploaded image, or the first letter of their username if they haven't\n // uploaded one.\n if (user) {\n const username = user.displayName() || '?';\n const avatarUrl = user.avatarUrl();\n if (hasTitle) attrs.title = attrs.title || username;\n if (avatarUrl) {\n return m(\"img\", Object.assign({}, attrs, {\n src: avatarUrl,\n alt: \"\"\n }));\n }\n content = username.charAt(0).toUpperCase();\n attrs.style = !window.testing && {\n '--avatar-bg': user.color()\n };\n }\n return m(\"span\", attrs, content);\n }\n}\nflarum.reg.add('core', 'common/components/Avatar', Avatar);","import Tooltip from './Tooltip';\nimport Component from '../Component';\nimport classList from '../utils/classList';\nimport textContrastClass from '../helpers/textContrastClass';\nimport Icon from './Icon';\n/**\n * The `Badge` component represents a user/discussion badge, indicating some\n * status (e.g. a discussion is stickied, a user is an admin).\n *\n * A badge may have the following special attrs:\n *\n * - `type` The type of badge this is. This will be used to give the badge a\n * class name of `Badge--{type}`.\n * - `icon` The name of an icon to show inside the badge.\n * - `label`\n *\n * All other attrs will be assigned as attributes on the badge element.\n */\nexport default class Badge extends Component {\n view() {\n const {\n type,\n icon: iconName,\n label,\n color,\n style = {},\n ...attrs\n } = this.attrs;\n const className = classList('Badge', [type && \"Badge--\".concat(type)], attrs.className, textContrastClass(color));\n const iconChild = iconName ? m(Icon, {\n name: iconName,\n className: \"Badge-icon\"\n }) : m.trust(' ');\n const newStyle = {\n ...style\n };\n if (!window.testing) {\n newStyle['--badge-bg'] = color;\n }\n const badgeAttrs = {\n ...attrs,\n className,\n style: newStyle\n };\n const badgeNode = m(\"div\", badgeAttrs, iconChild);\n\n // If we don't have a tooltip label, don't render the tooltip component.\n if (!label) return badgeNode;\n return m(Tooltip, {\n text: label\n }, badgeNode);\n }\n}\nflarum.reg.add('core', 'common/components/Badge', Badge);","import app from '../app';\n\n/**\n * Calls `console.warn` with the provided arguments, but only if the forum is in debug mode.\n *\n * This function is intended to provide warnings to extension developers about issues with\n * their extensions that may not be easily noticed when testing, such as accessibility\n * issues.\n *\n * These warnings should be hidden on production forums to ensure webmasters are not\n * inundated with do-gooders telling them they have an issue when it isn't something they\n * can fix.\n */\nexport default function fireDebugWarning() {\n if (!app.forum.attribute('debug')) return;\n console.warn(...arguments);\n}\n\n/**\n * Fire a Flarum deprecation warning which is shown in the JS console.\n *\n * These warnings are only shown when the forum is in debug mode, and the function exists to\n * reduce bundle size caused by multiple warnings across our JavaScript.\n *\n * @param message The message to display. (Short, but sweet, please!)\n * @param githubId The PR or Issue ID with more info in relation to this change.\n * @param [removedFrom] The version in which this feature will be completely removed. (default: 2.0)\n * @param [repo] The repo which the issue or PR is located in. (default: flarum/core)\n *\n * @see {@link fireDebugWarning}\n */\nexport function fireDeprecationWarning(message, githubId, removedFrom, repo) {\n if (removedFrom === void 0) {\n removedFrom = '2.0';\n }\n if (repo === void 0) {\n repo = 'flarum/core';\n }\n // GitHub auto-redirects between `/pull` and `/issues` for us, so using `/pull` saves 2 bytes!\n fireDebugWarning(\"[Flarum \".concat(removedFrom, \" Deprecation] \").concat(message, \"\\n\\nSee: https://github.com/\").concat(repo, \"/pull/\").concat(githubId));\n}\nflarum.reg.add('core', 'common/helpers/fireDebugWarning', fireDebugWarning);","import Component from '../Component';\nimport fireDebugWarning from '../helpers/fireDebugWarning';\nimport classList from '../utils/classList';\nimport extractText from '../utils/extractText';\nimport LoadingIndicator from './LoadingIndicator';\nimport Icon from './Icon';\n/**\n * The `Button` component defines an element which, when clicked, performs an\n * action.\n *\n * Other attrs will be assigned as attributes on the `<button>` element.\n *\n * Note that a Button has no default class names. This is because a Button can\n * be used to represent any generic clickable control, like a menu item. Common\n * styles can be applied by providing `className=\"Button\"` to the Button component.\n */\nexport default class Button extends Component {\n view(vnode) {\n let {\n type,\n 'aria-label': ariaLabel,\n icon: iconName,\n disabled,\n loading,\n className,\n class: _class,\n ...attrs\n } = this.attrs;\n\n // If no `type` attr provided, set to \"button\"\n type || (type = 'button');\n\n // If given a translation object, extract the text.\n if (typeof ariaLabel === 'object') {\n ariaLabel = extractText(ariaLabel);\n }\n if (disabled || loading) {\n delete attrs.onclick;\n }\n className = classList(_class, className, {\n hasIcon: iconName,\n disabled: disabled || loading,\n loading: loading\n });\n const buttonAttrs = {\n disabled,\n className,\n type,\n 'aria-label': ariaLabel,\n ...attrs\n };\n return m(\"button\", buttonAttrs, this.getButtonContent(vnode.children));\n }\n oncreate(vnode) {\n var _this$element, _this$element$getAttr;\n super.oncreate(vnode);\n const {\n 'aria-label': ariaLabel\n } = this.attrs;\n if (this.view === Button.prototype.view && !ariaLabel && !extractText(vnode.children) && !((_this$element = this.element) != null && (_this$element$getAttr = _this$element.getAttribute) != null && _this$element$getAttr.call(_this$element, 'aria-label'))) {\n fireDebugWarning('[Flarum Accessibility Warning] Button has no content and no accessible label. This means that screen-readers will not be able to interpret its meaning and just read \"Button\". Consider providing accessible text via the `aria-label` attribute. https://web.dev/button-name', this.element);\n }\n }\n\n /**\n * Get the template for the button's content.\n */\n getButtonContent(children) {\n const iconName = this.attrs.icon;\n return [iconName && m(Icon, {\n name: iconName,\n className: \"Button-icon\"\n }), children && m(\"span\", {\n className: \"Button-label\"\n }, children), this.attrs.loading && m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n })];\n }\n}\nflarum.reg.add('core', 'common/components/Button', Button);","import Component from '../Component';\nimport LoadingIndicator from './LoadingIndicator';\nimport classList from '../utils/classList';\nimport withAttr from '../utils/withAttr';\nimport Icon from './Icon';\n/**\n * The `Checkbox` component defines a checkbox input.\n *\n * ### Attrs\n *\n * - `state` Whether or not the checkbox is checked.\n * - `className` The class name for the root element.\n * - `disabled` Whether or not the checkbox is disabled.\n * - `loading` Whether or not the checkbox is loading.\n * - `onchange` A callback to run when the checkbox is checked/unchecked.\n * - `children` A text label to display next to the checkbox.\n */\nexport default class Checkbox extends Component {\n view(vnode) {\n const className = classList(['Checkbox', this.attrs.state ? 'on' : 'off', this.attrs.className, this.attrs.loading && 'loading', this.attrs.disabled && 'disabled']);\n return m(\"label\", {\n className: className\n }, m(\"input\", {\n type: \"checkbox\",\n checked: this.attrs.state,\n disabled: this.attrs.disabled,\n onchange: withAttr('checked', this.onchange.bind(this))\n }), m(\"div\", {\n className: \"Checkbox-display\",\n \"aria-hidden\": \"true\"\n }, this.getDisplay()), vnode.children);\n }\n\n /**\n * Get the template for the checkbox's display (tick/cross icon).\n */\n getDisplay() {\n return this.attrs.loading ? m(LoadingIndicator, {\n display: \"unset\",\n size: \"small\"\n }) : m(Icon, {\n name: this.attrs.state ? 'fas fa-check' : 'fas fa-times'\n });\n }\n\n /**\n * Run a callback when the state of the checkbox is changed.\n */\n onchange(checked) {\n if (this.attrs.onchange) this.attrs.onchange(checked, this);\n }\n}\nflarum.reg.add('core', 'common/components/Checkbox', Checkbox);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../common/app';\nimport Component from '../Component';\nimport listItems from '../helpers/listItems';\nimport extractText from '../utils/extractText';\nimport Tooltip from './Tooltip';\nimport Icon from './Icon';\n/**\n * The `Dropdown` component displays a button which, when clicked, shows a\n * dropdown menu beneath it.\n *\n * The children will be displayed as a list inside the dropdown menu.\n */\nexport default class Dropdown extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"showing\", false);\n }\n static initAttrs(attrs) {\n var _attrs$caretIcon;\n attrs.className || (attrs.className = '');\n attrs.buttonClassName || (attrs.buttonClassName = '');\n attrs.menuClassName || (attrs.menuClassName = '');\n attrs.label || (attrs.label = '');\n (_attrs$caretIcon = attrs.caretIcon) != null ? _attrs$caretIcon : attrs.caretIcon = 'fas fa-caret-down';\n attrs.accessibleToggleLabel || (attrs.accessibleToggleLabel = extractText(app.translator.trans('core.lib.dropdown.toggle_dropdown_accessible_label')));\n }\n view(vnode) {\n const items = vnode.children ? listItems(vnode.children) : [];\n const renderItems = this.attrs.lazyDraw ? this.showing : true;\n return m(\"div\", {\n className: 'ButtonGroup Dropdown dropdown ' + this.attrs.className + ' itemCount' + items.length + (this.showing ? ' open' : '')\n }, this.getButton(vnode.children), renderItems && this.getMenu(items));\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n\n // When opening the dropdown menu, work out if the menu goes beyond the\n // bottom of the viewport. If it does, we will apply class to make it show\n // above the toggle button instead of below it.\n this.$().on('shown.bs.dropdown', () => {\n var _$menu$offset$top, _$menu$offset, _$menu$height, _$$scrollTop, _$$height, _$menu$offset2, _$menu$offset$left, _$menu$offset3, _$menu$width, _$$scrollLeft, _$$width;\n const {\n lazyDraw,\n onshow\n } = this.attrs;\n this.showing = true;\n\n // If using lazy drawing, redraw before calling `onshow` function\n // to make sure the menu DOM exists in case the callback tries to use it.\n if (lazyDraw) {\n m.redraw.sync();\n }\n if (typeof onshow === 'function') {\n onshow();\n }\n\n // If not using lazy drawing, keep previous functionality\n // of redrawing after calling onshow()\n if (!lazyDraw) {\n m.redraw();\n }\n const $menu = this.$('.Dropdown-menu');\n const isRight = $menu.hasClass('Dropdown-menu--right');\n const top = (_$menu$offset$top = (_$menu$offset = $menu.offset()) == null ? void 0 : _$menu$offset.top) != null ? _$menu$offset$top : 0;\n const height = (_$menu$height = $menu.height()) != null ? _$menu$height : 0;\n const windowSrollTop = (_$$scrollTop = $(window).scrollTop()) != null ? _$$scrollTop : 0;\n const windowHeight = (_$$height = $(window).height()) != null ? _$$height : 0;\n $menu.removeClass('Dropdown-menu--top Dropdown-menu--right');\n $menu.toggleClass('Dropdown-menu--top', top + height > windowSrollTop + windowHeight);\n if ((((_$menu$offset2 = $menu.offset()) == null ? void 0 : _$menu$offset2.top) || 0) < 0) {\n $menu.removeClass('Dropdown-menu--top');\n }\n const left = (_$menu$offset$left = (_$menu$offset3 = $menu.offset()) == null ? void 0 : _$menu$offset3.left) != null ? _$menu$offset$left : 0;\n const width = (_$menu$width = $menu.width()) != null ? _$menu$width : 0;\n const windowScrollLeft = (_$$scrollLeft = $(window).scrollLeft()) != null ? _$$scrollLeft : 0;\n const windowWidth = (_$$width = $(window).width()) != null ? _$$width : 0;\n $menu.toggleClass('Dropdown-menu--right', isRight || left + width > windowScrollLeft + windowWidth);\n });\n this.$().on('hidden.bs.dropdown', () => {\n this.showing = false;\n if (this.attrs.onhide) {\n this.attrs.onhide();\n }\n m.redraw();\n });\n }\n\n /**\n * Get the template for the button.\n */\n getButton(children) {\n let button = m(\"button\", Object.assign({\n className: 'Dropdown-toggle ' + this.attrs.buttonClassName,\n \"aria-haspopup\": \"menu\",\n \"aria-label\": this.attrs.accessibleToggleLabel,\n \"data-toggle\": \"dropdown\",\n onclick: this.attrs.onclick\n }, this.attrs.buttonAttrs), this.getButtonContent(children));\n if (this.attrs.tooltip) {\n button = m(Tooltip, {\n text: this.attrs.tooltip,\n position: \"bottom\"\n }, button);\n }\n return button;\n }\n\n /**\n * Get the template for the button's content.\n */\n getButtonContent(children) {\n return [this.attrs.icon ? m(Icon, {\n name: this.attrs.icon,\n className: \"Button-icon\"\n }) : '', m(\"span\", {\n className: \"Button-label\"\n }, this.attrs.label), this.attrs.caretIcon ? m(Icon, {\n name: this.attrs.caretIcon,\n className: \"Button-caret\"\n }) : ''];\n }\n getMenu(items) {\n return m(\"ul\", {\n className: 'Dropdown-menu dropdown-menu ' + this.attrs.menuClassName\n }, items);\n }\n}\nflarum.reg.add('core', 'common/components/Dropdown', Dropdown);","import Component from '../Component';\nimport classList from '../utils/classList';\n/**\n * The `FieldSet` component defines a collection of fields, displayed in a list\n * underneath a title.\n *\n * The children should be an array of items to show in the fieldset.\n */\nexport default class FieldSet extends Component {\n view(vnode) {\n return m(\"div\", {\n className: classList('FieldSet', this.attrs.className),\n role: \"group\",\n \"aria-label\": this.attrs.label,\n \"aria-disabled\": false\n }, m(\"label\", {\n className: \"FieldSet-label\",\n \"aria-hidden\": \"true\"\n }, this.attrs.label), this.attrs.description ? m(\"div\", {\n className: \"FieldSet-description helpText\"\n }, this.attrs.description) : null, m(\"div\", {\n className: \"FieldSet-items\"\n }, vnode.children));\n }\n}\nflarum.reg.add('core', 'common/components/FieldSet', FieldSet);","import Component from '../Component';\nimport classList from '../utils/classList';\nexport default class Form extends Component {\n view(vnode) {\n const {\n label,\n description,\n className,\n ...attrs\n } = vnode.attrs;\n return m(\"div\", Object.assign({\n className: classList('Form', className)\n }, attrs), (label || description) && m(\"div\", {\n className: \"Form-header\"\n }, label && m(\"label\", null, label), description && m(\"p\", {\n className: \"helpText\"\n }, description)), m(\"div\", {\n className: \"Form-body\"\n }, vnode.children));\n }\n}\nflarum.reg.add('core', 'common/components/Form', Form);","import Modal from './Modal';\n/**\n * The `FormModal` component displays a modal dialog, wrapped in a form.\n * Subclasses should implement the `className`, `title`, and `content` methods.\n */\nexport default class FormModal extends Modal {\n wrapper(children) {\n return m(\"form\", {\n onsubmit: this.onsubmit.bind(this)\n }, children);\n }\n\n /**\n * Handle the modal form's submit event.\n */\n onsubmit(e) {\n // ...\n }\n\n /**\n * Callback executed when the modal is shown and ready to be interacted with.\n *\n * @remark Focuses the first input in the modal.\n */\n onready() {\n this.$().find('input, select, textarea').first().trigger('focus').trigger('select');\n }\n\n /**\n * Shows an alert describing an error returned from the API, and gives focus to\n * the first relevant field involved in the error.\n */\n onerror(error) {\n var _error$response;\n this.alertAttrs = error.alert;\n m.redraw();\n if (error.status === 422 && (_error$response = error.response) != null && _error$response.errors) {\n this.$('form [name=' + error.response.errors[0].source.pointer.replace('/data/attributes/', '') + ']').trigger('select');\n } else {\n this.onready();\n }\n }\n}\nflarum.reg.add('core', 'common/components/FormModal', FormModal);","import Badge from './Badge';\nexport default class GroupBadge extends Badge {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n if (attrs.group) {\n attrs.icon = attrs.group.icon() || '';\n attrs.color = attrs.group.color() || '';\n attrs.label = typeof attrs.label === 'undefined' ? attrs.group.nameSingular() : attrs.label;\n attrs.type = 'group--' + attrs.group.id();\n delete attrs.group;\n }\n }\n}\nflarum.reg.add('core', 'common/components/GroupBadge', GroupBadge);","import classList from '../utils/classList';\nimport Component from '../Component';\nexport default class Icon extends Component {\n view(vnode) {\n const {\n name,\n ...attrs\n } = vnode.attrs;\n\n // @ts-ignore\n attrs.className = classList('icon', name, attrs.className);\n return m(\"i\", Object.assign({\n \"aria-hidden\": \"true\"\n }, attrs));\n }\n}\nflarum.reg.add('core', 'common/components/Icon', Icon);","import Component from '../Component';\nimport Icon from './Icon';\nimport classList from '../utils/classList';\nexport default class InfoTile extends Component {\n view(vnode) {\n const {\n icon,\n className,\n ...attrs\n } = vnode.attrs;\n return m(\"div\", Object.assign({\n className: classList('InfoTile', className)\n }, attrs), this.icon(), m(\"div\", {\n className: \"InfoTile-text\"\n }, vnode.children));\n }\n icon() {\n if (this.attrs.iconElement) return this.attrs.iconElement;\n if (!this.attrs.icon) return null;\n return m(Icon, {\n name: classList(this.attrs.icon, 'InfoTile-icon')\n });\n }\n}\nflarum.reg.add('core', 'common/components/InfoTile', InfoTile);","import app from '../../common/app';\nimport Component from '../Component';\nimport Icon from './Icon';\nimport LoadingIndicator from './LoadingIndicator';\nimport classList from '../utils/classList';\nimport Button from './Button';\nexport default class Input extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view(vnode) {\n var _this$attrs$stream, _this$attrs;\n const {\n className: inputClassName,\n ...inputAttrs\n } = this.attrs.inputAttrs || {};\n const value = this.attrs.value || ((_this$attrs$stream = (_this$attrs = this.attrs).stream) == null ? void 0 : _this$attrs$stream.call(_this$attrs)) || '';\n return m(\"div\", {\n className: classList('Input', this.attrs.className, {\n 'Input--withPrefix': this.attrs.prefixIcon,\n 'Input--withClear': this.attrs.clearable\n })\n }, this.attrs.prefixIcon && m(Icon, {\n name: classList(this.attrs.prefixIcon, 'Input-prefix-icon')\n }), this.input({\n inputClassName,\n value,\n inputAttrs\n }), this.attrs.loading && m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\",\n containerClassName: \"Button Button--icon Button--link\"\n }), this.attrs.clearable && value && !this.attrs.loading && m(Button, {\n className: \"Input-clear Button Button--icon Button--link\",\n onclick: this.clear.bind(this),\n \"aria-label\": this.attrs.clearLabel || app.translator.trans('core.lib.input.clear_button'),\n type: \"button\",\n icon: \"fas fa-times-circle\"\n }));\n }\n input(_ref) {\n let {\n inputClassName,\n value,\n inputAttrs\n } = _ref;\n const attrs = {\n className: classList('FormControl', inputClassName),\n type: this.attrs.type || 'text',\n value: value,\n oninput: e => {\n var _this$onchange;\n return (_this$onchange = this.onchange) == null ? void 0 : _this$onchange.call(this, e.target.value);\n },\n 'aria-label': this.attrs.ariaLabel,\n placeholder: this.attrs.placeholder,\n readonly: this.attrs.readonly || undefined,\n disabled: this.attrs.disabled || undefined,\n ...inputAttrs\n };\n if (this.attrs.renderInput) {\n return this.attrs.renderInput(attrs);\n }\n return m(\"input\", attrs);\n }\n onchange(value) {\n if (this.attrs.stream) {\n this.attrs.stream(value);\n } else {\n var _this$attrs$onchange, _this$attrs2;\n (_this$attrs$onchange = (_this$attrs2 = this.attrs).onchange) == null || _this$attrs$onchange.call(_this$attrs2, value);\n }\n }\n clear() {\n this.onchange('');\n }\n}\nflarum.reg.add('core', 'common/components/Input', Input);","import app from '../../common/app';\nimport Component from '../Component';\nimport classList from '../utils/classList';\n/**\n * The `LoadingIndicator` component displays a simple CSS-based loading spinner.\n *\n * To set a custom color, use the CSS `color` property.\n *\n * To increase spacing around the spinner, use the CSS `height` property on the\n * spinner's **container**. Setting the `display` attribute to `block` will set\n * a height of `100px` by default.\n *\n * To apply a custom size to the loading indicator, set the `--size` and\n * `--thickness` CSS custom properties on the loading indicator container.\n *\n * If you *really* want to change how this looks as part of your custom theme,\n * you can override the `border-radius` and `border` then set either a\n * background image, or use `content: \"\\<glyph>\"` (e.g. `content: \"\\f1ce\"`)\n * and `font-family: 'Font Awesome 5 Free'` to set an FA icon if you'd rather.\n *\n * ### Attrs\n *\n * - `containerClassName` Class name(s) to apply to the indicator's parent\n * - `className` Class name(s) to apply to the indicator itself\n * - `display` Determines how the spinner should be displayed (`inline`, `block` (default) or `unset`)\n * - `size` Size of the loading indicator (`small`, `medium` or `large`)\n * - `containerAttrs` Optional attrs to be applied to the container DOM element\n *\n * All other attrs will be assigned as attributes on the DOM element.\n */\nexport default class LoadingIndicator extends Component {\n view() {\n const {\n display = 'block',\n size = 'medium',\n containerClassName,\n className,\n ...attrs\n } = this.attrs;\n const completeClassName = classList('LoadingIndicator', className);\n const completeContainerClassName = classList('LoadingIndicator-container', display !== 'unset' && \"LoadingIndicator-container--\".concat(display), size && \"LoadingIndicator-container--\".concat(size), containerClassName);\n return m(\"div\", Object.assign({\n \"aria-label\": app.translator.trans('core.lib.loading_indicator.accessible_label'),\n role: \"status\"\n }, attrs.containerAttrs, {\n \"data-size\": size,\n className: completeContainerClassName\n }), m(\"div\", Object.assign({\n \"aria-hidden\": \"true\",\n className: completeClassName\n }, attrs)));\n }\n}\nflarum.reg.add('core', 'common/components/LoadingIndicator', LoadingIndicator);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../common/app';\nimport Component from '../Component';\nimport Alert from './Alert';\nimport Button from './Button';\nimport classList from '../utils/classList';\n/**\n * The `Modal` component displays a modal dialog, wrapped in a form. Subclasses\n * should implement the `className`, `title`, and `content` methods.\n */\nexport default class Modal extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", false);\n /**\n * Attributes for an alert component to show below the header.\n */\n _defineProperty(this, \"alertAttrs\", null);\n }\n static get dismissibleOptions() {\n return {\n viaCloseButton: this.isDismissibleViaCloseButton,\n viaEscKey: this.isDismissibleViaEscKey,\n viaBackdropClick: this.isDismissibleViaBackdropClick\n };\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.attrs.animateShow(() => this.onready());\n }\n onbeforeremove(vnode) {\n super.onbeforeremove(vnode);\n\n // If the global modal state currently contains a modal,\n // we've just opened up a new one, and accordingly,\n // we don't need to show a hide animation.\n if (!this.attrs.state.modal) {\n // Here, we ensure that the animation has time to complete.\n // See https://mithril.js.org/lifecycle-methods.html#onbeforeremove\n // Bootstrap's Modal.TRANSITION_DURATION is 300 ms.\n return new Promise(resolve => setTimeout(resolve, 300));\n }\n }\n view() {\n if (this.alertAttrs) {\n this.alertAttrs.dismissible = false;\n }\n return m(\"div\", {\n className: classList('Modal modal-dialog fade', this.className())\n }, m(\"div\", {\n className: \"Modal-content\"\n }, this.dismissibleOptions.viaCloseButton && m(\"div\", {\n className: \"Modal-close App-backControl\"\n }, m(Button, {\n icon: \"fas fa-times\",\n onclick: () => this.hide(),\n className: \"Button Button--icon Button--link\",\n \"aria-label\": app.translator.trans('core.lib.modal.close')\n })), this.wrapper(this.inner())));\n }\n wrapper(children) {\n return m('[', null, children);\n }\n inner() {\n return m('[', null, m(\"div\", {\n className: \"Modal-header\"\n }, m(\"h3\", {\n className: \"App-titleControl App-titleControl--text\"\n }, this.title())), !!this.alertAttrs && m(\"div\", {\n className: \"Modal-alert\"\n }, m(Alert, this.alertAttrs)), this.content());\n }\n\n /**\n * Get the class name to apply to the modal.\n */\n\n /**\n * Get the title of the modal dialog.\n */\n\n /**\n * Get the content of the modal.\n */\n\n /**\n * Callback executed when the modal is shown and ready to be interacted with.\n */\n onready() {\n // ...\n }\n\n /**\n * Hides the modal.\n */\n hide() {\n this.attrs.animateHide();\n }\n\n /**\n * Sets `loading` to false and triggers a redraw.\n */\n loaded() {\n this.loading = false;\n m.redraw();\n }\n get dismissibleOptions() {\n return this.constructor.dismissibleOptions;\n }\n}\n/**\n * Can the model be dismissed with a close button (X)?\n *\n * If `false`, no close button is shown.\n */\n_defineProperty(Modal, \"isDismissibleViaCloseButton\", true);\n/**\n * Can the modal be dismissed by pressing the Esc key on a keyboard?\n */\n_defineProperty(Modal, \"isDismissibleViaEscKey\", true);\n/**\n * Can the modal be dismissed via a click on the backdrop.\n */\n_defineProperty(Modal, \"isDismissibleViaBackdropClick\", true);\nflarum.reg.add('core', 'common/components/Modal', Modal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from '../Component';\nimport { createFocusTrap } from '../utils/focusTrap';\nimport { disableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock';\nimport LoadingIndicator from './LoadingIndicator';\n/**\n * The `ModalManager` component manages one or more modal dialogs. Stacking modals\n * is supported. Multiple dialogs can be shown at once; loading a new component\n * into the ModalManager will overwrite the previous one.\n */\nexport default class ModalManager extends Component {\n constructor() {\n super(...arguments);\n // Current focus trap\n _defineProperty(this, \"focusTrap\", void 0);\n // Keep track of the last set focus trap\n _defineProperty(this, \"lastSetFocusTrap\", void 0);\n // Keep track if there's an modal closing\n _defineProperty(this, \"modalClosing\", false);\n _defineProperty(this, \"keyUpListener\", null);\n }\n view(vnode) {\n return m('[', null, this.attrs.state.modalList.map((modal, i) => {\n const Tag = modal == null ? void 0 : modal.componentClass;\n return m(\"div\", {\n key: modal.key,\n className: \"ModalManager modal\",\n \"data-modal-key\": modal.key,\n \"data-modal-number\": i,\n role: \"dialog\",\n \"aria-modal\": \"true\",\n style: !window.testing && {\n '--modal-number': i\n },\n \"aria-hidden\": this.attrs.state.modal !== modal && 'true'\n }, !!Tag && [m(Tag, Object.assign({\n key: modal.key\n }, modal.attrs, {\n animateShow: this.animateShow.bind(this),\n animateHide: this.animateHide.bind(this),\n state: this.attrs.state\n })), /* This backdrop is invisible and used for outside clicks to close the modal. */\n m(\"div\", {\n key: modal.key,\n className: \"ModalManager-invisibleBackdrop\",\n onclick: this.handlePossibleBackdropClick.bind(this)\n })]);\n }), (this.attrs.state.backdropShown || this.attrs.state.loadingModal) && m(\"div\", {\n className: \"Modal-backdrop backdrop\",\n ontransitionend: this.onBackdropTransitionEnd.bind(this),\n \"data-showing\": !!this.attrs.state.modalList.length || this.attrs.state.loadingModal,\n style: !window.testing && {\n '--modal-count': this.attrs.state.modalList.length + Number(this.attrs.state.loadingModal)\n }\n }, this.attrs.state.loadingModal && m(LoadingIndicator, null)));\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.keyUpListener = this.handleEscPress.bind(this);\n document.body.addEventListener('keyup', this.keyUpListener);\n }\n onbeforeremove(vnode) {\n super.onbeforeremove(vnode);\n this.keyUpListener && document.body.removeEventListener('keyup', this.keyUpListener);\n this.keyUpListener = null;\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n requestAnimationFrame(() => {\n try {\n var _document$getElementB2;\n // Main content should gain or lose `aria-hidden` when modals are shown/removed\n // See: http://web-accessibility.carnegiemuseums.org/code/dialogs/\n\n if (!this.attrs.state.isModalOpen()) {\n var _document$getElementB, _deactivate, _ref;\n (_document$getElementB = document.getElementById('app')) == null || _document$getElementB.setAttribute('aria-hidden', 'false');\n (_deactivate = (_ref = this.focusTrap).deactivate) == null || _deactivate.call(_ref);\n clearAllBodyScrollLocks();\n return;\n }\n (_document$getElementB2 = document.getElementById('app')) == null || _document$getElementB2.setAttribute('aria-hidden', 'true');\n\n // Get current dialog key\n const dialogKey = this.attrs.state.modal.key;\n\n // Deactivate focus trap if there's a new dialog/closed\n if (this.focusTrap && this.lastSetFocusTrap !== dialogKey) {\n var _deactivate2, _ref2;\n (_deactivate2 = (_ref2 = this.focusTrap).deactivate) == null || _deactivate2.call(_ref2);\n clearAllBodyScrollLocks();\n }\n\n // Activate focus trap if there's a new dialog which is not trapped yet\n if (this.activeDialogElement && this.lastSetFocusTrap !== dialogKey) {\n var _activate, _ref3;\n this.focusTrap = createFocusTrap(this.activeDialogElement, {\n allowOutsideClick: true\n });\n (_activate = (_ref3 = this.focusTrap).activate) == null || _activate.call(_ref3);\n if (this.activeDialogManagerElement) {\n disableBodyScroll(this.activeDialogManagerElement, {\n reserveScrollBarGap: true\n });\n }\n }\n\n // Update key of current opened modal\n this.lastSetFocusTrap = dialogKey;\n } catch {\n // We can expect errors to occur here due to the nature of mithril rendering\n }\n });\n }\n\n /**\n * Get current active dialog\n */\n get activeDialogElement() {\n var _this$attrs$state$mod;\n return document.body.querySelector(\".ModalManager[data-modal-key=\\\"\".concat((_this$attrs$state$mod = this.attrs.state.modal) == null ? void 0 : _this$attrs$state$mod.key, \"\\\"] .Modal\"));\n }\n\n /**\n * Get current active dialog\n */\n get activeDialogManagerElement() {\n var _this$attrs$state$mod2;\n return document.body.querySelector(\".ModalManager[data-modal-key=\\\"\".concat((_this$attrs$state$mod2 = this.attrs.state.modal) == null ? void 0 : _this$attrs$state$mod2.key, \"\\\"]\"));\n }\n animateShow(readyCallback) {\n var _this$activeDialogEle;\n if (readyCallback === void 0) {\n readyCallback = () => {};\n }\n if (!this.attrs.state.modal) return;\n (_this$activeDialogEle = this.activeDialogElement) == null || _this$activeDialogEle.addEventListener('transitionend', () => {\n readyCallback();\n }, {\n once: true\n });\n requestAnimationFrame(() => {\n var _this$activeDialogEle2;\n (_this$activeDialogEle2 = this.activeDialogElement) == null || _this$activeDialogEle2.classList.add('in');\n });\n }\n animateHide(closedCallback) {\n var _this$activeDialogEle3, _this$activeDialogEle4, _this$activeDialogEle5;\n if (closedCallback === void 0) {\n closedCallback = () => {};\n }\n if (this.modalClosing) return;\n this.modalClosing = true;\n const afterModalClosedCallback = () => {\n this.modalClosing = false;\n\n // Close the dialog\n this.attrs.state.close();\n closedCallback();\n };\n (_this$activeDialogEle3 = this.activeDialogElement) == null || _this$activeDialogEle3.addEventListener('transitionend', afterModalClosedCallback, {\n once: true\n });\n (_this$activeDialogEle4 = this.activeDialogElement) == null || _this$activeDialogEle4.classList.remove('in');\n (_this$activeDialogEle5 = this.activeDialogElement) == null || _this$activeDialogEle5.classList.add('out');\n }\n handleEscPress(e) {\n if (!this.attrs.state.modal) return;\n const dismissibleState = this.attrs.state.modal.componentClass.dismissibleOptions;\n\n // Close the dialog if the escape key was pressed\n // Check if closing via escape key is enabled\n if (e.key === 'Escape' && dismissibleState.viaEscKey) {\n e.preventDefault();\n this.animateHide();\n }\n }\n handlePossibleBackdropClick(e) {\n if (!this.attrs.state.modal || !this.attrs.state.modal.componentClass.dismissibleOptions.viaBackdropClick) return;\n this.animateHide();\n }\n onBackdropTransitionEnd(e) {\n if (e.propertyName === 'opacity') {\n const backdrop = e.currentTarget;\n if (backdrop.getAttribute('data-showing') === null) {\n // Backdrop is fading out\n this.attrs.state.backdropShown = false;\n m.redraw();\n }\n }\n }\n}\nflarum.reg.add('core', 'common/components/ModalManager', ModalManager);","import app from '../../common/app';\nimport Component from '../Component';\nimport Button from './Button';\nimport LinkButton from './LinkButton';\nimport classList from '../utils/classList';\n\n/**\n * The `Navigation` component displays a set of navigation buttons. Typically\n * this is just a back button which pops the app's History. If the user is on\n * the root page and there is no history to pop, then in some instances it may\n * show a button that toggles the app's drawer.\n *\n * If the app has a pane, it will also include a 'pin' button which toggles the\n * pinned state of the pane.\n *\n * Accepts the following attrs:\n *\n * - `className` The name of a class to set on the root element.\n * - `drawer` Whether or not to show a button to toggle the app's drawer if\n * there is no more history to pop.\n */\nexport default class Navigation extends Component {\n view() {\n const {\n history,\n pane\n } = app;\n return m(\"div\", {\n className: classList('Navigation ButtonGroup', this.attrs.className),\n onmouseenter: pane && pane.show.bind(pane),\n onmouseleave: pane && pane.onmouseleave.bind(pane)\n }, history != null && history.canGoBack() ? [this.getBackButton(), this.getPaneButton()] : this.getDrawerButton());\n }\n\n /**\n * Get the back button.\n */\n getBackButton() {\n const {\n history\n } = app;\n const previous = history == null ? void 0 : history.getPrevious();\n return m(LinkButton, {\n className: \"Button Navigation-back Button--icon\",\n href: history == null ? void 0 : history.backUrl(),\n icon: \"fas fa-chevron-left\",\n \"aria-label\": previous == null ? void 0 : previous.title,\n onclick: e => {\n if (e.shiftKey || e.ctrlKey || e.metaKey || e.which === 2) return;\n e.preventDefault();\n history == null || history.back();\n }\n });\n }\n\n /**\n * Get the pane pinned toggle button.\n */\n getPaneButton() {\n const {\n pane\n } = app;\n if (!pane || !pane.active) return null;\n return m(Button, {\n className: classList('Button Button--icon Navigation-pin', {\n active: pane.pinned\n }),\n onclick: pane.togglePinned.bind(pane),\n icon: \"fas fa-thumbtack\"\n });\n }\n\n /**\n * Get the drawer toggle button.\n */\n getDrawerButton() {\n if (!this.attrs.drawer) return null;\n const {\n drawer\n } = app;\n const user = app.session.user;\n return m(Button, {\n className: classList('Button Button--icon Navigation-drawer', {\n new: user == null ? void 0 : user.newNotificationCount()\n }),\n onclick: e => {\n e.stopPropagation();\n drawer.show();\n },\n icon: \"fas fa-bars\",\n \"aria-label\": app.translator.trans('core.lib.nav.drawer_button')\n });\n }\n}\nflarum.reg.add('core', 'common/components/Navigation', Navigation);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport Component from '../Component';\nimport PageState from '../states/PageState';\n/**\n * The `Page` component\n *\n * @abstract\n */\nexport default class Page extends Component {\n constructor() {\n super(...arguments);\n /**\n * A class name to apply to the body while the route is active.\n */\n _defineProperty(this, \"bodyClass\", '');\n /**\n * Whether we should scroll to the top of the page when its rendered.\n */\n _defineProperty(this, \"scrollTopOnCreate\", true);\n /**\n * Whether the browser should restore scroll state on refreshes.\n */\n _defineProperty(this, \"useBrowserScrollRestoration\", true);\n }\n oninit(vnode) {\n super.oninit(vnode);\n app.previous = app.current;\n app.current = new PageState(this.constructor, {\n routeName: this.attrs.routeName\n });\n app.drawer.hide();\n app.modal.close();\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n if (this.bodyClass) {\n $('#app').addClass(this.bodyClass);\n }\n if (this.scrollTopOnCreate) {\n $(window).scrollTop(0);\n }\n if ('scrollRestoration' in history) {\n history.scrollRestoration = this.useBrowserScrollRestoration ? 'auto' : 'manual';\n }\n }\n onremove(vnode) {\n super.onremove(vnode);\n if (this.bodyClass) {\n $('#app').removeClass(this.bodyClass);\n }\n }\n}\nflarum.reg.add('core', 'common/components/Page', Page);","import Modal from './Modal';\nexport default class RequestErrorModal extends Modal {\n className() {\n return 'RequestErrorModal Modal--large';\n }\n title() {\n return !!this.attrs.error.xhr && \"\".concat(this.attrs.error.xhr.status, \" \").concat(this.attrs.error.xhr.statusText);\n }\n content() {\n var _responseText;\n const {\n error,\n formattedError\n } = this.attrs;\n let responseText;\n\n // If the error is already formatted, just add line endings;\n // else try to parse it as JSON and stringify it with indentation\n if (formattedError.length) {\n responseText = formattedError.join('\\n\\n');\n } else if (error.response) {\n responseText = JSON.stringify(error.response, null, 2);\n } else {\n responseText = error.responseText;\n }\n if ((_responseText = responseText) != null && _responseText.includes('<script> Sfdump = window.Sfdump')) {\n responseText = m(\"iframe\", {\n srcdoc: responseText,\n className: \"RequestErrorModal-iframe\",\n onload: e => {\n var _iframe$contentWindow;\n const iframe = e.target;\n iframe.style.height = (((_iframe$contentWindow = iframe.contentWindow) == null ? void 0 : _iframe$contentWindow.document.body.offsetHeight) || 0) + 50 + 'px';\n }\n });\n }\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(\"pre\", null, this.attrs.error.options.method, \" \", this.attrs.error.options.url, m(\"br\", null), m(\"br\", null), responseText));\n }\n}\nflarum.reg.add('core', 'common/components/RequestErrorModal', RequestErrorModal);","import Dropdown from './Dropdown';\nimport classList from '../utils/classList';\nimport Icon from './Icon';\n\n/**\n * Determines via a vnode is currently \"active\".\n * Due to changes in Mithril 2, attrs will not be instantiated until AFTER view()\n * is initially called on the parent component, so we can not always depend on the\n * active attr to determine which element should be displayed as the \"active child\".\n *\n * This is a temporary patch, and as so, is not exported / placed in utils.\n */\nfunction isActive(vnode) {\n if (!vnode || typeof vnode !== 'object' || vnode instanceof Array) return false;\n const tag = vnode.tag;\n\n // Allow non-selectable dividers/headers to be added.\n if (typeof tag === 'string' && tag !== 'a' && tag !== 'button') return false;\n if ((typeof tag === 'object' || typeof tag === 'function') && 'initAttrs' in tag) {\n tag.initAttrs(vnode.attrs);\n }\n return (typeof tag === 'object' || typeof tag === 'function') && 'isActive' in tag ? tag.isActive(vnode.attrs) : vnode.attrs.active;\n}\n/**\n * The `SelectDropdown` component is the same as a `Dropdown`, except the toggle\n * button's label is set as the label of the first child which has a truthy\n * `active` prop.\n */\nexport default class SelectDropdown extends Dropdown {\n static initAttrs(attrs) {\n var _attrs$caretIcon;\n (_attrs$caretIcon = attrs.caretIcon) != null ? _attrs$caretIcon : attrs.caretIcon = 'fas fa-sort';\n super.initAttrs(attrs);\n attrs.className = classList(attrs.className, 'Dropdown--select');\n }\n getButtonContent(children) {\n const activeChild = children.find(isActive);\n let label = activeChild && typeof activeChild === 'object' && 'children' in activeChild && activeChild.children || this.attrs.defaultLabel;\n return [m(\"span\", {\n className: \"Button-label\"\n }, label), this.attrs.caretIcon ? m(Icon, {\n name: this.attrs.caretIcon,\n className: \"Button-caret\"\n }) : null];\n }\n}\nflarum.reg.add('core', 'common/components/SelectDropdown', SelectDropdown);","import Dropdown from './Dropdown';\nimport Button from './Button';\nimport classList from '../utils/classList';\nimport Tooltip from './Tooltip';\nimport Icon from './Icon';\n/**\n * The `SplitDropdown` component is similar to `Dropdown`, but the first child\n * is displayed as its own button prior to the toggle button. Unless a custom\n * `mainAction` is provided as the main control.\n */\nexport default class SplitDropdown extends Dropdown {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n attrs.className = classList(attrs.className, 'Dropdown--split', {\n 'Dropdown--withMainAction': attrs.mainAction\n });\n attrs.menuClassName = classList(attrs.menuClassName, 'Dropdown-menu--right');\n }\n getButton(children) {\n // Make a copy of the attrs of the first child component. We will assign\n // these attrs to a new button, so that it has exactly the same behaviour as\n // the first child.\n const firstChild = this.attrs.mainAction || this.getFirstChild(children);\n const buttonAttrs = Object.assign({}, firstChild == null ? void 0 : firstChild.attrs);\n buttonAttrs.className = classList(buttonAttrs.className, 'SplitDropdown-button Button', this.attrs.buttonClassName);\n let button = m(Button, buttonAttrs, firstChild.children);\n if (this.attrs.tooltip) {\n button = m(Tooltip, {\n text: this.attrs.tooltip,\n position: \"bottom\"\n }, button);\n }\n return m('[', null, button, m(\"button\", {\n className: 'Dropdown-toggle Button Button--icon ' + this.attrs.buttonClassName,\n \"aria-haspopup\": \"menu\",\n \"aria-label\": this.attrs.accessibleToggleLabel,\n \"data-toggle\": \"dropdown\"\n }, this.attrs.icon ? m(Icon, {\n name: this.attrs.icon,\n className: \"Button-icon\"\n }) : null, m(Icon, {\n name: \"fas fa-caret-down\",\n className: \"Button-caret\"\n })));\n }\n\n /**\n * Get the first child. If the first child is an array, the first item in that\n * array will be returned.\n */\n getFirstChild(children) {\n let firstChild = children;\n while (firstChild instanceof Array) firstChild = firstChild[0];\n return firstChild;\n }\n}\nflarum.reg.add('core', 'common/components/SplitDropdown', SplitDropdown);","import classList from '../utils/classList';\nimport Checkbox from './Checkbox';\n\n/**\n * The `Switch` component is a `Checkbox`, but with a switch display instead of\n * a tick/cross one.\n */\nexport default class Switch extends Checkbox {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n attrs.className = classList(attrs.className, 'Checkbox--switch');\n }\n getDisplay() {\n return !!this.attrs.loading && super.getDisplay();\n }\n}\nflarum.reg.add('core', 'common/components/Switch', Switch);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from '../../common/Component';\nimport classList from '../../common/utils/classList';\nexport let ColorScheme = /*#__PURE__*/function (ColorScheme) {\n ColorScheme[\"Auto\"] = \"auto\";\n ColorScheme[\"Light\"] = \"light\";\n ColorScheme[\"Dark\"] = \"dark\";\n ColorScheme[\"LightHighContrast\"] = \"light-hc\";\n ColorScheme[\"DarkHighContrast\"] = \"dark-hc\";\n return ColorScheme;\n}({});\nexport default class ThemeMode extends Component {\n view(vnode) {\n const {\n mode,\n selected,\n className,\n alternate,\n label,\n ...attrs\n } = vnode.attrs;\n return m(\"label\", Object.assign({\n className: classList('ThemeMode', className, \"ThemeMode--\".concat(mode), {\n 'ThemeMode--active': selected,\n 'ThemeMode--switch': alternate\n })\n }, attrs), m(\"div\", {\n className: \"ThemeMode-container\",\n \"data-theme\": mode === 'auto' ? 'light' : mode,\n \"data-colored-header\": document.documentElement.getAttribute('data-colored-header')\n }, m(\"div\", {\n className: \"ThemeMode-preview\"\n }, m(\"div\", {\n className: \"ThemeMode-header\"\n }, m(\"div\", {\n className: \"ThemeMode-header-text\"\n }), m(\"div\", {\n className: \"ThemeMode-header-icon\"\n }), m(\"div\", {\n className: \"ThemeMode-header-icon\"\n })), m(\"div\", {\n className: \"ThemeMode-hero\"\n }, m(\"div\", {\n className: \"ThemeMode-hero-title\"\n }), m(\"div\", {\n className: \"ThemeMode-hero-desc\"\n })), m(\"div\", {\n className: \"ThemeMode-main\"\n }, m(\"div\", {\n className: \"ThemeMode-sidebar\"\n }, m(\"div\", {\n className: \"ThemeMode-startDiscussion\"\n }, m(\"div\", {\n className: \"ThemeMode-startDiscussion-text\"\n })), m(\"div\", {\n className: \"ThemeMode-items\"\n }, Array.from({\n length: 3\n }).map((_, i) => m(\"div\", {\n className: \"ThemeMode-sidebar-line\",\n key: i\n }, m(\"div\", {\n className: \"ThemeMode-sidebar-icon\"\n }), m(\"div\", {\n className: \"ThemeMode-sidebar-text\"\n }))))), m(\"div\", {\n className: \"ThemeMode-content\"\n }, m(\"div\", {\n className: \"ThemeMode-toolbar\"\n }, m(\"div\", {\n className: \"ThemeMode-button\"\n }), m(\"div\", {\n className: \"ThemeMode-button\"\n })), m(\"div\", {\n className: \"ThemeMode-items\"\n }, Array.from({\n length: 3\n }).map((_, i) => m(\"div\", {\n className: \"ThemeMode-content-item\",\n key: i\n }, m(\"div\", {\n className: \"ThemeMode-content-item-author\"\n }), m(\"div\", {\n className: \"ThemeMode-content-item-meta\"\n }, m(\"div\", {\n className: \"ThemeMode-content-item-title\"\n }), m(\"div\", {\n className: \"ThemeMode-content-item-excerpt\"\n })))))))), mode === 'auto' ? m(ThemeMode, Object.assign({\n mode: mode === 'auto' ? 'dark' : null,\n alternate: true,\n selected: selected\n }, attrs)) : null), !alternate ? m(\"div\", {\n className: \"ThemeMode-legend\"\n }, label) : null);\n }\n}\n_defineProperty(ThemeMode, \"colorSchemes\", [{\n id: ColorScheme.Auto\n}, {\n id: ColorScheme.Light\n}, {\n id: ColorScheme.Dark\n}, {\n id: ColorScheme.LightHighContrast\n}, {\n id: ColorScheme.DarkHighContrast\n}]);\nflarum.reg.add('core', 'common/components/ThemeMode', ThemeMode);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from '../Component';\nimport classList from '../utils/classList';\nimport extractText from '../utils/extractText';\n/**\n * The `Tooltip` component is used to create a tooltip for an element. It\n * requires a single child element to be passed to it. Passing multiple\n * children or fragments will throw an error.\n *\n * You should use this for any tooltips you create to allow for backwards\n * compatibility when we switch to another tooltip library instead of\n * Bootstrap tooltips.\n *\n * If you need to pass multiple children, surround them with another element,\n * such as a `<span>` or `<div>`.\n *\n * **Note:** this component will overwrite the `title` attribute of the first\n * child you pass to it, as this is how the current tooltip system works in\n * Flarum. This shouldn't be an issue if you're using this component correctly.\n *\n * @example <caption>Basic usage</caption>\n * <Tooltip text=\"You wish!\">\n * <Button>\n * Click for free money!\n * </Button>\n * </Tooltip>\n *\n * @example <caption>Use of `position` and `showOnFocus` attrs</caption>\n * <Tooltip text=\"Woah! That's cool!\" position=\"bottom\" showOnFocus>\n * <span>3 replies</span>\n * </Tooltip>\n *\n * @example <caption>Incorrect usage</caption>\n * // This is wrong! Surround the children with a <span> or similar.\n * <Tooltip text=\"This won't work\">\n * Click\n * <a href=\"/\">here</a>\n * </Tooltip>\n */\nexport default class Tooltip extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"firstChild\", null);\n _defineProperty(this, \"childDomNode\", null);\n _defineProperty(this, \"oldText\", '');\n _defineProperty(this, \"oldVisibility\", void 0);\n _defineProperty(this, \"shouldRecreateTooltip\", false);\n _defineProperty(this, \"shouldChangeTooltipVisibility\", false);\n }\n view(vnode) {\n /**\n * We know this will be a ChildArray and not a primitive as this\n * vnode is a component, not a text or trusted HTML vnode.\n */\n const children = vnode.children;\n\n // We remove these to get the remaining attrs to pass to the DOM element\n const {\n text,\n tooltipVisible,\n showOnFocus = true,\n position = 'top',\n ignoreTitleWarning = false,\n html = false,\n delay = 0,\n ...attrs\n } = this.attrs;\n if (this.attrs.title && !ignoreTitleWarning) {\n console.warn('`title` attribute was passed to Tooltip component. Was this intentional? Tooltip content should be passed to the `text` attr instead.');\n }\n const realText = this.getRealText();\n\n // We need to recreate the tooltip if the text has changed\n if (realText !== this.oldText) {\n this.oldText = realText;\n this.shouldRecreateTooltip = true;\n }\n if (tooltipVisible !== this.oldVisibility) {\n this.oldVisibility = this.attrs.tooltipVisible;\n this.shouldChangeTooltipVisibility = true;\n }\n\n // We'll try our best to detect any issues created by devs before they cause any weird effects.\n // Throwing an error will prevent the forum rendering, but will be better at alerting devs to\n // an issue.\n\n if (typeof children === 'undefined') {\n throw new Error(\"Tooltip component was provided with no direct child DOM element. Tooltips must contain a single direct DOM node to attach to.\");\n }\n if (children.length !== 1) {\n throw new Error(\"Tooltip component was either passed more than one or no child node.\\n\\nPlease wrap multiple children in another element, such as a <div> or <span>.\");\n }\n const firstChild = children[0];\n if (typeof firstChild !== 'object' || Array.isArray(firstChild) || firstChild === null) {\n throw new Error(\"Tooltip component was provided with no direct child DOM element. Tooltips must contain a single direct DOM node to attach to.\");\n }\n if (typeof firstChild.tag === 'string' && ['#', '[', '<'].includes(firstChild.tag)) {\n throw new Error(\"Tooltip component with provided with a vnode with tag \\\"\".concat(firstChild.tag, \"\\\". This is not a DOM element, so is not a valid child element. Please wrap this vnode in another element, such as a <div> or <span>.\"));\n }\n this.firstChild = firstChild;\n return children;\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.checkDomNodeChanged();\n this.recreateTooltip();\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n this.checkDomNodeChanged();\n this.recreateTooltip();\n }\n recreateTooltip() {\n if (this.shouldRecreateTooltip && this.childDomNode !== null) {\n $(this.childDomNode).tooltip('destroy',\n // @ts-expect-error We don't want this arg to be part of the public API. It only exists to prevent deprecation warnings when using `$.tooltip` in this component.\n 'DANGEROUS_tooltip_jquery_fn_deprecation_exempt');\n this.createTooltip();\n this.shouldRecreateTooltip = false;\n }\n if (this.shouldChangeTooltipVisibility) {\n this.shouldChangeTooltipVisibility = false;\n this.updateVisibility();\n }\n }\n updateVisibility() {\n if (this.childDomNode === null) return;\n if (this.attrs.tooltipVisible === true) {\n $(this.childDomNode).tooltip('show',\n // @ts-expect-error We don't want this arg to be part of the public API. It only exists to prevent deprecation warnings when using `$.tooltip` in this component.\n 'DANGEROUS_tooltip_jquery_fn_deprecation_exempt');\n } else if (this.attrs.tooltipVisible === false) {\n $(this.childDomNode).tooltip('hide',\n // @ts-expect-error We don't want this arg to be part of the public API. It only exists to prevent deprecation warnings when using `$.tooltip` in this component.\n 'DANGEROUS_tooltip_jquery_fn_deprecation_exempt');\n }\n }\n createTooltip() {\n if (this.childDomNode === null) return;\n const {\n showOnFocus = true,\n position = 'top',\n delay,\n // This will have no effect when switching to CSS tooltips\n html = false,\n tooltipVisible,\n text\n } = this.attrs;\n\n // Fancy \"hack\" to assemble the trigger string\n const trigger = typeof tooltipVisible === 'boolean' ? 'manual' : classList('hover', [showOnFocus && 'focus']);\n const realText = this.getRealText();\n this.childDomNode.setAttribute('title', realText);\n this.childDomNode.setAttribute('aria-label', realText);\n\n // https://getbootstrap.com/docs/3.3/javascript/#tooltips-options\n $(this.childDomNode).tooltip({\n html,\n delay,\n placement: position,\n trigger\n },\n // @ts-expect-error We don't want this arg to be part of the public API. It only exists to prevent deprecation warnings when using `$.tooltip` in this component.\n 'DANGEROUS_tooltip_jquery_fn_deprecation_exempt');\n }\n getRealText() {\n const {\n text\n } = this.attrs;\n return Array.isArray(text) ? extractText(text) : text;\n }\n\n /**\n * Checks if the tooltip DOM node has changed.\n *\n * If it has, it updates `this.childDomNode` to the new node, and sets\n * `shouldRecreateTooltip` to `true`.\n */\n checkDomNodeChanged() {\n const domNode = this.firstChild.dom;\n if (domNode && !domNode.isSameNode(this.childDomNode)) {\n this.childDomNode = domNode;\n this.shouldRecreateTooltip = true;\n }\n }\n}\nflarum.reg.add('core', 'common/components/Tooltip', Tooltip);","import Component from '../../common/Component';\nimport Link from '../../common/components/Link';\nimport app from '../app';\nimport Avatar from '../../common/components/Avatar';\nimport listItems from '../../common/helpers/listItems';\nimport username from '../../common/helpers/username';\nimport highlight from '../../common/helpers/highlight';\nimport classList from '../../common/utils/classList';\nexport default class UserSearchResult extends Component {\n view(vnode) {\n const user = this.attrs.user;\n return m(\"li\", {\n className: classList('UserSearchResult', this.attrs.className),\n \"data-index\": 'users' + user.id(),\n \"data-id\": user.id(),\n onclick: this.attrs.onclick\n }, this.attrs.onclick ? m(\"button\", {\n type: \"button\"\n }, this.content(vnode)) : m(Link, {\n href: 'user' in app.route ? app.route.user(user) : app.forum.attribute('baseUrl') + '/u/' + user.username()\n }, this.content(vnode)));\n }\n content(vnode) {\n const user = this.attrs.user;\n const query = this.attrs.query;\n const name = username(user, name => highlight(name, query));\n return m('[', null, m(Avatar, {\n user: user\n }), m(\"div\", {\n className: \"UserSearchResult-name\"\n }, name, m(\"div\", {\n className: \"badges badges--packed\"\n }, listItems(user.badges().toArray()))), vnode.children);\n }\n}\nflarum.reg.add('core', 'common/components/UserSearchResult', UserSearchResult);","/**\n * Extend an object's method by running its output through a mutating callback\n * every time it is called.\n *\n * The callback accepts the method's return value and should perform any\n * mutations directly on this value. For this reason, this function will not be\n * effective on methods which return scalar values (numbers, strings, booleans).\n *\n * Care should be taken to extend the correct object – in most cases, a class'\n * prototype will be the desired target of extension, not the class itself.\n *\n * @example <caption>Example usage of extending one method.</caption>\n * extend(Discussion.prototype, 'badges', function(badges) {\n * // do something with `badges`\n * });\n *\n * @example <caption>Example usage of extending multiple methods.</caption>\n * extend(IndexPage.prototype, ['oncreate', 'onupdate'], function(vnode) {\n * // something that needs to be run on creation and update\n * });\n *\n * @param object The object that owns the method\n * @param methods The name or names of the method(s) to extend\n * @param callback A callback which mutates the method's output\n */\nexport function extend(object, methods, callback) {\n // A lazy loaded module, only apply the function after the module is loaded.\n if (typeof object === 'string') {\n let [namespace, id] = flarum.reg.namespaceAndIdFromPath(object);\n return flarum.reg.onLoad(namespace, id, module => {\n extend(module.prototype, methods, callback);\n });\n }\n const allMethods = Array.isArray(methods) ? methods : [methods];\n allMethods.forEach(method => {\n const original = object[method];\n object[method] = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n const value = original ? original.apply(this, args) : undefined;\n callback.apply(this, [value, ...args]);\n return value;\n };\n Object.assign(object[method], original);\n });\n}\n\n/**\n * Override an object's method by replacing it with a new function, so that the\n * new function will be run every time the object's method is called.\n *\n * The replacement function accepts the original method as its first argument,\n * which is like a call to `super`. Any arguments passed to the original method\n * are also passed to the replacement.\n *\n * Care should be taken to extend the correct object – in most cases, a class'\n * prototype will be the desired target of extension, not the class itself.\n *\n * @example <caption>Example usage of overriding one method.</caption>\n * override(Discussion.prototype, 'badges', function(original) {\n * const badges = original();\n * // do something with badges\n * return badges;\n * });\n *\n * @example <caption>Example usage of overriding multiple methods.</caption>\n * extend(Discussion.prototype, ['oncreate', 'onupdate'], function(original, vnode) {\n * // something that needs to be run on creation and update\n * });\n *\n * @param object The object that owns the method\n * @param methods The name or names of the method(s) to override\n * @param newMethod The method to replace it with\n */\nexport function override(object, methods, newMethod) {\n // A lazy loaded module, only apply the function after the module is loaded.\n if (typeof object === 'string') {\n let [namespace, id] = flarum.reg.namespaceAndIdFromPath(object);\n return flarum.reg.onLoad(namespace, id, module => {\n override(module.prototype, methods, newMethod);\n });\n }\n const allMethods = Array.isArray(methods) ? methods : [methods];\n allMethods.forEach(method => {\n const original = object[method];\n object[method] = function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return newMethod.apply(this, [original == null ? void 0 : original.bind(this), ...args]);\n };\n Object.assign(object[method], original);\n });\n}\nflarum.reg.add('core', 'common/extend', { extend: extend,override: override, });","import app from '../app';\n\n/**\n * Fire a Flarum error which is shown in the JS console for everyone and in an alert for the admin.\n *\n * @param userTitle: a user friendly title of the error, should be localized.\n * @param consoleTitle: an error title that goes in the console, doesn't have to be localized.\n * @param error: the error.\n */\nexport default function fireApplicationError(userTitle, consoleTitle, error) {\n var _app$session;\n console.group(\"%c\".concat(consoleTitle), 'background-color: #d83e3e; color: #ffffff; font-weight: bold;');\n console.error(error);\n console.groupEnd();\n if ((_app$session = app.session) != null && (_app$session = _app$session.user) != null && _app$session.isAdmin()) {\n app.alerts.show({\n type: 'error'\n }, \"\".concat(userTitle));\n }\n}\nflarum.reg.add('core', 'common/helpers/fireApplicationError', fireApplicationError);","import dayjs from 'dayjs';\n/**\n * The `fullTime` helper displays a formatted time string wrapped in a <time>\n * tag.\n */\nexport default function fullTime(time) {\n const d = dayjs(time);\n const datetime = d.format();\n const full = d.format('LLLL');\n return m(\"time\", {\n pubdate: true,\n datetime: datetime\n }, full);\n}\nflarum.reg.add('core', 'common/helpers/fullTime', fullTime);","import { truncate } from '../utils/string';\n\n/**\n * The `highlight` helper searches for a word phrase in a string, and wraps\n * matches with the <mark> tag.\n *\n * @param string The string to highlight.\n * @param phrase The word or words to highlight.\n * @param [length] The number of characters to truncate the string to.\n * The string will be truncated surrounding the first match.\n * @param safe Whether the content is safe to render as HTML or\n * should be escaped (HTML entities encoded).\n */\nexport default function highlight(string, phrase, length, safe) {\n if (safe === void 0) {\n safe = false;\n }\n if (!phrase && !length) return string;\n\n // Convert the word phrase into a global regular expression (if it isn't\n // already) so we can search the string for matched.\n const regexp = phrase instanceof RegExp ? phrase : new RegExp(phrase != null ? phrase : '', 'gi');\n let highlighted = string;\n let start = 0;\n\n // If a length was given, the truncate the string surrounding the first match.\n if (length) {\n if (phrase) start = Math.max(0, string.search(regexp) - length / 2);\n highlighted = truncate(highlighted, length, start);\n }\n\n // Convert the string into HTML entities, then highlight all matches with\n // <mark> tags. Then we will return the result as a trusted HTML string.\n if (!safe) {\n highlighted = $('<div/>').text(highlighted).html();\n }\n if (phrase) highlighted = highlighted.replace(regexp, '<mark>$&</mark>');\n return m.trust(highlighted);\n}\nflarum.reg.add('core', 'common/helpers/highlight', highlight);","import dayjs from 'dayjs';\nimport humanTimeUtil from '../utils/humanTime';\n\n/**\n * The `humanTime` helper displays a time in a human-friendly time-ago format\n * (e.g. '12 days ago'), wrapped in a <time> tag with other information about\n * the time.\n */\nexport default function humanTime(time) {\n const d = dayjs(time);\n const datetime = d.format();\n const full = d.format('LLLL');\n const ago = humanTimeUtil(time);\n return m(\"time\", {\n pubdate: true,\n datetime: datetime,\n title: full,\n \"data-humantime\": true\n }, ago);\n}\nflarum.reg.add('core', 'common/helpers/humanTime', humanTime);","import Separator from '../components/Separator';\nimport classList from '../utils/classList';\n\n/**\n * This type represents an element of a list returned by `ItemList.toArray()`,\n * coupled with some static properties used on various components.\n */\n\nfunction isVnode(item) {\n return typeof item === 'object' && item !== null && 'tag' in item;\n}\nfunction isSeparator(item) {\n return isVnode(item) && item.tag === Separator;\n}\nfunction withoutUnnecessarySeparators(items) {\n const newItems = [];\n let prevItem;\n items.filter(Boolean).forEach((item, i) => {\n if (!isSeparator(item) || prevItem && !isSeparator(prevItem) && i !== items.length - 1) {\n prevItem = item;\n newItems.push(item);\n }\n });\n return newItems;\n}\n\n/**\n * The `listItems` helper wraps an array of components in the provided tag,\n * stripping out any unnecessary `Separator` components.\n *\n * By default, this tag is an `<li>` tag, but this is customisable through the\n * second function parameter, `customTag`.\n */\nexport default function listItems(rawItems, customTag, attributes) {\n if (customTag === void 0) {\n customTag = 'li';\n }\n if (attributes === void 0) {\n attributes = {};\n }\n const items = rawItems instanceof Array ? rawItems : [rawItems];\n const Tag = customTag;\n return withoutUnnecessarySeparators(items).map(item => {\n var _item$attrs2;\n const classes = [item.itemName && \"item-\".concat(item.itemName)];\n if (isVnode(item) && item.tag.isListItem) {\n item.attrs = item.attrs || {};\n item.attrs.key = item.attrs.key || item.itemName;\n item.key = item.attrs.key;\n return item;\n }\n if (isVnode(item)) {\n var _item$attrs, _item$tag$isActive, _item$tag;\n classes.push(((_item$attrs = item.attrs) == null ? void 0 : _item$attrs.itemClassName) || item.itemClassName);\n if ((_item$tag$isActive = (_item$tag = item.tag).isActive) != null && _item$tag$isActive.call(_item$tag, item.attrs)) {\n classes.push('active');\n }\n }\n const key = isVnode(item) && (item == null || (_item$attrs2 = item.attrs) == null ? void 0 : _item$attrs2.key) || item.itemName;\n return m(Tag, Object.assign({\n className: classList(classes),\n key: key\n }, attributes), item);\n });\n}\nflarum.reg.add('core', 'common/helpers/listItems', listItems);","import isDark from '../utils/isDark';\nexport default function textContrastClass(hexcolor) {\n if (!hexcolor) return 'text-contrast--unchanged';\n return isDark(hexcolor) ? 'text-contrast--light' : 'text-contrast--dark';\n}\nflarum.reg.add('core', 'common/helpers/textContrastClass', textContrastClass);","import Icon from '../components/Icon';\n\n/**\n * The `useronline` helper displays a green circle if the user is online.\n */\nexport default function userOnline(user) {\n if (user.lastSeenAt() && user.isOnline()) {\n return m(\"span\", {\n className: \"UserOnline\"\n }, m(Icon, {\n name: 'fas fa-circle'\n }));\n }\n return null;\n}\nflarum.reg.add('core', 'common/helpers/userOnline', userOnline);","import app from '../../common/app';\nimport extractText from '../utils/extractText';\n\n/**\n * The `username` helper displays a user's username in a <span className=\"username\">\n * tag. If the user doesn't exist, the username will be displayed as [deleted].\n */\nexport default function username(user, transformer) {\n const name = user && user.displayName() || extractText(app.translator.trans('core.lib.username.deleted_text'));\n const children = transformer ? transformer(name) : name;\n return m(\"span\", {\n className: \"username\"\n }, children);\n}\nflarum.reg.add('core', 'common/helpers/username', username);","import Model from '../Model';\nexport default class AccessToken extends Model {\n token() {\n return Model.attribute('token').call(this);\n }\n userId() {\n return Model.attribute('userId').call(this);\n }\n title() {\n return Model.attribute('title').call(this);\n }\n type() {\n return Model.attribute('type').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n lastActivityAt() {\n return Model.attribute('lastActivityAt', Model.transformDate).call(this);\n }\n lastIpAddress() {\n return Model.attribute('lastIpAddress').call(this);\n }\n device() {\n return Model.attribute('device').call(this);\n }\n isCurrent() {\n return Model.attribute('isCurrent').call(this);\n }\n isSessionToken() {\n return Model.attribute('isSessionToken').call(this);\n }\n}\nflarum.reg.add('core', 'common/models/AccessToken', AccessToken);","import app from '../../common/app';\nimport Model from '../Model';\nimport computed from '../utils/computed';\nimport ItemList from '../utils/ItemList';\nimport Badge from '../components/Badge';\nexport default class Discussion extends Model {\n title() {\n return Model.attribute('title').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n user() {\n return Model.hasOne('user').call(this);\n }\n firstPost() {\n return Model.hasOne('firstPost').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedUser() {\n return Model.hasOne('lastPostedUser').call(this);\n }\n lastPost() {\n return Model.hasOne('lastPost').call(this);\n }\n lastPostNumber() {\n return Model.attribute('lastPostNumber').call(this);\n }\n commentCount() {\n return Model.attribute('commentCount').call(this);\n }\n replyCount() {\n return computed('commentCount', commentCount => {\n var _ref;\n return Math.max(0, ((_ref = commentCount) != null ? _ref : 0) - 1);\n }).call(this);\n }\n posts() {\n return Model.hasMany('posts').call(this);\n }\n mostRelevantPost() {\n return Model.hasOne('mostRelevantPost').call(this);\n }\n lastReadAt() {\n return Model.attribute('lastReadAt', Model.transformDate).call(this);\n }\n lastReadPostNumber() {\n return Model.attribute('lastReadPostNumber').call(this);\n }\n isUnread() {\n return computed('unreadCount', unreadCount => !!unreadCount).call(this);\n }\n isRead() {\n return computed('unreadCount', unreadCount => !!(app.session.user && !unreadCount)).call(this);\n }\n hiddenAt() {\n return Model.attribute('hiddenAt', Model.transformDate).call(this);\n }\n hiddenUser() {\n return Model.hasOne('hiddenUser').call(this);\n }\n isHidden() {\n return computed('hiddenAt', hiddenAt => !!hiddenAt).call(this);\n }\n canReply() {\n return Model.attribute('canReply').call(this);\n }\n canRename() {\n return Model.attribute('canRename').call(this);\n }\n canHide() {\n return Model.attribute('canHide').call(this);\n }\n canDelete() {\n return Model.attribute('canDelete').call(this);\n }\n\n /**\n * Remove a post from the discussion's posts relationship.\n */\n removePost(id) {\n const posts = this.rawRelationship('posts');\n if (!posts) {\n return;\n }\n posts.some((data, i) => {\n if (id === data.id) {\n posts.splice(i, 1);\n return true;\n }\n return false;\n });\n }\n\n /**\n * Get the estimated number of unread posts in this discussion for the current\n * user.\n */\n unreadCount() {\n var _user$markedAllAsRead, _user$markedAllAsRead2, _this$lastPostedAt;\n const user = app.session.user;\n if (user && ((_user$markedAllAsRead = (_user$markedAllAsRead2 = user.markedAllAsReadAt()) == null ? void 0 : _user$markedAllAsRead2.getTime()) != null ? _user$markedAllAsRead : 0) < ((_this$lastPostedAt = this.lastPostedAt()) == null ? void 0 : _this$lastPostedAt.getTime())) {\n var _this$lastPostNumber, _this$commentCount;\n const unreadCount = Math.max(0, ((_this$lastPostNumber = this.lastPostNumber()) != null ? _this$lastPostNumber : 0) - (this.lastReadPostNumber() || 0));\n // If posts have been deleted, it's possible that the unread count could exceed the\n // actual post count. As such, we take the min of the two to ensure this isn't an issue.\n return Math.min(unreadCount, (_this$commentCount = this.commentCount()) != null ? _this$commentCount : 0);\n }\n return 0;\n }\n\n /**\n * Get the Badge components that apply to this discussion.\n */\n badges() {\n const items = new ItemList();\n if (this.isHidden()) {\n items.add('hidden', m(Badge, {\n type: \"hidden\",\n icon: \"fas fa-trash\",\n label: app.translator.trans('core.lib.badge.hidden_tooltip')\n }));\n }\n return items;\n }\n\n /**\n * Get a list of all of the post IDs in this discussion.\n */\n postIds() {\n var _this$rawRelationship, _this$rawRelationship2;\n return (_this$rawRelationship = (_this$rawRelationship2 = this.rawRelationship('posts')) == null ? void 0 : _this$rawRelationship2.map(link => link.id)) != null ? _this$rawRelationship : [];\n }\n}\nflarum.reg.add('core', 'common/models/Discussion', Discussion);","import Model from '../Model';\nexport default class Forum extends Model {\n apiEndpoint() {\n return '/';\n }\n}\nflarum.reg.add('core', 'common/models/Forum', Forum);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Model from '../Model';\nexport default class Group extends Model {\n nameSingular() {\n return Model.attribute('nameSingular').call(this);\n }\n namePlural() {\n return Model.attribute('namePlural').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n}\n_defineProperty(Group, \"ADMINISTRATOR_ID\", '1');\n_defineProperty(Group, \"GUEST_ID\", '2');\n_defineProperty(Group, \"MEMBER_ID\", '3');\nflarum.reg.add('core', 'common/models/Group', Group);","import Model from '../Model';\nexport default class Notification extends Model {\n contentType() {\n return Model.attribute('contentType').call(this);\n }\n content() {\n return Model.attribute('content').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n isRead() {\n return Model.attribute('isRead').call(this);\n }\n user() {\n return Model.hasOne('user').call(this);\n }\n fromUser() {\n return Model.hasOne('fromUser').call(this);\n }\n subject() {\n return Model.hasOne('subject').call(this);\n }\n}\nflarum.reg.add('core', 'common/models/Notification', Notification);","import Model from '../Model';\nimport computed from '../utils/computed';\nimport { getPlainContent } from '../utils/string';\nexport default class Post extends Model {\n number() {\n return Model.attribute('number').call(this);\n }\n discussion() {\n return Model.hasOne('discussion').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n user() {\n return Model.hasOne('user').call(this);\n }\n contentType() {\n return Model.attribute('contentType').call(this);\n }\n content() {\n return Model.attribute('content').call(this);\n }\n contentHtml() {\n return Model.attribute('contentHtml').call(this);\n }\n renderFailed() {\n return Model.attribute('renderFailed').call(this);\n }\n contentPlain() {\n return computed('contentHtml', content => {\n if (typeof content === 'string') {\n return getPlainContent(content);\n }\n return content;\n }).call(this);\n }\n editedAt() {\n return Model.attribute('editedAt', Model.transformDate).call(this);\n }\n editedUser() {\n return Model.hasOne('editedUser').call(this);\n }\n isEdited() {\n return computed('editedAt', editedAt => !!editedAt).call(this);\n }\n hiddenAt() {\n return Model.attribute('hiddenAt', Model.transformDate).call(this);\n }\n hiddenUser() {\n return Model.hasOne('hiddenUser').call(this);\n }\n isHidden() {\n return computed('hiddenAt', hiddenAt => !!hiddenAt).call(this);\n }\n canEdit() {\n return Model.attribute('canEdit').call(this);\n }\n canHide() {\n return Model.attribute('canHide').call(this);\n }\n canDelete() {\n return Model.attribute('canDelete').call(this);\n }\n}\nflarum.reg.add('core', 'common/models/Post', Post);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport ColorThief from 'color-thief-browser';\nimport Model from '../Model';\nimport stringToColor from '../utils/stringToColor';\nimport ItemList from '../utils/ItemList';\nimport computed from '../utils/computed';\nimport GroupBadge from '../components/GroupBadge';\nexport default class User extends Model {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"avatarColor\", null);\n }\n username() {\n return Model.attribute('username').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n displayName() {\n return Model.attribute('displayName').call(this);\n }\n email() {\n return Model.attribute('email').call(this);\n }\n isEmailConfirmed() {\n return Model.attribute('isEmailConfirmed').call(this);\n }\n password() {\n return Model.attribute('password').call(this);\n }\n avatarUrl() {\n return Model.attribute('avatarUrl').call(this);\n }\n preferences() {\n return Model.attribute('preferences').call(this);\n }\n groups() {\n return Model.hasMany('groups').call(this);\n }\n isAdmin() {\n return Model.attribute('isAdmin').call(this);\n }\n joinTime() {\n return Model.attribute('joinTime', Model.transformDate).call(this);\n }\n lastSeenAt() {\n return Model.attribute('lastSeenAt', Model.transformDate).call(this);\n }\n markedAllAsReadAt() {\n return Model.attribute('markedAllAsReadAt', Model.transformDate).call(this);\n }\n unreadNotificationCount() {\n return Model.attribute('unreadNotificationCount').call(this);\n }\n newNotificationCount() {\n return Model.attribute('newNotificationCount').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n commentCount() {\n return Model.attribute('commentCount').call(this);\n }\n canEdit() {\n return Model.attribute('canEdit').call(this);\n }\n canEditCredentials() {\n return Model.attribute('canEditCredentials').call(this);\n }\n canEditGroups() {\n return Model.attribute('canEditGroups').call(this);\n }\n canDelete() {\n return Model.attribute('canDelete').call(this);\n }\n color() {\n return computed('displayName', 'avatarUrl', 'avatarColor', (displayName, avatarUrl, avatarColor) => {\n // If we've already calculated and cached the dominant color of the user's\n // avatar, then we can return that in RGB format. If we haven't, we'll want\n // to calculate it. Unless the user doesn't have an avatar, in which case\n // we generate a color from their display name.\n if (avatarColor) {\n return \"rgb(\".concat(avatarColor.join(', '), \")\");\n } else if (avatarUrl) {\n this.calculateAvatarColor();\n return '';\n }\n return '#' + stringToColor(displayName);\n }).call(this);\n }\n /**\n * Check whether or not the user has been seen in the last 5 minutes.\n */\n isOnline() {\n return dayjs().subtract(5, 'minutes').isBefore(this.lastSeenAt());\n }\n\n /**\n * Get the Badge components that apply to this user.\n */\n badges() {\n const items = new ItemList();\n const groups = this.groups();\n if (groups) {\n groups.forEach(group => {\n items.add(\"group\".concat(group == null ? void 0 : group.id()), m(GroupBadge, {\n group: group\n }));\n });\n }\n return items;\n }\n\n /**\n * Calculate the dominant color of the user's avatar. The dominant color will\n * be set to the `avatarColor` property once it has been calculated.\n */\n calculateAvatarColor() {\n var _this$avatarUrl;\n const image = new Image();\n const user = this;\n image.addEventListener('load', function () {\n try {\n const colorThief = new ColorThief();\n user.avatarColor = colorThief.getColor(this);\n } catch (e) {\n // Completely white avatars throw errors due to a glitch in color thief\n // See https://github.com/lokesh/color-thief/issues/40\n if (e instanceof TypeError) {\n user.avatarColor = [255, 255, 255];\n } else {\n throw e;\n }\n }\n user.freshness = new Date();\n m.redraw();\n });\n image.crossOrigin = 'anonymous';\n image.src = (_this$avatarUrl = this.avatarUrl()) != null ? _this$avatarUrl : '';\n }\n\n /**\n * Update the user's preferences.\n */\n savePreferences(newPreferences) {\n const preferences = this.preferences();\n Object.assign(preferences != null ? preferences : {}, newPreferences);\n return this.save({\n preferences\n });\n }\n}\nflarum.reg.add('core', 'common/models/User', User);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nexport let GambitType = /*#__PURE__*/function (GambitType) {\n GambitType[\"KeyValue\"] = \"key:value\";\n GambitType[\"Grouped\"] = \"grouped\";\n return GambitType;\n}({});\nexport class BooleanGambit {\n constructor() {\n _defineProperty(this, \"type\", GambitType.Grouped);\n _defineProperty(this, \"predicates\", false);\n }\n pattern() {\n const is = app.translator.trans('core.lib.gambits.boolean_key', {}, true);\n let key = this.key();\n if (Array.isArray(key)) {\n key = key.join('|');\n }\n return \"\".concat(is, \":(\").concat(key, \")\");\n }\n toFilter(_matches, negate) {\n const key = (negate ? '-' : '') + this.filterKey();\n return {\n [key]: true\n };\n }\n fromFilter(value, negate) {\n const is = app.translator.trans('core.lib.gambits.boolean_key', {}, true);\n const key = this.key();\n return \"\".concat(negate ? '-' : '').concat(is, \":\").concat(key);\n }\n suggestion() {\n return {\n group: app.translator.trans('core.lib.gambits.boolean_key', {}, true),\n key: this.key()\n };\n }\n enabled() {\n return true;\n }\n}\nexport class KeyValueGambit {\n constructor() {\n _defineProperty(this, \"type\", GambitType.KeyValue);\n _defineProperty(this, \"predicates\", false);\n }\n valuePattern() {\n return '(.+)';\n }\n gambitValueToFilterValue(value) {\n return value;\n }\n filterValueToGambitValue(value) {\n return Array.isArray(value) ? value.join(',') : value.toString();\n }\n pattern() {\n const key = this.key();\n return \"\".concat(key, \":\") + this.valuePattern();\n }\n toFilter(matches, negate) {\n const key = (negate ? '-' : '') + this.filterKey();\n return {\n [key]: this.gambitValueToFilterValue(matches[1])\n };\n }\n fromFilter(value, negate) {\n return \"\".concat(negate ? '-' : '').concat(this.key(), \":\").concat(this.filterValueToGambitValue(value));\n }\n suggestion() {\n return {\n key: this.key(),\n hint: this.hint()\n };\n }\n enabled() {\n return true;\n }\n}\nflarum.reg.add('core', 'common/query/IGambit', { GambitType: GambitType,BooleanGambit: BooleanGambit,KeyValueGambit: KeyValueGambit, });","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from '../Component';\n\n/**\n * Generates a route resolver for a given component.\n *\n * In addition to regular route resolver functionality:\n * - It provide the current route name as an attr\n * - It sets a key on the component so a rerender will be triggered on route change.\n */\nexport default class DefaultResolver {\n constructor(component, routeName) {\n _defineProperty(this, \"component\", void 0);\n _defineProperty(this, \"routeName\", void 0);\n this.component = component;\n this.routeName = routeName;\n }\n\n /**\n * When a route change results in a changed key, a full page\n * rerender occurs. This method can be overriden in subclasses\n * to prevent rerenders on some route changes.\n */\n makeKey() {\n return this.routeName + JSON.stringify(m.route.param());\n }\n makeAttrs(vnode) {\n return {\n ...vnode.attrs,\n routeName: this.routeName\n };\n }\n async onmatch(args, requestedPath, route) {\n if (this.component.prototype instanceof Component) {\n return this.component;\n }\n return (await this.component()).default;\n }\n render(vnode) {\n return [{\n ...vnode,\n attrs: this.makeAttrs(vnode),\n key: this.makeKey()\n }];\n }\n}\nflarum.reg.add('core', 'common/resolvers/DefaultResolver', DefaultResolver);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Alert from '../components/Alert';\nimport app from '../app';\n\n/**\n * Returned by `AlertManagerState.show`. Used to dismiss alerts.\n */\n\nexport default class AlertManagerState {\n constructor() {\n _defineProperty(this, \"activeAlerts\", {});\n _defineProperty(this, \"alertId\", 0);\n _defineProperty(this, \"loadingPool\", 0);\n }\n getActiveAlerts() {\n return this.activeAlerts;\n }\n\n /**\n * Show an Alert in the alerts area.\n *\n * @return The alert's ID, which can be used to dismiss the alert.\n */\n\n show(arg1, arg2, arg3) {\n // Assigns variables as per the above signatures\n let componentClass = Alert;\n let attrs = {};\n let children;\n if (arguments.length == 1) {\n children = arg1;\n } else if (arguments.length == 2) {\n attrs = arg1;\n children = arg2;\n } else if (arguments.length == 3) {\n componentClass = arg1;\n attrs = arg2;\n children = arg3;\n }\n this.activeAlerts[++this.alertId] = {\n children,\n attrs,\n componentClass\n };\n m.redraw();\n return this.alertId;\n }\n\n /**\n * Dismiss an alert.\n */\n dismiss(key) {\n if (!key || !(key in this.activeAlerts)) return;\n delete this.activeAlerts[key];\n m.redraw();\n }\n\n /**\n * Clear all alerts.\n */\n clear() {\n this.activeAlerts = {};\n m.redraw();\n }\n\n /**\n * Shows a loading alert.\n */\n showLoading() {\n this.loadingPool++;\n if (this.loadingPool > 1) return null;\n return this.show({\n type: 'warning',\n dismissible: false\n }, app.translator.trans('core.lib.loading_indicator.accessible_label'));\n }\n\n /**\n * Hides a loading alert.\n */\n clearLoading() {\n this.loadingPool--;\n if (this.loadingPool === 0) this.clear();\n }\n}\nflarum.reg.add('core', 'common/states/AlertManagerState', AlertManagerState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Modal from '../components/Modal';\n\n/**\n * Ideally, `show` would take a higher-kinded generic, ala:\n * `show<Attrs, C>(componentClass: C<Attrs>, attrs: Attrs): void`\n * Unfortunately, TypeScript does not support this:\n * https://github.com/Microsoft/TypeScript/issues/1213\n * Therefore, we have to use this ugly, messy workaround.\n */\n\n/**\n * Alternatively, `show` takes an async function that returns a modal class.\n * This is useful for lazy-loading modals.\n */\n\n/**\n * Class used to manage modal state.\n *\n * Accessible on the `app` object via `app.modal` property.\n */\nexport default class ModalManagerState {\n constructor() {\n /**\n * @internal\n */\n _defineProperty(this, \"modal\", null);\n /**\n * @internal\n */\n _defineProperty(this, \"modalList\", []);\n /**\n * @internal\n */\n _defineProperty(this, \"backdropShown\", false);\n /**\n * @internal\n */\n _defineProperty(this, \"loadingModal\", false);\n /**\n * Used to force re-initialization of modals if a modal\n * is replaced by another of the same type.\n */\n _defineProperty(this, \"key\", 0);\n }\n /**\n * Shows a modal dialog.\n *\n * If `stackModal` is `true`, the modal will be shown on top of the current modal.\n *\n * If a value for `stackModal` is not provided, opening a new modal will close\n * any others currently being shown for backwards compatibility.\n *\n * @example <caption>Show a modal</caption>\n * app.modal.show(MyCoolModal, { attr: 'value' });\n *\n * @example <caption>Show a modal from a lifecycle method (`oncreate`, `view`, etc.)</caption>\n * // This \"hack\" is needed due to quirks with nested redraws in Mithril.\n * setTimeout(() => app.modal.show(MyCoolModal, { attr: 'value' }), 0);\n *\n * @example <caption>Stacking modals</caption>\n * app.modal.show(MyCoolStackedModal, { attr: 'value' }, true);\n */\n async show(componentClass, attrs, stackModal) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (stackModal === void 0) {\n stackModal = false;\n }\n if (!(componentClass.prototype instanceof Modal) && typeof componentClass !== 'function') {\n // This is duplicated so that if the error is caught, an error message still shows up in the debug console.\n const invalidModalWarning = 'The ModalManager can only show Modals.';\n console.error(invalidModalWarning);\n throw new Error(invalidModalWarning);\n }\n if (!(componentClass.prototype instanceof Modal)) {\n this.loadingModal = true;\n m.redraw.sync();\n componentClass = componentClass;\n componentClass = (await componentClass()).default;\n this.loadingModal = false;\n }\n this.backdropShown = true;\n m.redraw.sync();\n\n // We use requestAnimationFrame here, since we need to wait for the backdrop to be added\n // to the DOM before actually adding the modal to the modal list.\n //\n // This is because we use RAF inside the ModalManager onupdate lifecycle hook, and if we\n // skip this RAF call, the hook will attempt to add a focus trap as well as lock scroll\n // onto the newly added modal before it's in the DOM, creating an extra scrollbar.\n requestAnimationFrame(() => {\n componentClass = componentClass;\n\n // Set current modal\n this.modal = {\n componentClass,\n attrs,\n key: this.key++\n };\n\n // We want to stack this modal\n if (stackModal) {\n // Remember previously opened modal and add new modal to the modal list\n this.modalList.push(this.modal);\n } else {\n // Override last modals\n this.modalList = [this.modal];\n }\n m.redraw();\n });\n }\n\n /**\n * Closes the topmost currently open dialog, if one is open.\n */\n close() {\n if (!this.modal) return;\n\n // If there are two modals, remove the most recent one\n if (this.modalList.length > 1) {\n // Remove last modal from list\n this.modalList.pop();\n\n // Open last modal from list\n this.modal = this.modalList[this.modalList.length - 1];\n } else {\n // Reset state\n this.modal = null;\n this.modalList = [];\n }\n m.redraw();\n }\n\n /**\n * Checks if a modal is currently open.\n *\n * @return `true` if a modal dialog is currently open, otherwise `false`.\n */\n isModalOpen() {\n return !!this.modal;\n }\n}\nflarum.reg.add('core', 'common/states/ModalManagerState', ModalManagerState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport subclassOf from '../../common/utils/subclassOf';\nexport default class PageState {\n constructor(type, data) {\n if (data === void 0) {\n data = {};\n }\n _defineProperty(this, \"type\", void 0);\n _defineProperty(this, \"data\", void 0);\n this.type = type;\n /**\n * @type any\n */\n this.data = data;\n }\n\n /**\n * Determine whether the page matches the given class and data.\n *\n * @param {object} type The page class to check against. Subclasses are accepted as well.\n * @param {Record<string, unknown>} data\n * @return {boolean}\n */\n matches(type, data) {\n if (data === void 0) {\n data = {};\n }\n // Fail early when the page is of a different type\n if (!subclassOf(this.type, type)) return false;\n\n // Now that the type is known to be correct, we loop through the provided\n // data to see whether it matches the data in our state.\n return Object.keys(data).every(key => this.data[key] === data[key]);\n }\n get(key) {\n return this.data[key];\n }\n set(key, value) {\n this.data[key] = value;\n }\n}\nflarum.reg.add('core', 'common/states/PageState', PageState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../common/app';\nexport default class PaginatedListState {\n constructor(params, page, pageSize) {\n if (params === void 0) {\n params = {};\n }\n if (page === void 0) {\n page = 1;\n }\n if (pageSize === void 0) {\n pageSize = null;\n }\n _defineProperty(this, \"location\", void 0);\n _defineProperty(this, \"pageSize\", void 0);\n _defineProperty(this, \"totalItems\", null);\n _defineProperty(this, \"pages\", []);\n _defineProperty(this, \"params\", {});\n _defineProperty(this, \"initialLoading\", false);\n _defineProperty(this, \"loadingPrev\", false);\n _defineProperty(this, \"loadingNext\", false);\n _defineProperty(this, \"loadingPage\", false);\n this.params = params;\n this.location = {\n page\n };\n this.pageSize = pageSize;\n }\n clear() {\n this.pages = [];\n m.redraw();\n }\n loadPrev() {\n if (this.loadingPrev || this.getLocation().page === 1) return Promise.resolve();\n this.loadingPrev = true;\n const page = this.getPrevPageNumber();\n return this.loadPage(page).then(this.parseResults.bind(this, page)).finally(() => this.loadingPrev = false);\n }\n loadNext() {\n if (this.loadingNext) return Promise.resolve();\n this.loadingNext = true;\n const page = this.getNextPageNumber();\n return this.loadPage(page).then(this.parseResults.bind(this, page)).finally(() => this.loadingNext = false);\n }\n parseResults(pg, results) {\n var _results$payload;\n const pageNum = Number(pg);\n const links = (_results$payload = results.payload) == null ? void 0 : _results$payload.links;\n const page = {\n number: pageNum,\n items: results,\n hasNext: !!(links != null && links.next),\n hasPrev: !!(links != null && links.prev)\n };\n if (this.isEmpty() || pageNum > this.getNextPageNumber() - 1) {\n this.pages.push(page);\n } else {\n this.pages.unshift(page);\n }\n this.location = {\n page: pageNum\n };\n m.redraw();\n }\n\n /**\n * Load a new page of results.\n */\n loadPage(page) {\n if (page === void 0) {\n page = 1;\n }\n const reqParams = this.requestParams();\n const include = Array.isArray(reqParams.include) ? reqParams.include.join(',') : reqParams.include;\n const params = {\n ...reqParams,\n page: {\n ...reqParams.page,\n offset: this.pageSize && this.pageSize * (page - 1) || 0,\n limit: this.pageSize || undefined\n },\n include\n };\n if (typeof params.include === 'undefined') {\n delete params.include;\n }\n return app.store.find(this.type, params).then(results => {\n var _results$payload2, _results$payload3;\n const usedPerPage = (_results$payload2 = results.payload) == null || (_results$payload2 = _results$payload2.meta) == null ? void 0 : _results$payload2.perPage;\n const usedTotal = (_results$payload3 = results.payload) == null || (_results$payload3 = _results$payload3.meta) == null || (_results$payload3 = _results$payload3.page) == null ? void 0 : _results$payload3.total;\n\n /*\n * If this state does not rely on a preloaded API document to know the page size,\n * then there is no initial list, and therefore the page size can be taken from subsequent requests.\n */\n if (!this.pageSize || usedPerPage && this.pageSize !== usedPerPage) {\n this.pageSize = usedPerPage || PaginatedListState.DEFAULT_PAGE_SIZE;\n }\n if (!this.totalItems || usedTotal && this.totalItems !== usedTotal) {\n this.totalItems = usedTotal || null;\n }\n return results;\n });\n }\n\n /**\n * Get the parameters that should be passed in the API request.\n * Do not include page offset unless subclass overrides loadPage.\n *\n * @abstract\n * @see loadPage\n */\n requestParams() {\n return this.params;\n }\n\n /**\n * Update the `this.params` object, calling `refresh` if they have changed.\n * Use `requestParams` for converting `this.params` into API parameters\n *\n * @param newParams\n * @param page\n * @see requestParams\n */\n refreshParams(newParams, page) {\n if (this.isEmpty() || this.paramsChanged(newParams)) {\n this.params = newParams;\n return this.refresh(page);\n }\n return Promise.resolve();\n }\n refresh(page) {\n if (page === void 0) {\n page = 1;\n }\n this.initialLoading = true;\n this.loadingPrev = false;\n this.loadingNext = false;\n this.clear();\n return this.goto(page);\n }\n goto(page) {\n this.location = {\n page\n };\n if (!this.initialLoading) {\n this.loadingPage = true;\n }\n return this.loadPage(page).then(results => {\n this.pages = [];\n this.parseResults(this.location.page, results);\n }).finally(() => {\n this.initialLoading = false;\n this.loadingPage = false;\n });\n }\n getPages() {\n return this.pages;\n }\n getLocation() {\n return this.location;\n }\n isLoading() {\n return this.initialLoading || this.loadingNext || this.loadingPrev || this.loadingPage;\n }\n isInitialLoading() {\n return this.initialLoading;\n }\n isLoadingPrev() {\n return this.loadingPrev;\n }\n isLoadingNext() {\n return this.loadingNext;\n }\n\n /**\n * Returns true when the number of items across all loaded pages is not 0.\n *\n * @see isEmpty\n */\n hasItems() {\n return !!this.getAllItems().length;\n }\n\n /**\n * Returns true when there aren't any items *and* the state has already done its initial loading.\n * If you want to know whether there are items regardless of load state, use `hasItems()` instead\n *\n * @see hasItems\n */\n isEmpty() {\n return !this.isInitialLoading() && !this.hasItems();\n }\n hasPrev() {\n var _this$pages$;\n return !!((_this$pages$ = this.pages[0]) != null && _this$pages$.hasPrev);\n }\n hasNext() {\n var _this$pages;\n return !!((_this$pages = this.pages[this.pages.length - 1]) != null && _this$pages.hasNext);\n }\n\n /**\n * Stored state parameters.\n */\n getParams() {\n return this.params;\n }\n getNextPageNumber() {\n var _this$pages2;\n const pg = (_this$pages2 = this.pages[this.pages.length - 1]) == null ? void 0 : _this$pages2.number;\n if (pg && !isNaN(pg)) {\n return pg + 1;\n } else {\n return this.location.page;\n }\n }\n getPrevPageNumber() {\n var _this$pages$2;\n const pg = (_this$pages$2 = this.pages[0]) == null ? void 0 : _this$pages$2.number;\n if (pg && !isNaN(pg)) {\n // If the calculated page number is less than 1,\n // return 1 as the prev page (first possible page number)\n return Math.max(pg - 1, 1);\n } else {\n return this.location.page;\n }\n }\n paramsChanged(newParams) {\n return Object.keys(newParams).some(key => this.getParams()[key] !== newParams[key]);\n }\n getAllItems() {\n return this.getPages().map(pg => pg.items).flat();\n }\n\n /**\n * In the last request, has the user searched for a model?\n */\n isSearchResults() {\n return !!this.params.q;\n }\n push(model) {\n const lastPage = this.pages[this.pages.length - 1];\n if (lastPage && lastPage.items.length < (this.pageSize || PaginatedListState.DEFAULT_PAGE_SIZE)) {\n lastPage.items.push(model);\n } else {\n this.pages.push({\n number: lastPage ? lastPage.number + 1 : 1,\n items: [model],\n hasNext: lastPage.hasNext,\n hasPrev: Boolean(lastPage)\n });\n }\n m.redraw();\n }\n getSort() {\n return this.params.sort || '';\n }\n sortMap() {\n return {};\n }\n sortValue(sort) {\n return typeof sort === 'string' ? sort : sort == null ? void 0 : sort.sort;\n }\n currentSort() {\n return this.sortValue(this.sortMap()[this.getSort()]);\n }\n changeSort(sort) {\n this.refreshParams({\n ...this.params,\n sort: sort\n }, 1);\n }\n changeFilter(key, value) {\n this.refreshParams({\n ...this.params,\n filter: {\n ...this.params.filter,\n [key]: value\n }\n }, 1);\n }\n}\n/**\n * This value should not be relied upon when preloading an API document.\n * In those cases the pageSize should be taken from the meta information of the preloaded\n * document. Checkout `DiscussionListState.loadPage` for an example.\n */\n_defineProperty(PaginatedListState, \"DEFAULT_PAGE_SIZE\", 20);\nflarum.reg.add('core', 'common/states/PaginatedListState', PaginatedListState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class SearchState {\n constructor(cachedSearches) {\n if (cachedSearches === void 0) {\n cachedSearches = [];\n }\n _defineProperty(this, \"cachedSearches\", void 0);\n _defineProperty(this, \"value\", '');\n this.cachedSearches = new Set(cachedSearches);\n }\n\n /**\n * If we are displaying the full results of a search (not just a preview),\n * this value should return the query that prompted that search.\n *\n * In this generic class, full page searching is not supported.\n * This method should be implemented by subclasses that do support it.\n *\n * @see Search\n */\n getInitialSearch() {\n return '';\n }\n getValue() {\n return this.value;\n }\n setValue(value) {\n this.value = value;\n }\n\n /**\n * Clear the search value.\n */\n clear() {\n this.setValue('');\n }\n\n /**\n * Mark that we have already searched for this query so that we don't\n * have to ping the endpoint again.\n */\n cache(query) {\n this.cachedSearches.add(query);\n }\n\n /**\n * Check if this query has been searched before.\n */\n isCached(query) {\n return this.cachedSearches.has(query);\n }\n}\nflarum.reg.add('core', 'common/states/SearchState', SearchState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class AutocompleteReader {\n constructor(symbol) {\n _defineProperty(this, \"symbol\", void 0);\n _defineProperty(this, \"relativeStart\", 0);\n _defineProperty(this, \"absoluteStart\", 0);\n this.symbol = symbol;\n }\n check(lastChunk, cursor, validBit) {\n if (validBit === void 0) {\n validBit = null;\n }\n this.absoluteStart = 0;\n\n // Search backwards from the cursor for a symbol. If we find\n // one and followed by a whitespace, we will want to show the\n // autocomplete dropdown!\n for (let i = lastChunk.length - 1; i >= 0; i--) {\n var _validBit;\n const character = lastChunk.substr(i, 1);\n\n // check what the user typed is valid.\n if (validBit && !((_validBit = validBit) != null && _validBit.test(character))) return null;\n\n // check if the character is the symbol we are looking for.\n if (this.symbol) {\n const symbol = typeof this.symbol === 'string' ? character => character === this.symbol : this.symbol;\n if (!symbol(character)) continue;\n }\n\n // make sure the symbol preceded by a whitespace or newline\n if (i === 0 || /\\s/.test(lastChunk.substr(i - 1, 1))) {\n this.relativeStart = i + (this.symbol ? 1 : 0);\n this.absoluteStart = cursor - lastChunk.length + i + (this.symbol ? 1 : 0);\n return {\n symbol: this.symbol && character,\n relativeStart: this.relativeStart,\n absoluteStart: this.absoluteStart,\n typed: lastChunk.substring(this.relativeStart).toLowerCase()\n };\n }\n }\n return null;\n }\n}\nflarum.reg.add('core', 'common/utils/AutocompleteReader', AutocompleteReader);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport getCaretCoordinates from 'textarea-caret';\nimport insertText from './insertText';\nimport ItemList from './ItemList';\nexport default class BasicEditorDriver {\n constructor(dom, params) {\n _defineProperty(this, \"el\", void 0);\n this.el = document.createElement('textarea');\n this.build(dom, params);\n }\n build(dom, params) {\n this.el.className = params.classNames.join(' ');\n this.el.disabled = params.disabled;\n this.el.placeholder = params.placeholder;\n this.el.value = params.value;\n const callInputListeners = e => {\n params.inputListeners.forEach(listener => {\n listener();\n });\n e.redraw = false;\n };\n this.el.oninput = e => {\n params.oninput(this.el.value);\n callInputListeners(e);\n };\n this.el.onclick = callInputListeners;\n this.el.onkeyup = callInputListeners;\n this.el.addEventListener('keydown', e => {\n this.keyHandlers(params).toArray().forEach(handler => handler(e));\n });\n dom.append(this.el);\n }\n keyHandlers(params) {\n const items = new ItemList();\n items.add('submit', function (e) {\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n params.onsubmit();\n }\n });\n return items;\n }\n moveCursorTo(position) {\n this.setSelectionRange(position, position);\n }\n getSelectionRange() {\n return [this.el.selectionStart, this.el.selectionEnd];\n }\n getLastNChars(n) {\n const value = this.el.value;\n return value.slice(Math.max(0, this.el.selectionStart - n), this.el.selectionStart);\n }\n insertAtCursor(text) {\n this.insertAt(this.el.selectionStart, text);\n }\n insertAt(pos, text) {\n this.insertBetween(pos, pos, text);\n }\n insertBetween(selectionStart, selectionEnd, text) {\n this.setSelectionRange(selectionStart, selectionEnd);\n const cursorPos = selectionStart + text.length;\n insertText(this.el, {\n text,\n selectionStart: cursorPos,\n selectionEnd: cursorPos\n });\n }\n replaceBeforeCursor(start, text) {\n this.insertBetween(start, this.el.selectionStart, text);\n }\n setSelectionRange(start, end) {\n this.el.setSelectionRange(start, end);\n this.focus();\n }\n getCaretCoordinates(position) {\n const relCoords = getCaretCoordinates(this.el, position);\n return {\n top: relCoords.top - this.el.scrollTop,\n left: relCoords.left\n };\n }\n\n // DOM Interactions\n\n /**\n * Set the disabled status of the editor.\n */\n disabled(disabled) {\n this.el.disabled = disabled;\n }\n\n /**\n * Focus on the editor.\n */\n focus() {\n this.el.focus();\n }\n\n /**\n * Destroy the editor\n */\n destroy() {\n this.el.remove();\n }\n}\nflarum.reg.add('core', 'common/utils/BasicEditorDriver', BasicEditorDriver);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class EventEmitter {\n constructor() {\n _defineProperty(this, \"events\", {});\n this.events = {};\n }\n on(event, listener) {\n if (!this.events[event]) {\n this.events[event] = [];\n }\n this.events[event].push(listener);\n return this;\n }\n emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (this.events[event]) {\n this.events[event].forEach(listener => listener(...args));\n }\n }\n}\nflarum.reg.add('core', 'common/utils/EventEmitter', EventEmitter);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport { GambitType } from '../query/IGambit';\nimport AutocompleteReader from '../utils/AutocompleteReader';\nimport Button from '../components/Button';\nexport default class GambitsAutocomplete {\n constructor(resource, jqueryInput, onchange, afterSuggest) {\n this.resource = resource;\n this.jqueryInput = jqueryInput;\n this.onchange = onchange;\n this.afterSuggest = afterSuggest;\n _defineProperty(this, \"query\", '');\n }\n suggestions(query) {\n const gambits = app.search.gambits.for(this.resource).filter(gambit => gambit.enabled());\n this.query = query;\n\n // We group the boolean gambits together to produce an initial item of\n // is:unread,sticky,locked, etc.\n const groupedGambits = gambits.filter(gambit => gambit.type === GambitType.Grouped);\n const keyValueGambits = gambits.filter(gambit => gambit.type !== GambitType.Grouped);\n const uniqueGroups = [];\n for (const gambit of groupedGambits) {\n if (uniqueGroups.includes(gambit.suggestion().group)) continue;\n uniqueGroups.push(gambit.suggestion().group);\n }\n const instancePerGroup = [];\n for (const group of uniqueGroups) {\n instancePerGroup.push({\n type: GambitType.Grouped,\n suggestion: () => ({\n group,\n key: groupedGambits.filter(gambit => gambit.suggestion().group === group).map(gambit => {\n const key = gambit.suggestion().key;\n return key instanceof Array ? key.join(', ') : key;\n }).join(', ')\n }),\n pattern: () => '',\n filterKey: () => '',\n toFilter: () => [],\n fromFilter: () => '',\n predicates: false,\n enabled: () => true\n });\n }\n const autocompleteReader = new AutocompleteReader(null);\n const cursorPosition = this.jqueryInput().prop('selectionStart') || query.length;\n const lastChunk = query.slice(0, cursorPosition);\n const autocomplete = autocompleteReader.check(lastChunk, cursorPosition, /\\S+$/);\n let typed = (autocomplete == null ? void 0 : autocomplete.typed) || '';\n\n // Negative gambits are a thing ;)\n const negative = typed.startsWith('-');\n if (negative) {\n typed = typed.slice(1);\n }\n\n // if the query ends with 'is:' we will only list keys from that group.\n if (typed.endsWith(':')) {\n const gambitKey = typed.replace(/:$/, '') || null;\n const gambitQuery = typed.split(':').pop() || '';\n if (gambitKey) {\n const specificGambitSuggestions = this.specificGambitSuggestions(gambitKey, gambitQuery, uniqueGroups, groupedGambits, autocomplete);\n if (specificGambitSuggestions) {\n return specificGambitSuggestions;\n }\n }\n }\n\n // This is all the gambit suggestions.\n return [...instancePerGroup, ...keyValueGambits].filter(gambit => !autocomplete || new RegExp(typed).test(gambit.type === GambitType.Grouped ? gambit.suggestion().group : gambit.suggestion().key)).map(gambit => {\n const suggestion = gambit.suggestion();\n const key = gambit.type === GambitType.Grouped ? suggestion.group : suggestion.key;\n const hint = gambit.type === GambitType.Grouped ? suggestion.key : suggestion.hint;\n return this.gambitSuggestion(key, hint, negated => {\n var _autocomplete$relativ;\n return this.suggest((!!negated && '-' || '') + key + ':', typed || '', ((_autocomplete$relativ = autocomplete == null ? void 0 : autocomplete.relativeStart) != null ? _autocomplete$relativ : cursorPosition) + Number(negative));\n });\n });\n }\n specificGambitSuggestions(gambitKey, gambitQuery, uniqueGroups, groupedGambits, autocomplete) {\n if (uniqueGroups.includes(gambitKey)) {\n return groupedGambits.filter(gambit => gambit.suggestion().group === gambitKey).flatMap(gambit => gambit.suggestion().key instanceof Array ? gambit.suggestion().key : [gambit.suggestion().key]).filter(key => !gambitQuery || key.toLowerCase().startsWith(gambitQuery)).map(gambit => this.gambitSuggestion(gambit, null, () => this.suggest(gambit, gambitQuery, autocomplete.relativeStart + autocomplete.typed.length)));\n }\n return null;\n }\n gambitSuggestion(key, value, suggest) {\n return m(\"li\", null, m(\"span\", {\n className: \"Dropdown-item GambitsAutocomplete-gambit\"\n }, m(\"button\", {\n type: \"button\",\n className: \"Button--ua-reset\",\n onclick: () => suggest()\n }, m(\"span\", {\n className: \"GambitsAutocomplete-gambit-key\"\n }, key, !!value && ':'), !!value && m(\"span\", {\n className: \"GambitsAutocomplete-gambit-value\"\n }, value)), !!value && m(\"span\", {\n className: \"GambitsAutocomplete-gambit-actions\"\n }, m(Button, {\n class: \"Button Button--icon\",\n onclick: () => suggest(),\n icon: \"fas fa-plus\",\n \"aria-label\": app.translator.trans('core.forum.search.gambit_plus_button_a11y_label')\n }), m(Button, {\n class: \"Button Button--icon\",\n onclick: () => suggest(true),\n icon: \"fas fa-minus\",\n \"aria-label\": app.translator.trans('core.forum.search.gambit_minus_button_a11y_label')\n }))));\n }\n suggest(text, fromTyped, start) {\n const $input = this.jqueryInput();\n const query = this.query;\n const replaced = query.slice(0, start) + text + query.slice(start + fromTyped.length);\n this.onchange(replaced);\n $input[0].focus();\n setTimeout(() => {\n $input[0].setSelectionRange(start + text.length, start + text.length);\n m.redraw();\n }, 50);\n this.afterSuggest(replaced);\n }\n}\nflarum.reg.add('core', 'common/utils/GambitsAutocomplete', GambitsAutocomplete);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport isObject from './isObject';\nclass Item {\n constructor(content, priority) {\n _defineProperty(this, \"content\", void 0);\n _defineProperty(this, \"priority\", void 0);\n this.content = content;\n this.priority = priority;\n }\n}\n\n/**\n * The `ItemList` class collects items and then arranges them into an array\n * by priority.\n */\nexport default class ItemList {\n constructor() {\n /**\n * The items in the list.\n */\n _defineProperty(this, \"_items\", {});\n }\n /**\n * Check whether the list is empty.\n */\n isEmpty() {\n return Object.keys(this._items).length === 0;\n }\n\n /**\n * Check whether an item is present in the list.\n */\n has(key) {\n return Object.keys(this._items).includes(key);\n }\n\n /**\n * Get the content of an item.\n */\n get(key) {\n return this._items[key].content;\n }\n\n /**\n * Get the priority of an item.\n */\n getPriority(key) {\n return this._items[key].priority;\n }\n\n /**\n * Add an item to the list.\n *\n * @param key A unique key for the item.\n * @param content The item's content.\n * @param priority The priority of the item. Items with a higher priority\n * will be positioned before items with a lower priority.\n */\n add(key, content, priority) {\n if (priority === void 0) {\n priority = 0;\n }\n this._items[key] = new Item(content, priority);\n return this;\n }\n\n /**\n * Replaces an item's content, if the provided item key exists.\n *\n * If the provided `key` is not present, an error will be thrown.\n *\n * @param key The key of the item in the list\n * @param content The item's new content\n *\n * @example <caption>Replace item content.</caption>\n * items.setContent('myItem', <p>My new value.</p>);\n *\n * @example <caption>Replace item content and priority.</caption>\n * items\n * .setContent('myItem', <p>My new value.</p>)\n * .setPriority('myItem', 10);\n *\n * @throws If the provided `key` is not present in the ItemList.\n */\n setContent(key, content) {\n if (!this.has(key)) {\n throw new Error(\"[ItemList] Cannot set content of Item. Key `\".concat(key, \"` is not present.\"));\n }\n if (content !== null) {\n this._items[key].content = content;\n }\n return this;\n }\n\n /**\n * Replaces an item's priority, if the provided item key exists.\n *\n * If the provided `key` is not present, an error will be thrown.\n *\n * @param key The key of the item in the list\n * @param priority The item's new priority\n *\n * @example <caption>Replace item priority.</caption>\n * items.setPriority('myItem', 10);\n *\n * @example <caption>Replace item priority and content.</caption>\n * items\n * .setPriority('myItem', 10)\n * .setContent('myItem', <p>My new value.</p>);\n *\n * @throws If the provided `key` is not present in the ItemList.\n */\n setPriority(key, priority) {\n if (!this.has(key)) {\n throw new Error(\"[ItemList] Cannot set priority of Item. Key `\".concat(key, \"` is not present.\"));\n }\n this._items[key].priority = priority;\n return this;\n }\n\n /**\n * Remove an item from the list.\n *\n * If the provided `key` is not present, nothing will happen.\n */\n remove(key) {\n delete this._items[key];\n return this;\n }\n\n /**\n * Merge another list's items into this one.\n *\n * The list passed to this function will overwrite items which already exist\n * with the same key.\n */\n merge(otherList) {\n Object.keys(otherList._items).forEach(key => {\n const val = otherList._items[key];\n if (val instanceof Item) {\n this._items[key] = val;\n }\n });\n return this;\n }\n\n /**\n * Convert the list into an array of item content arranged by priority.\n *\n * This **does not** preserve the original types of primitives and proxies\n * all content values to make `itemName` accessible on them.\n *\n * **NOTE:** If your ItemList holds primitive types (such as numbers, booleans\n * or strings), these will be converted to their object counterparts if you do\n * not provide `true` to this function.\n *\n * **NOTE:** Modifying any objects in the final array may also update the\n * content of the original ItemList.\n *\n * @param keepPrimitives Converts item content to objects and sets the\n * `itemName` property on them.\n *\n * @see https://github.com/flarum/core/issues/3030\n */\n\n /**\n * Convert the list into an array of item content arranged by priority.\n *\n * Content values that are already objects will be proxied and have\n * `itemName` accessible on them. Primitive values will not have the\n * `itemName` property accessible.\n *\n * **NOTE:** Modifying any objects in the final array may also update the\n * content of the original ItemList.\n *\n * @param keepPrimitives Converts item content to objects and sets the\n * `itemName` property on them.\n */\n\n toArray(keepPrimitives) {\n if (keepPrimitives === void 0) {\n keepPrimitives = false;\n }\n const items = Object.keys(this._items).map((key, i) => {\n const item = this._items[key];\n if (!keepPrimitives || isObject(item.content)) {\n // Convert content to object, then proxy it\n return {\n ...item,\n content: this.createItemContentProxy(isObject(item.content) ? item.content : Object(item.content), key)\n };\n } else {\n // ...otherwise just return a clone of the item.\n return {\n ...item\n };\n }\n });\n return items.sort((a, b) => b.priority - a.priority).map(item => item.content);\n }\n\n /**\n * A read-only map of all keys to their respective items in no particular order.\n *\n * We don't allow adding new items to the ItemList via setting new properties,\n * nor do we allow modifying existing items directly. You should use the\n * {@link ItemList.add}, {@link ItemList.setContent} and\n * {@link ItemList.setPriority} methods instead.\n *\n * To match the old behaviour of the `ItemList.items` property, call\n * `Object.values(ItemList.toObject())`.\n *\n * @example\n * const items = new ItemList();\n * items.add('b', 'My cool value', 20);\n * items.add('a', 'My value', 10);\n * items.toObject();\n * // {\n * // a: { content: 'My value', priority: 10, itemName: 'a' },\n * // b: { content: 'My cool value', priority: 20, itemName: 'b' },\n * // }\n */\n toObject() {\n return Object.keys(this._items).reduce((map, key) => {\n const obj = {\n content: this.get(key),\n itemName: key,\n priority: this.getPriority(key)\n };\n map[key] = obj;\n return map;\n }, {});\n }\n\n /**\n * Proxies an item's content, adding the `itemName` readonly property to it.\n *\n * @example\n * createItemContentProxy({ foo: 'bar' }, 'myItem');\n * // { foo: 'bar', itemName: 'myItem' }\n *\n * @param content The item's content (objects only)\n * @param key The item's key\n * @return Proxied content\n *\n * @internal\n */\n createItemContentProxy(content, key) {\n return new Proxy(content, {\n get(target, property, receiver) {\n if (property === 'itemName') return key;\n return Reflect.get(target, property, receiver);\n },\n set(target, property, value, receiver) {\n if (key !== null && property === 'itemName') {\n throw new Error('`itemName` property is read-only');\n }\n return Reflect.set(target, property, value, receiver);\n }\n });\n }\n}\nflarum.reg.add('core', 'common/utils/ItemList', ItemList);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar Keys = /*#__PURE__*/function (Keys) {\n Keys[Keys[\"Enter\"] = 13] = \"Enter\";\n Keys[Keys[\"Escape\"] = 27] = \"Escape\";\n Keys[Keys[\"Space\"] = 32] = \"Space\";\n Keys[Keys[\"ArrowUp\"] = 38] = \"ArrowUp\";\n Keys[Keys[\"ArrowDown\"] = 40] = \"ArrowDown\";\n Keys[Keys[\"ArrowLeft\"] = 37] = \"ArrowLeft\";\n Keys[Keys[\"ArrowRight\"] = 39] = \"ArrowRight\";\n Keys[Keys[\"Tab\"] = 9] = \"Tab\";\n Keys[Keys[\"Backspace\"] = 8] = \"Backspace\";\n return Keys;\n}(Keys || {});\n/**\n * The `KeyboardNavigatable` class manages lists that can be navigated with the\n * keyboard, calling callbacks for each actions.\n *\n * This helper encapsulates the key binding logic, providing a simple fluent\n * API for use.\n */\nexport default class KeyboardNavigatable {\n constructor() {\n /**\n * Callback to be executed for a specified input.\n */\n _defineProperty(this, \"callbacks\", new Map());\n /**\n * Callback that determines whether keyboard input should be handled.\n * By default, always handle keyboard navigation.\n */\n _defineProperty(this, \"whenCallback\", event => true);\n }\n /**\n * Provide a callback to be executed when navigating upwards.\n *\n * This will be triggered by the Up key.\n */\n onUp(callback) {\n return this.onDirection(callback, Keys.ArrowUp);\n }\n\n /**\n * Provide a callback to be executed when navigating downwards.\n *\n * This will be triggered by the Down key.\n */\n onDown(callback) {\n return this.onDirection(callback, Keys.ArrowDown);\n }\n\n /**\n * Provide a callback to be executed when navigating leftwards.\n *\n * This will be triggered by the Left key.\n */\n onLeft(callback) {\n return this.onDirection(callback, Keys.ArrowLeft);\n }\n\n /**\n * Provide a callback to be executed when navigating rightwards.\n *\n * This will be triggered by the Right key.\n */\n onRight(callback) {\n return this.onDirection(callback, Keys.ArrowRight);\n }\n onDirection(callback, direction) {\n this.callbacks.set(direction, e => {\n e.preventDefault();\n callback(e);\n });\n return this;\n }\n\n /**\n * Provide a callback to be executed when the current item is selected..\n *\n * This will be triggered by the Return key (and Tab key, if not disabled).\n */\n onSelect(callback, ignoreTabPress) {\n if (ignoreTabPress === void 0) {\n ignoreTabPress = false;\n }\n const handler = e => {\n e.preventDefault();\n callback(e);\n };\n if (!ignoreTabPress) this.callbacks.set(Keys.Tab, handler);\n this.callbacks.set(Keys.Enter, handler);\n return this;\n }\n\n /**\n * Provide a callback to be executed when the current item is tabbed into.\n *\n * This will be triggered by the Tab key.\n */\n onTab(callback) {\n const handler = e => {\n e.preventDefault();\n callback(e);\n };\n this.callbacks.set(9, handler);\n return this;\n }\n\n /**\n * Provide a callback to be executed when the navigation is canceled.\n *\n * This will be triggered by the Escape key.\n */\n onCancel(callback) {\n this.callbacks.set(Keys.Escape, e => {\n e.stopPropagation();\n e.preventDefault();\n callback(e);\n });\n return this;\n }\n\n /**\n * Provide a callback to be executed when previous input is removed.\n *\n * This will be triggered by the Backspace key.\n */\n onRemove(callback) {\n this.callbacks.set(Keys.Backspace, e => {\n if (e instanceof KeyboardEvent && e.target instanceof HTMLInputElement && e.target.selectionStart === 0 && e.target.selectionEnd === 0) {\n callback(e);\n e.preventDefault();\n }\n });\n return this;\n }\n\n /**\n * Provide a callback that determines whether keyboard input should be handled.\n */\n when(callback) {\n this.whenCallback = callback;\n return this;\n }\n\n /**\n * Set up the navigation key bindings on the given jQuery element.\n */\n bindTo($element) {\n // Handle navigation key events on the navigatable element.\n $element[0].addEventListener('keydown', this.navigate.bind(this));\n }\n\n /**\n * Interpret the given keyboard event as navigation commands.\n */\n navigate(event) {\n // This callback determines whether keyboard should be handled or ignored.\n if (!this.whenCallback(event)) return;\n const keyCallback = this.callbacks.get(event.which);\n if (keyCallback) {\n keyCallback(event);\n }\n }\n}\nflarum.reg.add('core', 'common/utils/KeyboardNavigatable', KeyboardNavigatable);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class RequestError {\n constructor(status, responseText, options, xhr) {\n _defineProperty(this, \"status\", void 0);\n _defineProperty(this, \"options\", void 0);\n _defineProperty(this, \"xhr\", void 0);\n _defineProperty(this, \"responseText\", void 0);\n _defineProperty(this, \"response\", void 0);\n _defineProperty(this, \"alert\", void 0);\n this.status = status;\n this.responseText = responseText;\n this.options = options;\n this.xhr = xhr;\n try {\n this.response = JSON.parse(responseText != null ? responseText : 'null');\n } catch (e) {\n this.response = null;\n }\n this.alert = null;\n }\n}\nflarum.reg.add('core', 'common/utils/RequestError', RequestError);","import Stream from 'mithril/stream';\nexport default Stream;\nflarum.reg.add('core', 'common/utils/Stream', Stream);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/**\n * The `SubtreeRetainer` class keeps track of a number of pieces of data,\n * comparing the values of these pieces at every iteration.\n *\n * This is useful for preventing redraws to relatively static (or huge)\n * components whose VDOM only depends on very few values, when none of them\n * have changed.\n *\n * @example\n * // Check two callbacks for changes on each update\n * this.subtree = new SubtreeRetainer(\n * () => this.attrs.post.freshness,\n * () => this.showing\n * );\n *\n * // Add more callbacks to be checked for updates\n * this.subtree.check(() => this.attrs.user.freshness);\n *\n * // In a component's onbeforeupdate() method:\n * return this.subtree.needsRebuild()\n *\n * @see https://mithril.js.org/lifecycle-methods.html#onbeforeupdate\n */\nexport default class SubtreeRetainer {\n /**\n * @param callbacks Functions returning data to keep track of.\n */\n constructor() {\n _defineProperty(this, \"callbacks\", void 0);\n _defineProperty(this, \"data\", void 0);\n for (var _len = arguments.length, callbacks = new Array(_len), _key = 0; _key < _len; _key++) {\n callbacks[_key] = arguments[_key];\n }\n this.callbacks = callbacks;\n this.data = {};\n\n // Build the initial data, so it is available when calling\n // needsRebuild from the onbeforeupdate hook.\n this.needsRebuild();\n }\n\n /**\n * Return whether any data has changed since the last check.\n * If so, Mithril needs to re-diff the vnode and its children.\n */\n needsRebuild() {\n let needsRebuild = false;\n this.callbacks.forEach((callback, i) => {\n const result = callback();\n if (result !== this.data[i]) {\n this.data[i] = result;\n needsRebuild = true;\n }\n });\n return needsRebuild;\n }\n\n /**\n * Add another callback to be checked.\n */\n check() {\n for (var _len2 = arguments.length, callbacks = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n callbacks[_key2] = arguments[_key2];\n }\n this.callbacks = this.callbacks.concat(callbacks);\n // Update the data cache when new checks are added.\n this.needsRebuild();\n }\n\n /**\n * Invalidate the subtree, forcing it to be redrawn.\n */\n invalidate() {\n this.data = {};\n }\n}\nflarum.reg.add('core', 'common/utils/SubtreeRetainer', SubtreeRetainer);","import app from '../../common/app';\nimport extractText from './extractText';\n\n/**\n * The `abbreviateNumber` utility converts a number to a shorter localized form.\n *\n * @example\n * abbreviateNumber(1234);\n * // \"1.2K\"\n */\nexport default function abbreviateNumber(number) {\n // TODO: translation\n if (number >= 1000000) {\n return Math.floor(number / 1000000) + extractText(app.translator.trans('core.lib.number_suffix.mega_text'));\n } else if (number >= 1000) {\n return (number / 1000).toFixed(1) + extractText(app.translator.trans('core.lib.number_suffix.kilo_text'));\n } else {\n return number.toString();\n }\n}\nflarum.reg.add('core', 'common/utils/abbreviateNumber', abbreviateNumber);","// Based off of the polyfill on MDN\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat#reduce_concat_isarray_recursivity\n//\n// Needed to provide support for Safari on iOS < 12\n\n// ts-ignored because we can afford to encapsulate some messy logic behind the clean typings.\n\nif (!Array.prototype['flat']) {\n Array.prototype['flat'] = function flat(depth) {\n // @ts-ignore\n return (depth != null ? depth : 1) > 0 ?\n // @ts-ignore\n Array.prototype.reduce.call(this, (acc, val) => acc.concat(Array.isArray(val) ? flat.call(val, depth - 1) : val), []) :\n // If no depth is provided, or depth is 0, just return a copy of\n // the array. Spread is supported in all major browsers (iOS 8+)\n // @ts-ignore\n [...this];\n };\n}","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import clsx from 'clsx';\n\n/**\n * This util exposes `clsx` to core and extensions as a re-usable utility.\n *\n * For full documentation, see `clsx` on GitHub.\n *\n * @see https://github.com/lukeed/clsx\n */\nconst classList = clsx;\nexport default classList;\nflarum.reg.add('core', 'common/utils/classList', classList);","/**\n * The `computed` utility creates a function that will cache its output until\n * any of the dependent values are dirty.\n *\n * @param dependentKeys The keys of the dependent values.\n * @param compute The function which computes the value using the\n * dependent values.\n */\nexport default function computed() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n const keys = args.slice(0, -1);\n const compute = args.slice(-1)[0];\n const dependentValues = {};\n let computedValue;\n return function () {\n let recompute = false;\n\n // Read all of the dependent values. If any of them have changed since last\n // time, then we'll want to recompute our output.\n keys.forEach(key => {\n const attr = this[key];\n const value = typeof attr === 'function' ? attr.call(this) : attr;\n if (dependentValues[key] !== value) {\n recompute = true;\n dependentValues[key] = value;\n }\n });\n if (recompute) {\n computedValue = compute.apply(this, keys.map(key => dependentValues[key]));\n }\n return computedValue;\n };\n}\nflarum.reg.add('core', 'common/utils/computed', computed);","const specialChars = /[.*+?^${}()|[\\]\\\\]/g;\n\n/**\n * Escapes the `RegExp` special characters in `input`.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping\n */\nexport default function escapeRegExp(input) {\n return input.replace(specialChars, '\\\\$&');\n}\nflarum.reg.add('core', 'common/utils/escapeRegExp', escapeRegExp);","/**\n * The `extract` utility deletes a property from an object and returns its\n * value.\n *\n * @param object The object that owns the property\n * @param property The name of the property to extract\n * @return The value of the property\n */\nexport default function extract(object, property) {\n const value = object[property];\n delete object[property];\n return value;\n}\nflarum.reg.add('core', 'common/utils/extract', extract);","/**\n * Extract the text nodes from a virtual element.\n */\nexport default function extractText(vdom) {\n if (vdom instanceof Array) {\n return vdom.map(element => extractText(element)).join('');\n } else if (typeof vdom === 'object' && vdom !== null) {\n return extractText(vdom.children);\n } else {\n return String(vdom);\n }\n}\nflarum.reg.add('core', 'common/utils/extractText', extractText);","import { createFocusTrap as _createFocusTrap } from 'focus-trap';\n\n/**\n * Creates a focus trap for the given element with the given options.\n * \n * This function applies some default options that are different to the library.\n * Your own options still override these custom defaults:\n * \n * ```json\n * {\n escapeDeactivates: false,\n * }\n * ```\n * \n * @param element The element to be the focus trap, or a selector that will be used to find the element.\n * \n * @see https://github.com/focus-trap/focus-trap#readme - Library documentation\n */\nfunction createFocusTrap() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n args[1] = {\n escapeDeactivates: false,\n ...args[1]\n };\n return _createFocusTrap(...args);\n}\nexport * from 'focus-trap';\nexport { createFocusTrap };\nflarum.reg.add('core', 'common/utils/focusTrap', { createFocusTrap: createFocusTrap, });","import app from '../../common/app';\n\n/**\n * The `formatNumber` utility localizes a number into a string with the\n * appropriate punctuation based on the provided locale otherwise will default to the users locale.\n *\n * @example\n * formatNumber(1234);\n * // 1,234\n */\nexport default function formatNumber(number, locale) {\n if (locale === void 0) {\n locale = app.data.locale;\n }\n return new Intl.NumberFormat(locale).format(number);\n}\nflarum.reg.add('core', 'common/utils/formatNumber', formatNumber);","import dayjs from 'dayjs';\n\n/**\n * The `humanTime` utility converts a date to a localized, human-readable time-\n * ago string.\n */\nexport default function humanTime(time) {\n let d = dayjs(time);\n const now = dayjs();\n\n // To prevent showing things like \"in a few seconds\" due to small offsets\n // between client and server time, we always reset future dates to the\n // current time. This will result in \"just now\" being shown instead.\n if (d.isAfter(now)) {\n d = now;\n }\n const day = 864e5;\n const diff = d.diff(dayjs());\n let ago;\n\n // If this date was more than a month ago, we'll show the name of the month\n // in the string. If it wasn't this year, we'll show the year as well.\n if (diff < -30 * day) {\n if (d.year() === dayjs().year()) {\n ago = d.format('D MMM');\n } else {\n ago = d.format('ll');\n }\n } else {\n ago = d.fromNow();\n }\n return ago;\n}\nflarum.reg.add('core', 'common/utils/humanTime', humanTime);","/*\n * Original Copyright GitHub, Inc. Licensed under the MIT License.\n * See license text at https://github.com/github/markdown-toolbar-element/blob/master/LICENSE.\n */\n\nlet canInsertText = null;\nexport default function insertText(textarea, _ref) {\n let {\n text,\n selectionStart,\n selectionEnd\n } = _ref;\n const originalSelectionStart = textarea.selectionStart;\n const before = textarea.value.slice(0, originalSelectionStart);\n const after = textarea.value.slice(textarea.selectionEnd);\n if (canInsertText === null || canInsertText === true) {\n textarea.contentEditable = 'true';\n try {\n canInsertText = document.execCommand('insertText', false, text);\n } catch (error) {\n canInsertText = false;\n }\n textarea.contentEditable = 'false';\n }\n if (canInsertText && !textarea.value.slice(0, textarea.selectionStart).endsWith(text)) {\n canInsertText = false;\n }\n if (!canInsertText) {\n textarea.value = before + text + after;\n textarea.dispatchEvent(new CustomEvent('input', {\n bubbles: true,\n cancelable: true\n }));\n }\n if (selectionStart != null && selectionEnd != null) {\n textarea.setSelectionRange(selectionStart, selectionEnd);\n } else {\n textarea.setSelectionRange(originalSelectionStart, textarea.selectionEnd);\n }\n}\nflarum.reg.add('core', 'common/utils/insertText', insertText);","/**\n * The `isDark` utility converts a hex color to rgb, and then calculates a YIQ\n * value in order to get the appropriate brightness value. See\n * https://www.w3.org/TR/AERT/#color-contrast for references.\n *\n * A YIQ value >= 128 corresponds to a light color according to the W3C\n * standards, but we use a custom threshold for each light and dark modes\n * to preserve design consistency.\n */\nexport default function isDark(hexcolor) {\n // return if hexcolor is undefined or shorter than 4 characters, shortest hex form is #333;\n // decided against regex hex color validation for performance considerations\n if (!hexcolor || hexcolor.length < 4) {\n return false;\n }\n let hexnumbers = hexcolor.replace('#', '');\n if (hexnumbers.length === 3) {\n hexnumbers = hexnumbers.split('').map(char => char.repeat(2)).join('');\n }\n const r = parseInt(hexnumbers.slice(0, 2), 16);\n const g = parseInt(hexnumbers.slice(2, 4), 16);\n const b = parseInt(hexnumbers.slice(4, 6), 16);\n const yiq = (r * 299 + g * 587 + b * 114) / 1000;\n const threshold = parseInt(getComputedStyle(document.body).getPropertyValue('--yiq-threshold').trim()) || 128;\n return yiq < threshold;\n}\nflarum.reg.add('core', 'common/utils/isDark', isDark);","/**\n * Returns if the passed value is an object.\n *\n * In this context, \"object\" refers to **any non-primitive value**, including\n * arrays, function, maps, dates, and more.\n *\n * @example\n * isObject({}); // true\n * @example\n * isObject([]); // true\n * @example\n * isObject(function () {}); // true\n * @example\n * isObject(Object(1)); // true\n * @example\n * isObject(null); // false\n * @example\n * isObject(1); // false\n * @example\n * isObject(\"hello world\"); // false\n *\n * @see https://github.com/jashkenas/underscore/blob/943977e34e2279503528a71ddcc2dd5f96483945/underscore.js#L87-L91\n */\nexport default function isObject(obj) {\n const type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n}\nflarum.reg.add('core', 'common/utils/isObject', isObject);","import humanTime from './humanTime';\nfunction updateHumanTimes() {\n $('[data-humantime]').each(function () {\n const $this = $(this);\n const ago = humanTime($this.attr('datetime'));\n $this.html(ago);\n });\n}\n\n/**\n * The `liveHumanTimes` initializer sets up a loop every 1 second to update\n * timestamps rendered with the `humanTime` helper.\n */\nexport default function liveHumanTimes() {\n setInterval(updateHumanTimes, 10000);\n}\nflarum.reg.add('core', 'common/utils/liveHumanTimes', liveHumanTimes);","import DefaultResolver from '../resolvers/DefaultResolver';\n\n/**\n * The `mapRoutes` utility converts a map of named application routes into a\n * format that can be understood by Mithril, and wraps them in route resolvers\n * to provide each route with the current route name.\n *\n * @see https://mithril.js.org/route.html#signature\n */\nexport default function mapRoutes(routes, basePath) {\n if (basePath === void 0) {\n basePath = '';\n }\n const map = {};\n for (const routeName in routes) {\n const route = routes[routeName];\n if ('resolver' in route) {\n map[basePath + route.path] = route.resolver;\n } else if ('component' in route) {\n const resolverClass = 'resolverClass' in route ? route.resolverClass : DefaultResolver;\n map[basePath + route.path] = new resolverClass(route.component, routeName);\n } else {\n throw new Error(\"Either a resolver or a component must be provided for the route [\".concat(routeName, \"]\"));\n }\n }\n return map;\n}\nflarum.reg.add('core', 'common/utils/mapRoutes', mapRoutes);","/**\n * Mithril 2 does not completely rerender the page if a route change leads to the same route\n * (or the same component handling a different route). This util calls m.route.set, forcing a reonit.\n *\n * @see https://mithril.js.org/route.html#key-parameter\n */\nexport default function setRouteWithForcedRefresh(route, params, options) {\n if (params === void 0) {\n params = null;\n }\n if (options === void 0) {\n options = {};\n }\n const newOptions = {\n ...options\n };\n newOptions.state = newOptions.state || {};\n newOptions.state.key = Date.now();\n m.route.set(route, params, newOptions);\n}\nflarum.reg.add('core', 'common/utils/setRouteWithForcedRefresh', setRouteWithForcedRefresh);","/**\n * Truncate a string to the given length, appending ellipses if necessary.\n */\nexport function truncate(string, length, start) {\n if (start === void 0) {\n start = 0;\n }\n return (start > 0 ? '...' : '') + string.substring(start, start + length) + (string.length > start + length ? '...' : '');\n}\n\n/**\n * Create a slug out of the given string depending on the selected mode.\n * Invalid characters are converted to hyphens.\n *\n * NOTE: This method does not use the comparably sophisticated transliteration\n * mechanism that is employed in the backend. Therefore, it should only be used\n * to *suggest* slugs that can be overridden by the user.\n */\nexport function slug(string, mode) {\n if (mode === void 0) {\n mode = SluggingMode.ALPHANUMERIC;\n }\n switch (mode) {\n case SluggingMode.UTF8:\n return string.toLowerCase()\n // Match non-word characters (take UTF8 into consideration) and replace with a dash.\n .replace(/[^\\p{L}\\p{N}\\p{M}]/giu, '-').replace(/-+/g, '-').replace(/-$|^-/g, '');\n case SluggingMode.ALPHANUMERIC:\n default:\n return string.toLowerCase().replace(/[^a-z0-9]/gi, '-').replace(/-+/g, '-').replace(/-$|^-/g, '');\n }\n}\nexport let SluggingMode = /*#__PURE__*/function (SluggingMode) {\n SluggingMode[\"ALPHANUMERIC\"] = \"alphanum\";\n SluggingMode[\"UTF8\"] = \"utf8\";\n return SluggingMode;\n}({});\n\n/**\n * Strip HTML tags and quotes out of the given string, replacing them with\n * meaningful punctuation.\n */\nexport function getPlainContent(string) {\n const html = string.replace(/(<\\/p>|<br>)/g, '$1  ').replace(/<img\\b[^>]*>/gi, ' ');\n const element = new DOMParser().parseFromString(html, 'text/html').documentElement;\n getPlainContent.removeSelectors.forEach(selector => {\n const el = element.querySelectorAll(selector);\n el.forEach(e => {\n e.remove();\n });\n });\n return element.innerText.replace(/\\s+/g, ' ').trim();\n}\n\n/**\n * An array of DOM selectors to remove when getting plain content.\n *\n * @type {Array}\n */\ngetPlainContent.removeSelectors = ['blockquote', 'script'];\n\n/**\n * Make a string's first character uppercase.\n */\nexport function ucfirst(string) {\n return string.substr(0, 1).toUpperCase() + string.substr(1);\n}\n\n/**\n * Transform a camel case string to snake case.\n */\nexport function camelCaseToSnakeCase(str) {\n return str.replace(/[A-Z]/g, letter => \"_\".concat(letter.toLowerCase()));\n}\n\n/**\n * Generate a random string (a-z, 0-9) of a given length.\n *\n * Providing a length of less than 0 will result in an error.\n *\n * @param length Length of the random string to generate\n * @returns A random string of provided length\n */\nexport function generateRandomString(length) {\n if (length < 0) throw new Error('Cannot generate a random string with length less than 0.');\n if (length === 0) return '';\n const arr = new Uint8Array(length / 2);\n window.crypto.getRandomValues(arr);\n return Array.from(arr, dec => {\n return dec.toString(16).padStart(2, '0');\n }).join('');\n}\nflarum.reg.add('core', 'common/utils/string', { truncate: truncate,slug: slug,SluggingMode: SluggingMode,getPlainContent: getPlainContent,ucfirst: ucfirst,camelCaseToSnakeCase: camelCaseToSnakeCase,generateRandomString: generateRandomString, });","function hsvToRgb(h, s, v) {\n let r;\n let g;\n let b;\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n return {\n r: Math.floor(r * 255),\n g: Math.floor(g * 255),\n b: Math.floor(b * 255)\n };\n}\n\n/**\n * Convert the given string to a unique color.\n */\nexport default function stringToColor(string) {\n let num = 0;\n\n // Convert the username into a number based on the ASCII value of each\n // character.\n for (let i = 0; i < string.length; i++) {\n num += string.charCodeAt(i);\n }\n\n // Construct a color using the remainder of that number divided by 360, and\n // some predefined saturation and value values.\n const hue = num % 360;\n const rgb = hsvToRgb(hue / 360, 0.3, 0.9);\n return '' + rgb.r.toString(16) + rgb.g.toString(16) + rgb.b.toString(16);\n}\nflarum.reg.add('core', 'common/utils/stringToColor', stringToColor);","/**\n * An event handler factory that makes it simpler to implement data binding\n * for component event listeners.\n *\n * The handler created by this factory passes the DOM element's attribute\n * identified by the first argument to the callback (usually a bidirectional\n * Mithril stream: https://mithril.js.org/stream.html#bidirectional-bindings).\n *\n * Replaces m.withAttr for Mithril 2.0.\n * @see https://mithril.js.org/archive/v0.2.5/mithril.withAttr.html\n */\nexport default function withAttr(key, cb) {\n return function () {\n cb(this.getAttribute(key) || this[key]);\n };\n}\nflarum.reg.add('core', 'common/utils/withAttr', withAttr);","/**\n * @see https://stackoverflow.com/a/31732310\n */\nexport default function isSafariMobile() {\n return 'ontouchstart' in window && navigator.vendor != null && navigator.vendor.includes('Apple') && navigator.userAgent != null && !navigator.userAgent.includes('CriOS') && !navigator.userAgent.includes('FxiOS');\n}\nflarum.reg.add('core', 'forum/utils/isSafariMobile', isSafariMobile);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\nimport Alert from '../../common/components/Alert';\nimport Button from '../../common/components/Button';\nimport Icon from '../../common/components/Icon';\nexport default class Notices extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", false);\n _defineProperty(this, \"sent\", false);\n }\n view() {\n return m(\"div\", {\n className: \"App-notices\"\n }, this.items().toArray());\n }\n items() {\n const items = new ItemList();\n const user = app.session.user;\n if (user && !user.isEmailConfirmed()) {\n items.add('emailConfirmation', m(Alert, {\n dismissible: false,\n controls: [m(Button, {\n className: \"Button Button--link\",\n onclick: this.onclickEmailConfirmation.bind(this),\n loading: this.loading,\n disabled: this.sent\n }, this.sent ? [m(Icon, {\n name: 'fas fa-check'\n }), ' ', app.translator.trans('core.forum.user_email_confirmation.sent_message')] : app.translator.trans('core.forum.user_email_confirmation.resend_button'))],\n className: \"Alert--emailConfirmation\",\n containerClassName: \"container\"\n }, app.translator.trans('core.forum.user_email_confirmation.alert_message', {\n email: m(\"strong\", null, user.email())\n })), 100);\n }\n if (app.data.bisecting) {\n items.add('bisecting', m(Alert, {\n type: \"error\",\n dismissible: false,\n className: \"Alert--bisecting\",\n containerClassName: \"container\",\n controls: [m(\"a\", {\n className: \"Button Button--link\",\n target: \"_blank\",\n href: app.forum.attribute('adminUrl') + '#/advanced?modal=extension-bisect'\n }, app.translator.trans('core.lib.notices.bisecting_continue'))]\n }, app.translator.trans('core.lib.notices.bisecting')), 90);\n }\n if (app.data.maintenanceMode) {\n items.add('maintenanceMode', m(Alert, {\n type: \"error\",\n dismissible: false,\n className: \"Alert--maintenanceMode\",\n containerClassName: \"container\"\n }, app.translator.trans('core.lib.notices.maintenance_mode_' + app.data.maintenanceMode)), 80);\n }\n return items;\n }\n onclickEmailConfirmation() {\n const user = app.session.user;\n this.loading = true;\n m.redraw();\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/users/' + user.id() + '/send-confirmation'\n }).then(() => {\n this.loading = false;\n this.sent = true;\n m.redraw();\n }).catch(() => {\n this.loading = false;\n m.redraw();\n });\n }\n}\nflarum.reg.add('core', 'forum/components/Notices', Notices);","import Component from '../../common/Component';\nexport default class Footer extends Component {\n view() {\n return null;\n }\n}\nflarum.reg.add('core', 'forum/components/Footer', Footer);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from './app';\nimport History from './utils/History';\nimport Pane from './utils/Pane';\nimport DiscussionPage from './components/DiscussionPage';\nimport HeaderPrimary from './components/HeaderPrimary';\nimport HeaderSecondary from './components/HeaderSecondary';\nimport DiscussionRenamedNotification from './components/DiscussionRenamedNotification';\nimport CommentPost from './components/CommentPost';\nimport DiscussionRenamedPost from './components/DiscussionRenamedPost';\nimport routes, { makeRouteHelpers } from './routes';\nimport Application from '../common/Application';\nimport Navigation from '../common/components/Navigation';\nimport NotificationListState from './states/NotificationListState';\nimport GlobalSearchState from './states/GlobalSearchState';\nimport DiscussionListState from './states/DiscussionListState';\nimport ComposerState from './states/ComposerState';\nimport isSafariMobile from './utils/isSafariMobile';\nimport extractText from '../common/utils/extractText';\nimport Notices from './components/Notices';\nimport Footer from './components/Footer';\nimport SearchManager from '../common/SearchManager';\nexport default class ForumApplication extends Application {\n constructor() {\n super();\n /**\n * A map of notification types to their components.\n */\n _defineProperty(this, \"notificationComponents\", {\n discussionRenamed: DiscussionRenamedNotification\n });\n /**\n * A map of post types to their components.\n */\n _defineProperty(this, \"postComponents\", {\n comment: CommentPost,\n discussionRenamed: DiscussionRenamedPost\n });\n /**\n * An object which controls the state of the page's side pane.\n */\n _defineProperty(this, \"pane\", null);\n /**\n * The app's history stack, which keeps track of which routes the user visits\n * so that they can easily navigate back to the previous route.\n */\n _defineProperty(this, \"history\", new History());\n /**\n * An object which controls the state of the user's notifications.\n */\n _defineProperty(this, \"notifications\", new NotificationListState());\n /**\n * An object which stores the global search state and manages search capabilities.\n */\n _defineProperty(this, \"search\", new SearchManager(new GlobalSearchState()));\n /**\n * An object which controls the state of the composer.\n */\n _defineProperty(this, \"composer\", new ComposerState());\n /**\n * An object which controls the state of the cached discussion list, which\n * is used in the index page and the slideout pane.\n */\n _defineProperty(this, \"discussions\", new DiscussionListState({}));\n _defineProperty(this, \"route\", void 0);\n _defineProperty(this, \"data\", void 0);\n routes(this);\n this.route = Object.assign(Object.getPrototypeOf(Object.getPrototypeOf(this)).route.bind(this), makeRouteHelpers(this));\n }\n\n /**\n * @inheritdoc\n */\n mount() {\n // Get the configured default route and update that route's path to be '/'.\n // Push the homepage as the first route, so that the user will always be\n // able to click on the 'back' button to go home, regardless of which page\n // they started on.\n const defaultRoute = this.forum.attribute('defaultRoute');\n let defaultAction = 'index';\n for (const i in this.routes) {\n if (this.routes[i].path === defaultRoute) defaultAction = i;\n }\n this.routes[defaultAction].path = '/';\n this.history.push(defaultAction, extractText(this.translator.trans('core.forum.header.back_to_index_tooltip')), '/');\n this.pane = new Pane(document.getElementById('app'));\n m.route.prefix = '';\n super.mount(this.forum.attribute('basePath'));\n\n // We mount navigation and header components after the page, so components\n // like the back button can access the updated state when rendering.\n m.mount(document.getElementById('app-navigation'), {\n view: () => m(Navigation, {\n className: \"App-backControl\",\n drawer: true\n })\n });\n m.mount(document.getElementById('header-navigation'), Navigation);\n m.mount(document.getElementById('header-primary'), HeaderPrimary);\n m.mount(document.getElementById('header-secondary'), HeaderSecondary);\n m.mount(document.getElementById('notices'), Notices);\n m.mount(document.getElementById('footer'), Footer);\n\n // Route the home link back home when clicked. We do not want it to register\n // if the user is opening it in a new tab, however.\n document.getElementById('home-link').addEventListener('click', e => {\n var _app$session$user;\n if (e.ctrlKey || e.metaKey || e.button === 1) return;\n e.preventDefault();\n app.history.home();\n\n // Reload the current user so that their unread notification count is refreshed.\n const userId = (_app$session$user = app.session.user) == null ? void 0 : _app$session$user.id();\n if (userId) {\n app.store.find('users', userId);\n m.redraw();\n }\n });\n if (isSafariMobile()) {\n $(() => {\n $('.App').addClass('mobile-safari');\n });\n }\n }\n\n /**\n * Check whether or not the user is currently viewing a discussion.\n */\n viewingDiscussion(discussion) {\n return this.current.matches(DiscussionPage, {\n discussion\n });\n }\n\n /**\n * Callback for when an external authenticator (social login) action has\n * completed.\n *\n * If the payload indicates that the user has been logged in, then the page\n * will be reloaded. Otherwise, a SignUpModal will be opened, prefilled\n * with the provided details.\n */\n authenticationComplete(payload) {\n if (payload.loggedIn) {\n window.location.reload();\n } else {\n this.modal.show(() => import(/* webpackChunkName: 'forum/components/SignUpModal', webpackMode: 'lazy-once' */ './components/SignUpModal'), payload);\n }\n }\n}","import Forum from './ForumApplication';\nconst app = new Forum();\n\n// @ts-expect-error We need to do this for backwards compatibility purposes.\nwindow.app = app;\nexport default app;\nflarum.reg.add('core', 'forum/app', app);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport Component from '../../common/Component';\nimport Link from '../../common/components/Link';\nimport listItems from '../../common/helpers/listItems';\nimport highlight from '../../common/helpers/highlight';\nimport humanTime from '../../common/utils/humanTime';\nimport ItemList from '../../common/utils/ItemList';\nimport abbreviateNumber from '../../common/utils/abbreviateNumber';\nimport Dropdown from '../../common/components/Dropdown';\nimport TerminalPost from './TerminalPost';\nimport SubtreeRetainer from '../../common/utils/SubtreeRetainer';\nimport DiscussionControls from '../utils/DiscussionControls';\nimport slidable from '../utils/slidable';\nimport classList from '../../common/utils/classList';\nimport DiscussionPage from './DiscussionPage';\nimport escapeRegExp from '../../common/utils/escapeRegExp';\nimport Tooltip from '../../common/components/Tooltip';\nimport Icon from '../../common/components/Icon';\nimport Avatar from '../../common/components/Avatar';\n/**\n * The `DiscussionListItem` component shows a single discussion in the\n * discussion list.\n */\nexport default class DiscussionListItem extends Component {\n constructor() {\n super(...arguments);\n /**\n * Ensures that the discussion will not be redrawn\n * unless new data comes in.\n */\n _defineProperty(this, \"subtree\", void 0);\n _defineProperty(this, \"highlightRegExp\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.subtree = new SubtreeRetainer(() => this.attrs.discussion.freshness, () => {\n const time = app.session.user && app.session.user.markedAllAsReadAt();\n return time && time.getTime();\n }, () => this.active());\n }\n elementAttrs() {\n return {\n className: classList('DiscussionListItem', this.attrs.className, {\n active: this.active(),\n 'DiscussionListItem--hidden': this.attrs.discussion.isHidden(),\n Slidable: 'ontouchstart' in window\n })\n };\n }\n view() {\n const attrs = this.elementAttrs();\n return m(\"div\", attrs, this.viewItems().toArray());\n }\n viewItems() {\n const items = new ItemList();\n const controls = DiscussionControls.controls(this.attrs.discussion, this).toArray();\n if (controls.length) {\n items.add('controls', this.controlsView(controls), 100);\n }\n items.add('slidableUnderneath', this.slidableUnderneathView(), 90);\n items.add('content', this.contentView(), 80);\n return items;\n }\n controlsView(controls) {\n return m(Dropdown, {\n icon: \"fas fa-ellipsis-v\",\n className: \"DiscussionListItem-controls\",\n buttonClassName: \"Button Button--icon Button--flat Slidable-underneath Slidable-underneath--right\",\n accessibleToggleLabel: app.translator.trans('core.forum.discussion_controls.toggle_dropdown_accessible_label')\n }, controls);\n }\n slidableUnderneathView() {\n const discussion = this.attrs.discussion;\n const isUnread = discussion.isUnread();\n return m(\"span\", {\n className: classList('Slidable-underneath Slidable-underneath--left Slidable-underneath--elastic', {\n disabled: !isUnread\n }),\n onclick: this.markAsRead.bind(this)\n }, m(Icon, {\n name: 'fas fa-check'\n }));\n }\n contentView() {\n const discussion = this.attrs.discussion;\n const isUnread = discussion.isUnread();\n const isRead = discussion.isRead();\n return m(\"div\", {\n className: classList('DiscussionListItem-content', 'Slidable-content', {\n unread: isUnread,\n read: isRead\n })\n }, this.contentItems().toArray());\n }\n contentItems() {\n const items = new ItemList();\n items.add('author', this.authorView(), 100);\n items.add('main', this.mainView(), 80);\n items.add('stats', this.statsView(), 70);\n return items;\n }\n authorView() {\n return m(\"div\", {\n className: \"DiscussionListItem-author\"\n }, this.authorItems().toArray());\n }\n authorItems() {\n const items = new ItemList();\n const discussion = this.attrs.discussion;\n const user = this.attrs.author || discussion.user();\n items.add('avatar', m(Tooltip, {\n text: app.translator.trans('core.forum.discussion_list.started_text', {\n user,\n ago: humanTime(discussion.createdAt())\n }),\n position: \"right\"\n }, user ? m(Link, {\n className: \"DiscussionListItem-author-avatar\",\n href: app.route.user(user)\n }, m(Avatar, {\n user: user,\n title: \"\"\n })) : m(\"span\", {\n className: \"DiscussionListItem-author-avatar\"\n }, m(Avatar, {\n user: null,\n title: \"\"\n }))), 100);\n items.add('badges', this.badgesView(), 90);\n return items;\n }\n badgesView() {\n const discussion = this.attrs.discussion;\n return m(\"ul\", {\n className: \"DiscussionListItem-badges badges badges--packed\"\n }, listItems(discussion.badges().toArray()));\n }\n mainView() {\n const discussion = this.attrs.discussion;\n const jumpTo = this.getJumpTo();\n return m(Link, {\n href: app.route.discussion(discussion, jumpTo),\n className: \"DiscussionListItem-main\"\n }, m(\"h2\", {\n className: \"DiscussionListItem-title\"\n }, highlight(discussion.title(), this.highlightRegExp)), m(\"ul\", {\n className: \"DiscussionListItem-info\"\n }, listItems(this.infoItems().toArray())));\n }\n getJumpTo() {\n if (this.attrs.jumpTo) {\n return this.attrs.jumpTo;\n }\n const discussion = this.attrs.discussion;\n let jumpTo = 0;\n if (this.attrs.params.q) {\n const post = discussion.mostRelevantPost();\n if (post) {\n jumpTo = post.number();\n }\n const phrase = escapeRegExp(this.attrs.params.q);\n this.highlightRegExp = new RegExp(phrase + '|' + phrase.trim().replace(/\\s+/g, '|'), 'gi');\n } else {\n var _discussion$lastPostN;\n jumpTo = Math.min((_discussion$lastPostN = discussion.lastPostNumber()) != null ? _discussion$lastPostN : 0, (discussion.lastReadPostNumber() || 0) + 1);\n }\n return jumpTo;\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n\n // If we're on a touch device, set up the discussion row to be slidable.\n // This allows the user to drag the row to either side of the screen to\n // reveal controls.\n if ('ontouchstart' in window) {\n const slidableInstance = slidable(this.element);\n this.$('.DiscussionListItem-controls').on('hidden.bs.dropdown', () => slidableInstance.reset());\n }\n }\n onbeforeupdate(vnode) {\n super.onbeforeupdate(vnode);\n return this.subtree.needsRebuild();\n }\n\n /**\n * Determine whether or not the discussion is currently being viewed.\n */\n active() {\n return app.current.matches(DiscussionPage, {\n discussion: this.attrs.discussion\n });\n }\n\n /**\n * Determine whether or not information about who started the discussion\n * should be displayed instead of information about the most recent reply to\n * the discussion.\n */\n showFirstPost() {\n var _this$attrs$params$so;\n return ['newest', 'oldest'].includes((_this$attrs$params$so = this.attrs.params.sort) != null ? _this$attrs$params$so : '');\n }\n\n /**\n * Determine whether or not the number of replies should be shown instead of\n * the number of unread posts.\n *\n * @return {boolean}\n */\n showRepliesCount() {\n return this.attrs.params.sort === 'replies';\n }\n\n /**\n * Mark the discussion as read.\n */\n markAsRead() {\n const discussion = this.attrs.discussion;\n if (discussion.isUnread()) {\n discussion.save({\n lastReadPostNumber: discussion.lastPostNumber()\n });\n m.redraw();\n }\n }\n\n /**\n * Build an item list of info for a discussion listing. By default this is\n * just the first/last post indicator.\n */\n infoItems() {\n const items = new ItemList();\n if (this.attrs.params.q) {\n const post = this.attrs.post || this.attrs.discussion.mostRelevantPost() || this.attrs.discussion.firstPost();\n if (post && post.contentType() === 'comment') {\n var _post$contentPlain;\n const excerpt = highlight((_post$contentPlain = post.contentPlain()) != null ? _post$contentPlain : '', this.highlightRegExp, 175);\n items.add('excerpt', excerpt, -100);\n }\n } else {\n items.add('terminalPost', m(TerminalPost, {\n discussion: this.attrs.discussion,\n lastPost: !this.showFirstPost()\n }));\n }\n return items;\n }\n statsView() {\n return m(\"div\", {\n className: \"DiscussionListItem-stats\"\n }, this.statsItems().toArray());\n }\n statsItems() {\n const items = new ItemList();\n items.add('replyCount', this.replyCountItem(), 70);\n return items;\n }\n replyCountItem() {\n const discussion = this.attrs.discussion;\n const showUnread = !this.showRepliesCount() && discussion.isUnread();\n const a11yKey = showUnread ? 'core.forum.discussion_list.unread_replies_a11y_label' : 'core.forum.discussion_list.total_replies_a11y_label';\n return m(DiscussionListItemStatsItem, {\n className: \"DiscussionListItem-count\",\n icon: showUnread ? [m(Icon, {\n name: 'fas fa-check _checkmark'\n }), m(Icon, {\n name: 'fas fa-comment _comment'\n })] : m(Icon, {\n name: 'far fa-comment'\n }),\n label: showUnread ? abbreviateNumber(discussion.unreadCount()) : abbreviateNumber(discussion.replyCount()),\n a11yLabel: app.translator.trans(a11yKey, {\n count: discussion.replyCount()\n }),\n onclick: showUnread ? this.markAsRead.bind(this) : undefined\n });\n }\n}\nexport class DiscussionListItemStatsItem extends Component {\n view(vnode) {\n const {\n icon,\n label,\n a11yLabel,\n className,\n ...attrs\n } = vnode.attrs;\n const Tag = attrs.onclick ? 'button' : 'span';\n return m(Tag, Object.assign({\n className: classList('DiscussionListItem-stats-item', className, {\n 'Button--ua-reset': Tag === 'button'\n })\n }, attrs), m(\"span\", {\n className: \"DiscussionListItem-stats-item-icon\"\n }, icon), m(\"span\", {\n className: \"DiscussionListItem-stats-item-label\"\n }, m(\"span\", {\n \"aria-hidden\": \"true\"\n }, label), m(\"span\", {\n className: \"visually-hidden\"\n }, a11yLabel != null ? a11yLabel : label)));\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionListItem', DiscussionListItem);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport Page from '../../common/components/Page';\nimport ItemList from '../../common/utils/ItemList';\nimport DiscussionHero from './DiscussionHero';\nimport DiscussionListPane from './DiscussionListPane';\nimport SplitDropdown from '../../common/components/SplitDropdown';\nimport listItems from '../../common/helpers/listItems';\nimport DiscussionControls from '../utils/DiscussionControls';\nimport PostStreamState from '../states/PostStreamState';\nimport PageStructure from './PageStructure';\n/**\n * The `DiscussionPage` component displays a whole discussion page, including\n * the discussion list pane, the hero, the posts, and the sidebar.\n */\nexport default class DiscussionPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"PostStream\", null);\n _defineProperty(this, \"PostStreamScrubber\", null);\n /**\n * The discussion that is being viewed.\n */\n _defineProperty(this, \"discussion\", null);\n /**\n * A public API for interacting with the post stream.\n */\n _defineProperty(this, \"stream\", null);\n /**\n * The number of the first post that is currently visible in the viewport.\n */\n _defineProperty(this, \"near\", 0);\n _defineProperty(this, \"useBrowserScrollRestoration\", true);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.load();\n\n // If the discussion list has been loaded, then we'll enable the pane (and\n // hide it by default). Also, if we've just come from another discussion\n // page, then we don't want Mithril to redraw the whole page – if it did,\n // then the pane would redraw which would be slow and would cause problems with\n // event handlers.\n // We will also enable the pane if the discussion list is empty but loading,\n // because the DiscussionComposer refreshes the list and redirects to the new discussion at the same time.\n if (app.discussions.hasItems() || app.discussions.isLoading()) {\n var _app$pane, _app$pane2;\n (_app$pane = app.pane) == null || _app$pane.enable();\n (_app$pane2 = app.pane) == null || _app$pane2.hide();\n }\n this.bodyClass = 'App--discussion';\n }\n onremove(vnode) {\n var _app$pane3, _app$composer;\n super.onremove(vnode);\n\n // If we are indeed navigating away from this discussion, then disable the\n // discussion list pane. Also, if we're composing a reply to this\n // discussion, minimize the composer – unless it's empty, in which case\n // we'll just close it.\n (_app$pane3 = app.pane) == null || _app$pane3.disable();\n if (this.discussion && app.composer.composingReplyTo(this.discussion) && !((_app$composer = app.composer) != null && (_app$composer = _app$composer.fields) != null && _app$composer.content())) {\n app.composer.hide();\n } else {\n app.composer.minimize();\n }\n }\n view() {\n return m(PageStructure, {\n className: \"DiscussionPage\",\n loading: this.loading,\n hero: this.hero.bind(this),\n sidebar: this.sidebar.bind(this),\n pane: () => m(DiscussionListPane, {\n state: app.discussions\n })\n }, this.loading || m(\"div\", {\n className: \"DiscussionPage-stream\"\n }, m(this.PostStream, {\n discussion: this.discussion,\n stream: this.stream,\n onPositionChange: this.positionChanged.bind(this)\n })));\n }\n\n /**\n * Function that renders the `sidebarItems` ItemList.\n */\n sidebar() {\n return m(\"nav\", {\n className: \"DiscussionPage-nav\"\n }, m(\"ul\", null, listItems(this.sidebarItems().toArray())));\n }\n\n /**\n * Renders the discussion's hero.\n */\n hero() {\n return m(DiscussionHero, {\n discussion: this.discussion\n });\n }\n\n /**\n * Load the discussion from the API or use the preloaded one.\n */\n load() {\n Promise.all([import(/* webpackChunkName: 'forum/components/PostStream', webpackMode: 'lazy-once' */ './PostStream'), import(/* webpackChunkName: 'forum/components/PostStreamScrubber', webpackMode: 'lazy-once' */ './PostStreamScrubber')]).then(_ref => {\n let [PostStreamImport, PostStreamScrubberImport] = _ref;\n this.PostStream = PostStreamImport.default;\n this.PostStreamScrubber = PostStreamScrubberImport.default;\n const preloadedDiscussion = app.preloadedApiDocument();\n if (preloadedDiscussion) {\n // We must wrap this in a setTimeout because if we are mounting this\n // component for the first time on page load, then any calls to m.redraw\n // will be ineffective and thus any configs (scroll code) will be run\n // before stuff is drawn to the page.\n setTimeout(this.show.bind(this, preloadedDiscussion), 0);\n } else {\n const params = this.requestParams();\n app.store.find('discussions', m.route.param('id'), params).then(this.show.bind(this));\n }\n });\n m.redraw();\n }\n\n /**\n * Get the parameters that should be passed in the API request to get the\n * discussion.\n */\n requestParams() {\n return {\n bySlug: true,\n page: {\n near: this.near\n }\n };\n }\n\n /**\n * Initialize the component to display the given discussion.\n */\n show(discussion) {\n var _includedPosts$0$numb, _includedPosts$;\n this.loading = false;\n app.history.push('discussion', discussion.title());\n app.setTitle(discussion.title());\n app.setTitleCount(0);\n\n // When the API responds with a discussion, it will also include a number of\n // posts. Some of these posts are included because they are on the first\n // page of posts we want to display (determined by the `near` parameter) –\n // others may be included because due to other relationships introduced by\n // extensions. We need to distinguish the two so we don't end up displaying\n // the wrong posts. We do so by filtering out the posts that don't have\n // the 'discussion' relationship linked, then sorting and splicing.\n let includedPosts = [];\n if (discussion.payload && discussion.payload.included) {\n const discussionId = discussion.id();\n includedPosts = discussion.payload.included.filter(record => record.type === 'posts' && record.relationships && record.relationships.discussion && !Array.isArray(record.relationships.discussion.data) && record.relationships.discussion.data.id === discussionId)\n // We can make this assertion because posts should be in the store,\n // since they were in the discussion's payload.\n .map(record => app.store.getById('posts', record.id)).sort((a, b) => a.number() - b.number()).slice(0, 20);\n }\n\n // Set up the post stream for this discussion, along with the first page of\n // posts we want to display. Tell the stream to scroll down and highlight\n // the specific post that was routed to.\n this.stream = new PostStreamState(discussion, includedPosts);\n const rawNearParam = m.route.param('near');\n const nearParam = rawNearParam === 'reply' ? 'reply' : parseInt(rawNearParam);\n this.stream.goToNumber(nearParam || ((_includedPosts$0$numb = (_includedPosts$ = includedPosts[0]) == null ? void 0 : _includedPosts$.number()) != null ? _includedPosts$0$numb : 0), true).then(() => {\n this.discussion = discussion;\n app.current.set('discussion', discussion);\n app.current.set('stream', this.stream);\n });\n }\n\n /**\n * Build an item list for the contents of the sidebar.\n */\n sidebarItems() {\n const items = new ItemList();\n if (this.discussion) {\n items.add('controls', m(SplitDropdown, {\n icon: \"fas fa-ellipsis-v\",\n className: \"App-primaryControl\",\n buttonClassName: \"Button--primary\",\n accessibleToggleLabel: app.translator.trans('core.forum.discussion_controls.toggle_dropdown_accessible_label')\n }, DiscussionControls.controls(this.discussion, this).toArray()), 100);\n }\n items.add('scrubber', m(this.PostStreamScrubber, {\n stream: this.stream,\n className: \"App-titleControl\"\n }), -100);\n return items;\n }\n\n /**\n * When the posts that are visible in the post stream change (i.e. the user\n * scrolls up or down), then we update the URL and mark the posts as read.\n */\n positionChanged(startNumber, endNumber) {\n const discussion = this.discussion;\n if (!discussion) return;\n\n // Construct a URL to this discussion with the updated position, then\n // replace it into the window's history and our own history stack.\n const url = app.route.discussion(discussion, this.near = startNumber);\n window.history.replaceState(null, document.title, url);\n app.history.push('discussion', discussion.title());\n\n // If the user hasn't read past here before, then we'll update their read\n // state and redraw.\n if (app.session.user && endNumber > (discussion.lastReadPostNumber() || 0)) {\n discussion.save({\n lastReadPostNumber: endNumber\n });\n m.redraw();\n }\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionPage', DiscussionPage);flarum.reg.addChunkModule('158', '3038', 'core', 'forum/components/PostStream');\nflarum.reg.addChunkModule('158', '3038', 'core', 'forum/components/ReplyPlaceholder');\nflarum.reg.addChunkModule('158', '3038', 'core', 'forum/components/PostType');\nflarum.reg.addChunkModule('486', '8857', 'core', 'forum/components/PostStreamScrubber');","import app from '../../forum/app';\nimport Notification from './Notification';\n/**\n * The `DiscussionRenamedNotification` component displays a notification which\n * indicates that a discussion has had its title changed.\n */\nexport default class DiscussionRenamedNotification extends Notification {\n icon() {\n return 'fas fa-pencil-alt';\n }\n href() {\n const notification = this.attrs.notification;\n const discussion = notification.subject();\n if (!discussion) {\n return '#';\n }\n return app.route.discussion(discussion, notification.content().postNumber);\n }\n content() {\n return app.translator.trans('core.forum.notifications.discussion_renamed_text', {\n user: this.attrs.notification.fromUser()\n });\n }\n excerpt() {\n return null;\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionRenamedNotification', DiscussionRenamedNotification);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport LinkButton from '../../common/components/LinkButton';\nimport extractText from '../../common/utils/extractText';\nimport MinimalDiscussionListItem from './MinimalDiscussionListItem';\n\n/**\n * The `DiscussionsSearchSource` finds and displays discussion search results in\n * the search dropdown.\n */\nexport default class DiscussionsSearchSource {\n constructor() {\n _defineProperty(this, \"results\", new Map());\n _defineProperty(this, \"resource\", 'discussions');\n }\n title() {\n return extractText(app.translator.trans('core.lib.search_source.discussions.heading'));\n }\n isCached(query) {\n return this.results.has(query.toLowerCase());\n }\n async search(query, limit) {\n query = query.toLowerCase();\n this.results.set(query, []);\n const params = {\n filter: {\n q: query\n },\n page: {\n limit\n },\n include: 'mostRelevantPost,user,firstPost,tags'\n };\n return app.store.find('discussions', params).then(results => {\n this.results.set(query, results);\n m.redraw();\n });\n }\n view(query) {\n query = query.toLowerCase();\n return (this.results.get(query) || []).map(discussion => {\n return m(\"li\", {\n className: \"DiscussionSearchResult\",\n \"data-index\": 'discussions' + discussion.id(),\n \"data-id\": discussion.id()\n }, m(MinimalDiscussionListItem, {\n discussion: discussion,\n params: {\n q: query\n }\n }));\n });\n }\n customGrouping() {\n return false;\n }\n fullPage(query) {\n const filter = app.search.gambits.apply('discussions', {\n q: query\n });\n const q = filter.q || null;\n delete filter.q;\n return m(\"li\", null, m(LinkButton, {\n icon: \"fas fa-search\",\n href: app.route('index', {\n q,\n filter\n })\n }, app.translator.trans('core.lib.search_source.discussions.all_button', {\n query\n })));\n }\n gotoItem(id) {\n const discussion = app.store.getById('discussions', id);\n if (!discussion) return null;\n return app.route.discussion(discussion);\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionsSearchSource', DiscussionsSearchSource);","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\n/**\n * The `HeaderPrimary` component displays primary header controls. On the\n * default skin, these are shown just to the right of the forum title.\n */\nexport default class HeaderPrimary extends Component {\n view() {\n return m(\"ul\", {\n className: \"Header-controls\"\n }, listItems(this.items().toArray()));\n }\n\n /**\n * Build an item list for the controls.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n\n items() {\n return new ItemList();\n }\n}\nflarum.reg.add('core', 'forum/components/HeaderPrimary', HeaderPrimary);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport Page from '../../common/components/Page';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\nimport DiscussionList from './DiscussionList';\nimport WelcomeHero from './WelcomeHero';\nimport DiscussionPage from './DiscussionPage';\nimport Dropdown from '../../common/components/Dropdown';\nimport Button from '../../common/components/Button';\nimport extractText from '../../common/utils/extractText';\nimport PageStructure from './PageStructure';\nimport IndexSidebar from './IndexSidebar';\nimport PostsPage from './PostsPage';\n/**\n * The `IndexPage` component displays the index page, including the welcome\n * hero, the sidebar, and the discussion list.\n */\nexport default class IndexPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"lastDiscussion\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n\n // If the user is returning from a discussion page, then take note of which\n // discussion they have just visited. After the view is rendered, we will\n // scroll down so that this discussion is in view.\n if (app.previous.matches(DiscussionPage)) {\n this.lastDiscussion = app.previous.get('discussion');\n }\n const params = app.search.state.params();\n\n // If there is an active search and the user is coming from the PostsPage,\n // then we will clear the search state so that discussions aren't searched.\n if (app.previous.matches(PostsPage)) {\n app.search.state.clear();\n }\n\n // If the user is coming from the discussion list, then they have either\n // just switched one of the parameters (filter, sort, search) or they\n // probably want to refresh the results. We will clear the discussion list\n // cache so that results are reloaded.\n if (app.previous.matches(IndexPage)) {\n app.discussions.clear();\n }\n if (!app.previous.matches(PostsPage) || !params.q) {\n app.discussions.refreshParams(params, m.route.param('page') && Number(m.route.param('page')) || 1);\n }\n app.history.push('index', extractText(app.translator.trans('core.forum.header.back_to_index_tooltip')));\n this.bodyClass = 'App--index';\n this.scrollTopOnCreate = false;\n }\n view() {\n return m(PageStructure, {\n className: \"IndexPage\",\n hero: this.hero.bind(this),\n sidebar: this.sidebar.bind(this)\n }, m(\"div\", {\n className: \"IndexPage-toolbar\"\n }, m(\"ul\", {\n className: \"IndexPage-toolbar-view\"\n }, listItems(this.viewItems().toArray())), m(\"ul\", {\n className: \"IndexPage-toolbar-action\"\n }, listItems(this.actionItems().toArray()))), m(DiscussionList, {\n state: app.discussions\n }));\n }\n setTitle() {\n app.setTitle(extractText(app.translator.trans('core.forum.index.meta_title_text')));\n app.setTitleCount(0);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.setTitle();\n\n // Work out the difference between the height of this hero and that of the\n // previous hero. Maintain the same scroll position relative to the bottom\n // of the hero so that the sidebar doesn't jump around.\n const oldHeroHeight = app.cache.heroHeight;\n const heroHeight = app.cache.heroHeight = this.$('.Hero').outerHeight() || 0;\n const scrollTop = app.cache.scrollTop;\n $('#app').css('min-height', ($(window).height() || 0) + heroHeight);\n\n // Let browser handle scrolling on page reload.\n if (app.previous.type == null) return;\n\n // Only retain scroll position if we're coming from a discussion page.\n // Otherwise, we've just changed the filter, so we should go to the top of the page.\n if (this.lastDiscussion) {\n $(window).scrollTop(scrollTop - oldHeroHeight + heroHeight);\n } else {\n $(window).scrollTop(0);\n }\n\n // If we've just returned from a discussion page, then the constructor will\n // have set the `lastDiscussion` property. If this is the case, we want to\n // scroll down to that discussion so that it's in view.\n if (this.lastDiscussion) {\n const $discussion = this.$(\"li[data-id=\\\"\".concat(this.lastDiscussion.id(), \"\\\"] .DiscussionListItem\"));\n if ($discussion.length) {\n const indexTop = $('#header').outerHeight() || 0;\n const indexBottom = $(window).height() || 0;\n const discussionOffset = $discussion.offset();\n const discussionTop = discussionOffset && discussionOffset.top || 0;\n const discussionBottom = discussionTop + ($discussion.outerHeight() || 0);\n if (discussionTop < scrollTop + indexTop || discussionBottom > scrollTop + indexBottom) {\n $(window).scrollTop(discussionTop - indexTop);\n }\n }\n }\n }\n onbeforeremove(vnode) {\n super.onbeforeremove(vnode);\n\n // Save the scroll position so we can restore it when we return to the\n // discussion list.\n app.cache.scrollTop = $(window).scrollTop();\n }\n onremove(vnode) {\n super.onremove(vnode);\n $('#app').css('min-height', '');\n }\n\n /**\n * Get the component to display as the hero.\n */\n hero() {\n return m(WelcomeHero, null);\n }\n sidebar() {\n return m(IndexSidebar, null);\n }\n\n /**\n * Build an item list for the part of the toolbar which is concerned with how\n * the results are displayed. By default this is just a select box to change\n * the way discussions are sorted.\n */\n viewItems() {\n const items = new ItemList();\n const sortMap = app.discussions.sortMap();\n const sortOptions = Object.keys(sortMap).reduce((acc, sortId) => {\n const sort = sortMap[sortId];\n acc[sortId] = typeof sort !== 'string' ? sort.label : app.translator.trans(\"core.forum.index_sort.\".concat(sortId, \"_button\"));\n return acc;\n }, {});\n items.add('sort', m(Dropdown, {\n buttonClassName: \"Button\",\n label: sortOptions[app.search.state.params().sort] || Object.keys(sortMap).map(key => sortOptions[key])[0],\n accessibleToggleLabel: app.translator.trans('core.forum.index_sort.toggle_dropdown_accessible_label')\n }, Object.keys(sortOptions).map(value => {\n const label = sortOptions[value];\n const active = (app.search.state.params().sort || Object.keys(sortMap)[0]) === value;\n return m(Button, {\n icon: active ? 'fas fa-check' : true,\n onclick: () => app.search.state.changeSort(value),\n active: active\n }, label);\n })));\n return items;\n }\n\n /**\n * Build an item list for the part of the toolbar which is about taking action\n * on the results. By default this is just a \"mark all as read\" button.\n */\n actionItems() {\n const items = new ItemList();\n items.add('refresh', m(Button, {\n title: app.translator.trans('core.forum.index.refresh_tooltip'),\n \"aria-label\": app.translator.trans('core.forum.index.refresh_tooltip'),\n icon: \"fas fa-sync\",\n className: \"Button Button--icon\",\n onclick: () => {\n app.discussions.refresh();\n if (app.session.user) {\n app.store.find('users', app.session.user.id());\n m.redraw();\n }\n }\n }));\n if (app.session.user) {\n items.add('markAllAsRead', m(Button, {\n title: app.translator.trans('core.forum.index.mark_all_as_read_tooltip'),\n \"aria-label\": app.translator.trans('core.forum.index.mark_all_as_read_tooltip'),\n icon: \"fas fa-check\",\n className: \"Button Button--icon\",\n onclick: this.markAllAsRead.bind(this)\n }));\n }\n return items;\n }\n\n /**\n * Mark all discussions as read.\n */\n markAllAsRead() {\n const confirmation = confirm(extractText(app.translator.trans('core.forum.index.mark_all_as_read_confirmation')));\n if (confirmation) {\n var _app$session$user;\n (_app$session$user = app.session.user) == null || _app$session$user.save({\n markedAllAsReadAt: new Date()\n });\n }\n }\n}\n_defineProperty(IndexPage, \"providesInitialSearch\", true);\nflarum.reg.add('core', 'forum/components/IndexPage', IndexPage);","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\nimport app from '../app';\nimport Button from '../../common/components/Button';\nimport SelectDropdown from '../../common/components/SelectDropdown';\nimport listItems from '../../common/helpers/listItems';\nimport LinkButton from '../../common/components/LinkButton';\nimport classList from '../../common/utils/classList';\nexport default class IndexSidebar extends Component {\n view(vnode) {\n return m(\"nav\", {\n className: classList('IndexPage-nav sideNav', this.attrs.className)\n }, m(\"ul\", null, listItems(this.items().toArray())));\n }\n\n /**\n * Build an item list for the sidebar of the index page. By default this is a\n * \"New Discussion\" button, and then a DropdownSelect component containing a\n * list of navigation items.\n */\n items() {\n const items = new ItemList();\n const canStartDiscussion = app.forum.attribute('canStartDiscussion') || !app.session.user;\n items.add('newDiscussion', m(Button, {\n icon: \"fas fa-edit\",\n className: \"Button Button--primary IndexPage-newDiscussion\",\n itemClassName: \"App-primaryControl\",\n onclick: () => {\n // If the user is not logged in, the promise rejects, and a login modal shows up.\n // Since that's already handled, we dont need to show an error message in the console.\n return this.newDiscussionAction().catch(() => {});\n },\n disabled: !canStartDiscussion\n }, app.translator.trans(\"core.forum.index.\".concat(canStartDiscussion ? 'start_discussion_button' : 'cannot_start_discussion_button'))));\n items.add('nav', m(SelectDropdown, {\n buttonClassName: \"Button\",\n className: \"App-titleControl\",\n accessibleToggleLabel: app.translator.trans('core.forum.index.toggle_sidenav_dropdown_accessible_label')\n }, this.navItems().toArray()));\n return items;\n }\n\n /**\n * Build an item list for the navigation in the sidebar of the index page. By\n * default this is just the 'All Discussions' link.\n */\n navItems() {\n const items = new ItemList();\n const params = app.search.state.stickyParams();\n items.add('allDiscussions', m(LinkButton, {\n href: app.route('index', params),\n icon: \"far fa-comments\"\n }, app.translator.trans('core.forum.index.all_discussions_link')), 100);\n return items;\n }\n\n /**\n * Open the composer for a new discussion or prompt the user to login.\n */\n newDiscussionAction() {\n return new Promise((resolve, reject) => {\n if (app.session.user) {\n app.composer.load(() => import(/* webpackChunkName: 'forum/components/DiscussionComposer', webpackMode: 'lazy-once' */ './DiscussionComposer'), {\n user: app.session.user\n }).then(() => app.composer.show());\n return resolve(app.composer);\n } else {\n app.modal.show(() => import(/* webpackChunkName: 'forum/components/LogInModal', webpackMode: 'lazy-once' */ './LogInModal'));\n return reject();\n }\n });\n }\n}\nflarum.reg.add('core', 'forum/components/IndexSidebar', IndexSidebar);flarum.reg.addChunkModule('814', '1201', 'core', 'forum/components/DiscussionComposer');","import Component from '../../common/Component';\nimport Avatar from '../../common/components/Avatar';\nimport classList from '../../common/utils/classList';\n/**\n * The `LoadingPost` component shows a placeholder that looks like a post,\n * indicating that the post is loading.\n */\nexport default class LoadingPost extends Component {\n view() {\n return m(\"div\", {\n className: classList(this.attrs.className, 'Post CommentPost LoadingPost')\n }, m(\"header\", {\n className: \"Post-header\"\n }, m(Avatar, {\n user: null,\n className: \"PostUser-avatar\"\n }), m(\"div\", {\n className: \"fakeText\"\n })), m(\"div\", {\n className: \"Post-body\"\n }, m(\"div\", {\n className: \"fakeText\"\n }), m(\"div\", {\n className: \"fakeText\"\n }), m(\"div\", {\n className: \"fakeText\"\n })));\n }\n}\nflarum.reg.add('core', 'forum/components/LoadingPost', LoadingPost);","import DiscussionListItem from './DiscussionListItem';\nimport Link from '../../common/components/Link';\nimport app from '../app';\nimport highlight from '../../common/helpers/highlight';\nimport listItems from '../../common/helpers/listItems';\nimport classList from '../../common/utils/classList';\nexport default class MinimalDiscussionListItem extends DiscussionListItem {\n elementAttrs() {\n const attrs = super.elementAttrs();\n attrs.className = classList(attrs.className, 'MinimalDiscussionListItem');\n return attrs;\n }\n viewItems() {\n return super.viewItems().remove('controls').remove('slidableUnderneath');\n }\n contentItems() {\n return super.contentItems().remove('stats');\n }\n authorItems() {\n return super.authorItems().remove('badges');\n }\n mainView() {\n const discussion = this.attrs.discussion;\n const jumpTo = this.getJumpTo();\n return m(Link, {\n href: app.route.discussion(discussion, jumpTo),\n className: \"DiscussionListItem-main\"\n }, m(\"h2\", {\n className: \"DiscussionListItem-title\"\n }, this.badgesView(), m(\"div\", null, highlight(discussion.title(), this.highlightRegExp))), m(\"ul\", {\n className: \"DiscussionListItem-info\"\n }, listItems(this.infoItems().toArray())));\n }\n}\nflarum.reg.add('core', 'forum/components/MinimalDiscussionListItem', MinimalDiscussionListItem);","import Component from '../../common/Component';\nimport classList from '../../common/utils/classList';\nimport Link from '../../common/components/Link';\nimport humanTime from '../../common/helpers/humanTime';\nimport Icon from '../../common/components/Icon';\nexport default class HeaderListItem extends Component {\n view(vnode) {\n const {\n avatar,\n icon: iconName,\n content,\n excerpt,\n datetime,\n href,\n className,\n onclick,\n actions,\n ...attrs\n } = vnode.attrs;\n return m(Link, {\n className: classList('HeaderListItem', className),\n href: href,\n external: href.includes('://'),\n onclick: onclick\n }, avatar, m(Icon, {\n name: iconName,\n className: \"HeaderListItem-icon\"\n }), m(\"span\", {\n className: \"HeaderListItem-title\"\n }, m(\"span\", {\n className: \"HeaderListItem-content\"\n }, content), m(\"span\", {\n className: \"HeaderListItem-title-spring\"\n }), m(\"span\", {\n className: \"HeaderListItem-time\"\n }, datetime && humanTime(datetime))), m(\"div\", {\n className: \"HeaderListItem-actions\"\n }, actions), m(\"div\", {\n className: \"HeaderListItem-excerpt\"\n }, excerpt));\n }\n}\nflarum.reg.add('core', 'forum/components/HeaderListItem', HeaderListItem);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport Button from '../../common/components/Button';\nimport classList from '../../common/utils/classList';\nimport HeaderListItem from './HeaderListItem';\nimport ItemList from '../../common/utils/ItemList';\nimport Avatar from '../../common/components/Avatar';\n/**\n * The `Notification` component abstract displays a single notification.\n * Subclasses should implement the `icon`, `href`, and `content` methods.\n */\nexport default class Notification extends Component {\n view(vnode) {\n var _this$href;\n const notification = this.attrs.notification;\n const href = (_this$href = this.href()) != null ? _this$href : '';\n const fromUser = notification.fromUser();\n return m(HeaderListItem, {\n className: classList('Notification', \"Notification--\".concat(notification.contentType()), [!notification.isRead() && 'unread']),\n avatar: m(Avatar, {\n user: fromUser || null\n }),\n icon: this.icon(),\n content: this.content(),\n excerpt: this.excerpt(),\n datetime: notification.createdAt(),\n href: href,\n onclick: this.markAsRead.bind(this),\n actions: this.actionItems().toArray()\n });\n }\n actionItems() {\n const items = new ItemList();\n if (!this.attrs.notification.isRead()) {\n items.add('markAsRead', m(Button, {\n className: \"Notification-action Button Button--link\",\n icon: \"fas fa-check\",\n \"aria-label\": app.translator.trans('core.forum.notifications.mark_as_read_tooltip'),\n onclick: e => {\n e.preventDefault();\n e.stopPropagation();\n this.markAsRead();\n }\n }), 100);\n }\n return items;\n }\n\n /**\n * Get the name of the icon that should be displayed in the notification.\n */\n\n /**\n * Get the URL that the notification should link to.\n */\n\n /**\n * Get the content of the notification.\n */\n\n /**\n * Get the excerpt of the notification.\n */\n\n /**\n * Mark the notification as read.\n */\n markAsRead() {\n var _app$session$user, _app$session$user$unr;\n if (this.attrs.notification.isRead()) return;\n (_app$session$user = app.session.user) == null || _app$session$user.pushAttributes({\n unreadNotificationCount: ((_app$session$user$unr = app.session.user.unreadNotificationCount()) != null ? _app$session$user$unr : 1) - 1\n });\n this.attrs.notification.save({\n isRead: true\n });\n }\n}\nflarum.reg.add('core', 'forum/components/Notification', Notification);","import app from '../app';\nimport Dropdown from '../../common/components/Dropdown';\nimport extractText from '../../common/utils/extractText';\nimport classList from '../../common/utils/classList';\nimport Icon from '../../common/components/Icon';\nexport default class HeaderDropdown extends Dropdown {\n static initAttrs(attrs) {\n attrs.className = classList('HeaderDropdown', attrs.className);\n attrs.buttonClassName || (attrs.buttonClassName = 'Button Button--flat');\n attrs.menuClassName || (attrs.menuClassName = 'Dropdown-menu--right');\n attrs.label || (attrs.label = extractText(app.translator.trans('core.forum.notifications.tooltip')));\n // attrs.icon ||= 'fas fa-bell';\n //\n // // For best a11y support, both `title` and `aria-label` should be used\n // attrs.accessibleToggleLabel ||= extractText(app.translator.trans('core.forum.notifications.toggle_dropdown_accessible_label'));\n\n super.initAttrs(attrs);\n }\n getButton(children) {\n const newCount = this.getNewCount();\n const vdom = super.getButton(children);\n vdom.attrs.title = this.attrs.label;\n vdom.attrs.className = classList(vdom.attrs.className, [newCount && 'new']);\n vdom.attrs.onclick = this.onclick.bind(this);\n return vdom;\n }\n getButtonContent() {\n const unread = this.getUnreadCount();\n return [this.attrs.icon ? m(Icon, {\n name: this.attrs.icon,\n className: \"Button-icon\"\n }) : null, unread !== 0 && m(\"span\", {\n className: \"Bubble HeaderDropdownBubble\"\n }, unread), m(\"span\", {\n className: \"Button-label\"\n }, this.attrs.label)];\n }\n getMenu() {\n return m(\"div\", {\n className: classList('Dropdown-menu', this.attrs.menuClassName),\n onclick: this.menuClick.bind(this)\n }, this.showing && this.getContent());\n }\n menuClick(e) {\n // Don't close the notifications dropdown if the user is opening a link in a\n // new tab or window.\n if (e.shiftKey || e.metaKey || e.ctrlKey || e.button === 1) e.stopPropagation();\n }\n onclick() {\n if (app.drawer.isOpen()) {\n this.goToRoute();\n } else {\n var _this$attrs$state;\n (_this$attrs$state = this.attrs.state) == null || _this$attrs$state.load();\n }\n }\n}\nflarum.reg.add('core', 'forum/components/HeaderDropdown', HeaderDropdown);","import app from '../../forum/app';\nimport NotificationList from './NotificationList';\nimport extractText from '../../common/utils/extractText';\nimport HeaderDropdown from './HeaderDropdown';\nimport classList from '../../common/utils/classList';\nexport default class NotificationsDropdown extends HeaderDropdown {\n static initAttrs(attrs) {\n attrs.className = classList('NotificationsDropdown', attrs.className);\n attrs.icon || (attrs.icon = 'fas fa-bell');\n\n // For best a11y support, both `title` and `aria-label` should be used\n attrs.accessibleToggleLabel || (attrs.accessibleToggleLabel = extractText(app.translator.trans('core.forum.notifications.toggle_dropdown_accessible_label')));\n super.initAttrs(attrs);\n }\n getContent() {\n return m(NotificationList, {\n state: this.attrs.state\n });\n }\n goToRoute() {\n m.route.set(app.route('notifications'));\n }\n getUnreadCount() {\n return app.session.user.unreadNotificationCount();\n }\n getNewCount() {\n return app.session.user.newNotificationCount();\n }\n}\nflarum.reg.add('core', 'forum/components/NotificationsDropdown', NotificationsDropdown);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from '../../common/Component';\nimport classList from '../../common/utils/classList';\nimport ItemList from '../../common/utils/ItemList';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nexport default class PageStructure extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"content\", void 0);\n }\n view(vnode) {\n const {\n className\n } = vnode.attrs;\n this.content = vnode.children;\n return m(\"div\", {\n className: classList('Page', className)\n }, this.rootItems().toArray());\n }\n rootItems() {\n const items = new ItemList();\n items.add('pane', this.providedPane(), 100);\n items.add('main', this.main(), 10);\n return items;\n }\n mainItems() {\n const items = new ItemList();\n items.add('hero', this.providedHero(), 100);\n items.add('container', this.container(), 10);\n return items;\n }\n loadingItems() {\n const items = new ItemList();\n items.add('spinner', m(LoadingIndicator, {\n display: \"block\"\n }), 100);\n return items;\n }\n main() {\n return m(\"div\", {\n className: \"Page-main\"\n }, this.attrs.loading ? this.loadingItems().toArray() : this.mainItems().toArray());\n }\n containerItems() {\n const items = new ItemList();\n items.add('sidebar', this.sidebar(), 100);\n items.add('content', this.providedContent(), 10);\n return items;\n }\n container() {\n return m(\"div\", {\n className: \"Page-container container\"\n }, this.containerItems().toArray());\n }\n sidebarItems() {\n const items = new ItemList();\n items.add('sidebar', this.attrs.sidebar && this.attrs.sidebar() || null, 100);\n return items;\n }\n sidebar() {\n return m(\"div\", {\n className: \"Page-sidebar\"\n }, this.sidebarItems().toArray());\n }\n providedPane() {\n return m(\"div\", {\n className: \"Page-pane\"\n }, this.attrs.pane && this.attrs.pane() || null);\n }\n providedHero() {\n return m(\"div\", {\n className: \"Page-hero\"\n }, this.attrs.hero && this.attrs.hero() || null);\n }\n providedContent() {\n return m(\"div\", {\n className: \"Page-content\"\n }, this.content);\n }\n}\nflarum.reg.add('core', 'forum/components/PageStructure', PageStructure);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport Component from '../../common/Component';\nimport SubtreeRetainer from '../../common/utils/SubtreeRetainer';\nimport Dropdown from '../../common/components/Dropdown';\nimport listItems from '../../common/helpers/listItems';\nimport ItemList from '../../common/utils/ItemList';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\n/**\n * This component can be used on any type of model with an author and content.\n * Subclasses are specialized for specific types of models.\n */\nexport default class AbstractPost extends Component {\n constructor() {\n super(...arguments);\n /**\n * May be set by subclasses.\n */\n _defineProperty(this, \"loading\", false);\n /**\n * Ensures that the post will not be redrawn\n * unless new data comes in.\n */\n _defineProperty(this, \"subtree\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.loading = false;\n this.subtree = new SubtreeRetainer(() => this.loading, () => this.freshness(), () => {\n const user = this.user();\n return user && user.freshness;\n });\n }\n view(vnode) {\n const attrs = this.elementAttrs();\n attrs.className = this.classes(attrs.className).join(' ');\n const controls = this.controls();\n const footerItems = this.footerItems().toArray();\n return m(\"article\", attrs, this.header(), m(\"div\", {\n className: \"Post-container\"\n }, m(\"div\", {\n className: \"Post-side\"\n }, this.sideItems().toArray()), m(\"div\", {\n className: \"Post-main\"\n }, this.loading ? m(LoadingIndicator, null) : this.content(), m(\"aside\", {\n className: \"Post-actions\"\n }, m(\"ul\", null, listItems(this.actionItems().toArray()), !!controls.length && m(\"li\", null, m(Dropdown, {\n className: \"Post-controls\",\n buttonClassName: \"Button Button--icon Button--flat\",\n menuClassName: \"Dropdown-menu--right\",\n icon: \"fas fa-ellipsis-h\",\n onshow: () => this.$('.Post-controls').addClass('open'),\n onhide: () => this.$('.Post-controls').removeClass('open'),\n accessibleToggleLabel: app.translator.trans('core.forum.post_controls.toggle_dropdown_accessible_label')\n }, controls)))), m(\"footer\", {\n className: \"Post-footer\"\n }, footerItems.length ? m(\"ul\", null, listItems(footerItems)) : null))));\n }\n onbeforeupdate(vnode) {\n super.onbeforeupdate(vnode);\n return this.subtree.needsRebuild();\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n const $actions = this.$('.Post-actions');\n const $controls = this.$('.Post-controls');\n $actions.toggleClass('openWithin', $controls.hasClass('open'));\n }\n elementAttrs() {\n return {};\n }\n header() {\n return null;\n }\n content() {\n return [];\n }\n classes(existing) {\n let classes = (existing || '').split(' ').concat(['Post']);\n const user = this.user();\n if (this.loading) {\n classes.push('Post--loading');\n }\n if (user && user === app.session.user) {\n classes.push('Post--by-actor');\n }\n if (this.createdByStarter()) {\n classes.push('Post--by-start-user');\n }\n return classes;\n }\n actionItems() {\n return new ItemList();\n }\n footerItems() {\n return new ItemList();\n }\n sideItems() {\n const items = new ItemList();\n items.add('avatar', this.avatar(), 100);\n return items;\n }\n avatar() {\n return null;\n }\n}\nflarum.reg.add('core', 'forum/components/AbstractPost', AbstractPost);","import PostControls from '../utils/PostControls';\nimport AbstractPost from './AbstractPost';\n/**\n * The `Post` component displays a single post. The basic post template just\n * includes a controls dropdown; subclasses must implement `content` and `attrs`\n * methods.\n */\nexport default class Post extends AbstractPost {\n oninit(vnode) {\n super.oninit(vnode);\n }\n user() {\n return this.attrs.post.user();\n }\n controls() {\n return PostControls.controls(this.attrs.post, this).toArray();\n }\n freshness() {\n return this.attrs.post.freshness;\n }\n createdByStarter() {\n const user = this.attrs.post.user();\n const discussion = this.attrs.post.discussion();\n return user && user === discussion.user();\n }\n onbeforeupdate(vnode) {\n return super.onbeforeupdate(vnode);\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n }\n\n /**\n * Get attributes for the post element.\n */\n elementAttrs() {\n return super.elementAttrs();\n }\n header() {\n return super.header();\n }\n\n /**\n * Get the post's content.\n */\n content() {\n return super.content();\n }\n\n /**\n * Get the post's classes.\n */\n classes(existing) {\n let classes = super.classes(existing);\n const user = this.attrs.post.user();\n const discussion = this.attrs.post.discussion();\n if (user && user === discussion.user()) {\n classes.push('Post--by-start-user');\n }\n return classes;\n }\n\n /**\n * Build an item list for the post's actions.\n */\n actionItems() {\n return super.actionItems();\n }\n\n /**\n * Build an item list for the post's footer.\n */\n footerItems() {\n return super.footerItems();\n }\n sideItems() {\n return super.sideItems();\n }\n avatar() {\n return super.avatar();\n }\n}\nflarum.reg.add('core', 'forum/components/Post', Post);","import Component from '../../common/Component';\nimport app from '../app';\nimport Link from '../../common/components/Link';\nimport CommentPost from './CommentPost';\nexport default class PostListItem extends Component {\n view() {\n const post = this.attrs.post;\n return m(\"div\", {\n className: \"PostListItem\"\n }, m(\"div\", {\n className: \"PostListItem-discussion\"\n }, app.translator.trans('core.forum.post_list.in_discussion_text', {\n discussion: m(Link, {\n href: app.route.post(post)\n }, post.discussion().title())\n })), m(CommentPost, {\n post: post,\n params: this.attrs.params\n }));\n }\n}\nflarum.reg.add('core', 'forum/components/PostListItem', PostListItem);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport Button from '../../common/components/Button';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport Placeholder from '../../common/components/Placeholder';\nimport classList from '../../common/utils/classList';\nimport PostListItem from './PostListItem';\nexport default class PostList extends Component {\n view() {\n const state = this.attrs.state;\n const params = state.getParams();\n const isLoading = state.isInitialLoading() || state.isLoadingNext();\n let loading;\n if (isLoading) {\n loading = m(LoadingIndicator, null);\n } else if (state.hasNext()) {\n loading = m(Button, {\n className: \"Button\",\n onclick: state.loadNext.bind(state)\n }, app.translator.trans('core.forum.post_list.load_more_button'));\n }\n if (state.isEmpty()) {\n return m(\"div\", {\n className: \"PostList\"\n }, m(Placeholder, {\n text: app.translator.trans('core.forum.post_list.empty_text')\n }));\n }\n const pageSize = state.pageSize || 0;\n return m(\"div\", {\n className: classList('PostList', {\n 'PostList--searchResults': state.isSearchResults()\n })\n }, m(\"ul\", {\n role: \"feed\",\n \"aria-busy\": isLoading,\n className: \"PostList-discussions\"\n }, state.getPages().map((pg, pageNum) => {\n return pg.items.map((post, itemNum) => m(\"li\", {\n key: post.id(),\n \"data-id\": post.id(),\n role: \"article\",\n \"aria-setsize\": \"-1\",\n \"aria-posinset\": pageNum * pageSize + itemNum\n }, m(PostListItem, {\n post: post,\n params: params\n })));\n })), m(\"div\", {\n className: \"PostList-loadMore\"\n }, loading));\n }\n}\nflarum.reg.add('core', 'forum/components/PostList', PostList);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport humanTime from '../../common/helpers/humanTime';\nimport fullTime from '../../common/helpers/fullTime';\nimport Post from '../../common/models/Post';\nimport classList from '../../common/utils/classList';\n/**\n * The `PostMeta` component displays the time of a post, and when clicked, shows\n * a dropdown containing more information about the post (number, full time,\n * permalink).\n */\nexport default class PostMeta extends Component {\n view() {\n const post = this.attrs.post;\n const time = post.createdAt();\n const permalink = this.getPermalink(post);\n const touch = ('ontouchstart' in document.documentElement);\n\n // When the dropdown menu is shown, select the contents of the permalink\n // input so that the user can quickly copy the URL.\n const selectPermalink = function (e) {\n setTimeout(() => $(this).parent().find('.PostMeta-permalink').select());\n e.redraw = false;\n };\n return m(\"div\", {\n className: \"Dropdown PostMeta\"\n }, m(\"button\", {\n className: classList({\n 'Button Button--text': true,\n 'Dropdown-toggle Button--link': !!permalink\n }),\n onclick: permalink ? selectPermalink : undefined,\n \"data-toggle\": \"dropdown\"\n }, humanTime(time)), !!permalink && m(\"div\", {\n className: \"Dropdown-menu dropdown-menu\"\n }, m(\"span\", {\n className: \"PostMeta-number\"\n }, this.postIdentifier(post)), \" \", m(\"span\", {\n className: \"PostMeta-time\"\n }, fullTime(time)), ' ', m(\"span\", {\n className: \"PostMeta-ip\"\n }, post.data.attributes.ipAddress), touch ? m(\"a\", {\n className: \"Button PostMeta-permalink\",\n href: permalink\n }, permalink) : m(\"input\", {\n className: \"FormControl PostMeta-permalink\",\n value: permalink,\n onclick: e => e.stopPropagation()\n })));\n }\n\n /**\n * Get the permalink for the given post.\n */\n getPermalink(post) {\n var _this$attrs$permalink, _this$attrs;\n if (post instanceof Post) {\n return app.forum.attribute('baseOrigin') + app.route.post(post);\n }\n return ((_this$attrs$permalink = (_this$attrs = this.attrs).permalink) == null ? void 0 : _this$attrs$permalink.call(_this$attrs)) || null;\n }\n postIdentifier(post) {\n if (post instanceof Post) {\n return app.translator.trans('core.forum.post.number_tooltip', {\n number: post.number()\n }, true);\n }\n return null;\n }\n}\nflarum.reg.add('core', 'forum/components/PostMeta', PostMeta);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport Link from '../../common/components/Link';\nimport username from '../../common/helpers/username';\nimport userOnline from '../../common/helpers/userOnline';\nimport listItems from '../../common/helpers/listItems';\nimport Avatar from '../../common/components/Avatar';\n/**\n * The `PostUser` component shows the avatar and username of a post's author.\n */\nexport default class PostUser extends Component {\n view() {\n const post = this.attrs.post;\n const user = post.user();\n if (!user) {\n return m(\"div\", {\n className: \"PostUser\"\n }, m(\"h3\", {\n className: \"PostUser-name\"\n }, m(Avatar, {\n user: user,\n className: \"Post-avatar\"\n }), \" \", username(user)));\n }\n return m(\"div\", {\n className: \"PostUser\"\n }, m(\"h3\", {\n className: \"PostUser-name\"\n }, m(Link, {\n href: app.route.user(user)\n }, m(Avatar, {\n user: user,\n className: \"Post-avatar\"\n }), userOnline(user), username(user))), m(\"ul\", {\n className: \"PostUser-badges badges badges--packed\"\n }, listItems(user.badges().toArray())));\n }\n}\nflarum.reg.add('core', 'forum/components/PostUser', PostUser);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport Page from '../../common/components/Page';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\nimport WelcomeHero from './WelcomeHero';\nimport Dropdown from '../../common/components/Dropdown';\nimport Button from '../../common/components/Button';\nimport extractText from '../../common/utils/extractText';\nimport PageStructure from './PageStructure';\nimport IndexSidebar from './IndexSidebar';\nimport PostList from './PostList';\nimport PostListState from '../states/PostListState';\n/**\n * The `PostsPage` component displays the index page, including the welcome\n * hero, the sidebar, and the discussion list.\n */\nexport default class PostsPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"posts\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.posts = new PostListState({});\n this.posts.refreshParams(app.search.state.params(), m.route.param('page') && Number(m.route.param('page')) || 1);\n app.history.push('posts', extractText(app.translator.trans('core.forum.header.back_to_index_tooltip')));\n this.bodyClass = 'App--posts';\n this.scrollTopOnCreate = false;\n }\n view() {\n return m(PageStructure, {\n className: \"PostsPage\",\n hero: this.hero.bind(this),\n sidebar: this.sidebar.bind(this)\n }, m(\"div\", {\n className: \"IndexPage-toolbar PostsPage-toolbar\"\n }, m(\"ul\", {\n className: \"IndexPage-toolbar-view PostsPage-toolbar-view\"\n }, listItems(this.viewItems().toArray())), m(\"ul\", {\n className: \"IndexPage-toolbar-action PostsPage-toolbar-action\"\n }, listItems(this.actionItems().toArray()))), m(PostList, {\n state: this.posts\n }));\n }\n setTitle() {\n app.setTitle(extractText(app.translator.trans('core.forum.posts.meta_title_text')));\n app.setTitleCount(0);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.setTitle();\n }\n onremove(vnode) {\n super.onremove(vnode);\n $('#app').css('min-height', '');\n }\n\n /**\n * Get the component to display as the hero.\n */\n hero() {\n return m(WelcomeHero, null);\n }\n sidebar() {\n return m(IndexSidebar, null);\n }\n\n /**\n * Build an item list for the part of the toolbar which is concerned with how\n * the results are displayed. By default this is just a select box to change\n * the way discussions are sorted.\n */\n viewItems() {\n const items = new ItemList();\n const sortMap = this.posts.sortMap();\n const sortOptions = Object.keys(sortMap).reduce((acc, sortId) => {\n acc[sortId] = app.translator.trans(\"core.forum.posts_sort.\".concat(sortId, \"_button\"));\n return acc;\n }, {});\n if (Object.keys(sortOptions).length > 1) {\n items.add('sort', m(Dropdown, {\n buttonClassName: \"Button\",\n label: sortOptions[app.search.state.params().sort] || Object.keys(sortMap).map(key => sortOptions[key])[0],\n accessibleToggleLabel: app.translator.trans('core.forum.posts_sort.toggle_dropdown_accessible_label')\n }, Object.keys(sortOptions).map(value => {\n const label = sortOptions[value];\n const active = (app.search.state.params().sort || Object.keys(sortMap)[0]) === value;\n return m(Button, {\n icon: active ? 'fas fa-check' : true,\n onclick: () => app.search.state.changeSort(value),\n active: active\n }, label);\n })));\n }\n return items;\n }\n\n /**\n * Build an item list for the part of the toolbar which is about taking action\n * on the results. By default this is just a \"mark all as read\" button.\n */\n actionItems() {\n const items = new ItemList();\n items.add('refresh', m(Button, {\n title: app.translator.trans('core.forum.posts.refresh_tooltip'),\n \"aria-label\": app.translator.trans('core.forum.posts.refresh_tooltip'),\n icon: \"fas fa-sync\",\n className: \"Button Button--icon\",\n onclick: () => {\n this.posts.refresh();\n if (app.session.user) {\n app.store.find('users', app.session.user.id());\n m.redraw();\n }\n }\n }));\n return items;\n }\n}\n_defineProperty(PostsPage, \"providesInitialSearch\", true);\nflarum.reg.add('core', 'forum/components/PostsPage', PostsPage);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport UserPage from './UserPage';\nimport PostListState from '../states/PostListState';\nimport PostList from './PostList';\n\n/**\n * The `PostsUserPage` component shows a user's activity feed inside of their\n * profile.\n */\nexport default class PostsUserPage extends UserPage {\n constructor() {\n super(...arguments);\n /**\n * The state of the Post models in the feed.\n */\n _defineProperty(this, \"posts\", void 0);\n /**\n * The number of activity items to load per request.\n */\n _defineProperty(this, \"loadLimit\", 20);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.posts = new PostListState({}, this.loadLimit);\n this.loadUser(m.route.param('username'));\n }\n content() {\n return m(\"div\", {\n className: \"PostsUserPage\"\n }, m(PostList, {\n state: this.posts\n }));\n }\n\n /**\n * Initialize the component with a user, and trigger the loading of their\n * activity feed.\n */\n show(user) {\n super.show(user);\n this.posts.refreshParams(this.params(user), 1);\n }\n params(user) {\n return {\n filter: {\n author: user.username()\n }\n };\n }\n}\nflarum.reg.add('core', 'forum/components/PostsUserPage', PostsUserPage);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport FormModal from '../../common/components/FormModal';\nimport Button from '../../common/components/Button';\nimport Stream from '../../common/utils/Stream';\nimport Form from '../../common/components/Form';\n/**\n * The 'RenameDiscussionModal' displays a modal dialog with an input to rename a discussion\n */\nexport default class RenameDiscussionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"discussion\", void 0);\n _defineProperty(this, \"currentTitle\", void 0);\n _defineProperty(this, \"newTitle\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.discussion = this.attrs.discussion;\n this.currentTitle = this.attrs.currentTitle;\n this.newTitle = Stream(this.currentTitle);\n }\n className() {\n return 'RenameDiscussionModal Modal--small';\n }\n title() {\n return app.translator.trans('core.forum.rename_discussion.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, {\n className: \"Form--centered\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(\"input\", {\n className: \"FormControl\",\n bidi: this.newTitle,\n type: \"text\"\n })), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n className: \"Button Button--primary Button--block\",\n type: \"submit\",\n loading: this.loading\n }, app.translator.trans('core.forum.rename_discussion.submit_button')))));\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n const title = this.newTitle();\n const currentTitle = this.currentTitle;\n\n // If the title is different to what it was before, then save it. After the\n // save has completed, update the post stream as there will be a new post\n // indicating that the discussion was renamed.\n if (title && title !== currentTitle) {\n return this.discussion.save({\n title\n }).then(() => {\n if (app.viewingDiscussion(this.discussion)) {\n app.current.get('stream').update();\n }\n m.redraw();\n this.hide();\n }).catch(() => {\n this.loading = false;\n m.redraw();\n });\n } else {\n this.hide();\n }\n }\n}\nflarum.reg.add('core', 'forum/components/RenameDiscussionModal', RenameDiscussionModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport LinkButton from '../../common/components/LinkButton';\nimport extractText from '../../common/utils/extractText';\nimport MinimalDiscussionListItem from './MinimalDiscussionListItem';\n\n/**\n * The `PostsSearchSource` finds and displays post search results in\n * the search dropdown.\n */\nexport default class PostsSearchSource {\n constructor() {\n _defineProperty(this, \"results\", new Map());\n _defineProperty(this, \"resource\", 'posts');\n }\n title() {\n return extractText(app.translator.trans('core.lib.search_source.posts.heading'));\n }\n isCached(query) {\n return this.results.has(query.toLowerCase());\n }\n async search(query, limit) {\n query = query.toLowerCase();\n this.results.set(query, []);\n const params = {\n filter: {\n q: query\n },\n page: {\n limit\n },\n include: 'user,discussion.tags'\n };\n return app.store.find('posts', params).then(results => {\n this.results.set(query, results);\n m.redraw();\n });\n }\n view(query) {\n query = query.toLowerCase();\n return (this.results.get(query) || []).map(post => {\n return m(\"li\", {\n className: \"PostSearchResult\",\n \"data-index\": 'posts' + post.id(),\n \"data-id\": post.id()\n }, m(MinimalDiscussionListItem, {\n discussion: post.discussion(),\n post: post,\n params: {\n q: query\n },\n jumpTo: post.number(),\n author: post.user()\n }));\n });\n }\n customGrouping() {\n return false;\n }\n fullPage(query) {\n const filter = app.search.gambits.apply('posts', {\n q: query\n });\n const q = filter.q || null;\n delete filter.q;\n return m(\"li\", null, m(LinkButton, {\n icon: \"fas fa-search\",\n href: app.route('posts', {\n q,\n filter\n })\n }, app.translator.trans('core.lib.search_source.posts.all_button', {\n query\n })));\n }\n gotoItem(id) {\n const post = app.store.getById('posts', id);\n if (!post) return null;\n return app.route.post(post);\n }\n}\nflarum.reg.add('core', 'forum/components/PostsSearchSource', PostsSearchSource);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport Component from '../Component';\nimport Input from './Input';\n\n/**\n * The `SearchSource` interface defines a section of search results in the\n * search dropdown.\n *\n * Search sources should be registered with the `Search` component class\n * by extending the `sourceItems` method. When the user types a\n * query, each search source will be prompted to load search results via the\n * `search` method. When the dropdown is redrawn, it will be constructed by\n * putting together the output from the `view` method of each source.\n */\n\n/**\n * The `Search` component displays a primary search input at the top of the frontend (forum or admin).\n * When clicked, it opens an advanced search modal with results from various sources.\n *\n * Must be extended and the abstract methods implemented per-frontend.\n */\nexport default class AbstractSearch extends Component {\n constructor() {\n super(...arguments);\n /**\n * The instance of `SearchState` for this component.\n */\n _defineProperty(this, \"searchState\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.searchState = this.attrs.state;\n }\n view() {\n // Hide the search view if no sources were loaded\n if (this.sourceItems().isEmpty()) return m(\"div\", null);\n const openSearchModal = () => {\n this.$('input').blur() && app.modal.show(() => import(/* webpackChunkName: 'common/components/SearchModal', webpackMode: 'lazy-once' */ '../../common/components/SearchModal'), {\n searchState: this.searchState,\n sources: this.sourceItems().toArray()\n });\n };\n return m(\"div\", {\n role: \"search\",\n className: \"Search\",\n \"aria-label\": this.attrs.a11yRoleLabel\n }, m(Input, {\n type: \"search\",\n className: \"Search-input\",\n clearable: this.searchState.getValue(),\n clearLabel: app.translator.trans('core.lib.search.search_clear_button_accessible_label'),\n prefixIcon: \"fas fa-search\",\n \"aria-label\": this.attrs.label,\n readonly: true,\n placeholder: this.attrs.label,\n value: this.searchState.getValue(),\n onchange: value => {\n if (!value) this.searchState.clear();else this.searchState.setValue(value);\n },\n inputAttrs: {\n onclick: () => setTimeout(() => openSearchModal(), 150),\n // for keyboard navigation, click event would be triggered on keydown\n onkeydown: e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n this.$('input').blur() && openSearchModal();\n }\n }\n }\n }));\n }\n\n /**\n * A list of search sources that can be used to query for search results.\n */\n}\nflarum.reg.add('core', 'common/components/AbstractSearch', AbstractSearch);flarum.reg.addChunkModule('485', '7085', 'core', 'common/components/SearchModal');","import app from '../../forum/app';\nimport ItemList from '../../common/utils/ItemList';\nimport DiscussionsSearchSource from './DiscussionsSearchSource';\nimport UsersSearchSource from './UsersSearchSource';\nimport PostsSearchSource from './PostsSearchSource';\nimport AbstractSearch from '../../common/components/AbstractSearch';\nexport default class Search extends AbstractSearch {\n static initAttrs(attrs) {\n attrs.label = app.translator.trans('core.forum.header.search_placeholder', {}, true);\n attrs.a11yRoleLabel = app.translator.trans('core.forum.header.search_role_label', {}, true);\n }\n sourceItems() {\n const items = new ItemList();\n if (app.forum.attribute('canViewForum')) {\n items.add('discussions', new DiscussionsSearchSource());\n items.add('posts', new PostsSearchSource());\n }\n if (app.forum.attribute('canSearchUsers')) {\n items.add('users', new UsersSearchSource());\n }\n return items;\n }\n}\nflarum.reg.add('core', 'forum/components/Search', Search);","import app from '../../forum/app';\nimport username from '../../common/helpers/username';\nimport Dropdown from '../../common/components/Dropdown';\nimport LinkButton from '../../common/components/LinkButton';\nimport Button from '../../common/components/Button';\nimport ItemList from '../../common/utils/ItemList';\nimport Separator from '../../common/components/Separator';\nimport extractText from '../../common/utils/extractText';\nimport Avatar from '../../common/components/Avatar';\n/**\n * The `SessionDropdown` component shows a button with the current user's\n * avatar/name, with a dropdown of session controls.\n */\nexport default class SessionDropdown extends Dropdown {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n attrs.className = 'SessionDropdown';\n attrs.buttonClassName = 'Button Button--user Button--flat';\n attrs.menuClassName = 'Dropdown-menu--right';\n attrs.accessibleToggleLabel = extractText(app.translator.trans('core.forum.header.session_dropdown_accessible_label'));\n }\n view(vnode) {\n return super.view({\n ...vnode,\n children: this.items().toArray()\n });\n }\n getButtonContent() {\n const user = app.session.user;\n return [m(Avatar, {\n user: user\n }), ' ', m(\"span\", {\n className: \"Button-label\"\n }, username(user))];\n }\n\n /**\n * Build an item list for the contents of the dropdown menu.\n */\n items() {\n const items = new ItemList();\n const user = app.session.user;\n items.add('profile', m(LinkButton, {\n icon: \"fas fa-user\",\n href: app.route.user(user)\n }, app.translator.trans('core.forum.header.profile_button')), 100);\n items.add('settings', m(LinkButton, {\n icon: \"fas fa-cog\",\n href: app.route('settings')\n }, app.translator.trans('core.forum.header.settings_button')), 50);\n if (app.forum.attribute('adminUrl')) {\n items.add('administration', m(LinkButton, {\n icon: \"fas fa-wrench\",\n href: app.forum.attribute('adminUrl'),\n target: \"_blank\"\n }, app.translator.trans('core.forum.header.admin_button')), 0);\n }\n items.add('separator', m(Separator, null), -90);\n items.add('logOut', m(Button, {\n icon: \"fas fa-sign-out-alt\",\n onclick: app.session.logout.bind(app.session)\n }, app.translator.trans('core.forum.header.log_out_button')), -100);\n return items;\n }\n}\nflarum.reg.add('core', 'forum/components/SessionDropdown', SessionDropdown);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport Page from '../../common/components/Page';\nimport ItemList from '../../common/utils/ItemList';\nimport UserCard from './UserCard';\nimport SelectDropdown from '../../common/components/SelectDropdown';\nimport LinkButton from '../../common/components/LinkButton';\nimport Separator from '../../common/components/Separator';\nimport listItems from '../../common/helpers/listItems';\nimport AffixedSidebar from './AffixedSidebar';\nimport PageStructure from './PageStructure';\n/**\n * The `UserPage` component shows a user's profile. It can be extended to show\n * content inside of the content area. See `ActivityPage` and `SettingsPage` for\n * examples.\n *\n * @abstract\n */\nexport default class UserPage extends Page {\n constructor() {\n super(...arguments);\n /**\n * The user this page is for.\n */\n _defineProperty(this, \"user\", null);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.bodyClass = 'App--user';\n }\n\n /**\n * Base view template for the user page.\n */\n view() {\n return m(PageStructure, {\n className: \"UserPage\",\n hero: this.hero.bind(this),\n sidebar: this.sidebar.bind(this),\n loading: !this.user\n }, this.user && this.content());\n }\n hero() {\n return m(UserCard, {\n user: this.user,\n className: \"Hero UserHero\",\n editable: this.user.canEdit() || this.user === app.session.user,\n controlsButtonClassName: \"Button\"\n });\n }\n sidebar() {\n return m(AffixedSidebar, null, m(\"nav\", {\n className: \"sideNav UserPage-nav\"\n }, m(\"ul\", null, listItems(this.sidebarItems().toArray()))));\n }\n\n /**\n * Get the content to display in the user page.\n */\n content() {}\n\n /**\n * Initialize the component with a user, and trigger the loading of their\n * activity feed.\n *\n * @protected\n */\n show(user) {\n this.user = user;\n app.current.set('user', user);\n app.setTitle(user.displayName());\n app.history.push(app.current.get('routeName'), user.displayName());\n m.redraw();\n }\n\n /**\n * Given a username, load the user's profile from the store, or make a request\n * if we don't have it yet. Then initialize the profile page with that user.\n */\n loadUser(username) {\n const lowercaseUsername = username.toLowerCase();\n\n // Load the preloaded user object, if any, into the global app store\n // We don't use the output of the method because it returns raw JSON\n // instead of the parsed models\n app.preloadedApiDocument();\n app.store.all('users').some(user => {\n if ((user.username().toLowerCase() === lowercaseUsername || user.id() === username) && user.joinTime()) {\n this.show(user);\n return true;\n }\n return false;\n });\n if (!this.user) {\n app.store.find('users', username, {\n bySlug: true\n }).then(this.show.bind(this));\n }\n }\n\n /**\n * Build an item list for the content of the sidebar.\n */\n sidebarItems() {\n const items = new ItemList();\n items.add('nav', m(SelectDropdown, {\n className: \"App-titleControl\",\n buttonClassName: \"Button\"\n }, this.navItems().toArray()));\n return items;\n }\n\n /**\n * Build an item list for the navigation in the sidebar.\n */\n navItems() {\n const items = new ItemList();\n const user = this.user;\n const isActor = app.session.user === user;\n items.add('posts', m(LinkButton, {\n href: app.route('user.posts', {\n username: user.slug()\n }),\n icon: \"far fa-comment\"\n }, app.translator.trans('core.forum.user.posts_link'), \" \", m(\"span\", {\n className: \"Button-badge\"\n }, user.commentCount())), 100);\n items.add('discussions', m(LinkButton, {\n href: app.route('user.discussions', {\n username: user.slug()\n }),\n icon: \"fas fa-bars\"\n }, app.translator.trans('core.forum.user.discussions_link'), \" \", m(\"span\", {\n className: \"Button-badge\"\n }, user.discussionCount())), 90);\n if (isActor) {\n items.add('separator', m(Separator, null), -90);\n items.add('settings', m(LinkButton, {\n href: app.route('settings'),\n icon: \"fas fa-cog\"\n }, app.translator.trans('core.forum.user.settings_link')), -100);\n }\n if (isActor || app.forum.attribute('canModerateAccessTokens')) {\n if (!isActor) {\n items.add('security-separator', m(Separator, null), -90);\n }\n items.add('security', m(LinkButton, {\n href: app.route('user.security', {\n username: user.slug()\n }),\n icon: \"fas fa-shield-alt\"\n }, app.translator.trans('core.forum.user.security_link')), -100);\n }\n return items;\n }\n}\nflarum.reg.add('core', 'forum/components/UserPage', UserPage);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport extractText from '../../common/utils/extractText';\nimport UserSearchResult from '../../common/components/UserSearchResult';\n\n/**\n * The `UsersSearchSource` finds and displays user search results in the search\n * dropdown.\n */\nexport default class UsersSearchSource {\n constructor() {\n _defineProperty(this, \"results\", new Map());\n _defineProperty(this, \"resource\", 'users');\n }\n title() {\n return extractText(app.translator.trans('core.lib.search_source.users.heading'));\n }\n isCached(query) {\n return this.results.has(query.toLowerCase());\n }\n async search(query, limit) {\n return app.store.find('users', {\n filter: {\n q: query\n },\n page: {\n limit\n }\n }).then(results => {\n this.results.set(query, results);\n m.redraw();\n });\n }\n view(query) {\n query = query.toLowerCase();\n const results = (this.results.get(query) || []).concat(app.store.all('users').filter(user => [user.username(), user.displayName()].some(value => value.toLowerCase().substr(0, query.length) === query))).filter((e, i, arr) => arr.lastIndexOf(e) === i).sort((a, b) => a.displayName().localeCompare(b.displayName()));\n if (!results.length) return [];\n return results.map(user => m(UserSearchResult, {\n user: user,\n query: query\n }));\n }\n customGrouping() {\n return false;\n }\n fullPage(query) {\n return null;\n }\n gotoItem(id) {\n const user = app.store.getById('users', id);\n if (!user) return null;\n return app.route.user(user);\n }\n}\nflarum.reg.add('core', 'forum/components/UsersSearchSource', UsersSearchSource);","import app from '../app';\nimport Component from '../../common/Component';\nimport Button from '../../common/components/Button';\nimport ItemList from '../../common/utils/ItemList';\nconst LOCAL_STORAGE_KEY = 'welcomeHidden';\n\n/**\n * The `WelcomeHero` component displays a hero that welcomes the user to the\n * forum.\n */\nexport default class WelcomeHero extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view(vnode) {\n if (this.isHidden()) return null;\n const slideUp = () => {\n this.$().slideUp(this.hide.bind(this));\n };\n return m(\"header\", {\n className: \"Hero WelcomeHero\"\n }, m(\"div\", {\n className: \"container\"\n }, m(Button, {\n icon: \"fas fa-times\",\n onclick: slideUp,\n className: \"Hero-close Button Button--icon Button--link\",\n \"aria-label\": app.translator.trans('core.forum.welcome_hero.hide')\n }), m(\"div\", {\n className: \"containerNarrow\"\n }, this.welcomeItems().toArray())));\n }\n\n /**\n * Hide the welcome hero.\n */\n hide() {\n localStorage.setItem(LOCAL_STORAGE_KEY, 'true');\n }\n\n /**\n * Determines whether the welcome hero should be hidden.\n *\n * @returns if the welcome hero is hidden.\n */\n isHidden() {\n var _app$forum$attribute;\n if (!((_app$forum$attribute = app.forum.attribute('welcomeTitle')) != null && _app$forum$attribute.trim())) return true;\n if (localStorage.getItem(LOCAL_STORAGE_KEY)) return true;\n return false;\n }\n welcomeItems() {\n const items = new ItemList();\n items.add('hero-title', m(\"h1\", {\n className: \"Hero-title\"\n }, app.forum.attribute('welcomeTitle')), 20);\n items.add('hero-subtitle', m(\"div\", {\n className: \"Hero-subtitle\"\n }, m.trust(app.forum.attribute('welcomeMessage'))), 10);\n return items;\n }\n}\nflarum.reg.add('core', 'forum/components/WelcomeHero', WelcomeHero);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport DefaultResolver from '../../common/resolvers/DefaultResolver';\nimport DiscussionPage from '../components/DiscussionPage';\n\n/**\n * A custom route resolver for DiscussionPage that generates the same key to all posts\n * on the same discussion. It triggers a scroll when going from one post to another\n * in the same discussion.\n */\nexport default class DiscussionPageResolver extends DefaultResolver {\n /**\n * Remove optional parts of a discussion's slug to keep the substring\n * that bijectively maps to a discussion object. By default this just\n * extracts the numerical ID from the slug. If a custom discussion\n * slugging driver is used, this may need to be overriden.\n * @param slug\n */\n canonicalizeDiscussionSlug(slug) {\n if (!slug) return;\n return slug.split('-')[0];\n }\n\n /**\n * @inheritdoc\n */\n makeKey() {\n const params = {\n ...m.route.param()\n };\n if ('near' in params) {\n delete params.near;\n }\n params.id = this.canonicalizeDiscussionSlug(params.id);\n return this.routeName.replace('.near', '') + JSON.stringify(params);\n }\n onmatch(args, requestedPath, route) {\n if (app.current.matches(DiscussionPage) && this.canonicalizeDiscussionSlug(args.id) === this.canonicalizeDiscussionSlug(m.route.param('id'))) {\n // By default, the first post number of any discussion is 1\n DiscussionPageResolver.scrollToPostNumber = args.near || 1;\n }\n return super.onmatch(args, requestedPath, route);\n }\n render(vnode) {\n if (DiscussionPageResolver.scrollToPostNumber !== null) {\n const number = DiscussionPageResolver.scrollToPostNumber;\n // Scroll after a timeout to avoid clashes with the render.\n setTimeout(() => app.current.get('stream').goToNumber(number));\n DiscussionPageResolver.scrollToPostNumber = null;\n }\n return super.render(vnode);\n }\n}\n_defineProperty(DiscussionPageResolver, \"scrollToPostNumber\", null);\nflarum.reg.add('core', 'forum/resolvers/DiscussionPageResolver', DiscussionPageResolver);","import IndexPage from './components/IndexPage';\nimport DiscussionPage from './components/DiscussionPage';\nimport PostsUserPage from './components/PostsUserPage';\nimport DiscussionPageResolver from './resolvers/DiscussionPageResolver';\n\n/**\n * Helper functions to generate URLs to form pages.\n */\n\n/**\n * The `routes` initializer defines the forum app's routes.\n */\nexport default function (app) {\n app.routes = {\n index: {\n path: '/all',\n component: IndexPage\n },\n posts: {\n path: '/posts',\n component: () => import(/* webpackChunkName: 'forum/components/PostsPage', webpackMode: 'lazy-once' */ './components/PostsPage')\n },\n discussion: {\n path: '/d/:id',\n component: DiscussionPage,\n resolverClass: DiscussionPageResolver\n },\n 'discussion.near': {\n path: '/d/:id/:near',\n component: DiscussionPage,\n resolverClass: DiscussionPageResolver\n },\n user: {\n path: '/u/:username',\n component: PostsUserPage\n },\n 'user.posts': {\n path: '/u/:username',\n component: PostsUserPage\n },\n 'user.discussions': {\n path: '/u/:username/discussions',\n component: () => import(/* webpackChunkName: 'forum/components/DiscussionsUserPage', webpackMode: 'lazy-once' */ './components/DiscussionsUserPage')\n },\n settings: {\n path: '/settings',\n component: () => import(/* webpackChunkName: 'forum/components/SettingsPage', webpackMode: 'lazy-once' */ './components/SettingsPage')\n },\n 'user.security': {\n path: '/u/:username/security',\n component: () => import(/* webpackChunkName: 'forum/components/UserSecurityPage', webpackMode: 'lazy-once' */ './components/UserSecurityPage')\n },\n notifications: {\n path: '/notifications',\n component: () => import(/* webpackChunkName: 'forum/components/NotificationsPage', webpackMode: 'lazy-once' */ './components/NotificationsPage')\n }\n };\n}\nexport function makeRouteHelpers(app) {\n return {\n /**\n * Generate a URL to a discussion.\n */\n discussion: (discussion, near) => {\n return app.route(near && near !== 1 ? 'discussion.near' : 'discussion', {\n id: discussion.slug(),\n near: near && near !== 1 ? near : undefined\n });\n },\n /**\n * Generate a URL to a post.\n */\n post: post => {\n return app.route.discussion(post.discussion(), post.number());\n },\n /**\n * Generate a URL to a user.\n */\n user: user => {\n return app.route('user', {\n username: user.slug()\n });\n }\n };\n}flarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostsPage');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/app');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/arrayFlatPolyfill');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/app');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/utils/History');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/setRouteWithForcedRefresh');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/utils/Pane');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionPage');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Page');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/Component');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/states/PageState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/subclassOf');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/ItemList');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/isObject');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionHero');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/listItems');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Separator');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionListPane');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionList');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionListItem');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Link');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/extract');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/highlight');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/string');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/humanTime');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/abbreviateNumber');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/extractText');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Dropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Tooltip');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Icon');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/TerminalPost');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/humanTime');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/SubtreeRetainer');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/utils/DiscussionControls');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/LoadingIndicator');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/RenameDiscussionModal');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/FormModal');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Modal');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Alert');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/Stream');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Form');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/utils/slidable');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/escapeRegExp');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Avatar');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Placeholder');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/SplitDropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/states/PostStreamState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/anchorScroll');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PageStructure');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/HeaderPrimary');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/HeaderSecondary');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/SessionDropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/username');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/LinkButton');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/SelectDropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/models/Discussion');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/Model');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/computed');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Badge');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/textContrastClass');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/isDark');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionsSearchSource');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/MinimalDiscussionListItem');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/UsersSearchSource');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/UserSearchResult');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Input');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionRenamedNotification');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/utils/PostControls');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostUser');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/userOnline');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostMeta');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/fullTime');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/models/Post');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostEdited');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/UserCard');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/utils/UserControls');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/UserPage');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/AffixedSidebar');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/AvatarEditor');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/ComposerPostPreview');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionRenamedPost');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/EventPost');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/routes');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/IndexPage');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/WelcomeHero');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/IndexSidebar');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/states/PostListState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/states/PaginatedListState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/EventEmitter');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostsUserPage');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/resolvers/DiscussionPageResolver');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/resolvers/DefaultResolver');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/Application');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/ModalManager');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/focusTrap');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/AlertManager');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/RequestErrorModal');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/Translator');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/Store');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/Session');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/Drawer');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/mapRoutes');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/RequestError');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/ScrollListener');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/liveHumanTimes');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extend');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/models/Forum');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/models/User');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/stringToColor');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/GroupBadge');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/models/Group');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/models/Notification');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/states/ModalManagerState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/states/AlertManagerState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/fireApplicationError');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/models/AccessToken');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/ThemeMode');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Navigation');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/states/NotificationListState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/states/GlobalSearchState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/states/SearchState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/states/DiscussionListState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/states/ComposerState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/IGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/AutocompleteReader');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/GambitsAutocomplete');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/insertText');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/formatNumber');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/withAttr');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/KeyboardNavigatable');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Switch');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Checkbox');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/InfoTile');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/FieldSet');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/TextEditor');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/BasicEditorDriver');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/LoadingPost');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/LogInButtons');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/index');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/index');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/registry');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/patchMithril');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/common');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/forum');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/ExportRegistry');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/LogInButton');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostPreview');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/index');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/mixin');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/styleSelectedText');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/throttleDebounce');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/UserSelectionModal');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/formatAmount');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/generateElementId');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/FormGroup');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/DetailedDropdownItem');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Select');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/MultiSelect');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/ColorPreviewInput');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/TextEditorButton');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/AutocompleteDropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/GambitsAutocompleteDropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/UploadImageButton');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/punctuateSeries');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/Fragment');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/bidi');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/Model');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/PostTypes');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/Routes');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/Store');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/Search');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/Notification');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/ThemeMode');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/Admin');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Pill');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/SearchManager');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/GambitManager');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/discussions/AuthorGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/discussions/CreatedGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/discussions/HiddenGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/discussions/UnreadGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/users/EmailGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/users/GroupGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/discussions/DiscussionGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/ForumApplication');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/utils/isSafariMobile');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/Notices');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/Footer');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/NotificationList');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/HeaderList');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/HeaderListGroup');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/NotificationType');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/Search');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostsSearchSource');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/AbstractSearch');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/Notification');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/HeaderListItem');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/Post');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/AbstractPost');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/NotificationsDropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/HeaderDropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/CommentPost');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/Comment');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/classList');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Button');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/fireDebugWarning');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostList');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostListItem');\nflarum.reg.addChunkModule('879', '9101', 'core', 'forum/components/DiscussionsUserPage');\nflarum.reg.addChunkModule('298', '1612', 'core', 'forum/components/SettingsPage');\nflarum.reg.addChunkModule('298', '1612', 'core', 'forum/components/NotificationGrid');\nflarum.reg.addChunkModule('298', '1612', 'core', 'forum/components/ChangePasswordModal');\nflarum.reg.addChunkModule('298', '1612', 'core', 'forum/components/ChangeEmailModal');\nflarum.reg.addChunkModule('698', '1053', 'core', 'forum/components/UserSecurityPage');\nflarum.reg.addChunkModule('698', '1053', 'core', 'forum/components/AccessTokensList');\nflarum.reg.addChunkModule('698', '1053', 'core', 'forum/components/NewAccessTokenModal');\nflarum.reg.addChunkModule('698', '1053', 'core', 'forum/states/UserSecurityPageState');\nflarum.reg.addChunkModule('698', '1053', 'core', 'common/components/LabelValue');\nflarum.reg.addChunkModule('173', '8427', 'core', 'forum/components/NotificationsPage');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport subclassOf from '../../common/utils/subclassOf';\nimport Stream from '../../common/utils/Stream';\nimport Component from '../../common/Component';\nclass ComposerState {\n constructor() {\n /**\n * The composer's current position.\n */\n _defineProperty(this, \"position\", ComposerState.Position.HIDDEN);\n /**\n * The composer's intended height, which can be modified by the user\n * (by dragging the composer handle).\n */\n _defineProperty(this, \"height\", null);\n /**\n * The dynamic component being shown inside the composer.\n */\n _defineProperty(this, \"body\", {\n attrs: {}\n });\n /**\n * A reference to the text editor that allows text manipulation.\n */\n _defineProperty(this, \"editor\", null);\n /**\n * If the composer was loaded and mounted.\n */\n _defineProperty(this, \"mounted\", false);\n _defineProperty(this, \"onExit\", null);\n /**\n * Fields of the composer.\n */\n _defineProperty(this, \"fields\", void 0);\n this.clear();\n }\n\n /**\n * Load a content component into the composer.\n *\n */\n async load(componentClass, attrs) {\n if (!(componentClass.prototype instanceof Component)) {\n componentClass = (await componentClass()).default;\n }\n const body = {\n componentClass,\n attrs\n };\n if (this.preventExit()) return;\n\n // If we load a similar component into the composer, then Mithril will be\n // able to diff the old/new contents and some DOM-related state from the\n // old composer will remain. To prevent this from happening, we clear the\n // component and force a redraw, so that the new component will be working\n // on a blank slate.\n if (this.isVisible()) {\n this.clear();\n m.redraw.sync();\n }\n this.body = body;\n return componentClass;\n }\n\n /**\n * Clear the composer's content component.\n */\n clear() {\n this.position = ComposerState.Position.HIDDEN;\n this.body = {\n attrs: {}\n };\n this.onExit = null;\n this.fields = {\n content: Stream('')\n };\n if (this.editor) {\n this.editor.destroy();\n }\n this.editor = null;\n }\n\n /**\n * Show the composer.\n */\n async show() {\n if (!this.mounted) {\n const Composer = (await import(/* webpackChunkName: 'forum/components/Composer', webpackMode: 'lazy-once' */ '../components/Composer')).default;\n m.mount(document.getElementById('composer'), {\n view: () => m(Composer, {\n state: this\n })\n });\n this.mounted = true;\n }\n if (this.position === ComposerState.Position.NORMAL || this.position === ComposerState.Position.FULLSCREEN) return;\n this.position = ComposerState.Position.NORMAL;\n m.redraw.sync();\n\n // Sleep for a short time to allow the composer to render before subsequent actions.\n await new Promise(resolve => setTimeout(resolve, 80));\n }\n\n /**\n * Close the composer.\n */\n hide() {\n this.clear();\n m.redraw();\n }\n\n /**\n * Confirm with the user so they don't lose their content, then close the\n * composer.\n */\n close() {\n if (this.preventExit()) return;\n this.hide();\n }\n\n /**\n * Minimize the composer. Has no effect if the composer is hidden.\n */\n minimize() {\n if (!this.isVisible()) return;\n this.position = ComposerState.Position.MINIMIZED;\n m.redraw();\n }\n\n /**\n * Take the composer into fullscreen mode. Has no effect if the composer is\n * hidden.\n */\n fullScreen() {\n if (!this.isVisible()) return;\n this.position = ComposerState.Position.FULLSCREEN;\n m.redraw();\n }\n\n /**\n * Exit fullscreen mode.\n */\n exitFullScreen() {\n if (this.position !== ComposerState.Position.FULLSCREEN) return;\n this.position = ComposerState.Position.NORMAL;\n m.redraw();\n }\n\n /**\n * Determine whether the body matches the given component class and data.\n *\n * @param type The component class to check against. Subclasses are accepted as well.\n * @param data\n */\n bodyMatches(type, data) {\n if (data === void 0) {\n data = {};\n }\n // Fail early when the body is of a different type\n if (!subclassOf(this.body.componentClass, type)) return false;\n\n // Now that the type is known to be correct, we loop through the provided\n // data to see whether it matches the data in the attributes for the body.\n return Object.keys(data).every(key => this.body.attrs[key] === data[key]);\n }\n\n /**\n * Determine whether or not the Composer is visible.\n *\n * True when the composer is displayed on the screen and has a body component.\n * It could be open in \"normal\" or full-screen mode, or even minimized.\n *\n * @returns {boolean}\n */\n isVisible() {\n return this.position !== ComposerState.Position.HIDDEN;\n }\n\n /**\n * Determine whether or not the Composer is covering the screen.\n *\n * This will be true if the Composer is in full-screen mode on desktop,\n * or if we are on a mobile device, where we always consider the composer as full-screen..\n *\n * @return {boolean}\n */\n isFullScreen() {\n return this.position === ComposerState.Position.FULLSCREEN || app.screen() === 'phone';\n }\n\n /**\n * Check whether or not the user is currently composing a reply to a\n * discussion.\n *\n * @param {import('../../common/models/Discussion').default} discussion\n * @return {boolean}\n */\n composingReplyTo(discussion) {\n const ReplyComposer = flarum.reg.checkModule('core', 'forum/components/ReplyComposer');\n if (!ReplyComposer) return false;\n return this.isVisible() && this.bodyMatches(ReplyComposer, {\n discussion\n });\n }\n\n /**\n * Confirm with the user that they want to close the composer and lose their\n * content.\n *\n * @return Whether or not the exit was cancelled.\n */\n preventExit() {\n if (!this.isVisible()) return;\n if (!this.onExit) return;\n if (this.onExit.callback()) {\n return !confirm(this.onExit.message);\n }\n }\n\n /**\n * Configure when / what to ask the user before closing the composer.\n *\n * The provided callback will be used to determine whether asking for\n * confirmation is necessary. If the callback returns true at the time of\n * closing, the provided text will be shown in a standard confirmation dialog.\n */\n preventClosingWhen(callback, message) {\n this.onExit = {\n callback,\n message\n };\n }\n\n /**\n * Minimum height of the Composer.\n * @returns {number}\n */\n minimumHeight() {\n return 200;\n }\n\n /**\n * Maximum height of the Composer.\n */\n maximumHeight() {\n return $(window).height() - $('#header').outerHeight();\n }\n\n /**\n * Computed the composer's current height, based on the intended height, and\n * the composer's current state. This will be applied to the composer\n * content's DOM element.\n */\n computedHeight() {\n // If the composer is minimized, then we don't want to set a height; we'll\n // let the CSS decide how high it is. If it's fullscreen, then we need to\n // make it as high as the window.\n if (this.position === ComposerState.Position.MINIMIZED) {\n return '';\n } else if (this.position === ComposerState.Position.FULLSCREEN) {\n return $(window).height();\n }\n\n // Otherwise, if it's normal or hidden, then we use the intended height.\n // We don't let the composer get too small or too big, though.\n return Math.max(this.minimumHeight(), Math.min(this.height || 0, this.maximumHeight()));\n }\n}\n_defineProperty(ComposerState, \"Position\", {\n HIDDEN: 'hidden',\n NORMAL: 'normal',\n MINIMIZED: 'minimized',\n FULLSCREEN: 'fullScreen'\n});\nexport default ComposerState;\nflarum.reg.add('core', 'forum/states/ComposerState', ComposerState);flarum.reg.addChunkModule('366', '8139', 'core', 'forum/components/Composer');\nflarum.reg.addChunkModule('366', '8139', 'core', 'forum/components/ComposerButton');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport PaginatedListState from '../../common/states/PaginatedListState';\nimport EventEmitter from '../../common/utils/EventEmitter';\nconst globalEventEmitter = new EventEmitter();\nexport default class DiscussionListState extends PaginatedListState {\n constructor(params, page) {\n if (page === void 0) {\n page = 1;\n }\n super(params, page, null);\n _defineProperty(this, \"extraDiscussions\", []);\n _defineProperty(this, \"eventEmitter\", void 0);\n this.eventEmitter = globalEventEmitter.on('discussion.deleted', this.deleteDiscussion.bind(this));\n }\n get type() {\n return 'discussions';\n }\n requestParams() {\n const params = {\n include: ['user', 'lastPostedUser'],\n filter: this.params.filter || {},\n sort: this.currentSort()\n };\n if (this.params.q) {\n params.filter.q = this.params.q;\n params.include.push('mostRelevantPost', 'mostRelevantPost.user');\n }\n return params;\n }\n loadPage(page) {\n if (page === void 0) {\n page = 1;\n }\n const preloadedDiscussions = app.preloadedApiDocument();\n if (preloadedDiscussions) {\n var _preloadedDiscussions;\n this.initialLoading = false;\n this.pageSize = ((_preloadedDiscussions = preloadedDiscussions.payload.meta) == null ? void 0 : _preloadedDiscussions.perPage) || DiscussionListState.DEFAULT_PAGE_SIZE;\n return Promise.resolve(preloadedDiscussions);\n }\n return super.loadPage(page);\n }\n clear() {\n super.clear();\n this.extraDiscussions = [];\n }\n\n /**\n * Get a map of sort keys (which appear in the URL, and are used for\n * translation) to the API sort value that they represent.\n */\n sortMap() {\n const map = {};\n if (this.params.q) {\n map.relevance = '';\n }\n map.latest = '-lastPostedAt';\n map.top = '-commentCount';\n map.newest = '-createdAt';\n map.oldest = 'createdAt';\n return map;\n }\n removeDiscussion(discussion) {\n this.eventEmitter.emit('discussion.deleted', discussion);\n }\n deleteDiscussion(discussion) {\n for (const page of this.pages) {\n const index = page.items.indexOf(discussion);\n if (index !== -1) {\n page.items.splice(index, 1);\n break;\n }\n }\n const index = this.extraDiscussions.indexOf(discussion);\n if (index !== -1) {\n this.extraDiscussions.splice(index);\n }\n m.redraw();\n }\n\n /**\n * Add a discussion to the top of the list.\n */\n addDiscussion(discussion) {\n this.removeDiscussion(discussion);\n this.extraDiscussions.unshift(discussion);\n m.redraw();\n }\n getAllItems() {\n return this.extraDiscussions.concat(super.getAllItems());\n }\n getPages() {\n const pages = super.getPages();\n if (this.extraDiscussions.length) {\n return [{\n number: -1,\n items: this.extraDiscussions\n }, ...pages];\n }\n return pages;\n }\n}\nflarum.reg.add('core', 'forum/states/DiscussionListState', DiscussionListState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport setRouteWithForcedRefresh from '../../common/utils/setRouteWithForcedRefresh';\nimport SearchState from '../../common/states/SearchState';\nexport default class GlobalSearchState extends SearchState {\n constructor(cachedSearches) {\n if (cachedSearches === void 0) {\n cachedSearches = [];\n }\n super(cachedSearches);\n _defineProperty(this, \"initialValueSet\", false);\n }\n getValue() {\n // If we are on a search results page, we should initialize the value\n // from the current search, if one is present.\n // We can't do this in the constructor, as this class is instantiated\n // before pages are rendered, and we need app.current.\n if (!this.initialValueSet && this.currPageProvidesSearch()) {\n this.intializeValue();\n }\n return super.getValue();\n }\n intializeValue() {\n this.setValue(this.getInitialSearch());\n this.initialValueSet = true;\n }\n currPageProvidesSearch() {\n return app.current.type && 'providesInitialSearch' in app.current.type && app.current.type.providesInitialSearch;\n }\n\n /**\n * @inheritdoc\n */\n getInitialSearch() {\n return this.currPageProvidesSearch() ? this.searchToQuery() : '';\n }\n searchToQuery() {\n const q = this.params().q || '';\n const filter = this.params().filter || {};\n return app.search.gambits.from('users', app.search.gambits.from('discussions', q, filter), filter).trim();\n }\n\n /**\n * Clear the search input and the current controller's active search.\n */\n clear() {\n super.clear();\n if (this.getInitialSearch()) {\n this.clearInitialSearch();\n } else {\n m.redraw();\n }\n }\n\n /**\n * Redirect to the index page without a search filter. This is called when the\n * 'x' is clicked in the search box in the header.\n */\n clearInitialSearch() {\n const {\n q,\n filter,\n ...params\n } = this.params();\n setRouteWithForcedRefresh(app.route(app.current.get('routeName'), params));\n }\n\n /**\n * Get URL parameters that stick between filter changes.\n *\n * This can be used to generate a link that clears filters.\n */\n stickyParams() {\n return {\n sort: m.route.param('sort'),\n q: m.route.param('q'),\n // Objects must be copied, otherwise they are passed by reference.\n // Which could end up undesirably modifying the mithril route params.\n filter: Object.assign({}, m.route.param('filter'))\n };\n }\n\n /**\n * Get parameters to be used in the current page.\n */\n params() {\n const params = this.stickyParams();\n return params;\n }\n\n /**\n * Redirect to the index page using the given sort parameter.\n */\n changeSort(sort) {\n const params = this.params();\n if (sort === Object.keys(app.discussions.sortMap())[0]) {\n delete params.sort;\n } else {\n params.sort = sort;\n }\n setRouteWithForcedRefresh(app.route(app.current.get('routeName'), params));\n }\n}\nflarum.reg.add('core', 'forum/states/GlobalSearchState', GlobalSearchState);","import app from '../../forum/app';\nimport PaginatedListState from '../../common/states/PaginatedListState';\nexport default class NotificationListState extends PaginatedListState {\n constructor() {\n super({}, 1, null);\n }\n get type() {\n return 'notifications';\n }\n\n /**\n * Load the next page of notification results.\n */\n load() {\n var _app$session$user, _app$session$user2;\n if ((_app$session$user = app.session.user) != null && _app$session$user.newNotificationCount()) {\n this.pages = [];\n this.location = {\n page: 1\n };\n }\n if (this.pages.length > 0) {\n return Promise.resolve();\n }\n (_app$session$user2 = app.session.user) == null || _app$session$user2.pushAttributes({\n newNotificationCount: 0\n });\n return super.loadNext();\n }\n\n /**\n * Mark all of the notifications as read.\n */\n markAllAsRead() {\n var _app$session$user3;\n if (this.pages.length === 0) return;\n (_app$session$user3 = app.session.user) == null || _app$session$user3.pushAttributes({\n unreadNotificationCount: 0\n });\n this.pages.forEach(page => {\n page.items.forEach(notification => notification.pushAttributes({\n isRead: true\n }));\n });\n return app.request({\n url: app.forum.attribute('apiUrl') + '/notifications/read',\n method: 'POST'\n });\n }\n\n /**\n * Delete all of the notifications for this user.\n */\n deleteAll() {\n var _app$session$user4;\n if (this.pages.length === 0) return;\n (_app$session$user4 = app.session.user) == null || _app$session$user4.pushAttributes({\n unreadNotificationCount: 0\n });\n this.pages = [];\n return app.request({\n url: app.forum.attribute('apiUrl') + '/notifications',\n method: 'DELETE'\n });\n }\n}\nflarum.reg.add('core', 'forum/states/NotificationListState', NotificationListState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport PaginatedListState from '../../common/states/PaginatedListState';\nimport EventEmitter from '../../common/utils/EventEmitter';\nconst globalEventEmitter = new EventEmitter();\nexport default class PostListState extends PaginatedListState {\n constructor(params, page, pageSize) {\n if (page === void 0) {\n page = 1;\n }\n if (pageSize === void 0) {\n pageSize = null;\n }\n super(params, page, pageSize);\n _defineProperty(this, \"extraPosts\", []);\n _defineProperty(this, \"eventEmitter\", void 0);\n this.eventEmitter = globalEventEmitter;\n }\n get type() {\n return 'posts';\n }\n requestParams() {\n var _this$params$sort;\n const params = {\n include: ['user', 'discussion'],\n filter: {\n type: 'comment',\n ...(this.params.filter || {})\n },\n sort: this.sortMap()[(_this$params$sort = this.params.sort) != null ? _this$params$sort : ''] || '-createdAt'\n };\n if (this.params.q) {\n params.filter.q = this.params.q;\n }\n return params;\n }\n loadPage(page) {\n if (page === void 0) {\n page = 1;\n }\n const preloadedPosts = app.preloadedApiDocument();\n if (preloadedPosts) {\n var _preloadedPosts$paylo;\n this.initialLoading = false;\n this.pageSize = ((_preloadedPosts$paylo = preloadedPosts.payload.meta) == null ? void 0 : _preloadedPosts$paylo.perPage) || PostListState.DEFAULT_PAGE_SIZE;\n return Promise.resolve(preloadedPosts);\n }\n return super.loadPage(page);\n }\n clear() {\n super.clear();\n this.extraPosts = [];\n }\n\n /**\n * Get a map of sort keys (which appear in the URL, and are used for\n * translation) to the API sort value that they represent.\n */\n sortMap() {\n const map = {};\n if (this.params.q) {\n map.relevance = '';\n }\n map.newest = '-createdAt';\n map.oldest = 'createdAt';\n return map;\n }\n getAllItems() {\n return this.extraPosts.concat(super.getAllItems());\n }\n getPages() {\n const pages = super.getPages();\n if (this.extraPosts.length) {\n return [{\n number: -1,\n items: this.extraPosts\n }, ...pages];\n }\n return pages;\n }\n}\nflarum.reg.add('core', 'forum/states/PostListState', PostListState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport { throttle } from 'throttle-debounce';\nimport anchorScroll from '../../common/utils/anchorScroll';\nexport default class PostStreamState {\n constructor(discussion, includedPosts) {\n if (includedPosts === void 0) {\n includedPosts = [];\n }\n /**\n * The discussion to display the post stream for.\n */\n _defineProperty(this, \"discussion\", void 0);\n /**\n * Whether or not the infinite-scrolling auto-load functionality is\n * disabled.\n */\n _defineProperty(this, \"paused\", false);\n _defineProperty(this, \"loadPageTimeouts\", {});\n _defineProperty(this, \"pagesLoading\", 0);\n _defineProperty(this, \"index\", 0);\n _defineProperty(this, \"number\", 1);\n /**\n * The number of posts that are currently visible in the viewport.\n */\n _defineProperty(this, \"visible\", 1);\n _defineProperty(this, \"visibleStart\", 0);\n _defineProperty(this, \"visibleEnd\", 0);\n _defineProperty(this, \"animateScroll\", false);\n _defineProperty(this, \"needsScroll\", false);\n _defineProperty(this, \"targetPost\", null);\n /**\n * The description to render on the scrubber.\n */\n _defineProperty(this, \"description\", '');\n /**\n * When the page is scrolled, goToIndex is called, or the page is loaded,\n * various listeners result in the scrubber being updated with a new\n * position and values. However, if goToNumber is called, the scrubber\n * will not be updated. Accordingly, we add logic to the scrubber's\n * onupdate to update itself, but only when needed, as indicated by this\n * property.\n *\n */\n _defineProperty(this, \"forceUpdateScrubber\", false);\n _defineProperty(this, \"loadPromise\", null);\n _defineProperty(this, \"loadNext\", void 0);\n _defineProperty(this, \"loadPrevious\", void 0);\n this.discussion = discussion;\n this.loadNext = throttle(300, this._loadNext);\n this.loadPrevious = throttle(300, this._loadPrevious);\n this.show(includedPosts);\n }\n\n /**\n * Update the stream so that it loads and includes the latest posts in the\n * discussion, if the end is being viewed.\n */\n update() {\n if (!this.viewingEnd()) return Promise.resolve();\n this.visibleEnd = this.count();\n return this.loadRange(this.visibleStart, this.visibleEnd);\n }\n\n /**\n * Load and scroll up to the first post in the discussion.\n */\n goToFirst() {\n return this.goToIndex(0);\n }\n\n /**\n * Load and scroll down to the last post in the discussion.\n */\n goToLast() {\n return this.goToIndex(this.count() - 1, true);\n }\n\n /**\n * Load and scroll to a post with a certain number.\n *\n * @param number The post number to go to. If 'reply', go to the last post and scroll the reply preview into view.\n */\n goToNumber(number, noAnimation) {\n if (noAnimation === void 0) {\n noAnimation = false;\n }\n // If we want to go to the reply preview, then we will go to the end of the\n // discussion and then scroll to the very bottom of the page.\n if (number === 'reply') {\n const resultPromise = this.goToLast();\n this.targetPost = {\n ...this.targetPost,\n reply: true\n };\n return resultPromise;\n }\n this.paused = true;\n this.loadPromise = this.loadNearNumber(number);\n this.needsScroll = true;\n this.targetPost = {\n number\n };\n this.animateScroll = !noAnimation;\n this.number = number;\n\n // In this case, the redraw is only called after the response has been loaded\n // because we need to know the indices of the post range before we can\n // start scrolling to items. Calling redraw early causes issues.\n // Since this is only used for external navigation to the post stream, the delay\n // before the stream is moved is not an issue.\n return this.loadPromise.then(() => m.redraw());\n }\n\n /**\n * Load and scroll to a certain index within the discussion.\n */\n goToIndex(index, noAnimation) {\n if (noAnimation === void 0) {\n noAnimation = false;\n }\n this.paused = true;\n this.loadPromise = this.loadNearIndex(index);\n this.needsScroll = true;\n this.targetPost = {\n index\n };\n this.animateScroll = !noAnimation;\n this.index = index;\n m.redraw();\n return this.loadPromise;\n }\n\n /**\n * Clear the stream and load posts near a certain number. Returns a promise.\n * If the post with the given number is already loaded, the promise will be\n * resolved immediately.\n */\n loadNearNumber(number) {\n if (this.posts().some(post => post && Number(post.number()) === Number(number))) {\n return Promise.resolve();\n }\n this.reset();\n return app.store.find('posts', {\n filter: {\n discussion: this.discussion.id()\n },\n page: {\n near: number\n }\n }).then(this.show.bind(this));\n }\n\n /**\n * Clear the stream and load posts near a certain index. A page of posts\n * surrounding the given index will be loaded. Returns a promise. If the given\n * index is already loaded, the promise will be resolved immediately.\n */\n loadNearIndex(index) {\n if (index >= this.visibleStart && index < this.visibleEnd) {\n return Promise.resolve();\n }\n const start = this.sanitizeIndex(index - PostStreamState.loadCount / 2);\n const end = start + PostStreamState.loadCount;\n this.reset(start, end);\n return this.loadRange(start, end).then(this.show.bind(this));\n }\n\n /**\n * Load the next page of posts.\n */\n _loadNext() {\n const start = this.visibleEnd;\n const end = this.visibleEnd = this.sanitizeIndex(this.visibleEnd + PostStreamState.loadCount);\n\n // Unload the posts which are two pages back from the page we're currently\n // loading.\n const twoPagesAway = start - PostStreamState.loadCount * 2;\n if (twoPagesAway > this.visibleStart && twoPagesAway >= 0) {\n this.visibleStart = twoPagesAway + PostStreamState.loadCount + 1;\n if (this.loadPageTimeouts[twoPagesAway]) {\n clearTimeout(this.loadPageTimeouts[twoPagesAway]);\n delete this.loadPageTimeouts[twoPagesAway];\n this.pagesLoading--;\n }\n }\n this.loadPage(start, end);\n }\n\n /**\n * Load the previous page of posts.\n */\n _loadPrevious() {\n const end = this.visibleStart;\n const start = this.visibleStart = this.sanitizeIndex(this.visibleStart - PostStreamState.loadCount);\n\n // Unload the posts which are two pages back from the page we're currently\n // loading.\n const twoPagesAway = start + PostStreamState.loadCount * 2;\n if (twoPagesAway < this.visibleEnd && twoPagesAway <= this.count()) {\n this.visibleEnd = twoPagesAway;\n if (this.loadPageTimeouts[twoPagesAway]) {\n clearTimeout(this.loadPageTimeouts[twoPagesAway]);\n delete this.loadPageTimeouts[twoPagesAway];\n this.pagesLoading--;\n }\n }\n this.loadPage(start, end, true);\n }\n\n /**\n * Load a page of posts into the stream and redraw.\n */\n loadPage(start, end, backwards) {\n if (backwards === void 0) {\n backwards = false;\n }\n this.pagesLoading++;\n const redraw = () => {\n if (start < this.visibleStart || end > this.visibleEnd) return;\n const anchorIndex = backwards ? this.visibleEnd - 1 : this.visibleStart;\n anchorScroll(\".PostStream-item[data-index=\\\"\".concat(anchorIndex, \"\\\"]\"), m.redraw.sync);\n };\n redraw();\n this.loadPageTimeouts[start] = setTimeout(() => {\n this.loadRange(start, end).then(() => {\n redraw();\n this.pagesLoading--;\n });\n delete this.loadPageTimeouts[start];\n }, this.pagesLoading - 1 ? 1000 : 0);\n }\n\n /**\n * Load and inject the specified range of posts into the stream, without\n * clearing it.\n */\n loadRange(start, end) {\n const loadIds = [];\n const loaded = [];\n this.discussion.postIds().slice(start, end).forEach(id => {\n const post = app.store.getById('posts', id);\n if (post && post.discussion() && typeof post.canEdit() !== 'undefined') {\n loaded.push(post);\n } else {\n loadIds.push(id);\n }\n });\n if (loadIds.length) {\n return app.store.find('posts', loadIds).then(newPosts => {\n return loaded.concat(newPosts).sort((a, b) => a.number() - b.number());\n });\n }\n return Promise.resolve(loaded);\n }\n\n /**\n * Set up the stream with the given array of posts.\n */\n show(posts) {\n var _posts$0$id;\n this.visibleStart = posts.length ? this.discussion.postIds().indexOf((_posts$0$id = posts[0].id()) != null ? _posts$0$id : '0') : 0;\n this.visibleEnd = this.sanitizeIndex(this.visibleStart + posts.length);\n }\n\n /**\n * Reset the stream so that a specific range of posts is displayed. If a range\n * is not specified, the first page of posts will be displayed.\n */\n reset(start, end) {\n this.visibleStart = start || 0;\n this.visibleEnd = this.sanitizeIndex(end || PostStreamState.loadCount);\n }\n\n /**\n * Get the visible page of posts.\n */\n posts() {\n return this.discussion.postIds().slice(this.visibleStart, this.visibleEnd).map(id => {\n const post = app.store.getById('posts', id);\n return post && post.discussion() && typeof post.canEdit() !== 'undefined' ? post : null;\n });\n }\n\n /**\n * Get the total number of posts in the discussion.\n */\n count() {\n return this.discussion.postIds().length;\n }\n\n /**\n * Check whether or not the scrubber should be disabled, i.e. if all of the\n * posts are visible in the viewport.\n */\n disabled() {\n return this.visible >= this.count();\n }\n\n /**\n * Are we currently viewing the end of the discussion?\n */\n viewingEnd() {\n // In some cases, such as if we've stickied a post, an event post\n // may have been added / removed. This means that `this.visibleEnd`\n // and`this.count()` will be out of sync by 1 post, but we are still\n // \"viewing the end\" of the post stream, so we should still reload\n // all posts up until the last one.\n return Math.abs(this.count() - this.visibleEnd) <= 1;\n }\n\n /**\n * Make sure that the given index is not outside of the possible range of\n * indexes in the discussion.\n */\n sanitizeIndex(index) {\n return Math.max(0, Math.min(this.count(), Math.floor(index)));\n }\n}\n/**\n * The number of posts to load per page.\n */\n_defineProperty(PostStreamState, \"loadCount\", 20);\nflarum.reg.add('core', 'forum/states/PostStreamState', PostStreamState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport setRouteWithForcedRefresh from '../../common/utils/setRouteWithForcedRefresh';\n/**\n * The `History` class keeps track and manages a stack of routes that the user\n * has navigated to in their session.\n *\n * An item can be pushed to the top of the stack using the `push` method. An\n * item in the stack has a name and a URL. The name need not be unique; if it is\n * the same as the item before it, that will be overwritten with the new URL. In\n * this way, if a user visits a discussion, and then visits another discussion,\n * popping the history stack will still take them back to the discussion list\n * rather than the previous discussion.\n */\nexport default class History {\n constructor() {\n /**\n * The stack of routes that have been navigated to.\n */\n _defineProperty(this, \"stack\", []);\n }\n /**\n * Get the item on the top of the stack.\n */\n getCurrent() {\n return this.stack[this.stack.length - 1];\n }\n\n /**\n * Get the previous item on the stack.\n */\n getPrevious() {\n return this.stack[this.stack.length - 2];\n }\n\n /**\n * Push an item to the top of the stack.\n *\n * @param {string} name The name of the route.\n * @param {string} title The title of the route.\n * @param {string} [url] The URL of the route. The current URL will be used if\n * not provided.\n */\n push(name, title, url) {\n if (url === void 0) {\n url = m.route.get();\n }\n // If we're pushing an item with the same name as second-to-top item in the\n // stack, we will assume that the user has clicked the 'back' button in\n // their browser. In this case, we don't want to push a new item, so we will\n // pop off the top item, and then the second-to-top item will be overwritten\n // below.\n const secondTop = this.stack[this.stack.length - 2];\n if (secondTop && secondTop.name === name) {\n this.stack.pop();\n }\n\n // If we're pushing an item with the same name as the top item in the stack,\n // then we'll overwrite it with the new URL.\n const top = this.getCurrent();\n if (top && top.name === name) {\n Object.assign(top, {\n url,\n title\n });\n } else {\n this.stack.push({\n name,\n url,\n title\n });\n }\n }\n\n /**\n * Check whether or not the history stack is able to be popped.\n */\n canGoBack() {\n return this.stack.length > 1;\n }\n\n /**\n * Go back to the previous route in the history stack.\n */\n back() {\n if (!this.canGoBack()) {\n return this.home();\n }\n this.stack.pop();\n m.route.set(this.getCurrent().url);\n }\n\n /**\n * Get the URL of the previous page.\n */\n backUrl() {\n const secondTop = this.stack[this.stack.length - 2];\n return secondTop.url;\n }\n\n /**\n * Go to the first route in the history stack.\n */\n home() {\n this.stack.splice(0);\n setRouteWithForcedRefresh('/');\n }\n}\nflarum.reg.add('core', 'forum/utils/History', History);","/**\n * Replaces rich tags with elements, as per a provided handler.\n * No spaces allowed in tag name, syntax MUST be <TAG_NAME>SOME_CONTENTS</TAG_NAME>.\n * Currently does not support tags with attributes.\n * Currently does not support self closing tags.\n *\n * @param {String[]|any[]} message\n * @param {Object} values\n * @param {Function} handler\n * @param {Number[]} [dontUnescapeIndices]\n * @return {String[]|any[]}\n */\nexport function replaceRichTags(message, values, handler, dontUnescapeIndices = []) {\n\tconst result = [];\n\n\tconst onTagClose = (\n\t\tsegment,\n\t\tcurrTagIsClosing,\n\t\tcurrTag,\n\t\ti,\n\t\tj,\n\t\tcurrTagStart\n\t) => {\n\t\tif (currTagIsClosing) {\n\t\t\treturn {\n\t\t\t\tbreak: true\n\t\t\t};\n\t\t}\n\n\t\tconst endingLocation = findClosingTag(message, currTag, i, j);\n\n\t\tif (!endingLocation) {\n\t\t return result;\n\t\t}\n\n\t\tconst entireTagInSegment = endingLocation.segmentIndex === i;\n\t\tconst segmentContainingClosingTag = message[endingLocation.segmentIndex];\n\n\t\tconst tagContents = [];\n\n\t\tif (entireTagInSegment) {\n\t\t\ttagContents.push(segment.slice(j + 1, endingLocation.segmentStart));\n\t\t}\n\t\telse {\n\t\t\ttagContents.push(segment.slice(j + 1));\n\n\t\t\tfor (let k = i + 1; k < endingLocation.segmentIndex; k++) {\n\t\t\t\ttagContents.push(message[k]);\n\t\t\t}\n\t\t\ttagContents.push(\n\t\t\t\tsegmentContainingClosingTag.slice(0, endingLocation.segmentStart)\n\t\t\t);\n\t\t}\n\n\t\tresult.push(segment.slice(0, currTagStart));\n\n\t\tresult.push(\n\t\t\thandler(\n\t\t\t\tcurrTag,\n\t\t\t\tvalues,\n\t\t\t\treplaceRichTags(\n\t\t\t\t\ttagContents.filter((s) => s !== ''),\n\t\t\t\t\tvalues,\n\t\t\t\t\thandler\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\n\t\tmessage.splice(\n\t\t\tendingLocation.segmentIndex + 1,\n\t\t\t0,\n\t\t\tsegmentContainingClosingTag.slice(endingLocation.segmentEnd + 1)\n\t\t);\n\n\t\treturn {\n\t\t\tprocessedSegment: true,\n\t\t\tnewSegmentIndex: endingLocation.segmentIndex,\n\t\t\tbreak: true\n\t\t};\n\t};\n\n\ttraverseMessageTags(message, 0, 0, result, onTagClose);\n\n\treturn result.filter((s) => s !== '').map((s, i) => dontUnescapeIndices.includes(i) ? s : unEscapeHtml(s));\n}\n\n/**\n * Finds the index of the matching closing tag, including through strings that\n * could have nested tags.\n *\n * @param {String[]|any[]} message\n * @param {String} tag\n * @param {Number} startIndex\n * @param {Number} startSegmentIndex\n * @return {Boolean}\n */\nfunction findClosingTag(message, tag, startIndex, startSegmentIndex) {\n\tlet position; // set in callback\n\tlet depth = 1;\n\n\tconst onTagClose = (\n\t\tsegment,\n\t\tcurrTagIsClosing,\n\t\tcurrTag,\n\t\ti,\n\t\tj,\n\t\tcurrTagStart\n\t) => {\n\t\tif (currTag === tag) {\n\t\t\tif (currTagIsClosing) {\n\t\t\t\tdepth--;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdepth++;\n\t\t\t}\n\n\t\t\tif (depth === 0) {\n\t\t\t\tposition = {\n\t\t\t\t\tsegmentIndex: i,\n\t\t\t\t\tsegmentStart: currTagStart,\n\t\t\t\t\tsegmentEnd: j\n\t\t\t\t};\n\n\t\t\t\treturn { exit: true };\n\t\t\t}\n\t\t}\n\n\t\treturn { exit: false };\n\t};\n\n\ttraverseMessageTags(message, startIndex, startSegmentIndex, [], onTagClose);\n\n\treturn position;\n}\n\nfunction traverseMessageTags(message, startI, startJ, result, onTagClose) {\n\tconst isHtmlTagChar = (ch) => /[a-zA-Z-_]/.test(ch);\n\tfor (let i = startI; i < message.length; i++) {\n\t\tconst segment = message[i];\n\n\t\tif (typeof segment !== 'string') {\n\t\t\tresult.push(segment);\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet currTagIsClosing = false;\n\t\tlet currTagStart = null;\n\t\tlet inTag = false;\n\n\t\tlet processedSegment = false;\n\t\tfor (let j = i === startI ? startJ : 0; j < segment.length; j++) {\n\t\t\t// Start of tag\n\t\t\tif (!inTag && segment[j] === '<') {\n\t\t\t\tcurrTagStart = j;\n\t\t\t\tinTag = true;\n\n\t\t\t\tif (segment[j + 1] === '/') {\n\t\t\t\t\tcurrTagIsClosing = true;\n\t\t\t\t\tj++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Tag ended\n\t\t\telse if (inTag && segment[j] === '>') {\n\t\t\t\tconst currTag = segment.slice(currTagStart + 1 + currTagIsClosing, j);\n\n\t\t\t\tconst instructions = onTagClose(\n\t\t\t\t\tsegment,\n\t\t\t\t\tcurrTagIsClosing,\n\t\t\t\t\tcurrTag,\n\t\t\t\t\ti,\n\t\t\t\t\tj,\n\t\t\t\t\tcurrTagStart\n\t\t\t\t);\n\n\t\t\t\tif (instructions.exit) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (instructions.newSegmentIndex) {\n\t\t\t\t\ti = instructions.newSegmentIndex;\n\t\t\t\t}\n\t\t\t\tif (instructions.processedSegment) {\n\t\t\t\t\tprocessedSegment = true;\n\t\t\t\t}\n\t\t\t\tif (instructions.break) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcurrTagIsClosing = false;\n\t\t\t\tcurrTagStart = null;\n\t\t\t\tinTag = false;\n\t\t\t}\n\n\t\t\t// Not a valid tag, reset state.\n\t\t\telse if (inTag && !isHtmlTagChar(segment[j])) {\n\t\t\t\tcurrTagIsClosing = false;\n\t\t\t\tcurrTagStart = null;\n\t\t\t\tinTag = false;\n\t\t\t}\n\t\t}\n\n\t\tif (!processedSegment) {\n\t\t\tresult.push(segment);\n\t\t}\n\t}\n}\n\n/**\n * Escapes HTML markup in string and nested array arguments.\n *\n * @param {Object} values\n * @return {Object}\n */\nexport function sanitizeValues(values) {\n\treturn Object.keys(values).reduce((acc, key) => {\n\t\tacc[key] = recSanitizeArr(values[key]);\n\n\t\treturn acc;\n\t}, {});\n}\n\n/**\n * De-sanitizes HTML markup.\n *\n * @param {any} str\n * @return {string}\n */\nexport function unEscapeHtml(str) {\n\tif (typeof str !== 'string') {\n\t\treturn str;\n\t}\n\n\treturn str\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/"/g, '\"')\n\t\t.replace(/'/g, \"'\")\n\t\t.replace(/&/g, '&');\n}\n\n/**\n * Recursively escape HTML in string or string array.\n *\n * @param {string[]|string} input\n * @return {string[]|string}\n */\nexport function recSanitizeArr(input) {\n\tif (typeof input === 'string' || input instanceof String) {\n\t\treturn input\n\t\t\t.replace(/&/g, '&')\n\t\t\t.replace(/</g, '<')\n\t\t\t.replace(/>/g, '>')\n\t\t\t.replace(/\"/g, '"')\n\t\t\t.replace(/'/g, ''');\n\t}\n\telse if (Array.isArray(input)) {\n\t\treturn input.map(recSanitizeArr);\n\t}\n\n\treturn input;\n}\n","import { unEscapeHtml } from './utilities';\n\nexport default function defaultRichHandler(tag, values, contents) {\n\treturn `<${tag}>${unEscapeHtml(contents)}</${tag}>`;\n}\n","import { MessageFormatter } from '@ultraq/icu-message-formatter';\nimport { flatten } from '@ultraq/array-utils';\n\nimport defaultRichHandler from './defaultRichHandler';\nimport { replaceRichTags, sanitizeValues } from './utilities';\n\nexport default class RichMessageFormatter extends MessageFormatter {\n\tconstructor(locale, typeHandlers = {}, richHandler = null) {\n\t\tsuper(locale, typeHandlers);\n\t\tthis.richHandler = richHandler ? richHandler : defaultRichHandler;\n\t}\n\n\trich(message, values = {}) {\n\t\tconst cleanedValues = sanitizeValues(values);\n\n\t\tconst formatted = flatten(this.process(message, cleanedValues));\n\n\t\t// TODO\n\t\t// Should be a symbol but isn't because of conversion issues.\n\t\t// We use a random string instead. \n\t\tlet sym = Math.random().toString(36) + Math.random().toString(36) + Math.random().toString(36);\n\t\tconst fakeValues = Object.fromEntries(Object.entries(values).map(([key, _value]) => [key, sym]));\n\t\tconst formattedFake = flatten(this.process(message, fakeValues));\n\t\tconst replaceFake = replaceRichTags(formattedFake, fakeValues, () => sym);\n\t\tconst originalTemplateSegmentIndices = replaceFake.map((v, i) => v === sym ? null: i).filter(i => i !== null);\n\n\t\treturn replaceRichTags(formatted, cleanedValues, this.richHandler, originalTemplateSegmentIndices);\n\t}\n}\n","import { unEscapeHtml } from './utilities';\n\nexport default function mithrilRichHandler(tag, values, contents) {\n\tconst vnode = values[tag] || m(tag);\n\tlet children = unEscapeHtml(m.fragment(contents).children);\n\treturn { ...vnode, children };\n}\n","/* \n * Copyright 2017, Emanuel Rabina (http://www.ultraq.net.nz/)\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Flattens an array of arrays of infinite depth into a single-dimension array.\n * \n * > This is now natively in JavaScript as the `flat` method on an Array\n * > instance. [Check MDN for which browsers have access to this feature](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat).\n * > If you can't use `flat`, then this method will do the job 🙂\n * \n * @param {Array} array\n * @return {Array} Flattened array.\n */\nexport function flatten(array) {\n\n\treturn array.reduce((accumulator, value) => {\n\t\treturn accumulator.concat(Array.isArray(value) ? flatten(value) : value);\n\t}, []);\n}\n\n/**\n * Creates an array of numbers from the starting value (inclusive) to the end\n * (exclusive), with an optional step (the gap between values).\n * \n * @param {Number} start\n * The value to start at, the first item in the returned array.\n * @param {Number} end\n * The value to end with, the last item in the returned array.\n * @param {Number} [step=1]\n * The increment/gap between values, defaults to 1.\n * @return {Array} An array encompassing the given range.\n */\nexport function range(start, end, step = 1) {\n\n\treturn Array.apply(0, Array(Math.ceil((end - start) / step))).map((empty, index) => index * step + start);\n}\n\n/**\n * Remove and return the first item from `array` that matches the predicate\n * function.\n * \n * @param {Array} array\n * @param {Function} predicate\n * Invoked with the array item.\n * @return {Object} The matching item, or `null` if no match was found.\n */\nexport function remove(array, predicate) {\n\n\treturn array.find((item, index) => {\n\t\tif (predicate(item)) {\n\t\t\tarray.splice(index, 1);\n\t\t\treturn item;\n\t\t}\n\t});\n}\n","/**\n * A higher-order function to apply [memoization](https://en.wikipedia.org/wiki/Memoization).\n * \n * If memoizing a recursive function, then memoize and define the function at\n * the same time so you can make a call to the memoized function, eg:\n * \n * ```javascript\n * const myFunction = memoize(() => myFunction());\n * ```\n * \n * @param {Function} func\n * @return {Function} \n */\nexport function memoize(func) {\n\tconst cache = {};\n\treturn function(...args) {\n\t\tlet key = args.length ? args\n\t\t\t.map(arg =>\n\t\t\t\targ === null ? 'null' :\n\t\t\t\targ === undefined ? 'undefined' :\n\t\t\t\ttypeof arg === 'function' ? arg.toString() :\n\t\t\t\targ instanceof Date ? arg.toISOString() :\n\t\t\t\tJSON.stringify(arg)\n\t\t\t)\n\t\t\t.join('|') :\n\t\t\t'_(no-args)_';\n\t\tif (Object.prototype.hasOwnProperty.call(cache, key)) {\n\t\t\treturn cache[key];\n\t\t}\n\t\tlet result = func(...args);\n\t\tcache[key] = result;\n\t\treturn result;\n\t};\n}\n","/* \n * Copyright 2019, Emanuel Rabina (http://www.ultraq.net.nz/)\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {parseCases} from './utilities.js';\n\nlet pluralFormatter;\n\nlet keyCounter = 0;\n\n// All the special keywords that can be used in `plural` blocks for the various branches\nconst ONE = 'one';\nconst OTHER = 'other';\n\n/**\n * @private\n * @param {String} caseBody\n * @param {Number} value\n * @return {Object} {caseBody: string, numberValues: object}\n */\nfunction replaceNumberSign(caseBody, value) {\n\tlet i = 0;\n\tlet output = '';\n\tlet numBraces = 0;\n\tconst numberValues = {};\n\n\twhile (i < caseBody.length) {\n\t\tif (caseBody[i] === '#' && !numBraces) {\n\t\t\tlet keyParam = `__hashToken${keyCounter++}`;\n\t\t\toutput += `{${keyParam}, number}`;\n\t\t\tnumberValues[keyParam] = value;\n\t\t}\n\t\telse {\n\t\t\toutput += caseBody[i];\n\t\t}\n\n\t\tif (caseBody[i] === '{') {\n\t\t\tnumBraces++;\n\t\t}\n\t\telse if (caseBody[i] === '}') {\n\t\t\tnumBraces--;\n\t\t}\n\n\t\ti++;\n\t}\n\n\treturn {\n\t\tcaseBody: output,\n\t\tnumberValues\n\t};\n}\n\n/**\n * Handler for `plural` statements within ICU message syntax strings. Returns\n * a formatted string for the branch that closely matches the current value.\n * \n * See https://formatjs.io/docs/core-concepts/icu-syntax#plural-format for more\n * details on how the `plural` statement works.\n * \n * @param {String} value\n * @param {String} matches\n * @param {String} locale\n * @param {String} values\n * @param {Function} format\n * @return {String}\n */\nexport default function pluralTypeHandler(value, matches = '', locale, values, format) {\n\tconst { args, cases } = parseCases(matches);\n\n\tlet intValue = parseInt(value);\n\n\targs.forEach((arg) => {\n\t\tif (arg.startsWith('offset:')) {\n\t\t\tintValue -= parseInt(arg.slice('offset:'.length));\n\t\t}\n\t});\n\n\tconst keywordPossibilities = [];\n\n\tif ('PluralRules' in Intl) {\n\t\t// Effectively memoize because instantiation of `Int.*` objects is expensive.\n\t\tif (pluralFormatter === undefined || pluralFormatter.resolvedOptions().locale !== locale) {\n\t\t\tpluralFormatter = new Intl.PluralRules(locale);\n\t\t}\n\n\t\tconst pluralKeyword = pluralFormatter.select(intValue);\n\n\t\t// Other is always added last with least priority, so we don't want to add it here.\n\t\tif (pluralKeyword !== OTHER) {\n\t\t\tkeywordPossibilities.push(pluralKeyword);\n\t\t}\n\t}\n\tif (intValue === 1) {\n\t\tkeywordPossibilities.push(ONE);\n\t}\n\tkeywordPossibilities.push(`=${intValue}`, OTHER);\n\n\tfor (let i = 0; i < keywordPossibilities.length; i++) {\n\t\tconst keyword = keywordPossibilities[i];\n\t\tif (keyword in cases) {\n\t\t\tconst { caseBody, numberValues } = replaceNumberSign(cases[keyword], intValue);\n\t\t\treturn format(caseBody, {\n\t\t\t\t...values,\n\t\t\t\t...numberValues\n\t\t\t});\n\t\t}\n\t}\n\n\treturn value;\n}\n","/* \n * Copyright 2019, Emanuel Rabina (http://www.ultraq.net.nz/)\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {findClosingBracket, splitFormattedArgument} from './utilities.js';\n\nimport {flatten} from '@ultraq/array-utils';\nimport {memoize} from '@ultraq/function-utils';\n\n/**\n * The main class for formatting messages.\n * \n * @author Emanuel Rabina\n */\nexport default class MessageFormatter {\n\n\t/**\n\t * Creates a new formatter that can work using any of the custom type handlers\n\t * you register.\n\t * \n\t * @param {String} locale\n\t * @param {Object} [typeHandlers={}]\n\t * Optional object where the keys are the names of the types to register,\n\t * their values being the functions that will return a nicely formatted\n\t * string for the data and locale they are given.\n\t */\n\tconstructor(locale, typeHandlers = {}) {\n\n\t\tthis.locale = locale;\n\t\tthis.typeHandlers = typeHandlers;\n\t}\n\n\t/**\n\t * Formats an ICU message syntax string using `values` for placeholder data\n\t * and any currently-registered type handlers.\n\t * \n\t * @param {String} message\n\t * @param {Object} [values={}]\n\t * @return {String}\n\t */\n\tformat = memoize((message, values = {}) => {\n\n\t\treturn flatten(this.process(message, values)).join('');\n\t})\n\n\t/**\n\t * Process an ICU message syntax string using `values` for placeholder data\n\t * and any currently-registered type handlers. The result of this method is\n\t * an array of the component parts after they have been processed in turn by\n\t * their own type handlers. This raw output is useful for other renderers,\n\t * eg: React where components can be used instead of being forced to return\n\t * raw strings.\n\t * \n\t * This method is used by {@link MessageFormatter#format} where it acts as a\n\t * string renderer.\n\t * \n\t * @param {String} message\n\t * @param {Object} [values={}]\n\t * @return {Array}\n\t */\n\tprocess(message, values = {}) {\n\n\t\tif (!message) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet blockStartIndex = message.indexOf('{');\n\t\tif (blockStartIndex !== -1) {\n\t\t\tlet blockEndIndex = findClosingBracket(message, blockStartIndex);\n\t\t\tif (blockEndIndex !== -1) {\n\t\t\t\tlet block = message.substring(blockStartIndex, blockEndIndex + 1);\n\t\t\t\tif (block) {\n\t\t\t\t\tlet result = [];\n\t\t\t\t\tlet head = message.substring(0, blockStartIndex);\n\t\t\t\t\tif (head) {\n\t\t\t\t\t\tresult.push(head);\n\t\t\t\t\t}\n\t\t\t\t\tlet [key, type, format] = splitFormattedArgument(block);\n\t\t\t\t\tlet body = values[key];\n\t\t\t\t\tif (body === null || body === undefined) {\n\t\t\t\t\t\tbody = '';\n\t\t\t\t\t}\n\t\t\t\t\tlet typeHandler = type && this.typeHandlers[type];\n\t\t\t\t\tresult.push(typeHandler ?\n\t\t\t\t\t\ttypeHandler(body, format, this.locale, values, this.process.bind(this)) :\n\t\t\t\t\t\tbody);\n\t\t\t\t\tlet tail = message.substring(blockEndIndex + 1);\n\t\t\t\t\tif (tail) {\n\t\t\t\t\t\tresult.push(this.process(tail, values));\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthrow new Error(`Unbalanced curly braces in string: \"${message}\"`);\n\t\t\t}\n\t\t}\n\t\treturn [message];\n\t}\n}\n","/* \n * Copyright 2019, Emanuel Rabina (http://www.ultraq.net.nz/)\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {parseCases} from './utilities.js';\n\nconst OTHER = 'other';\n\n/**\n * Handler for `select` statements within ICU message syntax strings. Returns\n * a formatted string for the branch that closely matches the current value.\n * \n * See https://formatjs.io/docs/core-concepts/icu-syntax#select-format for more\n * details on how the `select` statement works.\n * \n * @param {String} value\n * @param {String} matches\n * @param {String} locale\n * @param {String} values\n * @param {Function} format\n * @return {String}\n */\nexport default function selectTypeHandler(value, matches = '', locale, values, format) {\n\tconst { cases } = parseCases(matches);\n\n\tif (value in cases) {\n\t\treturn format(cases[value], values);\n\t}\n\telse if (OTHER in cases) {\n\t\treturn format(cases[OTHER], values);\n\t}\n\n\treturn value;\n}\n","function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n// Older browsers don't support event options, feature detect it.\n\n// Adopted and modified solution from Bohdan Didukh (2017)\n// https://stackoverflow.com/questions/41594997/ios-10-safari-prevent-scrolling-behind-a-fixed-overlay-and-maintain-scroll-posi\n\nvar hasPassiveEvents = false;\nif (typeof window !== 'undefined') {\n var passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true;\n return undefined;\n }\n };\n window.addEventListener('testPassive', null, passiveTestOptions);\n window.removeEventListener('testPassive', null, passiveTestOptions);\n}\n\nvar isIosDevice = typeof window !== 'undefined' && window.navigator && window.navigator.platform && (/iP(ad|hone|od)/.test(window.navigator.platform) || window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1);\n\n\nvar locks = [];\nvar documentListenerAdded = false;\nvar initialClientY = -1;\nvar previousBodyOverflowSetting = void 0;\nvar previousBodyPosition = void 0;\nvar previousBodyPaddingRight = void 0;\n\n// returns true if `el` should be allowed to receive touchmove events.\nvar allowTouchMove = function allowTouchMove(el) {\n return locks.some(function (lock) {\n if (lock.options.allowTouchMove && lock.options.allowTouchMove(el)) {\n return true;\n }\n\n return false;\n });\n};\n\nvar preventDefault = function preventDefault(rawEvent) {\n var e = rawEvent || window.event;\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true;\n }\n\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true;\n\n if (e.preventDefault) e.preventDefault();\n\n return false;\n};\n\nvar setOverflowHidden = function setOverflowHidden(options) {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n var _reserveScrollBarGap = !!options && options.reserveScrollBarGap === true;\n var scrollBarGap = window.innerWidth - document.documentElement.clientWidth;\n\n if (_reserveScrollBarGap && scrollBarGap > 0) {\n var computedBodyPaddingRight = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'), 10);\n previousBodyPaddingRight = document.body.style.paddingRight;\n document.body.style.paddingRight = computedBodyPaddingRight + scrollBarGap + 'px';\n }\n }\n\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n};\n\nvar restoreOverflowSetting = function restoreOverflowSetting() {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight;\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined;\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting;\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined;\n }\n};\n\nvar setPositionFixed = function setPositionFixed() {\n return window.requestAnimationFrame(function () {\n // If previousBodyPosition is already set, don't set it again.\n if (previousBodyPosition === undefined) {\n previousBodyPosition = {\n position: document.body.style.position,\n top: document.body.style.top,\n left: document.body.style.left\n };\n\n // Update the dom inside an animation frame \n var _window = window,\n scrollY = _window.scrollY,\n scrollX = _window.scrollX,\n innerHeight = _window.innerHeight;\n\n document.body.style.position = 'fixed';\n document.body.style.top = -scrollY;\n document.body.style.left = -scrollX;\n\n setTimeout(function () {\n return window.requestAnimationFrame(function () {\n // Attempt to check if the bottom bar appeared due to the position change\n var bottomBarHeight = innerHeight - window.innerHeight;\n if (bottomBarHeight && scrollY >= innerHeight) {\n // Move the content further up so that the bottom bar doesn't hide it\n document.body.style.top = -(scrollY + bottomBarHeight);\n }\n });\n }, 300);\n }\n });\n};\n\nvar restorePositionSetting = function restorePositionSetting() {\n if (previousBodyPosition !== undefined) {\n // Convert the position from \"px\" to Int\n var y = -parseInt(document.body.style.top, 10);\n var x = -parseInt(document.body.style.left, 10);\n\n // Restore styles\n document.body.style.position = previousBodyPosition.position;\n document.body.style.top = previousBodyPosition.top;\n document.body.style.left = previousBodyPosition.left;\n\n // Restore scroll\n window.scrollTo(x, y);\n\n previousBodyPosition = undefined;\n }\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nvar isTargetElementTotallyScrolled = function isTargetElementTotallyScrolled(targetElement) {\n return targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false;\n};\n\nvar handleScroll = function handleScroll(event, targetElement) {\n var clientY = event.targetTouches[0].clientY - initialClientY;\n\n if (allowTouchMove(event.target)) {\n return false;\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event);\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event);\n }\n\n event.stopPropagation();\n return true;\n};\n\nexport var disableBodyScroll = function disableBodyScroll(targetElement, options) {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error('disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.');\n return;\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(function (lock) {\n return lock.targetElement === targetElement;\n })) {\n return;\n }\n\n var lock = {\n targetElement: targetElement,\n options: options || {}\n };\n\n locks = [].concat(_toConsumableArray(locks), [lock]);\n\n if (isIosDevice) {\n setPositionFixed();\n } else {\n setOverflowHidden(options);\n }\n\n if (isIosDevice) {\n targetElement.ontouchstart = function (event) {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY;\n }\n };\n targetElement.ontouchmove = function (event) {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement);\n }\n };\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = true;\n }\n }\n};\n\nexport var clearAllBodyScrollLocks = function clearAllBodyScrollLocks() {\n if (isIosDevice) {\n // Clear all locks ontouchstart/ontouchmove handlers, and the references.\n locks.forEach(function (lock) {\n lock.targetElement.ontouchstart = null;\n lock.targetElement.ontouchmove = null;\n });\n\n if (documentListenerAdded) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = false;\n }\n\n // Reset initial clientY.\n initialClientY = -1;\n }\n\n if (isIosDevice) {\n restorePositionSetting();\n } else {\n restoreOverflowSetting();\n }\n\n locks = [];\n};\n\nexport var enableBodyScroll = function enableBodyScroll(targetElement) {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error('enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.');\n return;\n }\n\n locks = locks.filter(function (lock) {\n return lock.targetElement !== targetElement;\n });\n\n if (isIosDevice) {\n targetElement.ontouchstart = null;\n targetElement.ontouchmove = null;\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = false;\n }\n }\n\n if (isIosDevice) {\n restorePositionSetting();\n } else {\n restoreOverflowSetting();\n }\n};\n\n","/* ========================================================================\n * Bootstrap: affix.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#affix\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // AFFIX CLASS DEFINITION\n // ======================\n\n var Affix = function (element, options) {\n this.options = $.extend({}, Affix.DEFAULTS, options)\n\n var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)\n\n this.$target = target\n .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))\n\n this.$element = $(element)\n this.affixed = null\n this.unpin = null\n this.pinnedOffset = null\n\n this.checkPosition()\n }\n\n Affix.VERSION = '3.4.1'\n\n Affix.RESET = 'affix affix-top affix-bottom'\n\n Affix.DEFAULTS = {\n offset: 0,\n target: window\n }\n\n Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n var scrollTop = this.$target.scrollTop()\n var position = this.$element.offset()\n var targetHeight = this.$target.height()\n\n if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n if (this.affixed == 'bottom') {\n if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n }\n\n var initializing = this.affixed == null\n var colliderTop = initializing ? scrollTop : position.top\n var colliderHeight = initializing ? targetHeight : height\n\n if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n return false\n }\n\n Affix.prototype.getPinnedOffset = function () {\n if (this.pinnedOffset) return this.pinnedOffset\n this.$element.removeClass(Affix.RESET).addClass('affix')\n var scrollTop = this.$target.scrollTop()\n var position = this.$element.offset()\n return (this.pinnedOffset = position.top - scrollTop)\n }\n\n Affix.prototype.checkPositionWithEventLoop = function () {\n setTimeout($.proxy(this.checkPosition, this), 1)\n }\n\n Affix.prototype.checkPosition = function () {\n if (!this.$element.is(':visible')) return\n\n var height = this.$element.height()\n var offset = this.options.offset\n var offsetTop = offset.top\n var offsetBottom = offset.bottom\n var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n if (typeof offset != 'object') offsetBottom = offsetTop = offset\n if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)\n if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n if (this.affixed != affix) {\n if (this.unpin != null) this.$element.css('top', '')\n\n var affixType = 'affix' + (affix ? '-' + affix : '')\n var e = $.Event(affixType + '.bs.affix')\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n this.affixed = affix\n this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n this.$element\n .removeClass(Affix.RESET)\n .addClass(affixType)\n .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n }\n\n if (affix == 'bottom') {\n this.$element.offset({\n top: scrollHeight - height - offsetBottom\n })\n }\n }\n\n\n // AFFIX PLUGIN DEFINITION\n // =======================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.affix')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.affix\n\n $.fn.affix = Plugin\n $.fn.affix.Constructor = Affix\n\n\n // AFFIX NO CONFLICT\n // =================\n\n $.fn.affix.noConflict = function () {\n $.fn.affix = old\n return this\n }\n\n\n // AFFIX DATA-API\n // ==============\n\n $(window).on('load', function () {\n $('[data-spy=\"affix\"]').each(function () {\n var $spy = $(this)\n var data = $spy.data()\n\n data.offset = data.offset || {}\n\n if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n if (data.offsetTop != null) data.offset.top = data.offsetTop\n\n Plugin.call($spy, data)\n })\n })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: dropdown.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown-backdrop'\n var toggle = '[data-toggle=\"dropdown\"]'\n var Dropdown = function (element) {\n $(element).on('click.bs.dropdown', this.toggle)\n }\n\n Dropdown.VERSION = '3.4.1'\n\n function getParent($this) {\n var selector = $this.attr('data-target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n var $parent = selector !== '#' ? $(document).find(selector) : null\n\n return $parent && $parent.length ? $parent : $this.parent()\n }\n\n function clearMenus(e) {\n if (e && e.which === 3) return\n $(backdrop).remove()\n $(toggle).each(function () {\n var $this = $(this)\n var $parent = getParent($this)\n var relatedTarget = { relatedTarget: this }\n\n if (!$parent.hasClass('open')) return\n\n if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n if (e.isDefaultPrevented()) return\n\n $this.attr('aria-expanded', 'false')\n $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n })\n }\n\n Dropdown.prototype.toggle = function (e) {\n var $this = $(this)\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n clearMenus()\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n // if mobile we use a backdrop because click events don't delegate\n $(document.createElement('div'))\n .addClass('dropdown-backdrop')\n .insertAfter($(this))\n .on('click', clearMenus)\n }\n\n var relatedTarget = { relatedTarget: this }\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n if (e.isDefaultPrevented()) return\n\n $this\n .trigger('focus')\n .attr('aria-expanded', 'true')\n\n $parent\n .toggleClass('open')\n .trigger($.Event('shown.bs.dropdown', relatedTarget))\n }\n\n return false\n }\n\n Dropdown.prototype.keydown = function (e) {\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n var $this = $(this)\n\n e.preventDefault()\n e.stopPropagation()\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n if (!isActive && e.which != 27 || isActive && e.which == 27) {\n if (e.which == 27) $parent.find(toggle).trigger('focus')\n return $this.trigger('click')\n }\n\n var desc = ' li:not(.disabled):visible a'\n var $items = $parent.find('.dropdown-menu' + desc)\n\n if (!$items.length) return\n\n var index = $items.index(e.target)\n\n if (e.which == 38 && index > 0) index-- // up\n if (e.which == 40 && index < $items.length - 1) index++ // down\n if (!~index) index = 0\n\n $items.eq(index).trigger('focus')\n }\n\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.dropdown')\n\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n if (typeof option == 'string') data[option].call($this)\n })\n }\n\n var old = $.fn.dropdown\n\n $.fn.dropdown = Plugin\n $.fn.dropdown.Constructor = Dropdown\n\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old\n return this\n }\n\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: tooltip.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n+function ($) {\n 'use strict';\n\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\n var uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n ]\n\n var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n var DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n }\n\n /**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n /**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\n function allowedAttribute(attr, allowedAttributeList) {\n var attrName = attr.nodeName.toLowerCase()\n\n if ($.inArray(attrName, allowedAttributeList) !== -1) {\n if ($.inArray(attrName, uriAttrs) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n var regExp = $(allowedAttributeList).filter(function (index, value) {\n return value instanceof RegExp\n })\n\n // Check if a regular expression validates the attribute.\n for (var i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n }\n\n function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n // IE 8 and below don't support createHTMLDocument\n if (!document.implementation || !document.implementation.createHTMLDocument) {\n return unsafeHtml\n }\n\n var createdDocument = document.implementation.createHTMLDocument('sanitization')\n createdDocument.body.innerHTML = unsafeHtml\n\n var whitelistKeys = $.map(whiteList, function (el, i) { return i })\n var elements = $(createdDocument.body).find('*')\n\n for (var i = 0, len = elements.length; i < len; i++) {\n var el = elements[i]\n var elName = el.nodeName.toLowerCase()\n\n if ($.inArray(elName, whitelistKeys) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n var attributeList = $.map(el.attributes, function (el) { return el })\n var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n for (var j = 0, len2 = attributeList.length; j < len2; j++) {\n if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {\n el.removeAttribute(attributeList[j].nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n }\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n var Tooltip = function (element, options) {\n this.type = null\n this.options = null\n this.enabled = null\n this.timeout = null\n this.hoverState = null\n this.$element = null\n this.inState = null\n\n this.init('tooltip', element, options)\n }\n\n Tooltip.VERSION = '3.4.1'\n\n Tooltip.TRANSITION_DURATION = 150\n\n Tooltip.DEFAULTS = {\n animation: true,\n placement: 'top',\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n container: false,\n viewport: {\n selector: 'body',\n padding: 0\n },\n sanitize : true,\n sanitizeFn : null,\n whiteList : DefaultWhitelist\n }\n\n Tooltip.prototype.init = function (type, element, options) {\n this.enabled = true\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n this.inState = { click: false, hover: false, focus: false }\n\n if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n }\n\n var triggers = this.options.trigger.split(' ')\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i]\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n Tooltip.prototype.getDefaults = function () {\n return Tooltip.DEFAULTS\n }\n\n Tooltip.prototype.getOptions = function (options) {\n var dataAttributes = this.$element.data()\n\n for (var dataAttr in dataAttributes) {\n if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n delete dataAttributes[dataAttr]\n }\n }\n\n options = $.extend({}, this.getDefaults(), dataAttributes, options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay,\n hide: options.delay\n }\n }\n\n if (options.sanitize) {\n options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)\n }\n\n return options\n }\n\n Tooltip.prototype.getDelegateOptions = function () {\n var options = {}\n var defaults = this.getDefaults()\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n })\n\n return options\n }\n\n Tooltip.prototype.enter = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n }\n\n if (self.tip().hasClass('in') || self.hoverState == 'in') {\n self.hoverState = 'in'\n return\n }\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'in'\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n Tooltip.prototype.isInStateTrue = function () {\n for (var key in this.inState) {\n if (this.inState[key]) return true\n }\n\n return false\n }\n\n Tooltip.prototype.leave = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n }\n\n if (self.isInStateTrue()) return\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'out'\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n Tooltip.prototype.show = function () {\n var e = $.Event('show.bs.' + this.type)\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n\n var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n if (e.isDefaultPrevented() || !inDom) return\n var that = this\n\n var $tip = this.tip()\n\n var tipId = this.getUID(this.type)\n\n this.setContent()\n $tip.attr('id', tipId)\n this.$element.attr('aria-describedby', tipId)\n\n if (this.options.animation) $tip.addClass('fade')\n\n var placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n var autoToken = /\\s?auto?\\s?/i\n var autoPlace = autoToken.test(placement)\n if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n .addClass(placement)\n .data('bs.' + this.type, this)\n\n this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)\n this.$element.trigger('inserted.bs.' + this.type)\n\n var pos = this.getPosition()\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (autoPlace) {\n var orgPlacement = placement\n var viewportDim = this.getPosition(this.$viewport)\n\n placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :\n placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :\n placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :\n placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :\n placement\n\n $tip\n .removeClass(orgPlacement)\n .addClass(placement)\n }\n\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n this.applyPlacement(calculatedOffset, placement)\n\n var complete = function () {\n var prevHoverState = that.hoverState\n that.$element.trigger('shown.bs.' + that.type)\n that.hoverState = null\n\n if (prevHoverState == 'out') that.leave(that)\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n }\n }\n\n Tooltip.prototype.applyPlacement = function (offset, placement) {\n var $tip = this.tip()\n var width = $tip[0].offsetWidth\n var height = $tip[0].offsetHeight\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10)\n var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0\n if (isNaN(marginLeft)) marginLeft = 0\n\n offset.top += marginTop\n offset.left += marginLeft\n\n // $.fn.offset doesn't round pixel values\n // so we use setOffset directly with our own function B-0\n $.offset.setOffset($tip[0], $.extend({\n using: function (props) {\n $tip.css({\n top: Math.round(props.top),\n left: Math.round(props.left)\n })\n }\n }, offset), 0)\n\n $tip.addClass('in')\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n }\n\n var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n if (delta.left) offset.left += delta.left\n else offset.top += delta.top\n\n var isVertical = /top|bottom/.test(placement)\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n $tip.offset(offset)\n this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n }\n\n Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n this.arrow()\n .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isVertical ? 'top' : 'left', '')\n }\n\n Tooltip.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n\n if (this.options.html) {\n if (this.options.sanitize) {\n title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)\n }\n\n $tip.find('.tooltip-inner').html(title)\n } else {\n $tip.find('.tooltip-inner').text(title)\n }\n\n $tip.removeClass('fade in top bottom left right')\n }\n\n Tooltip.prototype.hide = function (callback) {\n var that = this\n var $tip = $(this.$tip)\n var e = $.Event('hide.bs.' + this.type)\n\n function complete() {\n if (that.hoverState != 'in') $tip.detach()\n if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n that.$element\n .removeAttr('aria-describedby')\n .trigger('hidden.bs.' + that.type)\n }\n callback && callback()\n }\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n $.support.transition && $tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n\n this.hoverState = null\n\n return this\n }\n\n Tooltip.prototype.fixTitle = function () {\n var $e = this.$element\n if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n Tooltip.prototype.hasContent = function () {\n return this.getTitle()\n }\n\n Tooltip.prototype.getPosition = function ($element) {\n $element = $element || this.$element\n\n var el = $element[0]\n var isBody = el.tagName == 'BODY'\n\n var elRect = el.getBoundingClientRect()\n if (elRect.width == null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n }\n var isSvg = window.SVGElement && el instanceof window.SVGElement\n // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n // See https://github.com/twbs/bootstrap/issues/20280\n var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n return $.extend({}, elRect, scroll, outerDims, elOffset)\n }\n\n Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n }\n\n Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n var delta = { top: 0, left: 0 }\n if (!this.$viewport) return delta\n\n var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n var viewportDimensions = this.getPosition(this.$viewport)\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll\n var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n }\n } else {\n var leftEdgeOffset = pos.left - viewportPadding\n var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n }\n }\n\n return delta\n }\n\n Tooltip.prototype.getTitle = function () {\n var title\n var $e = this.$element\n var o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n Tooltip.prototype.getUID = function (prefix) {\n do prefix += ~~(Math.random() * 1000000)\n while (document.getElementById(prefix))\n return prefix\n }\n\n Tooltip.prototype.tip = function () {\n if (!this.$tip) {\n this.$tip = $(this.options.template)\n if (this.$tip.length != 1) {\n throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n }\n }\n return this.$tip\n }\n\n Tooltip.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n }\n\n Tooltip.prototype.enable = function () {\n this.enabled = true\n }\n\n Tooltip.prototype.disable = function () {\n this.enabled = false\n }\n\n Tooltip.prototype.toggleEnabled = function () {\n this.enabled = !this.enabled\n }\n\n Tooltip.prototype.toggle = function (e) {\n var self = this\n if (e) {\n self = $(e.currentTarget).data('bs.' + this.type)\n if (!self) {\n self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n $(e.currentTarget).data('bs.' + this.type, self)\n }\n }\n\n if (e) {\n self.inState.click = !self.inState.click\n if (self.isInStateTrue()) self.enter(self)\n else self.leave(self)\n } else {\n self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n }\n }\n\n Tooltip.prototype.destroy = function () {\n var that = this\n clearTimeout(this.timeout)\n this.hide(function () {\n that.$element.off('.' + that.type).removeData('bs.' + that.type)\n if (that.$tip) {\n that.$tip.detach()\n }\n that.$tip = null\n that.$arrow = null\n that.$viewport = null\n that.$element = null\n })\n }\n\n Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {\n return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)\n }\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tooltip')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = Plugin\n $.fn.tooltip.Constructor = Tooltip\n\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: transition.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)\n // ============================================================\n\n function transitionEnd() {\n var el = document.createElement('bootstrap')\n\n var transEndEventNames = {\n WebkitTransition : 'webkitTransitionEnd',\n MozTransition : 'transitionend',\n OTransition : 'oTransitionEnd otransitionend',\n transition : 'transitionend'\n }\n\n for (var name in transEndEventNames) {\n if (el.style[name] !== undefined) {\n return { end: transEndEventNames[name] }\n }\n }\n\n return false // explicit for ie8 ( ._.)\n }\n\n // https://blog.alexmaccaw.com/css-transitions\n $.fn.emulateTransitionEnd = function (duration) {\n var called = false\n var $el = this\n $(this).one('bsTransitionEnd', function () { called = true })\n var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n setTimeout(callback, duration)\n return this\n }\n\n $(function () {\n $.support.transition = transitionEnd()\n\n if (!$.support.transition) return\n\n $.event.special.bsTransitionEnd = {\n bindType: $.support.transition.end,\n delegateType: $.support.transition.end,\n handle: function (e) {\n if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n }\n }\n })\n\n}(jQuery);\n","/*!\r\n * Color Thief v2.0\r\n * by Lokesh Dhakar - http://www.lokeshdhakar.com\r\n *\r\n * Thanks\r\n * ------\r\n * Nick Rabinowitz - For creating quantize.js.\r\n * John Schulz - For clean up and optimization. @JFSIII\r\n * Nathan Spady - For adding drag and drop support to the demo page.\r\n *\r\n * License\r\n * -------\r\n * Copyright 2011, 2015 Lokesh Dhakar\r\n * Released under the MIT license\r\n * https://raw.githubusercontent.com/lokesh/color-thief/master/LICENSE\r\n *\r\n */\r\nvar CanvasImage=function(a){this.canvas=document.createElement(\"canvas\"),this.context=this.canvas.getContext(\"2d\"),document.body.appendChild(this.canvas),this.width=this.canvas.width=a.width,this.height=this.canvas.height=a.height,this.context.drawImage(a,0,0,this.width,this.height)};CanvasImage.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},CanvasImage.prototype.update=function(a){this.context.putImageData(a,0,0)},CanvasImage.prototype.getPixelCount=function(){return this.width*this.height},CanvasImage.prototype.getImageData=function(){return this.context.getImageData(0,0,this.width,this.height)},CanvasImage.prototype.removeCanvas=function(){this.canvas.parentNode.removeChild(this.canvas)};var ColorThief=function(){};/*!\r\n * quantize.js Copyright 2008 Nick Rabinowitz.\r\n * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php\r\n */\r\n/*!\r\n * Block below copied from Protovis: http://mbostock.github.com/protovis/\r\n * Copyright 2010 Stanford Visualization Group\r\n * Licensed under the BSD License: http://www.opensource.org/licenses/bsd-license.php\r\n */\r\nif(ColorThief.prototype.getColor=function(a,b){var c=this.getPalette(a,5,b),d=c[0];return d},ColorThief.prototype.getPalette=function(a,b,c){\"undefined\"==typeof b&&(b=10),(\"undefined\"==typeof c||1>c)&&(c=10);for(var d,e,f,g,h,i=new CanvasImage(a),j=i.getImageData(),k=j.data,l=i.getPixelCount(),m=[],n=0;l>n;n+=c)d=4*n,e=k[d+0],f=k[d+1],g=k[d+2],h=k[d+3],h>=125&&(e>250&&f>250&&g>250||m.push([e,f,g]));var o=MMCQ.quantize(m,b),p=o?o.palette():null;return i.removeCanvas(),p},!pv)var pv={map:function(a,b){var c={};return b?a.map(function(a,d){return c.index=d,b.call(c,a)}):a.slice()},naturalOrder:function(a,b){return b>a?-1:a>b?1:0},sum:function(a,b){var c={};return a.reduce(b?function(a,d,e){return c.index=e,a+b.call(c,d)}:function(a,b){return a+b},0)},max:function(a,b){return Math.max.apply(null,b?pv.map(a,b):a)}};var MMCQ=function(){function a(a,b,c){return(a<<2*i)+(b<<i)+c}function b(a){function b(){c.sort(a),d=!0}var c=[],d=!1;return{push:function(a){c.push(a),d=!1},peek:function(a){return d||b(),void 0===a&&(a=c.length-1),c[a]},pop:function(){return d||b(),c.pop()},size:function(){return c.length},map:function(a){return c.map(a)},debug:function(){return d||b(),c}}}function c(a,b,c,d,e,f,g){var h=this;h.r1=a,h.r2=b,h.g1=c,h.g2=d,h.b1=e,h.b2=f,h.histo=g}function d(){this.vboxes=new b(function(a,b){return pv.naturalOrder(a.vbox.count()*a.vbox.volume(),b.vbox.count()*b.vbox.volume())})}function e(b){var c,d,e,f,g=1<<3*i,h=new Array(g);return b.forEach(function(b){d=b[0]>>j,e=b[1]>>j,f=b[2]>>j,c=a(d,e,f),h[c]=(h[c]||0)+1}),h}function f(a,b){var d,e,f,g=1e6,h=0,i=1e6,k=0,l=1e6,m=0;return a.forEach(function(a){d=a[0]>>j,e=a[1]>>j,f=a[2]>>j,g>d?g=d:d>h&&(h=d),i>e?i=e:e>k&&(k=e),l>f?l=f:f>m&&(m=f)}),new c(g,h,i,k,l,m,b)}function g(b,c){function d(a){var b,d,e,f,g,h=a+\"1\",j=a+\"2\",k=0;for(i=c[h];i<=c[j];i++)if(o[i]>n/2){for(e=c.copy(),f=c.copy(),b=i-c[h],d=c[j]-i,g=d>=b?Math.min(c[j]-1,~~(i+d/2)):Math.max(c[h],~~(i-1-b/2));!o[g];)g++;for(k=p[g];!k&&o[g-1];)k=p[--g];return e[j]=g,f[h]=e[j]+1,[e,f]}}if(c.count()){var e=c.r2-c.r1+1,f=c.g2-c.g1+1,g=c.b2-c.b1+1,h=pv.max([e,f,g]);if(1==c.count())return[c.copy()];var i,j,k,l,m,n=0,o=[],p=[];if(h==e)for(i=c.r1;i<=c.r2;i++){for(l=0,j=c.g1;j<=c.g2;j++)for(k=c.b1;k<=c.b2;k++)m=a(i,j,k),l+=b[m]||0;n+=l,o[i]=n}else if(h==f)for(i=c.g1;i<=c.g2;i++){for(l=0,j=c.r1;j<=c.r2;j++)for(k=c.b1;k<=c.b2;k++)m=a(j,i,k),l+=b[m]||0;n+=l,o[i]=n}else for(i=c.b1;i<=c.b2;i++){for(l=0,j=c.r1;j<=c.r2;j++)for(k=c.g1;k<=c.g2;k++)m=a(j,k,i),l+=b[m]||0;n+=l,o[i]=n}return o.forEach(function(a,b){p[b]=n-a}),d(h==e?\"r\":h==f?\"g\":\"b\")}}function h(a,c){function h(a,b){for(var c,d=1,e=0;k>e;)if(c=a.pop(),c.count()){var f=g(i,c),h=f[0],j=f[1];if(!h)return;if(a.push(h),j&&(a.push(j),d++),d>=b)return;if(e++>k)return}else a.push(c),e++}if(!a.length||2>c||c>256)return!1;var i=e(a),j=0;i.forEach(function(){j++});var m=f(a,i),n=new b(function(a,b){return pv.naturalOrder(a.count(),b.count())});n.push(m),h(n,l*c);for(var o=new b(function(a,b){return pv.naturalOrder(a.count()*a.volume(),b.count()*b.volume())});n.size();)o.push(n.pop());h(o,c-o.size());for(var p=new d;o.size();)p.push(o.pop());return p}var i=5,j=8-i,k=1e3,l=.75;return c.prototype={volume:function(a){var b=this;return(!b._volume||a)&&(b._volume=(b.r2-b.r1+1)*(b.g2-b.g1+1)*(b.b2-b.b1+1)),b._volume},count:function(b){var c=this,d=c.histo;if(!c._count_set||b){var e,f,g,h=0;for(e=c.r1;e<=c.r2;e++)for(f=c.g1;f<=c.g2;f++)for(g=c.b1;g<=c.b2;g++)index=a(e,f,g),h+=d[index]||0;c._count=h,c._count_set=!0}return c._count},copy:function(){var a=this;return new c(a.r1,a.r2,a.g1,a.g2,a.b1,a.b2,a.histo)},avg:function(b){var c=this,d=c.histo;if(!c._avg||b){var e,f,g,h,j,k=0,l=1<<8-i,m=0,n=0,o=0;for(f=c.r1;f<=c.r2;f++)for(g=c.g1;g<=c.g2;g++)for(h=c.b1;h<=c.b2;h++)j=a(f,g,h),e=d[j]||0,k+=e,m+=e*(f+.5)*l,n+=e*(g+.5)*l,o+=e*(h+.5)*l;k?c._avg=[~~(m/k),~~(n/k),~~(o/k)]:c._avg=[~~(l*(c.r1+c.r2+1)/2),~~(l*(c.g1+c.g2+1)/2),~~(l*(c.b1+c.b2+1)/2)]}return c._avg},contains:function(a){var b=this,c=a[0]>>j;return gval=a[1]>>j,bval=a[2]>>j,c>=b.r1&&c<=b.r2&&gval>=b.g1&&gval<=b.g2&&bval>=b.b1&&bval<=b.b2}},d.prototype={push:function(a){this.vboxes.push({vbox:a,color:a.avg()})},palette:function(){return this.vboxes.map(function(a){return a.color})},size:function(){return this.vboxes.size()},map:function(a){for(var b=this.vboxes,c=0;c<b.size();c++)if(b.peek(c).vbox.contains(a))return b.peek(c).color;return this.nearest(a)},nearest:function(a){for(var b,c,d,e=this.vboxes,f=0;f<e.size();f++)c=Math.sqrt(Math.pow(a[0]-e.peek(f).color[0],2)+Math.pow(a[1]-e.peek(f).color[1],2)+Math.pow(a[2]-e.peek(f).color[2],2)),(b>c||void 0===b)&&(b=c,d=e.peek(f).color);return d},forcebw:function(){var a=this.vboxes;a.sort(function(a,b){return pv.naturalOrder(pv.sum(a.color),pv.sum(b.color))});var b=a[0].color;b[0]<5&&b[1]<5&&b[2]<5&&(a[0].color=[0,0,0]);var c=a.length-1,d=a[c].color;d[0]>251&&d[1]>251&&d[2]>251&&(a[c].color=[255,255,255])}},{quantize:h}}();\r\nmodule.exports = ColorThief;\r\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_localizedFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"};return function(t,o,n){var r=o.prototype,i=r.format;n.en.formats=e,r.format=function(t){void 0===t&&(t=\"YYYY-MM-DDTHH:mm:ssZ\");var o=this.$locale().formats,n=function(t,o){return t.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var i=r&&r.toUpperCase();return n||o[r]||e[r]||o[i].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,o){return t||o.slice(1)}))}))}(t,void 0===o?{}:o);return i.call(this,n)}}}));","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c<m;c+=1){var y=h[c];y.d&&(f=d?t(e).diff(i,y.d,!0):i.diff(e,y.d,!0));var p=(r.rounding||Math.round)(Math.abs(f));if(s=f>0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","\"use strict\";\n\n// eslint-disable-next-line func-names\nmodule.exports = function () {\n if (typeof globalThis === \"object\") {\n return globalThis;\n }\n\n var g;\n\n try {\n // This works if eval is allowed (see CSP)\n // eslint-disable-next-line no-new-func\n g = this || new Function(\"return this\")();\n } catch (e) {\n // This works if the window reference is available\n if (typeof window === \"object\") {\n return window;\n } // This works if the self reference is available\n\n\n if (typeof self === \"object\") {\n return self;\n } // This works if the global reference is available\n\n\n if (typeof global !== \"undefined\") {\n return global;\n }\n }\n\n return g;\n}();","import { tabbable, focusable, isFocusable, isTabbable } from 'tabbable';\n\nconst activeFocusTraps = (function () {\n const trapQueue = [];\n return {\n activateTrap(trap) {\n if (trapQueue.length > 0) {\n const activeTrap = trapQueue[trapQueue.length - 1];\n if (activeTrap !== trap) {\n activeTrap.pause();\n }\n }\n\n const trapIndex = trapQueue.indexOf(trap);\n if (trapIndex === -1) {\n trapQueue.push(trap);\n } else {\n // move this existing trap to the front of the queue\n trapQueue.splice(trapIndex, 1);\n trapQueue.push(trap);\n }\n },\n\n deactivateTrap(trap) {\n const trapIndex = trapQueue.indexOf(trap);\n if (trapIndex !== -1) {\n trapQueue.splice(trapIndex, 1);\n }\n\n if (trapQueue.length > 0) {\n trapQueue[trapQueue.length - 1].unpause();\n }\n },\n };\n})();\n\nconst isSelectableInput = function (node) {\n return (\n node.tagName &&\n node.tagName.toLowerCase() === 'input' &&\n typeof node.select === 'function'\n );\n};\n\nconst isEscapeEvent = function (e) {\n return e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27;\n};\n\nconst isTabEvent = function (e) {\n return e.key === 'Tab' || e.keyCode === 9;\n};\n\nconst delay = function (fn) {\n return setTimeout(fn, 0);\n};\n\n// Array.find/findIndex() are not supported on IE; this replicates enough\n// of Array.findIndex() for our needs\nconst findIndex = function (arr, fn) {\n let idx = -1;\n\n arr.every(function (value, i) {\n if (fn(value)) {\n idx = i;\n return false; // break\n }\n\n return true; // next\n });\n\n return idx;\n};\n\n/**\n * Get an option's value when it could be a plain value, or a handler that provides\n * the value.\n * @param {*} value Option's value to check.\n * @param {...*} [params] Any parameters to pass to the handler, if `value` is a function.\n * @returns {*} The `value`, or the handler's returned value.\n */\nconst valueOrHandler = function (value, ...params) {\n return typeof value === 'function' ? value(...params) : value;\n};\n\nconst getActualTarget = function (event) {\n // NOTE: If the trap is _inside_ a shadow DOM, event.target will always be the\n // shadow host. However, event.target.composedPath() will be an array of\n // nodes \"clicked\" from inner-most (the actual element inside the shadow) to\n // outer-most (the host HTML document). If we have access to composedPath(),\n // then use its first element; otherwise, fall back to event.target (and\n // this only works for an _open_ shadow DOM; otherwise,\n // composedPath()[0] === event.target always).\n return event.target.shadowRoot && typeof event.composedPath === 'function'\n ? event.composedPath()[0]\n : event.target;\n};\n\nconst createFocusTrap = function (elements, userOptions) {\n // SSR: a live trap shouldn't be created in this type of environment so this\n // should be safe code to execute if the `document` option isn't specified\n const doc = userOptions?.document || document;\n\n const config = {\n returnFocusOnDeactivate: true,\n escapeDeactivates: true,\n delayInitialFocus: true,\n ...userOptions,\n };\n\n const state = {\n // containers given to createFocusTrap()\n // @type {Array<HTMLElement>}\n containers: [],\n\n // list of objects identifying tabbable nodes in `containers` in the trap\n // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n // is active, but the trap should never get to a state where there isn't at least one group\n // with at least one tabbable node in it (that would lead to an error condition that would\n // result in an error being thrown)\n // @type {Array<{\n // container: HTMLElement,\n // tabbableNodes: Array<HTMLElement>, // empty if none\n // focusableNodes: Array<HTMLElement>, // empty if none\n // firstTabbableNode: HTMLElement|null,\n // lastTabbableNode: HTMLElement|null,\n // nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined\n // }>}\n containerGroups: [], // same order/length as `containers` list\n\n // references to objects in `containerGroups`, but only those that actually have\n // tabbable nodes in them\n // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__\n // the same length\n tabbableGroups: [],\n\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: false,\n paused: false,\n\n // timer ID for when delayInitialFocus is true and initial focus in this trap\n // has been delayed during activation\n delayInitialFocusTimer: undefined,\n };\n\n let trap; // eslint-disable-line prefer-const -- some private functions reference it, and its methods reference private functions, so we must declare here and define later\n\n /**\n * Gets a configuration option value.\n * @param {Object|undefined} configOverrideOptions If true, and option is defined in this set,\n * value will be taken from this object. Otherwise, value will be taken from base configuration.\n * @param {string} optionName Name of the option whose value is sought.\n * @param {string|undefined} [configOptionName] Name of option to use __instead of__ `optionName`\n * IIF `configOverrideOptions` is not defined. Otherwise, `optionName` is used.\n */\n const getOption = (configOverrideOptions, optionName, configOptionName) => {\n return configOverrideOptions &&\n configOverrideOptions[optionName] !== undefined\n ? configOverrideOptions[optionName]\n : config[configOptionName || optionName];\n };\n\n /**\n * Finds the index of the container that contains the element.\n * @param {HTMLElement} element\n * @returns {number} Index of the container in either `state.containers` or\n * `state.containerGroups` (the order/length of these lists are the same); -1\n * if the element isn't found.\n */\n const findContainerIndex = function (element) {\n // NOTE: search `containerGroups` because it's possible a group contains no tabbable\n // nodes, but still contains focusable nodes (e.g. if they all have `tabindex=-1`)\n // and we still need to find the element in there\n return state.containerGroups.findIndex(\n ({ container, tabbableNodes }) =>\n container.contains(element) ||\n // fall back to explicit tabbable search which will take into consideration any\n // web components if the `tabbableOptions.getShadowRoot` option was used for\n // the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't\n // look inside web components even if open)\n tabbableNodes.find((node) => node === element)\n );\n };\n\n /**\n * Gets the node for the given option, which is expected to be an option that\n * can be either a DOM node, a string that is a selector to get a node, `false`\n * (if a node is explicitly NOT given), or a function that returns any of these\n * values.\n * @param {string} optionName\n * @returns {undefined | false | HTMLElement | SVGElement} Returns\n * `undefined` if the option is not specified; `false` if the option\n * resolved to `false` (node explicitly not given); otherwise, the resolved\n * DOM node.\n * @throws {Error} If the option is set, not `false`, and is not, or does not\n * resolve to a node.\n */\n const getNodeForOption = function (optionName, ...params) {\n let optionValue = config[optionName];\n\n if (typeof optionValue === 'function') {\n optionValue = optionValue(...params);\n }\n\n if (optionValue === true) {\n optionValue = undefined; // use default value\n }\n\n if (!optionValue) {\n if (optionValue === undefined || optionValue === false) {\n return optionValue;\n }\n // else, empty string (invalid), null (invalid), 0 (invalid)\n\n throw new Error(\n `\\`${optionName}\\` was specified but was not a node, or did not return a node`\n );\n }\n\n let node = optionValue; // could be HTMLElement, SVGElement, or non-empty string at this point\n\n if (typeof optionValue === 'string') {\n node = doc.querySelector(optionValue); // resolve to node, or null if fails\n if (!node) {\n throw new Error(\n `\\`${optionName}\\` as selector refers to no known node`\n );\n }\n }\n\n return node;\n };\n\n const getInitialFocusNode = function () {\n let node = getNodeForOption('initialFocus');\n\n // false explicitly indicates we want no initialFocus at all\n if (node === false) {\n return false;\n }\n\n if (node === undefined) {\n // option not specified: use fallback options\n if (findContainerIndex(doc.activeElement) >= 0) {\n node = doc.activeElement;\n } else {\n const firstTabbableGroup = state.tabbableGroups[0];\n const firstTabbableNode =\n firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n\n // NOTE: `fallbackFocus` option function cannot return `false` (not supported)\n node = firstTabbableNode || getNodeForOption('fallbackFocus');\n }\n }\n\n if (!node) {\n throw new Error(\n 'Your focus-trap needs to have at least one focusable element'\n );\n }\n\n return node;\n };\n\n const updateTabbableNodes = function () {\n state.containerGroups = state.containers.map((container) => {\n const tabbableNodes = tabbable(container, config.tabbableOptions);\n\n // NOTE: if we have tabbable nodes, we must have focusable nodes; focusable nodes\n // are a superset of tabbable nodes\n const focusableNodes = focusable(container, config.tabbableOptions);\n\n return {\n container,\n tabbableNodes,\n focusableNodes,\n firstTabbableNode: tabbableNodes.length > 0 ? tabbableNodes[0] : null,\n lastTabbableNode:\n tabbableNodes.length > 0\n ? tabbableNodes[tabbableNodes.length - 1]\n : null,\n\n /**\n * Finds the __tabbable__ node that follows the given node in the specified direction,\n * in this container, if any.\n * @param {HTMLElement} node\n * @param {boolean} [forward] True if going in forward tab order; false if going\n * in reverse.\n * @returns {HTMLElement|undefined} The next tabbable node, if any.\n */\n nextTabbableNode(node, forward = true) {\n // NOTE: If tabindex is positive (in order to manipulate the tab order separate\n // from the DOM order), this __will not work__ because the list of focusableNodes,\n // while it contains tabbable nodes, does not sort its nodes in any order other\n // than DOM order, because it can't: Where would you place focusable (but not\n // tabbable) nodes in that order? They have no order, because they aren't tabbale...\n // Support for positive tabindex is already broken and hard to manage (possibly\n // not supportable, TBD), so this isn't going to make things worse than they\n // already are, and at least makes things better for the majority of cases where\n // tabindex is either 0/unset or negative.\n // FYI, positive tabindex issue: https://github.com/focus-trap/focus-trap/issues/375\n const nodeIdx = focusableNodes.findIndex((n) => n === node);\n if (nodeIdx < 0) {\n return undefined;\n }\n\n if (forward) {\n return focusableNodes\n .slice(nodeIdx + 1)\n .find((n) => isTabbable(n, config.tabbableOptions));\n }\n\n return focusableNodes\n .slice(0, nodeIdx)\n .reverse()\n .find((n) => isTabbable(n, config.tabbableOptions));\n },\n };\n });\n\n state.tabbableGroups = state.containerGroups.filter(\n (group) => group.tabbableNodes.length > 0\n );\n\n // throw if no groups have tabbable nodes and we don't have a fallback focus node either\n if (\n state.tabbableGroups.length <= 0 &&\n !getNodeForOption('fallbackFocus') // returning false not supported for this option\n ) {\n throw new Error(\n 'Your focus-trap must have at least one container with at least one tabbable node in it at all times'\n );\n }\n };\n\n const tryFocus = function (node) {\n if (node === false) {\n return;\n }\n\n if (node === doc.activeElement) {\n return;\n }\n\n if (!node || !node.focus) {\n tryFocus(getInitialFocusNode());\n return;\n }\n\n node.focus({ preventScroll: !!config.preventScroll });\n state.mostRecentlyFocusedNode = node;\n\n if (isSelectableInput(node)) {\n node.select();\n }\n };\n\n const getReturnFocusNode = function (previousActiveElement) {\n const node = getNodeForOption('setReturnFocus', previousActiveElement);\n return node ? node : node === false ? false : previousActiveElement;\n };\n\n // This needs to be done on mousedown and touchstart instead of click\n // so that it precedes the focus event.\n const checkPointerDown = function (e) {\n const target = getActualTarget(e);\n\n if (findContainerIndex(target) >= 0) {\n // allow the click since it ocurred inside the trap\n return;\n }\n\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n // immediately deactivate the trap\n trap.deactivate({\n // if, on deactivation, we should return focus to the node originally-focused\n // when the trap was activated (or the configured `setReturnFocus` node),\n // then assume it's also OK to return focus to the outside node that was\n // just clicked, causing deactivation, as long as that node is focusable;\n // if it isn't focusable, then return focus to the original node focused\n // on activation (or the configured `setReturnFocus` node)\n // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n // which will result in the outside click setting focus to the node\n // that was clicked, whether it's focusable or not; by setting\n // `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n // on activation (or the configured `setReturnFocus` node)\n returnFocus:\n config.returnFocusOnDeactivate &&\n !isFocusable(target, config.tabbableOptions),\n });\n return;\n }\n\n // This is needed for mobile devices.\n // (If we'll only let `click` events through,\n // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n if (valueOrHandler(config.allowOutsideClick, e)) {\n // allow the click outside the trap to take place\n return;\n }\n\n // otherwise, prevent the click\n e.preventDefault();\n };\n\n // In case focus escapes the trap for some strange reason, pull it back in.\n const checkFocusIn = function (e) {\n const target = getActualTarget(e);\n const targetContained = findContainerIndex(target) >= 0;\n\n // In Firefox when you Tab out of an iframe the Document is briefly focused.\n if (targetContained || target instanceof Document) {\n if (targetContained) {\n state.mostRecentlyFocusedNode = target;\n }\n } else {\n // escaped! pull it back in to where it just left\n e.stopImmediatePropagation();\n tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n }\n };\n\n // Hijack Tab events on the first and last focusable nodes of the trap,\n // in order to prevent focus from escaping. If it escapes for even a\n // moment it can end up scrolling the page and causing confusion so we\n // kind of need to capture the action at the keydown phase.\n const checkTab = function (e) {\n const target = getActualTarget(e);\n updateTabbableNodes();\n\n let destinationNode = null;\n\n if (state.tabbableGroups.length > 0) {\n // make sure the target is actually contained in a group\n // NOTE: the target may also be the container itself if it's focusable\n // with tabIndex='-1' and was given initial focus\n const containerIndex = findContainerIndex(target);\n const containerGroup =\n containerIndex >= 0 ? state.containerGroups[containerIndex] : undefined;\n\n if (containerIndex < 0) {\n // target not found in any group: quite possible focus has escaped the trap,\n // so bring it back in to...\n if (e.shiftKey) {\n // ...the last node in the last group\n destinationNode =\n state.tabbableGroups[state.tabbableGroups.length - 1]\n .lastTabbableNode;\n } else {\n // ...the first node in the first group\n destinationNode = state.tabbableGroups[0].firstTabbableNode;\n }\n } else if (e.shiftKey) {\n // REVERSE\n\n // is the target the first tabbable node in a group?\n let startOfGroupIndex = findIndex(\n state.tabbableGroups,\n ({ firstTabbableNode }) => target === firstTabbableNode\n );\n\n if (\n startOfGroupIndex < 0 &&\n (containerGroup.container === target ||\n (isFocusable(target, config.tabbableOptions) &&\n !isTabbable(target, config.tabbableOptions) &&\n !containerGroup.nextTabbableNode(target, false)))\n ) {\n // an exception case where the target is either the container itself, or\n // a non-tabbable node that was given focus (i.e. tabindex is negative\n // and user clicked on it or node was programmatically given focus)\n // and is not followed by any other tabbable node, in which\n // case, we should handle shift+tab as if focus were on the container's\n // first tabbable node, and go to the last tabbable node of the LAST group\n startOfGroupIndex = containerIndex;\n }\n\n if (startOfGroupIndex >= 0) {\n // YES: then shift+tab should go to the last tabbable node in the\n // previous group (and wrap around to the last tabbable node of\n // the LAST group if it's the first tabbable node of the FIRST group)\n const destinationGroupIndex =\n startOfGroupIndex === 0\n ? state.tabbableGroups.length - 1\n : startOfGroupIndex - 1;\n\n const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n destinationNode = destinationGroup.lastTabbableNode;\n }\n } else {\n // FORWARD\n\n // is the target the last tabbable node in a group?\n let lastOfGroupIndex = findIndex(\n state.tabbableGroups,\n ({ lastTabbableNode }) => target === lastTabbableNode\n );\n\n if (\n lastOfGroupIndex < 0 &&\n (containerGroup.container === target ||\n (isFocusable(target, config.tabbableOptions) &&\n !isTabbable(target, config.tabbableOptions) &&\n !containerGroup.nextTabbableNode(target)))\n ) {\n // an exception case where the target is the container itself, or\n // a non-tabbable node that was given focus (i.e. tabindex is negative\n // and user clicked on it or node was programmatically given focus)\n // and is not followed by any other tabbable node, in which\n // case, we should handle tab as if focus were on the container's\n // last tabbable node, and go to the first tabbable node of the FIRST group\n lastOfGroupIndex = containerIndex;\n }\n\n if (lastOfGroupIndex >= 0) {\n // YES: then tab should go to the first tabbable node in the next\n // group (and wrap around to the first tabbable node of the FIRST\n // group if it's the last tabbable node of the LAST group)\n const destinationGroupIndex =\n lastOfGroupIndex === state.tabbableGroups.length - 1\n ? 0\n : lastOfGroupIndex + 1;\n\n const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n destinationNode = destinationGroup.firstTabbableNode;\n }\n }\n } else {\n // NOTE: the fallbackFocus option does not support returning false to opt-out\n destinationNode = getNodeForOption('fallbackFocus');\n }\n\n if (destinationNode) {\n e.preventDefault();\n tryFocus(destinationNode);\n }\n // else, let the browser take care of [shift+]tab and move the focus\n };\n\n const checkKey = function (e) {\n if (\n isEscapeEvent(e) &&\n valueOrHandler(config.escapeDeactivates, e) !== false\n ) {\n e.preventDefault();\n trap.deactivate();\n return;\n }\n\n if (isTabEvent(e)) {\n checkTab(e);\n return;\n }\n };\n\n const checkClick = function (e) {\n const target = getActualTarget(e);\n\n if (findContainerIndex(target) >= 0) {\n return;\n }\n\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n return;\n }\n\n if (valueOrHandler(config.allowOutsideClick, e)) {\n return;\n }\n\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n\n //\n // EVENT LISTENERS\n //\n\n const addListeners = function () {\n if (!state.active) {\n return;\n }\n\n // There can be only one listening focus trap at a time\n activeFocusTraps.activateTrap(trap);\n\n // Delay ensures that the focused element doesn't capture the event\n // that caused the focus trap activation.\n state.delayInitialFocusTimer = config.delayInitialFocus\n ? delay(function () {\n tryFocus(getInitialFocusNode());\n })\n : tryFocus(getInitialFocusNode());\n\n doc.addEventListener('focusin', checkFocusIn, true);\n doc.addEventListener('mousedown', checkPointerDown, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('touchstart', checkPointerDown, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('click', checkClick, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('keydown', checkKey, {\n capture: true,\n passive: false,\n });\n\n return trap;\n };\n\n const removeListeners = function () {\n if (!state.active) {\n return;\n }\n\n doc.removeEventListener('focusin', checkFocusIn, true);\n doc.removeEventListener('mousedown', checkPointerDown, true);\n doc.removeEventListener('touchstart', checkPointerDown, true);\n doc.removeEventListener('click', checkClick, true);\n doc.removeEventListener('keydown', checkKey, true);\n\n return trap;\n };\n\n //\n // TRAP DEFINITION\n //\n\n trap = {\n get active() {\n return state.active;\n },\n\n get paused() {\n return state.paused;\n },\n\n activate(activateOptions) {\n if (state.active) {\n return this;\n }\n\n const onActivate = getOption(activateOptions, 'onActivate');\n const onPostActivate = getOption(activateOptions, 'onPostActivate');\n const checkCanFocusTrap = getOption(activateOptions, 'checkCanFocusTrap');\n\n if (!checkCanFocusTrap) {\n updateTabbableNodes();\n }\n\n state.active = true;\n state.paused = false;\n state.nodeFocusedBeforeActivation = doc.activeElement;\n\n if (onActivate) {\n onActivate();\n }\n\n const finishActivation = () => {\n if (checkCanFocusTrap) {\n updateTabbableNodes();\n }\n addListeners();\n if (onPostActivate) {\n onPostActivate();\n }\n };\n\n if (checkCanFocusTrap) {\n checkCanFocusTrap(state.containers.concat()).then(\n finishActivation,\n finishActivation\n );\n return this;\n }\n\n finishActivation();\n return this;\n },\n\n deactivate(deactivateOptions) {\n if (!state.active) {\n return this;\n }\n\n const options = {\n onDeactivate: config.onDeactivate,\n onPostDeactivate: config.onPostDeactivate,\n checkCanReturnFocus: config.checkCanReturnFocus,\n ...deactivateOptions,\n };\n\n clearTimeout(state.delayInitialFocusTimer); // noop if undefined\n state.delayInitialFocusTimer = undefined;\n\n removeListeners();\n state.active = false;\n state.paused = false;\n\n activeFocusTraps.deactivateTrap(trap);\n\n const onDeactivate = getOption(options, 'onDeactivate');\n const onPostDeactivate = getOption(options, 'onPostDeactivate');\n const checkCanReturnFocus = getOption(options, 'checkCanReturnFocus');\n const returnFocus = getOption(\n options,\n 'returnFocus',\n 'returnFocusOnDeactivate'\n );\n\n if (onDeactivate) {\n onDeactivate();\n }\n\n const finishDeactivation = () => {\n delay(() => {\n if (returnFocus) {\n tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n }\n if (onPostDeactivate) {\n onPostDeactivate();\n }\n });\n };\n\n if (returnFocus && checkCanReturnFocus) {\n checkCanReturnFocus(\n getReturnFocusNode(state.nodeFocusedBeforeActivation)\n ).then(finishDeactivation, finishDeactivation);\n return this;\n }\n\n finishDeactivation();\n return this;\n },\n\n pause() {\n if (state.paused || !state.active) {\n return this;\n }\n\n state.paused = true;\n removeListeners();\n\n return this;\n },\n\n unpause() {\n if (!state.paused || !state.active) {\n return this;\n }\n\n state.paused = false;\n updateTabbableNodes();\n addListeners();\n\n return this;\n },\n\n updateContainerElements(containerElements) {\n const elementsAsArray = [].concat(containerElements).filter(Boolean);\n\n state.containers = elementsAsArray.map((element) =>\n typeof element === 'string' ? doc.querySelector(element) : element\n );\n\n if (state.active) {\n updateTabbableNodes();\n }\n\n return this;\n },\n };\n\n // initialize container elements\n trap.updateContainerElements(elements);\n\n return trap;\n};\n\nexport { createFocusTrap };\n","/*jslint browser: true*/\r\n/*jslint jquery: true*/\r\n\r\n/*\r\n * jQuery Hotkeys Plugin\r\n * Copyright 2010, John Resig\r\n * Dual licensed under the MIT or GPL Version 2 licenses.\r\n *\r\n * Based upon the plugin by Tzury Bar Yochay:\r\n * https://github.com/tzuryby/jquery.hotkeys\r\n *\r\n * Original idea by:\r\n * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/\r\n */\r\n\r\n/*\r\n * One small change is: now keys are passed by object { keys: '...' }\r\n * Might be useful, when you want to pass some other data to your handler\r\n */\r\n\r\n(function(jQuery) {\r\n\r\n jQuery.hotkeys = {\r\n version: \"0.2.0\",\r\n\r\n specialKeys: {\r\n 8: \"backspace\",\r\n 9: \"tab\",\r\n 10: \"return\",\r\n 13: \"return\",\r\n 16: \"shift\",\r\n 17: \"ctrl\",\r\n 18: \"alt\",\r\n 19: \"pause\",\r\n 20: \"capslock\",\r\n 27: \"esc\",\r\n 32: \"space\",\r\n 33: \"pageup\",\r\n 34: \"pagedown\",\r\n 35: \"end\",\r\n 36: \"home\",\r\n 37: \"left\",\r\n 38: \"up\",\r\n 39: \"right\",\r\n 40: \"down\",\r\n 45: \"insert\",\r\n 46: \"del\",\r\n 59: \";\",\r\n 61: \"=\",\r\n 96: \"0\",\r\n 97: \"1\",\r\n 98: \"2\",\r\n 99: \"3\",\r\n 100: \"4\",\r\n 101: \"5\",\r\n 102: \"6\",\r\n 103: \"7\",\r\n 104: \"8\",\r\n 105: \"9\",\r\n 106: \"*\",\r\n 107: \"+\",\r\n 109: \"-\",\r\n 110: \".\",\r\n 111: \"/\",\r\n 112: \"f1\",\r\n 113: \"f2\",\r\n 114: \"f3\",\r\n 115: \"f4\",\r\n 116: \"f5\",\r\n 117: \"f6\",\r\n 118: \"f7\",\r\n 119: \"f8\",\r\n 120: \"f9\",\r\n 121: \"f10\",\r\n 122: \"f11\",\r\n 123: \"f12\",\r\n 144: \"numlock\",\r\n 145: \"scroll\",\r\n 173: \"-\",\r\n 186: \";\",\r\n 187: \"=\",\r\n 188: \",\",\r\n 189: \"-\",\r\n 190: \".\",\r\n 191: \"/\",\r\n 192: \"`\",\r\n 219: \"[\",\r\n 220: \"\\\\\",\r\n 221: \"]\",\r\n 222: \"'\"\r\n },\r\n\r\n shiftNums: {\r\n \"`\": \"~\",\r\n \"1\": \"!\",\r\n \"2\": \"@\",\r\n \"3\": \"#\",\r\n \"4\": \"$\",\r\n \"5\": \"%\",\r\n \"6\": \"^\",\r\n \"7\": \"&\",\r\n \"8\": \"*\",\r\n \"9\": \"(\",\r\n \"0\": \")\",\r\n \"-\": \"_\",\r\n \"=\": \"+\",\r\n \";\": \": \",\r\n \"'\": \"\\\"\",\r\n \",\": \"<\",\r\n \".\": \">\",\r\n \"/\": \"?\",\r\n \"\\\\\": \"|\"\r\n },\r\n\r\n // excludes: button, checkbox, file, hidden, image, password, radio, reset, search, submit, url\r\n textAcceptingInputTypes: [\r\n \"text\", \"password\", \"number\", \"email\", \"url\", \"range\", \"date\", \"month\", \"week\", \"time\", \"datetime\",\r\n \"datetime-local\", \"search\", \"color\", \"tel\"],\r\n\r\n // default input types not to bind to unless bound directly\r\n textInputTypes: /textarea|input|select/i,\r\n\r\n options: {\r\n filterInputAcceptingElements: true,\r\n filterTextInputs: true,\r\n filterContentEditable: true\r\n }\r\n };\r\n\r\n function keyHandler(handleObj) {\r\n if (typeof handleObj.data === \"string\") {\r\n handleObj.data = {\r\n keys: handleObj.data\r\n };\r\n }\r\n\r\n // Only care when a possible input has been specified\r\n if (!handleObj.data || !handleObj.data.keys || typeof handleObj.data.keys !== \"string\") {\r\n return;\r\n }\r\n\r\n var origHandler = handleObj.handler,\r\n keys = handleObj.data.keys.toLowerCase().split(\" \");\r\n\r\n handleObj.handler = function(event) {\r\n // Don't fire in text-accepting inputs that we didn't directly bind to\r\n if (this !== event.target &&\r\n (jQuery.hotkeys.options.filterInputAcceptingElements &&\r\n jQuery.hotkeys.textInputTypes.test(event.target.nodeName) ||\r\n (jQuery.hotkeys.options.filterContentEditable && jQuery(event.target).attr('contenteditable')) ||\r\n (jQuery.hotkeys.options.filterTextInputs &&\r\n jQuery.inArray(event.target.type, jQuery.hotkeys.textAcceptingInputTypes) > -1))) {\r\n return;\r\n }\r\n\r\n var special = event.type !== \"keypress\" && jQuery.hotkeys.specialKeys[event.which],\r\n character = String.fromCharCode(event.which).toLowerCase(),\r\n modif = \"\",\r\n possible = {};\r\n\r\n jQuery.each([\"alt\", \"ctrl\", \"shift\"], function(index, specialKey) {\r\n\r\n if (event[specialKey + 'Key'] && special !== specialKey) {\r\n modif += specialKey + '+';\r\n }\r\n });\r\n\r\n // metaKey is triggered off ctrlKey erronously\r\n if (event.metaKey && !event.ctrlKey && special !== \"meta\") {\r\n modif += \"meta+\";\r\n }\r\n\r\n if (event.metaKey && special !== \"meta\" && modif.indexOf(\"alt+ctrl+shift+\") > -1) {\r\n modif = modif.replace(\"alt+ctrl+shift+\", \"hyper+\");\r\n }\r\n\r\n if (special) {\r\n possible[modif + special] = true;\r\n }\r\n else {\r\n possible[modif + character] = true;\r\n possible[modif + jQuery.hotkeys.shiftNums[character]] = true;\r\n\r\n // \"$\" can be triggered as \"Shift+4\" or \"Shift+$\" or just \"$\"\r\n if (modif === \"shift+\") {\r\n possible[jQuery.hotkeys.shiftNums[character]] = true;\r\n }\r\n }\r\n\r\n for (var i = 0, l = keys.length; i < l; i++) {\r\n if (possible[keys[i]]) {\r\n return origHandler.apply(this, arguments);\r\n }\r\n }\r\n };\r\n }\r\n\r\n jQuery.each([\"keydown\", \"keyup\", \"keypress\"], function() {\r\n jQuery.event.special[this] = {\r\n add: keyHandler\r\n };\r\n });\r\n\r\n})(jQuery || this.jQuery || window.jQuery);\r\n","/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = \"3.7.1\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn't have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\twhitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\t\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\tATTR: new RegExp( \"^\" + attributes ),\n\t\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\tbool: new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn't support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it's possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, \"*\" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don't support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( \":scope\" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( \":has(*,:jqfake)\" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don't have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\"<option selected=''></option></select>\";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\trbuggyQSA.push( \"~=\" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\trbuggyQSA.push( \":checked\" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"name\", \"\" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tfind.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, \"handle\" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, trac-12537)\n\t// .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function(render, schedule, console) {\n\tvar subscriptions = []\n\tvar pending = false\n\tvar offset = -1\n\n\tfunction sync() {\n\t\tfor (offset = 0; offset < subscriptions.length; offset += 2) {\n\t\t\ttry { render(subscriptions[offset], Vnode(subscriptions[offset + 1]), redraw) }\n\t\t\tcatch (e) { console.error(e) }\n\t\t}\n\t\toffset = -1\n\t}\n\n\tfunction redraw() {\n\t\tif (!pending) {\n\t\t\tpending = true\n\t\t\tschedule(function() {\n\t\t\t\tpending = false\n\t\t\t\tsync()\n\t\t\t})\n\t\t}\n\t}\n\n\tredraw.sync = sync\n\n\tfunction mount(root, component) {\n\t\tif (component != null && component.view == null && typeof component !== \"function\") {\n\t\t\tthrow new TypeError(\"m.mount expects a component, not a vnode.\")\n\t\t}\n\n\t\tvar index = subscriptions.indexOf(root)\n\t\tif (index >= 0) {\n\t\t\tsubscriptions.splice(index, 2)\n\t\t\tif (index <= offset) offset -= 2\n\t\t\trender(root, [])\n\t\t}\n\n\t\tif (component != null) {\n\t\t\tsubscriptions.push(root, component)\n\t\t\trender(root, Vnode(component), redraw)\n\t\t}\n\t}\n\n\treturn {mount: mount, redraw: redraw}\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar m = require(\"../render/hyperscript\")\nvar Promise = require(\"../promise/promise\")\n\nvar buildPathname = require(\"../pathname/build\")\nvar parsePathname = require(\"../pathname/parse\")\nvar compileTemplate = require(\"../pathname/compileTemplate\")\nvar assign = require(\"../util/assign\")\nvar censor = require(\"../util/censor\")\n\nvar sentinel = {}\n\nfunction decodeURIComponentSave(component) {\n\ttry {\n\t\treturn decodeURIComponent(component)\n\t} catch(e) {\n\t\treturn component\n\t}\n}\n\nmodule.exports = function($window, mountRedraw) {\n\tvar callAsync = $window == null\n\t\t// In case Mithril.js' loaded globally without the DOM, let's not break\n\t\t? null\n\t\t: typeof $window.setImmediate === \"function\" ? $window.setImmediate : $window.setTimeout\n\tvar p = Promise.resolve()\n\n\tvar scheduled = false\n\n\t// state === 0: init\n\t// state === 1: scheduled\n\t// state === 2: done\n\tvar ready = false\n\tvar state = 0\n\n\tvar compiled, fallbackRoute\n\n\tvar currentResolver = sentinel, component, attrs, currentPath, lastUpdate\n\n\tvar RouterRoot = {\n\t\tonbeforeupdate: function() {\n\t\t\tstate = state ? 2 : 1\n\t\t\treturn !(!state || sentinel === currentResolver)\n\t\t},\n\t\tonremove: function() {\n\t\t\t$window.removeEventListener(\"popstate\", fireAsync, false)\n\t\t\t$window.removeEventListener(\"hashchange\", resolveRoute, false)\n\t\t},\n\t\tview: function() {\n\t\t\tif (!state || sentinel === currentResolver) return\n\t\t\t// Wrap in a fragment to preserve existing key semantics\n\t\t\tvar vnode = [Vnode(component, attrs.key, attrs)]\n\t\t\tif (currentResolver) vnode = currentResolver.render(vnode[0])\n\t\t\treturn vnode\n\t\t},\n\t}\n\n\tvar SKIP = route.SKIP = {}\n\n\tfunction resolveRoute() {\n\t\tscheduled = false\n\t\t// Consider the pathname holistically. The prefix might even be invalid,\n\t\t// but that's not our problem.\n\t\tvar prefix = $window.location.hash\n\t\tif (route.prefix[0] !== \"#\") {\n\t\t\tprefix = $window.location.search + prefix\n\t\t\tif (route.prefix[0] !== \"?\") {\n\t\t\t\tprefix = $window.location.pathname + prefix\n\t\t\t\tif (prefix[0] !== \"/\") prefix = \"/\" + prefix\n\t\t\t}\n\t\t}\n\t\t// This seemingly useless `.concat()` speeds up the tests quite a bit,\n\t\t// since the representation is consistently a relatively poorly\n\t\t// optimized cons string.\n\t\tvar path = prefix.concat()\n\t\t\t.replace(/(?:%[a-f89][a-f0-9])+/gim, decodeURIComponentSave)\n\t\t\t.slice(route.prefix.length)\n\t\tvar data = parsePathname(path)\n\n\t\tassign(data.params, $window.history.state)\n\n\t\tfunction reject(e) {\n\t\t\tconsole.error(e)\n\t\t\tsetPath(fallbackRoute, null, {replace: true})\n\t\t}\n\n\t\tloop(0)\n\t\tfunction loop(i) {\n\t\t\t// state === 0: init\n\t\t\t// state === 1: scheduled\n\t\t\t// state === 2: done\n\t\t\tfor (; i < compiled.length; i++) {\n\t\t\t\tif (compiled[i].check(data)) {\n\t\t\t\t\tvar payload = compiled[i].component\n\t\t\t\t\tvar matchedRoute = compiled[i].route\n\t\t\t\t\tvar localComp = payload\n\t\t\t\t\tvar update = lastUpdate = function(comp) {\n\t\t\t\t\t\tif (update !== lastUpdate) return\n\t\t\t\t\t\tif (comp === SKIP) return loop(i + 1)\n\t\t\t\t\t\tcomponent = comp != null && (typeof comp.view === \"function\" || typeof comp === \"function\")? comp : \"div\"\n\t\t\t\t\t\tattrs = data.params, currentPath = path, lastUpdate = null\n\t\t\t\t\t\tcurrentResolver = payload.render ? payload : null\n\t\t\t\t\t\tif (state === 2) mountRedraw.redraw()\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tstate = 2\n\t\t\t\t\t\t\tmountRedraw.redraw.sync()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// There's no understating how much I *wish* I could\n\t\t\t\t\t// use `async`/`await` here...\n\t\t\t\t\tif (payload.view || typeof payload === \"function\") {\n\t\t\t\t\t\tpayload = {}\n\t\t\t\t\t\tupdate(localComp)\n\t\t\t\t\t}\n\t\t\t\t\telse if (payload.onmatch) {\n\t\t\t\t\t\tp.then(function () {\n\t\t\t\t\t\t\treturn payload.onmatch(data.params, path, matchedRoute)\n\t\t\t\t\t\t}).then(update, path === fallbackRoute ? null : reject)\n\t\t\t\t\t}\n\t\t\t\t\telse update(\"div\")\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (path === fallbackRoute) {\n\t\t\t\tthrow new Error(\"Could not resolve default route \" + fallbackRoute + \".\")\n\t\t\t}\n\t\t\tsetPath(fallbackRoute, null, {replace: true})\n\t\t}\n\t}\n\n\t// Set it unconditionally so `m.route.set` and `m.route.Link` both work,\n\t// even if neither `pushState` nor `hashchange` are supported. It's\n\t// cleared if `hashchange` is used, since that makes it automatically\n\t// async.\n\tfunction fireAsync() {\n\t\tif (!scheduled) {\n\t\t\tscheduled = true\n\t\t\t// TODO: just do `mountRedraw.redraw()` here and elide the timer\n\t\t\t// dependency. Note that this will muck with tests a *lot*, so it's\n\t\t\t// not as easy of a change as it sounds.\n\t\t\tcallAsync(resolveRoute)\n\t\t}\n\t}\n\n\tfunction setPath(path, data, options) {\n\t\tpath = buildPathname(path, data)\n\t\tif (ready) {\n\t\t\tfireAsync()\n\t\t\tvar state = options ? options.state : null\n\t\t\tvar title = options ? options.title : null\n\t\t\tif (options && options.replace) $window.history.replaceState(state, title, route.prefix + path)\n\t\t\telse $window.history.pushState(state, title, route.prefix + path)\n\t\t}\n\t\telse {\n\t\t\t$window.location.href = route.prefix + path\n\t\t}\n\t}\n\n\tfunction route(root, defaultRoute, routes) {\n\t\tif (!root) throw new TypeError(\"DOM element being rendered to does not exist.\")\n\n\t\tcompiled = Object.keys(routes).map(function(route) {\n\t\t\tif (route[0] !== \"/\") throw new SyntaxError(\"Routes must start with a '/'.\")\n\t\t\tif ((/:([^\\/\\.-]+)(\\.{3})?:/).test(route)) {\n\t\t\t\tthrow new SyntaxError(\"Route parameter names must be separated with either '/', '.', or '-'.\")\n\t\t\t}\n\t\t\treturn {\n\t\t\t\troute: route,\n\t\t\t\tcomponent: routes[route],\n\t\t\t\tcheck: compileTemplate(route),\n\t\t\t}\n\t\t})\n\t\tfallbackRoute = defaultRoute\n\t\tif (defaultRoute != null) {\n\t\t\tvar defaultData = parsePathname(defaultRoute)\n\n\t\t\tif (!compiled.some(function (i) { return i.check(defaultData) })) {\n\t\t\t\tthrow new ReferenceError(\"Default route doesn't match any known routes.\")\n\t\t\t}\n\t\t}\n\n\t\tif (typeof $window.history.pushState === \"function\") {\n\t\t\t$window.addEventListener(\"popstate\", fireAsync, false)\n\t\t} else if (route.prefix[0] === \"#\") {\n\t\t\t$window.addEventListener(\"hashchange\", resolveRoute, false)\n\t\t}\n\n\t\tready = true\n\t\tmountRedraw.mount(root, RouterRoot)\n\t\tresolveRoute()\n\t}\n\troute.set = function(path, data, options) {\n\t\tif (lastUpdate != null) {\n\t\t\toptions = options || {}\n\t\t\toptions.replace = true\n\t\t}\n\t\tlastUpdate = null\n\t\tsetPath(path, data, options)\n\t}\n\troute.get = function() {return currentPath}\n\troute.prefix = \"#!\"\n\troute.Link = {\n\t\tview: function(vnode) {\n\t\t\t// Omit the used parameters from the rendered element - they are\n\t\t\t// internal. Also, censor the various lifecycle methods.\n\t\t\t//\n\t\t\t// We don't strip the other parameters because for convenience we\n\t\t\t// let them be specified in the selector as well.\n\t\t\tvar child = m(\n\t\t\t\tvnode.attrs.selector || \"a\",\n\t\t\t\tcensor(vnode.attrs, [\"options\", \"params\", \"selector\", \"onclick\"]),\n\t\t\t\tvnode.children\n\t\t\t)\n\t\t\tvar options, onclick, href\n\n\t\t\t// Let's provide a *right* way to disable a route link, rather than\n\t\t\t// letting people screw up accessibility on accident.\n\t\t\t//\n\t\t\t// The attribute is coerced so users don't get surprised over\n\t\t\t// `disabled: 0` resulting in a button that's somehow routable\n\t\t\t// despite being visibly disabled.\n\t\t\tif (child.attrs.disabled = Boolean(child.attrs.disabled)) {\n\t\t\t\tchild.attrs.href = null\n\t\t\t\tchild.attrs[\"aria-disabled\"] = \"true\"\n\t\t\t\t// If you *really* do want add `onclick` on a disabled link, use\n\t\t\t\t// an `oncreate` hook to add it.\n\t\t\t} else {\n\t\t\t\toptions = vnode.attrs.options\n\t\t\t\tonclick = vnode.attrs.onclick\n\t\t\t\t// Easier to build it now to keep it isomorphic.\n\t\t\t\thref = buildPathname(child.attrs.href, vnode.attrs.params)\n\t\t\t\tchild.attrs.href = route.prefix + href\n\t\t\t\tchild.attrs.onclick = function(e) {\n\t\t\t\t\tvar result\n\t\t\t\t\tif (typeof onclick === \"function\") {\n\t\t\t\t\t\tresult = onclick.call(e.currentTarget, e)\n\t\t\t\t\t} else if (onclick == null || typeof onclick !== \"object\") {\n\t\t\t\t\t\t// do nothing\n\t\t\t\t\t} else if (typeof onclick.handleEvent === \"function\") {\n\t\t\t\t\t\tonclick.handleEvent(e)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Adapted from React Router's implementation:\n\t\t\t\t\t// https://github.com/ReactTraining/react-router/blob/520a0acd48ae1b066eb0b07d6d4d1790a1d02482/packages/react-router-dom/modules/Link.js\n\t\t\t\t\t//\n\t\t\t\t\t// Try to be flexible and intuitive in how we handle links.\n\t\t\t\t\t// Fun fact: links aren't as obvious to get right as you\n\t\t\t\t\t// would expect. There's a lot more valid ways to click a\n\t\t\t\t\t// link than this, and one might want to not simply click a\n\t\t\t\t\t// link, but right click or command-click it to copy the\n\t\t\t\t\t// link target, etc. Nope, this isn't just for blind people.\n\t\t\t\t\tif (\n\t\t\t\t\t\t// Skip if `onclick` prevented default\n\t\t\t\t\t\tresult !== false && !e.defaultPrevented &&\n\t\t\t\t\t\t// Ignore everything but left clicks\n\t\t\t\t\t\t(e.button === 0 || e.which === 0 || e.which === 1) &&\n\t\t\t\t\t\t// Let the browser handle `target=_blank`, etc.\n\t\t\t\t\t\t(!e.currentTarget.target || e.currentTarget.target === \"_self\") &&\n\t\t\t\t\t\t// No modifier keys\n\t\t\t\t\t\t!e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey\n\t\t\t\t\t) {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\te.redraw = false\n\t\t\t\t\t\troute.set(href, null, options)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn child\n\t\t},\n\t}\n\troute.param = function(key) {\n\t\treturn attrs && key != null ? attrs[key] : attrs\n\t}\n\n\treturn route\n}\n","\"use strict\"\n\nvar hyperscript = require(\"./render/hyperscript\")\n\nhyperscript.trust = require(\"./render/trust\")\nhyperscript.fragment = require(\"./render/fragment\")\n\nmodule.exports = hyperscript\n","\"use strict\"\n\nvar hyperscript = require(\"./hyperscript\")\nvar request = require(\"./request\")\nvar mountRedraw = require(\"./mount-redraw\")\n\nvar m = function m() { return hyperscript.apply(this, arguments) }\nm.m = hyperscript\nm.trust = hyperscript.trust\nm.fragment = hyperscript.fragment\nm.Fragment = \"[\"\nm.mount = mountRedraw.mount\nm.route = require(\"./route\")\nm.render = require(\"./render\")\nm.redraw = mountRedraw.redraw\nm.request = request.request\nm.jsonp = request.jsonp\nm.parseQueryString = require(\"./querystring/parse\")\nm.buildQueryString = require(\"./querystring/build\")\nm.parsePathname = require(\"./pathname/parse\")\nm.buildPathname = require(\"./pathname/build\")\nm.vnode = require(\"./render/vnode\")\nm.PromisePolyfill = require(\"./promise/polyfill\")\nm.censor = require(\"./util/censor\")\n\nmodule.exports = m\n","\"use strict\"\n\nvar render = require(\"./render\")\n\nmodule.exports = require(\"./api/mount-redraw\")(render, typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : null, typeof console !== \"undefined\" ? console : null)\n","\"use strict\"\n\nvar buildQueryString = require(\"../querystring/build\")\nvar assign = require(\"../util/assign\")\n\n// Returns `path` from `template` + `params`\nmodule.exports = function(template, params) {\n\tif ((/:([^\\/\\.-]+)(\\.{3})?:/).test(template)) {\n\t\tthrow new SyntaxError(\"Template parameter names must be separated by either a '/', '-', or '.'.\")\n\t}\n\tif (params == null) return template\n\tvar queryIndex = template.indexOf(\"?\")\n\tvar hashIndex = template.indexOf(\"#\")\n\tvar queryEnd = hashIndex < 0 ? template.length : hashIndex\n\tvar pathEnd = queryIndex < 0 ? queryEnd : queryIndex\n\tvar path = template.slice(0, pathEnd)\n\tvar query = {}\n\n\tassign(query, params)\n\n\tvar resolved = path.replace(/:([^\\/\\.-]+)(\\.{3})?/g, function(m, key, variadic) {\n\t\tdelete query[key]\n\t\t// If no such parameter exists, don't interpolate it.\n\t\tif (params[key] == null) return m\n\t\t// Escape normal parameters, but not variadic ones.\n\t\treturn variadic ? params[key] : encodeURIComponent(String(params[key]))\n\t})\n\n\t// In case the template substitution adds new query/hash parameters.\n\tvar newQueryIndex = resolved.indexOf(\"?\")\n\tvar newHashIndex = resolved.indexOf(\"#\")\n\tvar newQueryEnd = newHashIndex < 0 ? resolved.length : newHashIndex\n\tvar newPathEnd = newQueryIndex < 0 ? newQueryEnd : newQueryIndex\n\tvar result = resolved.slice(0, newPathEnd)\n\n\tif (queryIndex >= 0) result += template.slice(queryIndex, queryEnd)\n\tif (newQueryIndex >= 0) result += (queryIndex < 0 ? \"?\" : \"&\") + resolved.slice(newQueryIndex, newQueryEnd)\n\tvar querystring = buildQueryString(query)\n\tif (querystring) result += (queryIndex < 0 && newQueryIndex < 0 ? \"?\" : \"&\") + querystring\n\tif (hashIndex >= 0) result += template.slice(hashIndex)\n\tif (newHashIndex >= 0) result += (hashIndex < 0 ? \"\" : \"&\") + resolved.slice(newHashIndex)\n\treturn result\n}\n","\"use strict\"\n\nvar parsePathname = require(\"./parse\")\n\n// Compiles a template into a function that takes a resolved path (without query\n// strings) and returns an object containing the template parameters with their\n// parsed values. This expects the input of the compiled template to be the\n// output of `parsePathname`. Note that it does *not* remove query parameters\n// specified in the template.\nmodule.exports = function(template) {\n\tvar templateData = parsePathname(template)\n\tvar templateKeys = Object.keys(templateData.params)\n\tvar keys = []\n\tvar regexp = new RegExp(\"^\" + templateData.path.replace(\n\t\t// I escape literal text so people can use things like `:file.:ext` or\n\t\t// `:lang-:locale` in routes. This is all merged into one pass so I\n\t\t// don't also accidentally escape `-` and make it harder to detect it to\n\t\t// ban it from template parameters.\n\t\t/:([^\\/.-]+)(\\.{3}|\\.(?!\\.)|-)?|[\\\\^$*+.()|\\[\\]{}]/g,\n\t\tfunction(m, key, extra) {\n\t\t\tif (key == null) return \"\\\\\" + m\n\t\t\tkeys.push({k: key, r: extra === \"...\"})\n\t\t\tif (extra === \"...\") return \"(.*)\"\n\t\t\tif (extra === \".\") return \"([^/]+)\\\\.\"\n\t\t\treturn \"([^/]+)\" + (extra || \"\")\n\t\t}\n\t) + \"$\")\n\treturn function(data) {\n\t\t// First, check the params. Usually, there isn't any, and it's just\n\t\t// checking a static set.\n\t\tfor (var i = 0; i < templateKeys.length; i++) {\n\t\t\tif (templateData.params[templateKeys[i]] !== data.params[templateKeys[i]]) return false\n\t\t}\n\t\t// If no interpolations exist, let's skip all the ceremony\n\t\tif (!keys.length) return regexp.test(data.path)\n\t\tvar values = regexp.exec(data.path)\n\t\tif (values == null) return false\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tdata.params[keys[i].k] = keys[i].r ? values[i + 1] : decodeURIComponent(values[i + 1])\n\t\t}\n\t\treturn true\n\t}\n}\n","\"use strict\"\n\nvar parseQueryString = require(\"../querystring/parse\")\n\n// Returns `{path, params}` from `url`\nmodule.exports = function(url) {\n\tvar queryIndex = url.indexOf(\"?\")\n\tvar hashIndex = url.indexOf(\"#\")\n\tvar queryEnd = hashIndex < 0 ? url.length : hashIndex\n\tvar pathEnd = queryIndex < 0 ? queryEnd : queryIndex\n\tvar path = url.slice(0, pathEnd).replace(/\\/{2,}/g, \"/\")\n\n\tif (!path) path = \"/\"\n\telse {\n\t\tif (path[0] !== \"/\") path = \"/\" + path\n\t\tif (path.length > 1 && path[path.length - 1] === \"/\") path = path.slice(0, -1)\n\t}\n\treturn {\n\t\tpath: path,\n\t\tparams: queryIndex < 0\n\t\t\t? {}\n\t\t\t: parseQueryString(url.slice(queryIndex + 1, queryEnd)),\n\t}\n}\n","\"use strict\"\n/** @constructor */\nvar PromisePolyfill = function(executor) {\n\tif (!(this instanceof PromisePolyfill)) throw new Error(\"Promise must be called with 'new'.\")\n\tif (typeof executor !== \"function\") throw new TypeError(\"executor must be a function.\")\n\n\tvar self = this, resolvers = [], rejectors = [], resolveCurrent = handler(resolvers, true), rejectCurrent = handler(rejectors, false)\n\tvar instance = self._instance = {resolvers: resolvers, rejectors: rejectors}\n\tvar callAsync = typeof setImmediate === \"function\" ? setImmediate : setTimeout\n\tfunction handler(list, shouldAbsorb) {\n\t\treturn function execute(value) {\n\t\t\tvar then\n\t\t\ttry {\n\t\t\t\tif (shouldAbsorb && value != null && (typeof value === \"object\" || typeof value === \"function\") && typeof (then = value.then) === \"function\") {\n\t\t\t\t\tif (value === self) throw new TypeError(\"Promise can't be resolved with itself.\")\n\t\t\t\t\texecuteOnce(then.bind(value))\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcallAsync(function() {\n\t\t\t\t\t\tif (!shouldAbsorb && list.length === 0) console.error(\"Possible unhandled promise rejection:\", value)\n\t\t\t\t\t\tfor (var i = 0; i < list.length; i++) list[i](value)\n\t\t\t\t\t\tresolvers.length = 0, rejectors.length = 0\n\t\t\t\t\t\tinstance.state = shouldAbsorb\n\t\t\t\t\t\tinstance.retry = function() {execute(value)}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\trejectCurrent(e)\n\t\t\t}\n\t\t}\n\t}\n\tfunction executeOnce(then) {\n\t\tvar runs = 0\n\t\tfunction run(fn) {\n\t\t\treturn function(value) {\n\t\t\t\tif (runs++ > 0) return\n\t\t\t\tfn(value)\n\t\t\t}\n\t\t}\n\t\tvar onerror = run(rejectCurrent)\n\t\ttry {then(run(resolveCurrent), onerror)} catch (e) {onerror(e)}\n\t}\n\n\texecuteOnce(executor)\n}\nPromisePolyfill.prototype.then = function(onFulfilled, onRejection) {\n\tvar self = this, instance = self._instance\n\tfunction handle(callback, list, next, state) {\n\t\tlist.push(function(value) {\n\t\t\tif (typeof callback !== \"function\") next(value)\n\t\t\telse try {resolveNext(callback(value))} catch (e) {if (rejectNext) rejectNext(e)}\n\t\t})\n\t\tif (typeof instance.retry === \"function\" && state === instance.state) instance.retry()\n\t}\n\tvar resolveNext, rejectNext\n\tvar promise = new PromisePolyfill(function(resolve, reject) {resolveNext = resolve, rejectNext = reject})\n\thandle(onFulfilled, instance.resolvers, resolveNext, true), handle(onRejection, instance.rejectors, rejectNext, false)\n\treturn promise\n}\nPromisePolyfill.prototype.catch = function(onRejection) {\n\treturn this.then(null, onRejection)\n}\nPromisePolyfill.prototype.finally = function(callback) {\n\treturn this.then(\n\t\tfunction(value) {\n\t\t\treturn PromisePolyfill.resolve(callback()).then(function() {\n\t\t\t\treturn value\n\t\t\t})\n\t\t},\n\t\tfunction(reason) {\n\t\t\treturn PromisePolyfill.resolve(callback()).then(function() {\n\t\t\t\treturn PromisePolyfill.reject(reason);\n\t\t\t})\n\t\t}\n\t)\n}\nPromisePolyfill.resolve = function(value) {\n\tif (value instanceof PromisePolyfill) return value\n\treturn new PromisePolyfill(function(resolve) {resolve(value)})\n}\nPromisePolyfill.reject = function(value) {\n\treturn new PromisePolyfill(function(resolve, reject) {reject(value)})\n}\nPromisePolyfill.all = function(list) {\n\treturn new PromisePolyfill(function(resolve, reject) {\n\t\tvar total = list.length, count = 0, values = []\n\t\tif (list.length === 0) resolve([])\n\t\telse for (var i = 0; i < list.length; i++) {\n\t\t\t(function(i) {\n\t\t\t\tfunction consume(value) {\n\t\t\t\t\tcount++\n\t\t\t\t\tvalues[i] = value\n\t\t\t\t\tif (count === total) resolve(values)\n\t\t\t\t}\n\t\t\t\tif (list[i] != null && (typeof list[i] === \"object\" || typeof list[i] === \"function\") && typeof list[i].then === \"function\") {\n\t\t\t\t\tlist[i].then(consume, reject)\n\t\t\t\t}\n\t\t\t\telse consume(list[i])\n\t\t\t})(i)\n\t\t}\n\t})\n}\nPromisePolyfill.race = function(list) {\n\treturn new PromisePolyfill(function(resolve, reject) {\n\t\tfor (var i = 0; i < list.length; i++) {\n\t\t\tlist[i].then(resolve, reject)\n\t\t}\n\t})\n}\n\nmodule.exports = PromisePolyfill\n","/* global window */\n\"use strict\"\n\nvar PromisePolyfill = require(\"./polyfill\")\n\nif (typeof window !== \"undefined\") {\n\tif (typeof window.Promise === \"undefined\") {\n\t\twindow.Promise = PromisePolyfill\n\t} else if (!window.Promise.prototype.finally) {\n\t\twindow.Promise.prototype.finally = PromisePolyfill.prototype.finally\n\t}\n\tmodule.exports = window.Promise\n} else if (typeof global !== \"undefined\") {\n\tif (typeof global.Promise === \"undefined\") {\n\t\tglobal.Promise = PromisePolyfill\n\t} else if (!global.Promise.prototype.finally) {\n\t\tglobal.Promise.prototype.finally = PromisePolyfill.prototype.finally\n\t}\n\tmodule.exports = global.Promise\n} else {\n\tmodule.exports = PromisePolyfill\n}\n","\"use strict\"\n\nmodule.exports = function(object) {\n\tif (Object.prototype.toString.call(object) !== \"[object Object]\") return \"\"\n\n\tvar args = []\n\tfor (var key in object) {\n\t\tdestructure(key, object[key])\n\t}\n\n\treturn args.join(\"&\")\n\n\tfunction destructure(key, value) {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (var i = 0; i < value.length; i++) {\n\t\t\t\tdestructure(key + \"[\" + i + \"]\", value[i])\n\t\t\t}\n\t\t}\n\t\telse if (Object.prototype.toString.call(value) === \"[object Object]\") {\n\t\t\tfor (var i in value) {\n\t\t\t\tdestructure(key + \"[\" + i + \"]\", value[i])\n\t\t\t}\n\t\t}\n\t\telse args.push(encodeURIComponent(key) + (value != null && value !== \"\" ? \"=\" + encodeURIComponent(value) : \"\"))\n\t}\n}\n","\"use strict\"\n\nfunction decodeURIComponentSave(str) {\n\ttry {\n\t\treturn decodeURIComponent(str)\n\t} catch(err) {\n\t\treturn str\n\t}\n}\n\nmodule.exports = function(string) {\n\tif (string === \"\" || string == null) return {}\n\tif (string.charAt(0) === \"?\") string = string.slice(1)\n\n\tvar entries = string.split(\"&\"), counters = {}, data = {}\n\tfor (var i = 0; i < entries.length; i++) {\n\t\tvar entry = entries[i].split(\"=\")\n\t\tvar key = decodeURIComponentSave(entry[0])\n\t\tvar value = entry.length === 2 ? decodeURIComponentSave(entry[1]) : \"\"\n\n\t\tif (value === \"true\") value = true\n\t\telse if (value === \"false\") value = false\n\n\t\tvar levels = key.split(/\\]\\[?|\\[/)\n\t\tvar cursor = data\n\t\tif (key.indexOf(\"[\") > -1) levels.pop()\n\t\tfor (var j = 0; j < levels.length; j++) {\n\t\t\tvar level = levels[j], nextLevel = levels[j + 1]\n\t\t\tvar isNumber = nextLevel == \"\" || !isNaN(parseInt(nextLevel, 10))\n\t\t\tif (level === \"\") {\n\t\t\t\tvar key = levels.slice(0, j).join()\n\t\t\t\tif (counters[key] == null) {\n\t\t\t\t\tcounters[key] = Array.isArray(cursor) ? cursor.length : 0\n\t\t\t\t}\n\t\t\t\tlevel = counters[key]++\n\t\t\t}\n\t\t\t// Disallow direct prototype pollution\n\t\t\telse if (level === \"__proto__\") break\n\t\t\tif (j === levels.length - 1) cursor[level] = value\n\t\t\telse {\n\t\t\t\t// Read own properties exclusively to disallow indirect\n\t\t\t\t// prototype pollution\n\t\t\t\tvar desc = Object.getOwnPropertyDescriptor(cursor, level)\n\t\t\t\tif (desc != null) desc = desc.value\n\t\t\t\tif (desc == null) cursor[level] = desc = isNumber ? [] : {}\n\t\t\t\tcursor = desc\n\t\t\t}\n\t\t}\n\t}\n\treturn data\n}\n","\"use strict\"\n\nmodule.exports = require(\"./render/render\")(typeof window !== \"undefined\" ? window : null)\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar hyperscriptVnode = require(\"./hyperscriptVnode\")\n\nmodule.exports = function() {\n\tvar vnode = hyperscriptVnode.apply(0, arguments)\n\n\tvnode.tag = \"[\"\n\tvnode.children = Vnode.normalizeChildren(vnode.children)\n\treturn vnode\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar hyperscriptVnode = require(\"./hyperscriptVnode\")\nvar hasOwn = require(\"../util/hasOwn\")\n\nvar selectorParser = /(?:(^|#|\\.)([^#\\.\\[\\]]+))|(\\[(.+?)(?:\\s*=\\s*(\"|'|)((?:\\\\[\"'\\]]|.)*?)\\5)?\\])/g\nvar selectorCache = {}\n\nfunction isEmpty(object) {\n\tfor (var key in object) if (hasOwn.call(object, key)) return false\n\treturn true\n}\n\nfunction compileSelector(selector) {\n\tvar match, tag = \"div\", classes = [], attrs = {}\n\twhile (match = selectorParser.exec(selector)) {\n\t\tvar type = match[1], value = match[2]\n\t\tif (type === \"\" && value !== \"\") tag = value\n\t\telse if (type === \"#\") attrs.id = value\n\t\telse if (type === \".\") classes.push(value)\n\t\telse if (match[3][0] === \"[\") {\n\t\t\tvar attrValue = match[6]\n\t\t\tif (attrValue) attrValue = attrValue.replace(/\\\\([\"'])/g, \"$1\").replace(/\\\\\\\\/g, \"\\\\\")\n\t\t\tif (match[4] === \"class\") classes.push(attrValue)\n\t\t\telse attrs[match[4]] = attrValue === \"\" ? attrValue : attrValue || true\n\t\t}\n\t}\n\tif (classes.length > 0) attrs.className = classes.join(\" \")\n\treturn selectorCache[selector] = {tag: tag, attrs: attrs}\n}\n\nfunction execSelector(state, vnode) {\n\tvar attrs = vnode.attrs\n\tvar hasClass = hasOwn.call(attrs, \"class\")\n\tvar className = hasClass ? attrs.class : attrs.className\n\n\tvnode.tag = state.tag\n\tvnode.attrs = {}\n\n\tif (!isEmpty(state.attrs) && !isEmpty(attrs)) {\n\t\tvar newAttrs = {}\n\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key)) newAttrs[key] = attrs[key]\n\t\t}\n\n\t\tattrs = newAttrs\n\t}\n\n\tfor (var key in state.attrs) {\n\t\tif (hasOwn.call(state.attrs, key) && key !== \"className\" && !hasOwn.call(attrs, key)){\n\t\t\tattrs[key] = state.attrs[key]\n\t\t}\n\t}\n\tif (className != null || state.attrs.className != null) attrs.className =\n\t\tclassName != null\n\t\t\t? state.attrs.className != null\n\t\t\t\t? String(state.attrs.className) + \" \" + String(className)\n\t\t\t\t: className\n\t\t\t: state.attrs.className != null\n\t\t\t\t? state.attrs.className\n\t\t\t\t: null\n\n\tif (hasClass) attrs.class = null\n\n\tfor (var key in attrs) {\n\t\tif (hasOwn.call(attrs, key) && key !== \"key\") {\n\t\t\tvnode.attrs = attrs\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn vnode\n}\n\nfunction hyperscript(selector) {\n\tif (selector == null || typeof selector !== \"string\" && typeof selector !== \"function\" && typeof selector.view !== \"function\") {\n\t\tthrow Error(\"The selector must be either a string or a component.\");\n\t}\n\n\tvar vnode = hyperscriptVnode.apply(1, arguments)\n\n\tif (typeof selector === \"string\") {\n\t\tvnode.children = Vnode.normalizeChildren(vnode.children)\n\t\tif (selector !== \"[\") return execSelector(selectorCache[selector] || compileSelector(selector), vnode)\n\t}\n\n\tvnode.tag = selector\n\treturn vnode\n}\n\nmodule.exports = hyperscript\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\n// Call via `hyperscriptVnode.apply(startOffset, arguments)`\n//\n// The reason I do it this way, forwarding the arguments and passing the start\n// offset in `this`, is so I don't have to create a temporary array in a\n// performance-critical path.\n//\n// In native ES6, I'd instead add a final `...args` parameter to the\n// `hyperscript` and `fragment` factories and define this as\n// `hyperscriptVnode(...args)`, since modern engines do optimize that away. But\n// ES5 (what Mithril.js requires thanks to IE support) doesn't give me that luxury,\n// and engines aren't nearly intelligent enough to do either of these:\n//\n// 1. Elide the allocation for `[].slice.call(arguments, 1)` when it's passed to\n// another function only to be indexed.\n// 2. Elide an `arguments` allocation when it's passed to any function other\n// than `Function.prototype.apply` or `Reflect.apply`.\n//\n// In ES6, it'd probably look closer to this (I'd need to profile it, though):\n// module.exports = function(attrs, ...children) {\n// if (attrs == null || typeof attrs === \"object\" && attrs.tag == null && !Array.isArray(attrs)) {\n// if (children.length === 1 && Array.isArray(children[0])) children = children[0]\n// } else {\n// children = children.length === 0 && Array.isArray(attrs) ? attrs : [attrs, ...children]\n// attrs = undefined\n// }\n//\n// if (attrs == null) attrs = {}\n// return Vnode(\"\", attrs.key, attrs, children)\n// }\nmodule.exports = function() {\n\tvar attrs = arguments[this], start = this + 1, children\n\n\tif (attrs == null) {\n\t\tattrs = {}\n\t} else if (typeof attrs !== \"object\" || attrs.tag != null || Array.isArray(attrs)) {\n\t\tattrs = {}\n\t\tstart = this\n\t}\n\n\tif (arguments.length === start + 1) {\n\t\tchildren = arguments[start]\n\t\tif (!Array.isArray(children)) children = [children]\n\t} else {\n\t\tchildren = []\n\t\twhile (start < arguments.length) children.push(arguments[start++])\n\t}\n\n\treturn Vnode(\"\", attrs.key, attrs, children)\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function($window) {\n\tvar $doc = $window && $window.document\n\tvar currentRedraw\n\n\tvar nameSpace = {\n\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\tmath: \"http://www.w3.org/1998/Math/MathML\"\n\t}\n\n\tfunction getNameSpace(vnode) {\n\t\treturn vnode.attrs && vnode.attrs.xmlns || nameSpace[vnode.tag]\n\t}\n\n\t//sanity check to discourage people from doing `vnode.state = ...`\n\tfunction checkState(vnode, original) {\n\t\tif (vnode.state !== original) throw new Error(\"'vnode.state' must not be modified.\")\n\t}\n\n\t//Note: the hook is passed as the `this` argument to allow proxying the\n\t//arguments without requiring a full array allocation to do so. It also\n\t//takes advantage of the fact the current `vnode` is the first argument in\n\t//all lifecycle methods.\n\tfunction callHook(vnode) {\n\t\tvar original = vnode.state\n\t\ttry {\n\t\t\treturn this.apply(original, arguments)\n\t\t} finally {\n\t\t\tcheckState(vnode, original)\n\t\t}\n\t}\n\n\t// IE11 (at least) throws an UnspecifiedError when accessing document.activeElement when\n\t// inside an iframe. Catch and swallow this error, and heavy-handidly return null.\n\tfunction activeElement() {\n\t\ttry {\n\t\t\treturn $doc.activeElement\n\t\t} catch (e) {\n\t\t\treturn null\n\t\t}\n\t}\n\t//create\n\tfunction createNodes(parent, vnodes, start, end, hooks, nextSibling, ns) {\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tvar vnode = vnodes[i]\n\t\t\tif (vnode != null) {\n\t\t\t\tcreateNode(parent, vnode, hooks, ns, nextSibling)\n\t\t\t}\n\t\t}\n\t}\n\tfunction createNode(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar tag = vnode.tag\n\t\tif (typeof tag === \"string\") {\n\t\t\tvnode.state = {}\n\t\t\tif (vnode.attrs != null) initLifecycle(vnode.attrs, vnode, hooks)\n\t\t\tswitch (tag) {\n\t\t\t\tcase \"#\": createText(parent, vnode, nextSibling); break\n\t\t\t\tcase \"<\": createHTML(parent, vnode, ns, nextSibling); break\n\t\t\t\tcase \"[\": createFragment(parent, vnode, hooks, ns, nextSibling); break\n\t\t\t\tdefault: createElement(parent, vnode, hooks, ns, nextSibling)\n\t\t\t}\n\t\t}\n\t\telse createComponent(parent, vnode, hooks, ns, nextSibling)\n\t}\n\tfunction createText(parent, vnode, nextSibling) {\n\t\tvnode.dom = $doc.createTextNode(vnode.children)\n\t\tinsertNode(parent, vnode.dom, nextSibling)\n\t}\n\tvar possibleParents = {caption: \"table\", thead: \"table\", tbody: \"table\", tfoot: \"table\", tr: \"tbody\", th: \"tr\", td: \"tr\", colgroup: \"table\", col: \"colgroup\"}\n\tfunction createHTML(parent, vnode, ns, nextSibling) {\n\t\tvar match = vnode.children.match(/^\\s*?<(\\w+)/im) || []\n\t\t// not using the proper parent makes the child element(s) vanish.\n\t\t// var div = document.createElement(\"div\")\n\t\t// div.innerHTML = \"<td>i</td><td>j</td>\"\n\t\t// console.log(div.innerHTML)\n\t\t// --> \"ij\", no <td> in sight.\n\t\tvar temp = $doc.createElement(possibleParents[match[1]] || \"div\")\n\t\tif (ns === \"http://www.w3.org/2000/svg\") {\n\t\t\ttemp.innerHTML = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\">\" + vnode.children + \"</svg>\"\n\t\t\ttemp = temp.firstChild\n\t\t} else {\n\t\t\ttemp.innerHTML = vnode.children\n\t\t}\n\t\tvnode.dom = temp.firstChild\n\t\tvnode.domSize = temp.childNodes.length\n\t\t// Capture nodes to remove, so we don't confuse them.\n\t\tvnode.instance = []\n\t\tvar fragment = $doc.createDocumentFragment()\n\t\tvar child\n\t\twhile (child = temp.firstChild) {\n\t\t\tvnode.instance.push(child)\n\t\t\tfragment.appendChild(child)\n\t\t}\n\t\tinsertNode(parent, fragment, nextSibling)\n\t}\n\tfunction createFragment(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar fragment = $doc.createDocumentFragment()\n\t\tif (vnode.children != null) {\n\t\t\tvar children = vnode.children\n\t\t\tcreateNodes(fragment, children, 0, children.length, hooks, null, ns)\n\t\t}\n\t\tvnode.dom = fragment.firstChild\n\t\tvnode.domSize = fragment.childNodes.length\n\t\tinsertNode(parent, fragment, nextSibling)\n\t}\n\tfunction createElement(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar tag = vnode.tag\n\t\tvar attrs = vnode.attrs\n\t\tvar is = attrs && attrs.is\n\n\t\tns = getNameSpace(vnode) || ns\n\n\t\tvar element = ns ?\n\t\t\tis ? $doc.createElementNS(ns, tag, {is: is}) : $doc.createElementNS(ns, tag) :\n\t\t\tis ? $doc.createElement(tag, {is: is}) : $doc.createElement(tag)\n\t\tvnode.dom = element\n\n\t\tif (attrs != null) {\n\t\t\tsetAttrs(vnode, attrs, ns)\n\t\t}\n\n\t\tinsertNode(parent, element, nextSibling)\n\n\t\tif (!maybeSetContentEditable(vnode)) {\n\t\t\tif (vnode.children != null) {\n\t\t\t\tvar children = vnode.children\n\t\t\t\tcreateNodes(element, children, 0, children.length, hooks, null, ns)\n\t\t\t\tif (vnode.tag === \"select\" && attrs != null) setLateSelectAttrs(vnode, attrs)\n\t\t\t}\n\t\t}\n\t}\n\tfunction initComponent(vnode, hooks) {\n\t\tvar sentinel\n\t\tif (typeof vnode.tag.view === \"function\") {\n\t\t\tvnode.state = Object.create(vnode.tag)\n\t\t\tsentinel = vnode.state.view\n\t\t\tif (sentinel.$$reentrantLock$$ != null) return\n\t\t\tsentinel.$$reentrantLock$$ = true\n\t\t} else {\n\t\t\tvnode.state = void 0\n\t\t\tsentinel = vnode.tag\n\t\t\tif (sentinel.$$reentrantLock$$ != null) return\n\t\t\tsentinel.$$reentrantLock$$ = true\n\t\t\tvnode.state = (vnode.tag.prototype != null && typeof vnode.tag.prototype.view === \"function\") ? new vnode.tag(vnode) : vnode.tag(vnode)\n\t\t}\n\t\tinitLifecycle(vnode.state, vnode, hooks)\n\t\tif (vnode.attrs != null) initLifecycle(vnode.attrs, vnode, hooks)\n\t\tvnode.instance = Vnode.normalize(callHook.call(vnode.state.view, vnode))\n\t\tif (vnode.instance === vnode) throw Error(\"A view cannot return the vnode it received as argument\")\n\t\tsentinel.$$reentrantLock$$ = null\n\t}\n\tfunction createComponent(parent, vnode, hooks, ns, nextSibling) {\n\t\tinitComponent(vnode, hooks)\n\t\tif (vnode.instance != null) {\n\t\t\tcreateNode(parent, vnode.instance, hooks, ns, nextSibling)\n\t\t\tvnode.dom = vnode.instance.dom\n\t\t\tvnode.domSize = vnode.dom != null ? vnode.instance.domSize : 0\n\t\t}\n\t\telse {\n\t\t\tvnode.domSize = 0\n\t\t}\n\t}\n\n\t//update\n\t/**\n\t * @param {Element|Fragment} parent - the parent element\n\t * @param {Vnode[] | null} old - the list of vnodes of the last `render()` call for\n\t * this part of the tree\n\t * @param {Vnode[] | null} vnodes - as above, but for the current `render()` call.\n\t * @param {Function[]} hooks - an accumulator of post-render hooks (oncreate/onupdate)\n\t * @param {Element | null} nextSibling - the next DOM node if we're dealing with a\n\t * fragment that is not the last item in its\n\t * parent\n\t * @param {'svg' | 'math' | String | null} ns) - the current XML namespace, if any\n\t * @returns void\n\t */\n\t// This function diffs and patches lists of vnodes, both keyed and unkeyed.\n\t//\n\t// We will:\n\t//\n\t// 1. describe its general structure\n\t// 2. focus on the diff algorithm optimizations\n\t// 3. discuss DOM node operations.\n\n\t// ## Overview:\n\t//\n\t// The updateNodes() function:\n\t// - deals with trivial cases\n\t// - determines whether the lists are keyed or unkeyed based on the first non-null node\n\t// of each list.\n\t// - diffs them and patches the DOM if needed (that's the brunt of the code)\n\t// - manages the leftovers: after diffing, are there:\n\t// - old nodes left to remove?\n\t// \t - new nodes to insert?\n\t// \t deal with them!\n\t//\n\t// The lists are only iterated over once, with an exception for the nodes in `old` that\n\t// are visited in the fourth part of the diff and in the `removeNodes` loop.\n\n\t// ## Diffing\n\t//\n\t// Reading https://github.com/localvoid/ivi/blob/ddc09d06abaef45248e6133f7040d00d3c6be853/packages/ivi/src/vdom/implementation.ts#L617-L837\n\t// may be good for context on longest increasing subsequence-based logic for moving nodes.\n\t//\n\t// In order to diff keyed lists, one has to\n\t//\n\t// 1) match nodes in both lists, per key, and update them accordingly\n\t// 2) create the nodes present in the new list, but absent in the old one\n\t// 3) remove the nodes present in the old list, but absent in the new one\n\t// 4) figure out what nodes in 1) to move in order to minimize the DOM operations.\n\t//\n\t// To achieve 1) one can create a dictionary of keys => index (for the old list), then iterate\n\t// over the new list and for each new vnode, find the corresponding vnode in the old list using\n\t// the map.\n\t// 2) is achieved in the same step: if a new node has no corresponding entry in the map, it is new\n\t// and must be created.\n\t// For the removals, we actually remove the nodes that have been updated from the old list.\n\t// The nodes that remain in that list after 1) and 2) have been performed can be safely removed.\n\t// The fourth step is a bit more complex and relies on the longest increasing subsequence (LIS)\n\t// algorithm.\n\t//\n\t// the longest increasing subsequence is the list of nodes that can remain in place. Imagine going\n\t// from `1,2,3,4,5` to `4,5,1,2,3` where the numbers are not necessarily the keys, but the indices\n\t// corresponding to the keyed nodes in the old list (keyed nodes `e,d,c,b,a` => `b,a,e,d,c` would\n\t// match the above lists, for example).\n\t//\n\t// In there are two increasing subsequences: `4,5` and `1,2,3`, the latter being the longest. We\n\t// can update those nodes without moving them, and only call `insertNode` on `4` and `5`.\n\t//\n\t// @localvoid adapted the algo to also support node deletions and insertions (the `lis` is actually\n\t// the longest increasing subsequence *of old nodes still present in the new list*).\n\t//\n\t// It is a general algorithm that is fireproof in all circumstances, but it requires the allocation\n\t// and the construction of a `key => oldIndex` map, and three arrays (one with `newIndex => oldIndex`,\n\t// the `LIS` and a temporary one to create the LIS).\n\t//\n\t// So we cheat where we can: if the tails of the lists are identical, they are guaranteed to be part of\n\t// the LIS and can be updated without moving them.\n\t//\n\t// If two nodes are swapped, they are guaranteed not to be part of the LIS, and must be moved (with\n\t// the exception of the last node if the list is fully reversed).\n\t//\n\t// ## Finding the next sibling.\n\t//\n\t// `updateNode()` and `createNode()` expect a nextSibling parameter to perform DOM operations.\n\t// When the list is being traversed top-down, at any index, the DOM nodes up to the previous\n\t// vnode reflect the content of the new list, whereas the rest of the DOM nodes reflect the old\n\t// list. The next sibling must be looked for in the old list using `getNextSibling(... oldStart + 1 ...)`.\n\t//\n\t// In the other scenarios (swaps, upwards traversal, map-based diff),\n\t// the new vnodes list is traversed upwards. The DOM nodes at the bottom of the list reflect the\n\t// bottom part of the new vnodes list, and we can use the `v.dom` value of the previous node\n\t// as the next sibling (cached in the `nextSibling` variable).\n\n\n\t// ## DOM node moves\n\t//\n\t// In most scenarios `updateNode()` and `createNode()` perform the DOM operations. However,\n\t// this is not the case if the node moved (second and fourth part of the diff algo). We move\n\t// the old DOM nodes before updateNode runs because it enables us to use the cached `nextSibling`\n\t// variable rather than fetching it using `getNextSibling()`.\n\t//\n\t// The fourth part of the diff currently inserts nodes unconditionally, leading to issues\n\t// like #1791 and #1999. We need to be smarter about those situations where adjascent old\n\t// nodes remain together in the new list in a way that isn't covered by parts one and\n\t// three of the diff algo.\n\n\tfunction updateNodes(parent, old, vnodes, hooks, nextSibling, ns) {\n\t\tif (old === vnodes || old == null && vnodes == null) return\n\t\telse if (old == null || old.length === 0) createNodes(parent, vnodes, 0, vnodes.length, hooks, nextSibling, ns)\n\t\telse if (vnodes == null || vnodes.length === 0) removeNodes(parent, old, 0, old.length)\n\t\telse {\n\t\t\tvar isOldKeyed = old[0] != null && old[0].key != null\n\t\t\tvar isKeyed = vnodes[0] != null && vnodes[0].key != null\n\t\t\tvar start = 0, oldStart = 0\n\t\t\tif (!isOldKeyed) while (oldStart < old.length && old[oldStart] == null) oldStart++\n\t\t\tif (!isKeyed) while (start < vnodes.length && vnodes[start] == null) start++\n\t\t\tif (isOldKeyed !== isKeyed) {\n\t\t\t\tremoveNodes(parent, old, oldStart, old.length)\n\t\t\t\tcreateNodes(parent, vnodes, start, vnodes.length, hooks, nextSibling, ns)\n\t\t\t} else if (!isKeyed) {\n\t\t\t\t// Don't index past the end of either list (causes deopts).\n\t\t\t\tvar commonLength = old.length < vnodes.length ? old.length : vnodes.length\n\t\t\t\t// Rewind if necessary to the first non-null index on either side.\n\t\t\t\t// We could alternatively either explicitly create or remove nodes when `start !== oldStart`\n\t\t\t\t// but that would be optimizing for sparse lists which are more rare than dense ones.\n\t\t\t\tstart = start < oldStart ? start : oldStart\n\t\t\t\tfor (; start < commonLength; start++) {\n\t\t\t\t\to = old[start]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t\tif (o === v || o == null && v == null) continue\n\t\t\t\t\telse if (o == null) createNode(parent, v, hooks, ns, getNextSibling(old, start + 1, nextSibling))\n\t\t\t\t\telse if (v == null) removeNode(parent, o)\n\t\t\t\t\telse updateNode(parent, o, v, hooks, getNextSibling(old, start + 1, nextSibling), ns)\n\t\t\t\t}\n\t\t\t\tif (old.length > commonLength) removeNodes(parent, old, start, old.length)\n\t\t\t\tif (vnodes.length > commonLength) createNodes(parent, vnodes, start, vnodes.length, hooks, nextSibling, ns)\n\t\t\t} else {\n\t\t\t\t// keyed diff\n\t\t\t\tvar oldEnd = old.length - 1, end = vnodes.length - 1, map, o, v, oe, ve, topSibling\n\n\t\t\t\t// bottom-up\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t\tif (oe.key !== ve.key) break\n\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldEnd--, end--\n\t\t\t\t}\n\t\t\t\t// top-down\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\to = old[oldStart]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t\tif (o.key !== v.key) break\n\t\t\t\t\toldStart++, start++\n\t\t\t\t\tif (o !== v) updateNode(parent, o, v, hooks, getNextSibling(old, oldStart, nextSibling), ns)\n\t\t\t\t}\n\t\t\t\t// swaps and list reversals\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\tif (start === end) break\n\t\t\t\t\tif (o.key !== ve.key || oe.key !== v.key) break\n\t\t\t\t\ttopSibling = getNextSibling(old, oldStart, nextSibling)\n\t\t\t\t\tmoveNodes(parent, oe, topSibling)\n\t\t\t\t\tif (oe !== v) updateNode(parent, oe, v, hooks, topSibling, ns)\n\t\t\t\t\tif (++start <= --end) moveNodes(parent, o, nextSibling)\n\t\t\t\t\tif (o !== ve) updateNode(parent, o, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldStart++; oldEnd--\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t\to = old[oldStart]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t}\n\t\t\t\t// bottom up once again\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\tif (oe.key !== ve.key) break\n\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldEnd--, end--\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t}\n\t\t\t\tif (start > end) removeNodes(parent, old, oldStart, oldEnd + 1)\n\t\t\t\telse if (oldStart > oldEnd) createNodes(parent, vnodes, start, end + 1, hooks, nextSibling, ns)\n\t\t\t\telse {\n\t\t\t\t\t// inspired by ivi https://github.com/ivijs/ivi/ by Boris Kaul\n\t\t\t\t\tvar originalNextSibling = nextSibling, vnodesLength = end - start + 1, oldIndices = new Array(vnodesLength), li=0, i=0, pos = 2147483647, matched = 0, map, lisIndices\n\t\t\t\t\tfor (i = 0; i < vnodesLength; i++) oldIndices[i] = -1\n\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\tif (map == null) map = getKeyMap(old, oldStart, oldEnd + 1)\n\t\t\t\t\t\tve = vnodes[i]\n\t\t\t\t\t\tvar oldIndex = map[ve.key]\n\t\t\t\t\t\tif (oldIndex != null) {\n\t\t\t\t\t\t\tpos = (oldIndex < pos) ? oldIndex : -1 // becomes -1 if nodes were re-ordered\n\t\t\t\t\t\t\toldIndices[i-start] = oldIndex\n\t\t\t\t\t\t\toe = old[oldIndex]\n\t\t\t\t\t\t\told[oldIndex] = null\n\t\t\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\t\t\tmatched++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnextSibling = originalNextSibling\n\t\t\t\t\tif (matched !== oldEnd - oldStart + 1) removeNodes(parent, old, oldStart, oldEnd + 1)\n\t\t\t\t\tif (matched === 0) createNodes(parent, vnodes, start, end + 1, hooks, nextSibling, ns)\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (pos === -1) {\n\t\t\t\t\t\t\t// the indices of the indices of the items that are part of the\n\t\t\t\t\t\t\t// longest increasing subsequence in the oldIndices list\n\t\t\t\t\t\t\tlisIndices = makeLisIndices(oldIndices)\n\t\t\t\t\t\t\tli = lisIndices.length - 1\n\t\t\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\t\t\tv = vnodes[i]\n\t\t\t\t\t\t\t\tif (oldIndices[i-start] === -1) createNode(parent, v, hooks, ns, nextSibling)\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (lisIndices[li] === i - start) li--\n\t\t\t\t\t\t\t\t\telse moveNodes(parent, v, nextSibling)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (v.dom != null) nextSibling = vnodes[i].dom\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\t\t\tv = vnodes[i]\n\t\t\t\t\t\t\t\tif (oldIndices[i-start] === -1) createNode(parent, v, hooks, ns, nextSibling)\n\t\t\t\t\t\t\t\tif (v.dom != null) nextSibling = vnodes[i].dom\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfunction updateNode(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tvar oldTag = old.tag, tag = vnode.tag\n\t\tif (oldTag === tag) {\n\t\t\tvnode.state = old.state\n\t\t\tvnode.events = old.events\n\t\t\tif (shouldNotUpdate(vnode, old)) return\n\t\t\tif (typeof oldTag === \"string\") {\n\t\t\t\tif (vnode.attrs != null) {\n\t\t\t\t\tupdateLifecycle(vnode.attrs, vnode, hooks)\n\t\t\t\t}\n\t\t\t\tswitch (oldTag) {\n\t\t\t\t\tcase \"#\": updateText(old, vnode); break\n\t\t\t\t\tcase \"<\": updateHTML(parent, old, vnode, ns, nextSibling); break\n\t\t\t\t\tcase \"[\": updateFragment(parent, old, vnode, hooks, nextSibling, ns); break\n\t\t\t\t\tdefault: updateElement(old, vnode, hooks, ns)\n\t\t\t\t}\n\t\t\t}\n\t\t\telse updateComponent(parent, old, vnode, hooks, nextSibling, ns)\n\t\t}\n\t\telse {\n\t\t\tremoveNode(parent, old)\n\t\t\tcreateNode(parent, vnode, hooks, ns, nextSibling)\n\t\t}\n\t}\n\tfunction updateText(old, vnode) {\n\t\tif (old.children.toString() !== vnode.children.toString()) {\n\t\t\told.dom.nodeValue = vnode.children\n\t\t}\n\t\tvnode.dom = old.dom\n\t}\n\tfunction updateHTML(parent, old, vnode, ns, nextSibling) {\n\t\tif (old.children !== vnode.children) {\n\t\t\tremoveHTML(parent, old)\n\t\t\tcreateHTML(parent, vnode, ns, nextSibling)\n\t\t}\n\t\telse {\n\t\t\tvnode.dom = old.dom\n\t\t\tvnode.domSize = old.domSize\n\t\t\tvnode.instance = old.instance\n\t\t}\n\t}\n\tfunction updateFragment(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tupdateNodes(parent, old.children, vnode.children, hooks, nextSibling, ns)\n\t\tvar domSize = 0, children = vnode.children\n\t\tvnode.dom = null\n\t\tif (children != null) {\n\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\tvar child = children[i]\n\t\t\t\tif (child != null && child.dom != null) {\n\t\t\t\t\tif (vnode.dom == null) vnode.dom = child.dom\n\t\t\t\t\tdomSize += child.domSize || 1\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (domSize !== 1) vnode.domSize = domSize\n\t\t}\n\t}\n\tfunction updateElement(old, vnode, hooks, ns) {\n\t\tvar element = vnode.dom = old.dom\n\t\tns = getNameSpace(vnode) || ns\n\n\t\tif (vnode.tag === \"textarea\") {\n\t\t\tif (vnode.attrs == null) vnode.attrs = {}\n\t\t}\n\t\tupdateAttrs(vnode, old.attrs, vnode.attrs, ns)\n\t\tif (!maybeSetContentEditable(vnode)) {\n\t\t\tupdateNodes(element, old.children, vnode.children, hooks, null, ns)\n\t\t}\n\t}\n\tfunction updateComponent(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tvnode.instance = Vnode.normalize(callHook.call(vnode.state.view, vnode))\n\t\tif (vnode.instance === vnode) throw Error(\"A view cannot return the vnode it received as argument\")\n\t\tupdateLifecycle(vnode.state, vnode, hooks)\n\t\tif (vnode.attrs != null) updateLifecycle(vnode.attrs, vnode, hooks)\n\t\tif (vnode.instance != null) {\n\t\t\tif (old.instance == null) createNode(parent, vnode.instance, hooks, ns, nextSibling)\n\t\t\telse updateNode(parent, old.instance, vnode.instance, hooks, nextSibling, ns)\n\t\t\tvnode.dom = vnode.instance.dom\n\t\t\tvnode.domSize = vnode.instance.domSize\n\t\t}\n\t\telse if (old.instance != null) {\n\t\t\tremoveNode(parent, old.instance)\n\t\t\tvnode.dom = undefined\n\t\t\tvnode.domSize = 0\n\t\t}\n\t\telse {\n\t\t\tvnode.dom = old.dom\n\t\t\tvnode.domSize = old.domSize\n\t\t}\n\t}\n\tfunction getKeyMap(vnodes, start, end) {\n\t\tvar map = Object.create(null)\n\t\tfor (; start < end; start++) {\n\t\t\tvar vnode = vnodes[start]\n\t\t\tif (vnode != null) {\n\t\t\t\tvar key = vnode.key\n\t\t\t\tif (key != null) map[key] = start\n\t\t\t}\n\t\t}\n\t\treturn map\n\t}\n\t// Lifted from ivi https://github.com/ivijs/ivi/\n\t// takes a list of unique numbers (-1 is special and can\n\t// occur multiple times) and returns an array with the indices\n\t// of the items that are part of the longest increasing\n\t// subsequence\n\tvar lisTemp = []\n\tfunction makeLisIndices(a) {\n\t\tvar result = [0]\n\t\tvar u = 0, v = 0, i = 0\n\t\tvar il = lisTemp.length = a.length\n\t\tfor (var i = 0; i < il; i++) lisTemp[i] = a[i]\n\t\tfor (var i = 0; i < il; ++i) {\n\t\t\tif (a[i] === -1) continue\n\t\t\tvar j = result[result.length - 1]\n\t\t\tif (a[j] < a[i]) {\n\t\t\t\tlisTemp[i] = j\n\t\t\t\tresult.push(i)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tu = 0\n\t\t\tv = result.length - 1\n\t\t\twhile (u < v) {\n\t\t\t\t// Fast integer average without overflow.\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tvar c = (u >>> 1) + (v >>> 1) + (u & v & 1)\n\t\t\t\tif (a[result[c]] < a[i]) {\n\t\t\t\t\tu = c + 1\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tv = c\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (a[i] < a[result[u]]) {\n\t\t\t\tif (u > 0) lisTemp[i] = result[u - 1]\n\t\t\t\tresult[u] = i\n\t\t\t}\n\t\t}\n\t\tu = result.length\n\t\tv = result[u - 1]\n\t\twhile (u-- > 0) {\n\t\t\tresult[u] = v\n\t\t\tv = lisTemp[v]\n\t\t}\n\t\tlisTemp.length = 0\n\t\treturn result\n\t}\n\n\tfunction getNextSibling(vnodes, i, nextSibling) {\n\t\tfor (; i < vnodes.length; i++) {\n\t\t\tif (vnodes[i] != null && vnodes[i].dom != null) return vnodes[i].dom\n\t\t}\n\t\treturn nextSibling\n\t}\n\n\t// This covers a really specific edge case:\n\t// - Parent node is keyed and contains child\n\t// - Child is removed, returns unresolved promise in `onbeforeremove`\n\t// - Parent node is moved in keyed diff\n\t// - Remaining children still need moved appropriately\n\t//\n\t// Ideally, I'd track removed nodes as well, but that introduces a lot more\n\t// complexity and I'm not exactly interested in doing that.\n\tfunction moveNodes(parent, vnode, nextSibling) {\n\t\tvar frag = $doc.createDocumentFragment()\n\t\tmoveChildToFrag(parent, frag, vnode)\n\t\tinsertNode(parent, frag, nextSibling)\n\t}\n\tfunction moveChildToFrag(parent, frag, vnode) {\n\t\t// Dodge the recursion overhead in a few of the most common cases.\n\t\twhile (vnode.dom != null && vnode.dom.parentNode === parent) {\n\t\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\t\tvnode = vnode.instance\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else if (vnode.tag === \"<\") {\n\t\t\t\tfor (var i = 0; i < vnode.instance.length; i++) {\n\t\t\t\t\tfrag.appendChild(vnode.instance[i])\n\t\t\t\t}\n\t\t\t} else if (vnode.tag !== \"[\") {\n\t\t\t\t// Don't recurse for text nodes *or* elements, just fragments\n\t\t\t\tfrag.appendChild(vnode.dom)\n\t\t\t} else if (vnode.children.length === 1) {\n\t\t\t\tvnode = vnode.children[0]\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else {\n\t\t\t\tfor (var i = 0; i < vnode.children.length; i++) {\n\t\t\t\t\tvar child = vnode.children[i]\n\t\t\t\t\tif (child != null) moveChildToFrag(parent, frag, child)\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\n\tfunction insertNode(parent, dom, nextSibling) {\n\t\tif (nextSibling != null) parent.insertBefore(dom, nextSibling)\n\t\telse parent.appendChild(dom)\n\t}\n\n\tfunction maybeSetContentEditable(vnode) {\n\t\tif (vnode.attrs == null || (\n\t\t\tvnode.attrs.contenteditable == null && // attribute\n\t\t\tvnode.attrs.contentEditable == null // property\n\t\t)) return false\n\t\tvar children = vnode.children\n\t\tif (children != null && children.length === 1 && children[0].tag === \"<\") {\n\t\t\tvar content = children[0].children\n\t\t\tif (vnode.dom.innerHTML !== content) vnode.dom.innerHTML = content\n\t\t}\n\t\telse if (children != null && children.length !== 0) throw new Error(\"Child node of a contenteditable must be trusted.\")\n\t\treturn true\n\t}\n\n\t//remove\n\tfunction removeNodes(parent, vnodes, start, end) {\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tvar vnode = vnodes[i]\n\t\t\tif (vnode != null) removeNode(parent, vnode)\n\t\t}\n\t}\n\tfunction removeNode(parent, vnode) {\n\t\tvar mask = 0\n\t\tvar original = vnode.state\n\t\tvar stateResult, attrsResult\n\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onbeforeremove === \"function\") {\n\t\t\tvar result = callHook.call(vnode.state.onbeforeremove, vnode)\n\t\t\tif (result != null && typeof result.then === \"function\") {\n\t\t\t\tmask = 1\n\t\t\t\tstateResult = result\n\t\t\t}\n\t\t}\n\t\tif (vnode.attrs && typeof vnode.attrs.onbeforeremove === \"function\") {\n\t\t\tvar result = callHook.call(vnode.attrs.onbeforeremove, vnode)\n\t\t\tif (result != null && typeof result.then === \"function\") {\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tmask |= 2\n\t\t\t\tattrsResult = result\n\t\t\t}\n\t\t}\n\t\tcheckState(vnode, original)\n\n\t\t// If we can, try to fast-path it and avoid all the overhead of awaiting\n\t\tif (!mask) {\n\t\t\tonremove(vnode)\n\t\t\tremoveChild(parent, vnode)\n\t\t} else {\n\t\t\tif (stateResult != null) {\n\t\t\t\tvar next = function () {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (mask & 1) { mask &= 2; if (!mask) reallyRemove() }\n\t\t\t\t}\n\t\t\t\tstateResult.then(next, next)\n\t\t\t}\n\t\t\tif (attrsResult != null) {\n\t\t\t\tvar next = function () {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (mask & 2) { mask &= 1; if (!mask) reallyRemove() }\n\t\t\t\t}\n\t\t\t\tattrsResult.then(next, next)\n\t\t\t}\n\t\t}\n\n\t\tfunction reallyRemove() {\n\t\t\tcheckState(vnode, original)\n\t\t\tonremove(vnode)\n\t\t\tremoveChild(parent, vnode)\n\t\t}\n\t}\n\tfunction removeHTML(parent, vnode) {\n\t\tfor (var i = 0; i < vnode.instance.length; i++) {\n\t\t\tparent.removeChild(vnode.instance[i])\n\t\t}\n\t}\n\tfunction removeChild(parent, vnode) {\n\t\t// Dodge the recursion overhead in a few of the most common cases.\n\t\twhile (vnode.dom != null && vnode.dom.parentNode === parent) {\n\t\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\t\tvnode = vnode.instance\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else if (vnode.tag === \"<\") {\n\t\t\t\tremoveHTML(parent, vnode)\n\t\t\t} else {\n\t\t\t\tif (vnode.tag !== \"[\") {\n\t\t\t\t\tparent.removeChild(vnode.dom)\n\t\t\t\t\tif (!Array.isArray(vnode.children)) break\n\t\t\t\t}\n\t\t\t\tif (vnode.children.length === 1) {\n\t\t\t\t\tvnode = vnode.children[0]\n\t\t\t\t\tif (vnode != null) continue\n\t\t\t\t} else {\n\t\t\t\t\tfor (var i = 0; i < vnode.children.length; i++) {\n\t\t\t\t\t\tvar child = vnode.children[i]\n\t\t\t\t\t\tif (child != null) removeChild(parent, child)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\tfunction onremove(vnode) {\n\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onremove === \"function\") callHook.call(vnode.state.onremove, vnode)\n\t\tif (vnode.attrs && typeof vnode.attrs.onremove === \"function\") callHook.call(vnode.attrs.onremove, vnode)\n\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\tif (vnode.instance != null) onremove(vnode.instance)\n\t\t} else {\n\t\t\tvar children = vnode.children\n\t\t\tif (Array.isArray(children)) {\n\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\tvar child = children[i]\n\t\t\t\t\tif (child != null) onremove(child)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//attrs\n\tfunction setAttrs(vnode, attrs, ns) {\n\t\t// If you assign an input type that is not supported by IE 11 with an assignment expression, an error will occur.\n\t\t//\n\t\t// Also, the DOM does things to inputs based on the value, so it needs set first.\n\t\t// See: https://github.com/MithrilJS/mithril.js/issues/2622\n\t\tif (vnode.tag === \"input\" && attrs.type != null) vnode.dom.setAttribute(\"type\", attrs.type)\n\t\tvar isFileInput = attrs != null && vnode.tag === \"input\" && attrs.type === \"file\"\n\t\tfor (var key in attrs) {\n\t\t\tsetAttr(vnode, key, null, attrs[key], ns, isFileInput)\n\t\t}\n\t}\n\tfunction setAttr(vnode, key, old, value, ns, isFileInput) {\n\t\tif (key === \"key\" || key === \"is\" || value == null || isLifecycleMethod(key) || (old === value && !isFormAttribute(vnode, key)) && typeof value !== \"object\" || key === \"type\" && vnode.tag === \"input\") return\n\t\tif (key[0] === \"o\" && key[1] === \"n\") return updateEvent(vnode, key, value)\n\t\tif (key.slice(0, 6) === \"xlink:\") vnode.dom.setAttributeNS(\"http://www.w3.org/1999/xlink\", key.slice(6), value)\n\t\telse if (key === \"style\") updateStyle(vnode.dom, old, value)\n\t\telse if (hasPropertyKey(vnode, key, ns)) {\n\t\t\tif (key === \"value\") {\n\t\t\t\t// Only do the coercion if we're actually going to check the value.\n\t\t\t\t/* eslint-disable no-implicit-coercion */\n\t\t\t\t//setting input[value] to same value by typing on focused element moves cursor to end in Chrome\n\t\t\t\t//setting input[type=file][value] to same value causes an error to be generated if it's non-empty\n\t\t\t\tif ((vnode.tag === \"input\" || vnode.tag === \"textarea\") && vnode.dom.value === \"\" + value && (isFileInput || vnode.dom === activeElement())) return\n\t\t\t\t//setting select[value] to same value while having select open blinks select dropdown in Chrome\n\t\t\t\tif (vnode.tag === \"select\" && old !== null && vnode.dom.value === \"\" + value) return\n\t\t\t\t//setting option[value] to same value while having select open blinks select dropdown in Chrome\n\t\t\t\tif (vnode.tag === \"option\" && old !== null && vnode.dom.value === \"\" + value) return\n\t\t\t\t//setting input[type=file][value] to different value is an error if it's non-empty\n\t\t\t\t// Not ideal, but it at least works around the most common source of uncaught exceptions for now.\n\t\t\t\tif (isFileInput && \"\" + value !== \"\") { console.error(\"`value` is read-only on file inputs!\"); return }\n\t\t\t\t/* eslint-enable no-implicit-coercion */\n\t\t\t}\n\t\t\tvnode.dom[key] = value\n\t\t} else {\n\t\t\tif (typeof value === \"boolean\") {\n\t\t\t\tif (value) vnode.dom.setAttribute(key, \"\")\n\t\t\t\telse vnode.dom.removeAttribute(key)\n\t\t\t}\n\t\t\telse vnode.dom.setAttribute(key === \"className\" ? \"class\" : key, value)\n\t\t}\n\t}\n\tfunction removeAttr(vnode, key, old, ns) {\n\t\tif (key === \"key\" || key === \"is\" || old == null || isLifecycleMethod(key)) return\n\t\tif (key[0] === \"o\" && key[1] === \"n\") updateEvent(vnode, key, undefined)\n\t\telse if (key === \"style\") updateStyle(vnode.dom, old, null)\n\t\telse if (\n\t\t\thasPropertyKey(vnode, key, ns)\n\t\t\t&& key !== \"className\"\n\t\t\t&& key !== \"title\" // creates \"null\" as title\n\t\t\t&& !(key === \"value\" && (\n\t\t\t\tvnode.tag === \"option\"\n\t\t\t\t|| vnode.tag === \"select\" && vnode.dom.selectedIndex === -1 && vnode.dom === activeElement()\n\t\t\t))\n\t\t\t&& !(vnode.tag === \"input\" && key === \"type\")\n\t\t) {\n\t\t\tvnode.dom[key] = null\n\t\t} else {\n\t\t\tvar nsLastIndex = key.indexOf(\":\")\n\t\t\tif (nsLastIndex !== -1) key = key.slice(nsLastIndex + 1)\n\t\t\tif (old !== false) vnode.dom.removeAttribute(key === \"className\" ? \"class\" : key)\n\t\t}\n\t}\n\tfunction setLateSelectAttrs(vnode, attrs) {\n\t\tif (\"value\" in attrs) {\n\t\t\tif(attrs.value === null) {\n\t\t\t\tif (vnode.dom.selectedIndex !== -1) vnode.dom.value = null\n\t\t\t} else {\n\t\t\t\tvar normalized = \"\" + attrs.value // eslint-disable-line no-implicit-coercion\n\t\t\t\tif (vnode.dom.value !== normalized || vnode.dom.selectedIndex === -1) {\n\t\t\t\t\tvnode.dom.value = normalized\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (\"selectedIndex\" in attrs) setAttr(vnode, \"selectedIndex\", null, attrs.selectedIndex, undefined)\n\t}\n\tfunction updateAttrs(vnode, old, attrs, ns) {\n\t\tif (old && old === attrs) {\n\t\t\tconsole.warn(\"Don't reuse attrs object, use new object for every redraw, this will throw in next major\")\n\t\t}\n\t\tif (attrs != null) {\n\t\t\t// If you assign an input type that is not supported by IE 11 with an assignment expression, an error will occur.\n\t\t\t//\n\t\t\t// Also, the DOM does things to inputs based on the value, so it needs set first.\n\t\t\t// See: https://github.com/MithrilJS/mithril.js/issues/2622\n\t\t\tif (vnode.tag === \"input\" && attrs.type != null) vnode.dom.setAttribute(\"type\", attrs.type)\n\t\t\tvar isFileInput = vnode.tag === \"input\" && attrs.type === \"file\"\n\t\t\tfor (var key in attrs) {\n\t\t\t\tsetAttr(vnode, key, old && old[key], attrs[key], ns, isFileInput)\n\t\t\t}\n\t\t}\n\t\tvar val\n\t\tif (old != null) {\n\t\t\tfor (var key in old) {\n\t\t\t\tif (((val = old[key]) != null) && (attrs == null || attrs[key] == null)) {\n\t\t\t\t\tremoveAttr(vnode, key, val, ns)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfunction isFormAttribute(vnode, attr) {\n\t\treturn attr === \"value\" || attr === \"checked\" || attr === \"selectedIndex\" || attr === \"selected\" && vnode.dom === activeElement() || vnode.tag === \"option\" && vnode.dom.parentNode === $doc.activeElement\n\t}\n\tfunction isLifecycleMethod(attr) {\n\t\treturn attr === \"oninit\" || attr === \"oncreate\" || attr === \"onupdate\" || attr === \"onremove\" || attr === \"onbeforeremove\" || attr === \"onbeforeupdate\"\n\t}\n\tfunction hasPropertyKey(vnode, key, ns) {\n\t\t// Filter out namespaced keys\n\t\treturn ns === undefined && (\n\t\t\t// If it's a custom element, just keep it.\n\t\t\tvnode.tag.indexOf(\"-\") > -1 || vnode.attrs != null && vnode.attrs.is ||\n\t\t\t// If it's a normal element, let's try to avoid a few browser bugs.\n\t\t\tkey !== \"href\" && key !== \"list\" && key !== \"form\" && key !== \"width\" && key !== \"height\"// && key !== \"type\"\n\t\t\t// Defer the property check until *after* we check everything.\n\t\t) && key in vnode.dom\n\t}\n\n\t//style\n\tvar uppercaseRegex = /[A-Z]/g\n\tfunction toLowerCase(capital) { return \"-\" + capital.toLowerCase() }\n\tfunction normalizeKey(key) {\n\t\treturn key[0] === \"-\" && key[1] === \"-\" ? key :\n\t\t\tkey === \"cssFloat\" ? \"float\" :\n\t\t\t\tkey.replace(uppercaseRegex, toLowerCase)\n\t}\n\tfunction updateStyle(element, old, style) {\n\t\tif (old === style) {\n\t\t\t// Styles are equivalent, do nothing.\n\t\t} else if (style == null) {\n\t\t\t// New style is missing, just clear it.\n\t\t\telement.style.cssText = \"\"\n\t\t} else if (typeof style !== \"object\") {\n\t\t\t// New style is a string, let engine deal with patching.\n\t\t\telement.style.cssText = style\n\t\t} else if (old == null || typeof old !== \"object\") {\n\t\t\t// `old` is missing or a string, `style` is an object.\n\t\t\telement.style.cssText = \"\"\n\t\t\t// Add new style properties\n\t\t\tfor (var key in style) {\n\t\t\t\tvar value = style[key]\n\t\t\t\tif (value != null) element.style.setProperty(normalizeKey(key), String(value))\n\t\t\t}\n\t\t} else {\n\t\t\t// Both old & new are (different) objects.\n\t\t\t// Update style properties that have changed\n\t\t\tfor (var key in style) {\n\t\t\t\tvar value = style[key]\n\t\t\t\tif (value != null && (value = String(value)) !== String(old[key])) {\n\t\t\t\t\telement.style.setProperty(normalizeKey(key), value)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Remove style properties that no longer exist\n\t\t\tfor (var key in old) {\n\t\t\t\tif (old[key] != null && style[key] == null) {\n\t\t\t\t\telement.style.removeProperty(normalizeKey(key))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Here's an explanation of how this works:\n\t// 1. The event names are always (by design) prefixed by `on`.\n\t// 2. The EventListener interface accepts either a function or an object\n\t// with a `handleEvent` method.\n\t// 3. The object does not inherit from `Object.prototype`, to avoid\n\t// any potential interference with that (e.g. setters).\n\t// 4. The event name is remapped to the handler before calling it.\n\t// 5. In function-based event handlers, `ev.target === this`. We replicate\n\t// that below.\n\t// 6. In function-based event handlers, `return false` prevents the default\n\t// action and stops event propagation. We replicate that below.\n\tfunction EventDict() {\n\t\t// Save this, so the current redraw is correctly tracked.\n\t\tthis._ = currentRedraw\n\t}\n\tEventDict.prototype = Object.create(null)\n\tEventDict.prototype.handleEvent = function (ev) {\n\t\tvar handler = this[\"on\" + ev.type]\n\t\tvar result\n\t\tif (typeof handler === \"function\") result = handler.call(ev.currentTarget, ev)\n\t\telse if (typeof handler.handleEvent === \"function\") handler.handleEvent(ev)\n\t\tif (this._ && ev.redraw !== false) (0, this._)()\n\t\tif (result === false) {\n\t\t\tev.preventDefault()\n\t\t\tev.stopPropagation()\n\t\t}\n\t}\n\n\t//event\n\tfunction updateEvent(vnode, key, value) {\n\t\tif (vnode.events != null) {\n\t\t\tvnode.events._ = currentRedraw\n\t\t\tif (vnode.events[key] === value) return\n\t\t\tif (value != null && (typeof value === \"function\" || typeof value === \"object\")) {\n\t\t\t\tif (vnode.events[key] == null) vnode.dom.addEventListener(key.slice(2), vnode.events, false)\n\t\t\t\tvnode.events[key] = value\n\t\t\t} else {\n\t\t\t\tif (vnode.events[key] != null) vnode.dom.removeEventListener(key.slice(2), vnode.events, false)\n\t\t\t\tvnode.events[key] = undefined\n\t\t\t}\n\t\t} else if (value != null && (typeof value === \"function\" || typeof value === \"object\")) {\n\t\t\tvnode.events = new EventDict()\n\t\t\tvnode.dom.addEventListener(key.slice(2), vnode.events, false)\n\t\t\tvnode.events[key] = value\n\t\t}\n\t}\n\n\t//lifecycle\n\tfunction initLifecycle(source, vnode, hooks) {\n\t\tif (typeof source.oninit === \"function\") callHook.call(source.oninit, vnode)\n\t\tif (typeof source.oncreate === \"function\") hooks.push(callHook.bind(source.oncreate, vnode))\n\t}\n\tfunction updateLifecycle(source, vnode, hooks) {\n\t\tif (typeof source.onupdate === \"function\") hooks.push(callHook.bind(source.onupdate, vnode))\n\t}\n\tfunction shouldNotUpdate(vnode, old) {\n\t\tdo {\n\t\t\tif (vnode.attrs != null && typeof vnode.attrs.onbeforeupdate === \"function\") {\n\t\t\t\tvar force = callHook.call(vnode.attrs.onbeforeupdate, vnode, old)\n\t\t\t\tif (force !== undefined && !force) break\n\t\t\t}\n\t\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onbeforeupdate === \"function\") {\n\t\t\t\tvar force = callHook.call(vnode.state.onbeforeupdate, vnode, old)\n\t\t\t\tif (force !== undefined && !force) break\n\t\t\t}\n\t\t\treturn false\n\t\t} while (false); // eslint-disable-line no-constant-condition\n\t\tvnode.dom = old.dom\n\t\tvnode.domSize = old.domSize\n\t\tvnode.instance = old.instance\n\t\t// One would think having the actual latest attributes would be ideal,\n\t\t// but it doesn't let us properly diff based on our current internal\n\t\t// representation. We have to save not only the old DOM info, but also\n\t\t// the attributes used to create it, as we diff *that*, not against the\n\t\t// DOM directly (with a few exceptions in `setAttr`). And, of course, we\n\t\t// need to save the children and text as they are conceptually not\n\t\t// unlike special \"attributes\" internally.\n\t\tvnode.attrs = old.attrs\n\t\tvnode.children = old.children\n\t\tvnode.text = old.text\n\t\treturn true\n\t}\n\n\tvar currentDOM\n\n\treturn function(dom, vnodes, redraw) {\n\t\tif (!dom) throw new TypeError(\"DOM element being rendered to does not exist.\")\n\t\tif (currentDOM != null && dom.contains(currentDOM)) {\n\t\t\tthrow new TypeError(\"Node is currently being rendered to and thus is locked.\")\n\t\t}\n\t\tvar prevRedraw = currentRedraw\n\t\tvar prevDOM = currentDOM\n\t\tvar hooks = []\n\t\tvar active = activeElement()\n\t\tvar namespace = dom.namespaceURI\n\n\t\tcurrentDOM = dom\n\t\tcurrentRedraw = typeof redraw === \"function\" ? redraw : undefined\n\t\ttry {\n\t\t\t// First time rendering into a node clears it out\n\t\t\tif (dom.vnodes == null) dom.textContent = \"\"\n\t\t\tvnodes = Vnode.normalizeChildren(Array.isArray(vnodes) ? vnodes : [vnodes])\n\t\t\tupdateNodes(dom, dom.vnodes, vnodes, hooks, null, namespace === \"http://www.w3.org/1999/xhtml\" ? undefined : namespace)\n\t\t\tdom.vnodes = vnodes\n\t\t\t// `document.activeElement` can return null: https://html.spec.whatwg.org/multipage/interaction.html#dom-document-activeelement\n\t\t\tif (active != null && activeElement() !== active && typeof active.focus === \"function\") active.focus()\n\t\t\tfor (var i = 0; i < hooks.length; i++) hooks[i]()\n\t\t} finally {\n\t\t\tcurrentRedraw = prevRedraw\n\t\t\tcurrentDOM = prevDOM\n\t\t}\n\t}\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function(html) {\n\tif (html == null) html = \"\"\n\treturn Vnode(\"<\", undefined, undefined, html, undefined, undefined)\n}\n","\"use strict\"\n\nfunction Vnode(tag, key, attrs, children, text, dom) {\n\treturn {tag: tag, key: key, attrs: attrs, children: children, text: text, dom: dom, domSize: undefined, state: undefined, events: undefined, instance: undefined}\n}\nVnode.normalize = function(node) {\n\tif (Array.isArray(node)) return Vnode(\"[\", undefined, undefined, Vnode.normalizeChildren(node), undefined, undefined)\n\tif (node == null || typeof node === \"boolean\") return null\n\tif (typeof node === \"object\") return node\n\treturn Vnode(\"#\", undefined, undefined, String(node), undefined, undefined)\n}\nVnode.normalizeChildren = function(input) {\n\tvar children = []\n\tif (input.length) {\n\t\tvar isKeyed = input[0] != null && input[0].key != null\n\t\t// Note: this is a *very* perf-sensitive check.\n\t\t// Fun fact: merging the loop like this is somehow faster than splitting\n\t\t// it, noticeably so.\n\t\tfor (var i = 1; i < input.length; i++) {\n\t\t\tif ((input[i] != null && input[i].key != null) !== isKeyed) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\tisKeyed && (input[i] != null || typeof input[i] === \"boolean\")\n\t\t\t\t\t\t? \"In fragments, vnodes must either all have keys or none have keys. You may wish to consider using an explicit keyed empty fragment, m.fragment({key: ...}), instead of a hole.\"\n\t\t\t\t\t\t: \"In fragments, vnodes must either all have keys or none have keys.\"\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < input.length; i++) {\n\t\t\tchildren[i] = Vnode.normalize(input[i])\n\t\t}\n\t}\n\treturn children\n}\n\nmodule.exports = Vnode\n","\"use strict\"\n\nvar PromisePolyfill = require(\"./promise/promise\")\nvar mountRedraw = require(\"./mount-redraw\")\n\nmodule.exports = require(\"./request/request\")(typeof window !== \"undefined\" ? window : null, PromisePolyfill, mountRedraw.redraw)\n","\"use strict\"\n\nvar buildPathname = require(\"../pathname/build\")\nvar hasOwn = require(\"../util/hasOwn\")\n\nmodule.exports = function($window, Promise, oncompletion) {\n\tvar callbackCount = 0\n\n\tfunction PromiseProxy(executor) {\n\t\treturn new Promise(executor)\n\t}\n\n\t// In case the global Promise is some userland library's where they rely on\n\t// `foo instanceof this.constructor`, `this.constructor.resolve(value)`, or\n\t// similar. Let's *not* break them.\n\tPromiseProxy.prototype = Promise.prototype\n\tPromiseProxy.__proto__ = Promise // eslint-disable-line no-proto\n\n\tfunction makeRequest(factory) {\n\t\treturn function(url, args) {\n\t\t\tif (typeof url !== \"string\") { args = url; url = url.url }\n\t\t\telse if (args == null) args = {}\n\t\t\tvar promise = new Promise(function(resolve, reject) {\n\t\t\t\tfactory(buildPathname(url, args.params), args, function (data) {\n\t\t\t\t\tif (typeof args.type === \"function\") {\n\t\t\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\t\t\tfor (var i = 0; i < data.length; i++) {\n\t\t\t\t\t\t\t\tdata[i] = new args.type(data[i])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse data = new args.type(data)\n\t\t\t\t\t}\n\t\t\t\t\tresolve(data)\n\t\t\t\t}, reject)\n\t\t\t})\n\t\t\tif (args.background === true) return promise\n\t\t\tvar count = 0\n\t\t\tfunction complete() {\n\t\t\t\tif (--count === 0 && typeof oncompletion === \"function\") oncompletion()\n\t\t\t}\n\n\t\t\treturn wrap(promise)\n\n\t\t\tfunction wrap(promise) {\n\t\t\t\tvar then = promise.then\n\t\t\t\t// Set the constructor, so engines know to not await or resolve\n\t\t\t\t// this as a native promise. At the time of writing, this is\n\t\t\t\t// only necessary for V8, but their behavior is the correct\n\t\t\t\t// behavior per spec. See this spec issue for more details:\n\t\t\t\t// https://github.com/tc39/ecma262/issues/1577. Also, see the\n\t\t\t\t// corresponding comment in `request/tests/test-request.js` for\n\t\t\t\t// a bit more background on the issue at hand.\n\t\t\t\tpromise.constructor = PromiseProxy\n\t\t\t\tpromise.then = function() {\n\t\t\t\t\tcount++\n\t\t\t\t\tvar next = then.apply(promise, arguments)\n\t\t\t\t\tnext.then(complete, function(e) {\n\t\t\t\t\t\tcomplete()\n\t\t\t\t\t\tif (count === 0) throw e\n\t\t\t\t\t})\n\t\t\t\t\treturn wrap(next)\n\t\t\t\t}\n\t\t\t\treturn promise\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction hasHeader(args, name) {\n\t\tfor (var key in args.headers) {\n\t\t\tif (hasOwn.call(args.headers, key) && key.toLowerCase() === name) return true\n\t\t}\n\t\treturn false\n\t}\n\n\treturn {\n\t\trequest: makeRequest(function(url, args, resolve, reject) {\n\t\t\tvar method = args.method != null ? args.method.toUpperCase() : \"GET\"\n\t\t\tvar body = args.body\n\t\t\tvar assumeJSON = (args.serialize == null || args.serialize === JSON.serialize) && !(body instanceof $window.FormData || body instanceof $window.URLSearchParams)\n\t\t\tvar responseType = args.responseType || (typeof args.extract === \"function\" ? \"\" : \"json\")\n\n\t\t\tvar xhr = new $window.XMLHttpRequest(), aborted = false, isTimeout = false\n\t\t\tvar original = xhr, replacedAbort\n\t\t\tvar abort = xhr.abort\n\n\t\t\txhr.abort = function() {\n\t\t\t\taborted = true\n\t\t\t\tabort.call(this)\n\t\t\t}\n\n\t\t\txhr.open(method, url, args.async !== false, typeof args.user === \"string\" ? args.user : undefined, typeof args.password === \"string\" ? args.password : undefined)\n\n\t\t\tif (assumeJSON && body != null && !hasHeader(args, \"content-type\")) {\n\t\t\t\txhr.setRequestHeader(\"Content-Type\", \"application/json; charset=utf-8\")\n\t\t\t}\n\t\t\tif (typeof args.deserialize !== \"function\" && !hasHeader(args, \"accept\")) {\n\t\t\t\txhr.setRequestHeader(\"Accept\", \"application/json, text/*\")\n\t\t\t}\n\t\t\tif (args.withCredentials) xhr.withCredentials = args.withCredentials\n\t\t\tif (args.timeout) xhr.timeout = args.timeout\n\t\t\txhr.responseType = responseType\n\n\t\t\tfor (var key in args.headers) {\n\t\t\t\tif (hasOwn.call(args.headers, key)) {\n\t\t\t\t\txhr.setRequestHeader(key, args.headers[key])\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txhr.onreadystatechange = function(ev) {\n\t\t\t\t// Don't throw errors on xhr.abort().\n\t\t\t\tif (aborted) return\n\n\t\t\t\tif (ev.target.readyState === 4) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar success = (ev.target.status >= 200 && ev.target.status < 300) || ev.target.status === 304 || (/^file:\\/\\//i).test(url)\n\t\t\t\t\t\t// When the response type isn't \"\" or \"text\",\n\t\t\t\t\t\t// `xhr.responseText` is the wrong thing to use.\n\t\t\t\t\t\t// Browsers do the right thing and throw here, and we\n\t\t\t\t\t\t// should honor that and do the right thing by\n\t\t\t\t\t\t// preferring `xhr.response` where possible/practical.\n\t\t\t\t\t\tvar response = ev.target.response, message\n\n\t\t\t\t\t\tif (responseType === \"json\") {\n\t\t\t\t\t\t\t// For IE and Edge, which don't implement\n\t\t\t\t\t\t\t// `responseType: \"json\"`.\n\t\t\t\t\t\t\tif (!ev.target.responseType && typeof args.extract !== \"function\") {\n\t\t\t\t\t\t\t\t// Handle no-content which will not parse.\n\t\t\t\t\t\t\t\ttry { response = JSON.parse(ev.target.responseText) }\n\t\t\t\t\t\t\t\tcatch (e) { response = null }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!responseType || responseType === \"text\") {\n\t\t\t\t\t\t\t// Only use this default if it's text. If a parsed\n\t\t\t\t\t\t\t// document is needed on old IE and friends (all\n\t\t\t\t\t\t\t// unsupported), the user should use a custom\n\t\t\t\t\t\t\t// `config` instead. They're already using this at\n\t\t\t\t\t\t\t// their own risk.\n\t\t\t\t\t\t\tif (response == null) response = ev.target.responseText\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof args.extract === \"function\") {\n\t\t\t\t\t\t\tresponse = args.extract(ev.target, args)\n\t\t\t\t\t\t\tsuccess = true\n\t\t\t\t\t\t} else if (typeof args.deserialize === \"function\") {\n\t\t\t\t\t\t\tresponse = args.deserialize(response)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (success) resolve(response)\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar completeErrorResponse = function() {\n\t\t\t\t\t\t\t\ttry { message = ev.target.responseText }\n\t\t\t\t\t\t\t\tcatch (e) { message = response }\n\t\t\t\t\t\t\t\tvar error = new Error(message)\n\t\t\t\t\t\t\t\terror.code = ev.target.status\n\t\t\t\t\t\t\t\terror.response = response\n\t\t\t\t\t\t\t\treject(error)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (xhr.status === 0) {\n\t\t\t\t\t\t\t\t// Use setTimeout to push this code block onto the event queue\n\t\t\t\t\t\t\t\t// This allows `xhr.ontimeout` to run in the case that there is a timeout\n\t\t\t\t\t\t\t\t// Without this setTimeout, `xhr.ontimeout` doesn't have a chance to reject\n\t\t\t\t\t\t\t\t// as `xhr.onreadystatechange` will run before it\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tif (isTimeout) return\n\t\t\t\t\t\t\t\t\tcompleteErrorResponse()\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else completeErrorResponse()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\treject(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txhr.ontimeout = function (ev) {\n\t\t\t\tisTimeout = true\n\t\t\t\tvar error = new Error(\"Request timed out\")\n\t\t\t\terror.code = ev.target.status\n\t\t\t\treject(error)\n\t\t\t}\n\n\t\t\tif (typeof args.config === \"function\") {\n\t\t\t\txhr = args.config(xhr, args, url) || xhr\n\n\t\t\t\t// Propagate the `abort` to any replacement XHR as well.\n\t\t\t\tif (xhr !== original) {\n\t\t\t\t\treplacedAbort = xhr.abort\n\t\t\t\t\txhr.abort = function() {\n\t\t\t\t\t\taborted = true\n\t\t\t\t\t\treplacedAbort.call(this)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (body == null) xhr.send()\n\t\t\telse if (typeof args.serialize === \"function\") xhr.send(args.serialize(body))\n\t\t\telse if (body instanceof $window.FormData || body instanceof $window.URLSearchParams) xhr.send(body)\n\t\t\telse xhr.send(JSON.stringify(body))\n\t\t}),\n\t\tjsonp: makeRequest(function(url, args, resolve, reject) {\n\t\t\tvar callbackName = args.callbackName || \"_mithril_\" + Math.round(Math.random() * 1e16) + \"_\" + callbackCount++\n\t\t\tvar script = $window.document.createElement(\"script\")\n\t\t\t$window[callbackName] = function(data) {\n\t\t\t\tdelete $window[callbackName]\n\t\t\t\tscript.parentNode.removeChild(script)\n\t\t\t\tresolve(data)\n\t\t\t}\n\t\t\tscript.onerror = function() {\n\t\t\t\tdelete $window[callbackName]\n\t\t\t\tscript.parentNode.removeChild(script)\n\t\t\t\treject(new Error(\"JSONP request failed\"))\n\t\t\t}\n\t\t\tscript.src = url + (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") +\n\t\t\t\tencodeURIComponent(args.callbackKey || \"callback\") + \"=\" +\n\t\t\t\tencodeURIComponent(callbackName)\n\t\t\t$window.document.documentElement.appendChild(script)\n\t\t}),\n\t}\n}\n","\"use strict\"\n\nvar mountRedraw = require(\"./mount-redraw\")\n\nmodule.exports = require(\"./api/router\")(typeof window !== \"undefined\" ? window : null, mountRedraw)\n","\"use strict\"\n\nmodule.exports = require(\"./stream/stream\")\n","/* eslint-disable */\n;(function() {\n\"use strict\"\n/* eslint-enable */\nStream.SKIP = {}\nStream.lift = lift\nStream.scan = scan\nStream.merge = merge\nStream.combine = combine\nStream.scanMerge = scanMerge\nStream[\"fantasy-land/of\"] = Stream\n\nvar warnedHalt = false\nObject.defineProperty(Stream, \"HALT\", {\n\tget: function() {\n\t\twarnedHalt || console.log(\"HALT is deprecated and has been renamed to SKIP\");\n\t\twarnedHalt = true\n\t\treturn Stream.SKIP\n\t}\n})\n\nfunction Stream(value) {\n\tvar dependentStreams = []\n\tvar dependentFns = []\n\n\tfunction stream(v) {\n\t\tif (arguments.length && v !== Stream.SKIP) {\n\t\t\tvalue = v\n\t\t\tif (open(stream)) {\n\t\t\t\tstream._changing()\n\t\t\t\tstream._state = \"active\"\n\t\t\t\t// Cloning the list to ensure it's still iterated in intended\n\t\t\t\t// order\n\t\t\t\tdependentStreams.slice().forEach(function(s, i) {\n\t\t\t\t\tif (open(s)) s(this[i](value))\n\t\t\t\t}, dependentFns.slice())\n\t\t\t}\n\t\t}\n\n\t\treturn value\n\t}\n\n\tstream.constructor = Stream\n\tstream._state = arguments.length && value !== Stream.SKIP ? \"active\" : \"pending\"\n\tstream._parents = []\n\n\tstream._changing = function() {\n\t\tif (open(stream)) stream._state = \"changing\"\n\t\tdependentStreams.forEach(function(s) {\n\t\t\ts._changing()\n\t\t})\n\t}\n\n\tstream._map = function(fn, ignoreInitial) {\n\t\tvar target = ignoreInitial ? Stream() : Stream(fn(value))\n\t\ttarget._parents.push(stream)\n\t\tdependentStreams.push(target)\n\t\tdependentFns.push(fn)\n\t\treturn target\n\t}\n\n\tstream.map = function(fn) {\n\t\treturn stream._map(fn, stream._state !== \"active\")\n\t}\n\n\tvar end\n\tfunction createEnd() {\n\t\tend = Stream()\n\t\tend.map(function(value) {\n\t\t\tif (value === true) {\n\t\t\t\tstream._parents.forEach(function (p) {p._unregisterChild(stream)})\n\t\t\t\tstream._state = \"ended\"\n\t\t\t\tstream._parents.length = dependentStreams.length = dependentFns.length = 0\n\t\t\t}\n\t\t\treturn value\n\t\t})\n\t\treturn end\n\t}\n\n\tstream.toJSON = function() { return value != null && typeof value.toJSON === \"function\" ? value.toJSON() : value }\n\n\tstream[\"fantasy-land/map\"] = stream.map\n\tstream[\"fantasy-land/ap\"] = function(x) { return combine(function(s1, s2) { return s1()(s2()) }, [x, stream]) }\n\n\tstream._unregisterChild = function(child) {\n\t\tvar childIndex = dependentStreams.indexOf(child)\n\t\tif (childIndex !== -1) {\n\t\t\tdependentStreams.splice(childIndex, 1)\n\t\t\tdependentFns.splice(childIndex, 1)\n\t\t}\n\t}\n\n\tObject.defineProperty(stream, \"end\", {\n\t\tget: function() { return end || createEnd() }\n\t})\n\n\treturn stream\n}\n\nfunction combine(fn, streams) {\n\tvar ready = streams.every(function(s) {\n\t\tif (s.constructor !== Stream)\n\t\t\tthrow new Error(\"Ensure that each item passed to stream.combine/stream.merge/lift is a stream.\")\n\t\treturn s._state === \"active\"\n\t})\n\tvar stream = ready\n\t\t? Stream(fn.apply(null, streams.concat([streams])))\n\t\t: Stream()\n\n\tvar changed = []\n\n\tvar mappers = streams.map(function(s) {\n\t\treturn s._map(function(value) {\n\t\t\tchanged.push(s)\n\t\t\tif (ready || streams.every(function(s) { return s._state !== \"pending\" })) {\n\t\t\t\tready = true\n\t\t\t\tstream(fn.apply(null, streams.concat([changed])))\n\t\t\t\tchanged = []\n\t\t\t}\n\t\t\treturn value\n\t\t}, true)\n\t})\n\n\tvar endStream = stream.end.map(function(value) {\n\t\tif (value === true) {\n\t\t\tmappers.forEach(function(mapper) { mapper.end(true) })\n\t\t\tendStream.end(true)\n\t\t}\n\t\treturn undefined\n\t})\n\n\treturn stream\n}\n\nfunction merge(streams) {\n\treturn combine(function() { return streams.map(function(s) { return s() }) }, streams)\n}\n\nfunction scan(fn, acc, origin) {\n\tvar stream = origin.map(function(v) {\n\t\tvar next = fn(acc, v)\n\t\tif (next !== Stream.SKIP) acc = next\n\t\treturn next\n\t})\n\tstream(acc)\n\treturn stream\n}\n\nfunction scanMerge(tuples, seed) {\n\tvar streams = tuples.map(function(tuple) { return tuple[0] })\n\n\tvar stream = combine(function() {\n\t\tvar changed = arguments[arguments.length - 1]\n\t\tstreams.forEach(function(stream, i) {\n\t\t\tif (changed.indexOf(stream) > -1)\n\t\t\t\tseed = tuples[i][1](seed, stream())\n\t\t})\n\n\t\treturn seed\n\t}, streams)\n\n\tstream(seed)\n\n\treturn stream\n}\n\nfunction lift() {\n\tvar fn = arguments[0]\n\tvar streams = Array.prototype.slice.call(arguments, 1)\n\treturn merge(streams).map(function(streams) {\n\t\treturn fn.apply(undefined, streams)\n\t})\n}\n\nfunction open(s) {\n\treturn s._state === \"pending\" || s._state === \"active\" || s._state === \"changing\"\n}\n\nif (typeof module !== \"undefined\") module[\"exports\"] = Stream\nelse if (typeof window.m === \"function\" && !(\"stream\" in window.m)) window.m.stream = Stream\nelse window.m = {stream : Stream}\n\n}());\n","// This exists so I'm only saving it once.\n\"use strict\"\n\nvar hasOwn = require(\"./hasOwn\")\n\nmodule.exports = Object.assign || function(target, source) {\n\tfor (var key in source) {\n\t\tif (hasOwn.call(source, key)) target[key] = source[key]\n\t}\n}\n","\"use strict\"\n\n// Note: this is mildly perf-sensitive.\n//\n// It does *not* use `delete` - dynamic `delete`s usually cause objects to bail\n// out into dictionary mode and just generally cause a bunch of optimization\n// issues within engines.\n//\n// Ideally, I would've preferred to do this, if it weren't for the optimization\n// issues:\n//\n// ```js\n// const hasOwn = require(\"./hasOwn\")\n// const magic = [\n// \"key\", \"oninit\", \"oncreate\", \"onbeforeupdate\", \"onupdate\",\n// \"onbeforeremove\", \"onremove\",\n// ]\n// module.exports = (attrs, extras) => {\n// const result = Object.assign(Object.create(null), attrs)\n// for (const key of magic) delete result[key]\n// if (extras != null) for (const key of extras) delete result[key]\n// return result\n// }\n// ```\n\nvar hasOwn = require(\"./hasOwn\")\n// Words in RegExp literals are sometimes mangled incorrectly by the internal bundler, so use RegExp().\nvar magic = new RegExp(\"^(?:key|oninit|oncreate|onbeforeupdate|onupdate|onbeforeremove|onremove)$\")\n\nmodule.exports = function(attrs, extras) {\n\tvar result = {}\n\n\tif (extras != null) {\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key) && !magic.test(key) && extras.indexOf(key) < 0) {\n\t\t\t\tresult[key] = attrs[key]\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key) && !magic.test(key)) {\n\t\t\t\tresult[key] = attrs[key]\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result\n}\n","// This exists so I'm only saving it once.\n\"use strict\"\n\nmodule.exports = {}.hasOwnProperty\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","const candidateSelectors = [\n 'input',\n 'select',\n 'textarea',\n 'a[href]',\n 'button',\n '[tabindex]:not(slot)',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n 'details>summary:first-of-type',\n 'details',\n];\nconst candidateSelector = /* #__PURE__ */ candidateSelectors.join(',');\n\nconst NoElement = typeof Element === 'undefined';\n\nconst matches = NoElement\n ? function () {}\n : Element.prototype.matches ||\n Element.prototype.msMatchesSelector ||\n Element.prototype.webkitMatchesSelector;\n\nconst getRootNode =\n !NoElement && Element.prototype.getRootNode\n ? (element) => element.getRootNode()\n : (element) => element.ownerDocument;\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nconst getCandidates = function (el, includeContainer, filter) {\n let candidates = Array.prototype.slice.apply(\n el.querySelectorAll(candidateSelector)\n );\n if (includeContainer && matches.call(el, candidateSelector)) {\n candidates.unshift(el);\n }\n candidates = candidates.filter(filter);\n return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidatesScope\n * @property {Element} scope contains inner candidates\n * @property {Element[]} candidates\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n * if a function, implies shadow support is enabled and either returns the shadow root of an element\n * or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidatesScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.<Element|CandidatesScope>}\n */\nconst getCandidatesIteratively = function (\n elements,\n includeContainer,\n options\n) {\n const candidates = [];\n const elementsToCheck = Array.from(elements);\n while (elementsToCheck.length) {\n const element = elementsToCheck.shift();\n if (element.tagName === 'SLOT') {\n // add shadow dom slot scope (slot itself cannot be focusable)\n const assigned = element.assignedElements();\n const content = assigned.length ? assigned : element.children;\n const nestedCandidates = getCandidatesIteratively(content, true, options);\n if (options.flatten) {\n candidates.push(...nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: nestedCandidates,\n });\n }\n } else {\n // check candidate element\n const validCandidate = matches.call(element, candidateSelector);\n if (\n validCandidate &&\n options.filter(element) &&\n (includeContainer || !elements.includes(element))\n ) {\n candidates.push(element);\n }\n\n // iterate over shadow content if possible\n const shadowRoot =\n element.shadowRoot ||\n // check for an undisclosed shadow\n (typeof options.getShadowRoot === 'function' &&\n options.getShadowRoot(element));\n\n const validShadowRoot =\n !options.shadowRootFilter || options.shadowRootFilter(element);\n\n if (shadowRoot && validShadowRoot) {\n // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n // shadow exists, so look at light dom children as fallback BUT create a scope for any\n // child candidates found because they're likely slotted elements (elements that are\n // children of the web component element (which has the shadow), in the light dom, but\n // slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n // _after_ we return from this recursive call\n const nestedCandidates = getCandidatesIteratively(\n shadowRoot === true ? element.children : shadowRoot.children,\n true,\n options\n );\n\n if (options.flatten) {\n candidates.push(...nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: nestedCandidates,\n });\n }\n } else {\n // there's not shadow so just dig into the element's (light dom) children\n // __without__ giving the element special scope treatment\n elementsToCheck.unshift(...element.children);\n }\n }\n }\n return candidates;\n};\n\nconst getTabindex = function (node, isScope) {\n if (node.tabIndex < 0) {\n // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n // yet they are still part of the regular tab order; in FF, they get a default\n // `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n // order, consider their tab index to be 0.\n // Also browsers do not return `tabIndex` correctly for contentEditable nodes;\n // so if they don't have a tabindex attribute specifically set, assume it's 0.\n //\n // isScope is positive for custom element with shadow root or slot that by default\n // have tabIndex -1, but need to be sorted by document order in order for their\n // content to be inserted in the correct position\n if (\n (isScope ||\n /^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) ||\n node.isContentEditable) &&\n isNaN(parseInt(node.getAttribute('tabindex'), 10))\n ) {\n return 0;\n }\n }\n\n return node.tabIndex;\n};\n\nconst sortOrderedTabbables = function (a, b) {\n return a.tabIndex === b.tabIndex\n ? a.documentOrder - b.documentOrder\n : a.tabIndex - b.tabIndex;\n};\n\nconst isInput = function (node) {\n return node.tagName === 'INPUT';\n};\n\nconst isHiddenInput = function (node) {\n return isInput(node) && node.type === 'hidden';\n};\n\nconst isDetailsWithSummary = function (node) {\n const r =\n node.tagName === 'DETAILS' &&\n Array.prototype.slice\n .apply(node.children)\n .some((child) => child.tagName === 'SUMMARY');\n return r;\n};\n\nconst getCheckedRadio = function (nodes, form) {\n for (let i = 0; i < nodes.length; i++) {\n if (nodes[i].checked && nodes[i].form === form) {\n return nodes[i];\n }\n }\n};\n\nconst isTabbableRadio = function (node) {\n if (!node.name) {\n return true;\n }\n const radioScope = node.form || getRootNode(node);\n const queryRadios = function (name) {\n return radioScope.querySelectorAll(\n 'input[type=\"radio\"][name=\"' + name + '\"]'\n );\n };\n\n let radioSet;\n if (\n typeof window !== 'undefined' &&\n typeof window.CSS !== 'undefined' &&\n typeof window.CSS.escape === 'function'\n ) {\n radioSet = queryRadios(window.CSS.escape(node.name));\n } else {\n try {\n radioSet = queryRadios(node.name);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(\n 'Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s',\n err.message\n );\n return false;\n }\n }\n\n const checked = getCheckedRadio(radioSet, node.form);\n return !checked || checked === node;\n};\n\nconst isRadio = function (node) {\n return isInput(node) && node.type === 'radio';\n};\n\nconst isNonTabbableRadio = function (node) {\n return isRadio(node) && !isTabbableRadio(node);\n};\n\nconst isZeroArea = function (node) {\n const { width, height } = node.getBoundingClientRect();\n return width === 0 && height === 0;\n};\nconst isHidden = function (node, { displayCheck, getShadowRoot }) {\n // NOTE: visibility will be `undefined` if node is detached from the document\n // (see notes about this further down), which means we will consider it visible\n // (this is legacy behavior from a very long way back)\n // NOTE: we check this regardless of `displayCheck=\"none\"` because this is a\n // _visibility_ check, not a _display_ check\n if (getComputedStyle(node).visibility === 'hidden') {\n return true;\n }\n\n const isDirectSummary = matches.call(node, 'details>summary:first-of-type');\n const nodeUnderDetails = isDirectSummary ? node.parentElement : node;\n if (matches.call(nodeUnderDetails, 'details:not([open]) *')) {\n return true;\n }\n\n // The root node is the shadow root if the node is in a shadow DOM; some document otherwise\n // (but NOT _the_ document; see second 'If' comment below for more).\n // If rootNode is shadow root, it'll have a host, which is the element to which the shadow\n // is attached, and the one we need to check if it's in the document or not (because the\n // shadow, and all nodes it contains, is never considered in the document since shadows\n // behave like self-contained DOMs; but if the shadow's HOST, which is part of the document,\n // is hidden, or is not in the document itself but is detached, it will affect the shadow's\n // visibility, including all the nodes it contains). The host could be any normal node,\n // or a custom element (i.e. web component). Either way, that's the one that is considered\n // part of the document, not the shadow root, nor any of its children (i.e. the node being\n // tested).\n // If rootNode is not a shadow root, it won't have a host, and so rootNode should be the\n // document (per the docs) and while it's a Document-type object, that document does not\n // appear to be the same as the node's `ownerDocument` for some reason, so it's safer\n // to ignore the rootNode at this point, and use `node.ownerDocument`. Otherwise,\n // using `rootNode.contains(node)` will _always_ be true we'll get false-positives when\n // node is actually detached.\n const nodeRootHost = getRootNode(node).host;\n const nodeIsAttached =\n nodeRootHost?.ownerDocument.contains(nodeRootHost) ||\n node.ownerDocument.contains(node);\n\n if (!displayCheck || displayCheck === 'full') {\n if (typeof getShadowRoot === 'function') {\n // figure out if we should consider the node to be in an undisclosed shadow and use the\n // 'non-zero-area' fallback\n const originalNode = node;\n while (node) {\n const parentElement = node.parentElement;\n const rootNode = getRootNode(node);\n if (\n parentElement &&\n !parentElement.shadowRoot &&\n getShadowRoot(parentElement) === true // check if there's an undisclosed shadow\n ) {\n // node has an undisclosed shadow which means we can only treat it as a black box, so we\n // fall back to a non-zero-area test\n return isZeroArea(node);\n } else if (node.assignedSlot) {\n // iterate up slot\n node = node.assignedSlot;\n } else if (!parentElement && rootNode !== node.ownerDocument) {\n // cross shadow boundary\n node = rootNode.host;\n } else {\n // iterate up normal dom\n node = parentElement;\n }\n }\n\n node = originalNode;\n }\n // else, `getShadowRoot` might be true, but all that does is enable shadow DOM support\n // (i.e. it does not also presume that all nodes might have undisclosed shadows); or\n // it might be a falsy value, which means shadow DOM support is disabled\n\n // Since we didn't find it sitting in an undisclosed shadow (or shadows are disabled)\n // now we can just test to see if it would normally be visible or not, provided it's\n // attached to the main document.\n // NOTE: We must consider case where node is inside a shadow DOM and given directly to\n // `isTabbable()` or `isFocusable()` -- regardless of `getShadowRoot` option setting.\n\n if (nodeIsAttached) {\n // this works wherever the node is: if there's at least one client rect, it's\n // somehow displayed; it also covers the CSS 'display: contents' case where the\n // node itself is hidden in place of its contents; and there's no need to search\n // up the hierarchy either\n return !node.getClientRects().length;\n }\n\n // Else, the node isn't attached to the document, which means the `getClientRects()`\n // API will __always__ return zero rects (this can happen, for example, if React\n // is used to render nodes onto a detached tree, as confirmed in this thread:\n // https://github.com/facebook/react/issues/9117#issuecomment-284228870)\n //\n // It also means that even window.getComputedStyle(node).display will return `undefined`\n // because styles are only computed for nodes that are in the document.\n //\n // NOTE: THIS HAS BEEN THE CASE FOR YEARS. It is not new, nor is it caused by tabbable\n // somehow. Though it was never stated officially, anyone who has ever used tabbable\n // APIs on nodes in detached containers has actually implicitly used tabbable in what\n // was later (as of v5.2.0 on Apr 9, 2021) called `displayCheck=\"none\"` mode -- essentially\n // considering __everything__ to be visible because of the innability to determine styles.\n } else if (displayCheck === 'non-zero-area') {\n // NOTE: Even though this tests that the node's client rect is non-zero to determine\n // whether it's displayed, and that a detached node will __always__ have a zero-area\n // client rect, we don't special-case for whether the node is attached or not. In\n // this mode, we do want to consider nodes that have a zero area to be hidden at all\n // times, and that includes attached or not.\n return isZeroArea(node);\n }\n\n // visible, as far as we can tell, or per current `displayCheck` mode\n return false;\n};\n\n// form fields (nested) inside a disabled fieldset are not focusable/tabbable\n// unless they are in the _first_ <legend> element of the top-most disabled\n// fieldset\nconst isDisabledFromFieldset = function (node) {\n if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {\n let parentNode = node.parentElement;\n // check if `node` is contained in a disabled <fieldset>\n while (parentNode) {\n if (parentNode.tagName === 'FIELDSET' && parentNode.disabled) {\n // look for the first <legend> among the children of the disabled <fieldset>\n for (let i = 0; i < parentNode.children.length; i++) {\n const child = parentNode.children.item(i);\n // when the first <legend> (in document order) is found\n if (child.tagName === 'LEGEND') {\n // if its parent <fieldset> is not nested in another disabled <fieldset>,\n // return whether `node` is a descendant of its first <legend>\n return matches.call(parentNode, 'fieldset[disabled] *')\n ? true\n : !child.contains(node);\n }\n }\n // the disabled <fieldset> containing `node` has no <legend>\n return true;\n }\n parentNode = parentNode.parentElement;\n }\n }\n\n // else, node's tabbable/focusable state should not be affected by a fieldset's\n // enabled/disabled state\n return false;\n};\n\nconst isNodeMatchingSelectorFocusable = function (options, node) {\n if (\n node.disabled ||\n isHiddenInput(node) ||\n isHidden(node, options) ||\n // For a details element with a summary, the summary element gets the focus\n isDetailsWithSummary(node) ||\n isDisabledFromFieldset(node)\n ) {\n return false;\n }\n return true;\n};\n\nconst isNodeMatchingSelectorTabbable = function (options, node) {\n if (\n isNonTabbableRadio(node) ||\n getTabindex(node) < 0 ||\n !isNodeMatchingSelectorFocusable(options, node)\n ) {\n return false;\n }\n return true;\n};\n\nconst isValidShadowRootTabbable = function (shadowHostNode) {\n const tabIndex = parseInt(shadowHostNode.getAttribute('tabindex'), 10);\n if (isNaN(tabIndex) || tabIndex >= 0) {\n return true;\n }\n // If a custom element has an explicit negative tabindex,\n // browsers will not allow tab targeting said element's children.\n return false;\n};\n\n/**\n * @param {Array.<Element|CandidatesScope>} candidates\n * @returns Element[]\n */\nconst sortByOrder = function (candidates) {\n const regularTabbables = [];\n const orderedTabbables = [];\n candidates.forEach(function (item, i) {\n const isScope = !!item.scope;\n const element = isScope ? item.scope : item;\n const candidateTabindex = getTabindex(element, isScope);\n const elements = isScope ? sortByOrder(item.candidates) : element;\n if (candidateTabindex === 0) {\n isScope\n ? regularTabbables.push(...elements)\n : regularTabbables.push(element);\n } else {\n orderedTabbables.push({\n documentOrder: i,\n tabIndex: candidateTabindex,\n item: item,\n isScope: isScope,\n content: elements,\n });\n }\n });\n\n return orderedTabbables\n .sort(sortOrderedTabbables)\n .reduce((acc, sortable) => {\n sortable.isScope\n ? acc.push(...sortable.content)\n : acc.push(sortable.content);\n return acc;\n }, [])\n .concat(regularTabbables);\n};\n\nconst tabbable = function (el, options) {\n options = options || {};\n\n let candidates;\n if (options.getShadowRoot) {\n candidates = getCandidatesIteratively([el], options.includeContainer, {\n filter: isNodeMatchingSelectorTabbable.bind(null, options),\n flatten: false,\n getShadowRoot: options.getShadowRoot,\n shadowRootFilter: isValidShadowRootTabbable,\n });\n } else {\n candidates = getCandidates(\n el,\n options.includeContainer,\n isNodeMatchingSelectorTabbable.bind(null, options)\n );\n }\n return sortByOrder(candidates);\n};\n\nconst focusable = function (el, options) {\n options = options || {};\n\n let candidates;\n if (options.getShadowRoot) {\n candidates = getCandidatesIteratively([el], options.includeContainer, {\n filter: isNodeMatchingSelectorFocusable.bind(null, options),\n flatten: true,\n getShadowRoot: options.getShadowRoot,\n });\n } else {\n candidates = getCandidates(\n el,\n options.includeContainer,\n isNodeMatchingSelectorFocusable.bind(null, options)\n );\n }\n\n return candidates;\n};\n\nconst isTabbable = function (node, options) {\n options = options || {};\n if (!node) {\n throw new Error('No node provided');\n }\n if (matches.call(node, candidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorTabbable(options, node);\n};\n\nconst focusableCandidateSelector = /* #__PURE__ */ candidateSelectors\n .concat('iframe')\n .join(',');\n\nconst isFocusable = function (node, options) {\n options = options || {};\n if (!node) {\n throw new Error('No node provided');\n }\n if (matches.call(node, focusableCandidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorFocusable(options, node);\n};\n\nexport { tabbable, focusable, isTabbable, isFocusable };\n","/* jshint browser: true */\n\n(function () {\n\n// We'll copy the properties below into the mirror div.\n// Note that some browsers, such as Firefox, do not concatenate properties\n// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n// so we have to list every single property explicitly.\nvar properties = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n\n 'letterSpacing',\n 'wordSpacing',\n\n 'tabSize',\n 'MozTabSize'\n\n];\n\nvar isBrowser = (typeof window !== 'undefined');\nvar isFirefox = (isBrowser && window.mozInnerScreenX != null);\n\nfunction getCaretCoordinates(element, position, options) {\n if (!isBrowser) {\n throw new Error('textarea-caret-position#getCaretCoordinates should only be called in a browser');\n }\n\n var debug = options && options.debug || false;\n if (debug) {\n var el = document.querySelector('#input-textarea-caret-position-mirror-div');\n if (el) el.parentNode.removeChild(el);\n }\n\n // The mirror div will replicate the textarea's style\n var div = document.createElement('div');\n div.id = 'input-textarea-caret-position-mirror-div';\n document.body.appendChild(div);\n\n var style = div.style;\n var computed = window.getComputedStyle ? window.getComputedStyle(element) : element.currentStyle; // currentStyle for IE < 9\n var isInput = element.nodeName === 'INPUT';\n\n // Default textarea styles\n style.whiteSpace = 'pre-wrap';\n if (!isInput)\n style.wordWrap = 'break-word'; // only for textarea-s\n\n // Position off-screen\n style.position = 'absolute'; // required to return coordinates properly\n if (!debug)\n style.visibility = 'hidden'; // not 'display: none' because we want rendering\n\n // Transfer the element's properties to the div\n properties.forEach(function (prop) {\n if (isInput && prop === 'lineHeight') {\n // Special case for <input>s because text is rendered centered and line height may be != height\n style.lineHeight = computed.height;\n } else {\n style[prop] = computed[prop];\n }\n });\n\n if (isFirefox) {\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n if (element.scrollHeight > parseInt(computed.height))\n style.overflowY = 'scroll';\n } else {\n style.overflow = 'hidden'; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n }\n\n div.textContent = element.value.substring(0, position);\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput)\n div.textContent = div.textContent.replace(/\\s/g, '\\u00a0');\n\n var span = document.createElement('span');\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textarea's content into the <span> created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = element.value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all\n div.appendChild(span);\n\n var coordinates = {\n top: span.offsetTop + parseInt(computed['borderTopWidth']),\n left: span.offsetLeft + parseInt(computed['borderLeftWidth']),\n height: parseInt(computed['lineHeight'])\n };\n\n if (debug) {\n span.style.backgroundColor = '#aaa';\n } else {\n document.body.removeChild(div);\n }\n\n return coordinates;\n}\n\nif (typeof module != 'undefined' && typeof module.exports != 'undefined') {\n module.exports = getCaretCoordinates;\n} else if(isBrowser) {\n window.getCaretCoordinates = getCaretCoordinates;\n}\n\n}());\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../../babel-loader/lib/index.js??ruleSet[1].rules[2]!./jquery.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"$\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"$\"] = ___EXPOSE_LOADER_IMPORT___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"jQuery\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"jQuery\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../../babel-loader/lib/index.js??ruleSet[1].rules[2]!./color-thief.min.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"ColorThief\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"ColorThief\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../babel-loader/lib/index.js??ruleSet[1].rules[2]!./dayjs.min.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"dayjs\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"dayjs\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../babel-loader/lib/index.js??ruleSet[1].rules[2]!./index.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"m\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"m\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../babel-loader/lib/index.js??ruleSet[1].rules[2]!./punycode.es6.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"punycode\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"punycode\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _getPrototypeOf(o);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return assertThisInitialized(self);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _setPrototypeOf(o, p);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import Component from '../Component';\nimport extract from '../utils/extract';\n\n/**\n * The link component enables both internal and external links.\n * It will return a regular HTML link for any links to external sites,\n * and it will use Mithril's m.route.Link for any internal links.\n *\n * Links will default to internal; the 'external' attr must be set to\n * `true` for the link to be external.\n */\nexport default class Link extends Component {\n view(vnode) {\n let {\n options = {},\n ...attrs\n } = vnode.attrs;\n attrs.href || (attrs.href = '');\n const children = vnode.children;\n if (attrs.external) {\n return m(\"a\", attrs, children);\n }\n\n // If the href URL of the link is the same as the current page path\n // we will not add a new entry to the browser history.\n // This allows us to still refresh the Page component\n // without adding endless history entries.\n if (attrs.href === m.route.get()) {\n if (!('replace' in options)) options.replace = true;\n }\n\n // Mithril 2 does not completely rerender the page if a route change leads to the same route\n // (or the same component handling a different route).\n // Here, the `force` parameter will use Mithril's key system to force a full rerender\n // see https://mithril.js.org/route.html#key-parameter\n if (extract(attrs, 'force')) {\n if (!('state' in options)) options.state = {};\n if (!('key' in options.state)) options.state.key = Date.now();\n }\n attrs.options = options;\n return m(m.route.Link, attrs, children);\n }\n}\nflarum.reg.add('core', 'common/components/Link', Link);","import Button from './Button';\nimport Link from './Link';\nimport classList from '../utils/classList';\n\n/**\n * The `LinkButton` component defines a `Button` which links to a route.\n *\n * ### Attrs\n *\n * All of the attrs accepted by `Button`, plus:\n *\n * - `active` Whether or not the page that this button links to is currently\n * active.\n * - `href` The URL to link to. If the current URL `m.route()` matches this,\n * the `active` prop will automatically be set to true.\n * - `force` Whether the page should be fully rerendered. Defaults to `true`.\n */\nexport default class LinkButton extends Button {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n attrs.active = this.isActive(attrs);\n attrs.className = classList('LinkButton', attrs.className);\n if (attrs.force === undefined) attrs.force = true;\n }\n view(vnode) {\n const vdom = super.view(vnode);\n vdom.tag = Link;\n vdom.attrs.active = String(vdom.attrs.active);\n delete vdom.attrs.type;\n return vdom;\n }\n\n /**\n * Determine whether a component with the given attrs is 'active'.\n *\n * @param {object} attrs\n * @return {boolean}\n */\n static isActive(attrs) {\n var _m$route$get, _attrs$href;\n return typeof attrs.active !== 'undefined' ? attrs.active : ((_m$route$get = m.route.get()) == null ? void 0 : _m$route$get.split('?')[0]) === ((_attrs$href = attrs.href) == null ? void 0 : _attrs$href.split('?')[0]);\n }\n}\nflarum.reg.add('core', 'common/components/LinkButton', LinkButton);","import Component from '../Component';\n\n/**\n * The `Placeholder` component displays a muted text with some call to action,\n * usually used as an empty state.\n *\n * ### Attrs\n *\n * - `text`\n */\nexport default class Placeholder extends Component {\n view() {\n return m(\"div\", {\n className: \"Placeholder\"\n }, m(\"p\", null, this.attrs.text));\n }\n}\nflarum.reg.add('core', 'common/components/Placeholder', Placeholder);","import Component from '../Component';\n\n/**\n * The `Separator` component defines a menu separator item.\n */\nclass Separator extends Component {\n view() {\n return m(\"li\", {\n className: \"Dropdown-separator\"\n });\n }\n}\nSeparator.isListItem = true;\nexport default Separator;\nflarum.reg.add('core', 'common/components/Separator', Separator);","import app from '../../common/app';\nimport Component from '../Component';\nimport ItemList from '../utils/ItemList';\nimport listItems from '../helpers/listItems';\nimport Button from './Button';\nimport BasicEditorDriver from '../utils/BasicEditorDriver';\nimport Tooltip from './Tooltip';\nimport LoadingIndicator from './LoadingIndicator';\n\n/**\n * The `TextEditor` component displays a textarea with controls, including a\n * submit button.\n *\n * ### Attrs\n *\n * - `composer`\n * - `submitLabel`\n * - `value`\n * - `placeholder`\n * - `disabled`\n * - `preview`\n */\nexport default class TextEditor extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n /**\n * The value of the editor.\n *\n * @type {String}\n */\n this.value = this.attrs.value || '';\n\n /**\n * Whether the editor is disabled.\n */\n this.disabled = !!this.attrs.disabled;\n\n /**\n * Whether the editor is loading.\n */\n this.loading = true;\n\n /**\n * Async operations to complete before the editor is ready.\n */\n this._loaders = [];\n }\n view() {\n return m(\"div\", {\n className: \"TextEditor\"\n }, this.loading ? m(LoadingIndicator, null) : m('[', null, m(\"div\", {\n className: \"TextEditor-editorContainer\"\n }), m(\"ul\", {\n className: \"TextEditor-controls Composer-footer\"\n }, listItems(this.controlItems().toArray()), m(\"li\", {\n className: \"TextEditor-toolbar\"\n }, this.toolbarItems().toArray()))));\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this._load().then(() => {\n setTimeout(this.onbuild.bind(this), 50);\n });\n }\n onbuild() {\n this.attrs.composer.editor = this.buildEditor(this.$('.TextEditor-editorContainer')[0]);\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n const newDisabled = !!this.attrs.disabled;\n if (this.disabled !== newDisabled) {\n this.disabled = newDisabled;\n this.attrs.composer.editor.disabled(newDisabled);\n }\n }\n _load() {\n return Promise.all(this._loaders.map(loader => loader())).then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n buildEditorParams() {\n return {\n classNames: ['FormControl', 'Composer-flexible', 'TextEditor-editor'],\n disabled: this.disabled,\n placeholder: this.attrs.placeholder || '',\n value: this.value,\n oninput: this.oninput.bind(this),\n inputListeners: [],\n onsubmit: () => {\n this.onsubmit();\n m.redraw();\n }\n };\n }\n buildEditor(dom) {\n return new BasicEditorDriver(dom, this.buildEditorParams());\n }\n\n /**\n * Build an item list for the text editor controls.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n controlItems() {\n const items = new ItemList();\n items.add('submit', m(Button, {\n icon: \"fas fa-paper-plane\",\n className: \"Button Button--primary\",\n itemClassName: \"App-primaryControl\",\n onclick: this.onsubmit.bind(this)\n }, this.attrs.submitLabel));\n if (this.attrs.preview) {\n items.add('preview', m(Tooltip, {\n text: app.translator.trans('core.forum.composer.preview_tooltip')\n }, m(Button, {\n icon: \"far fa-eye\",\n className: \"Button Button--icon\",\n onclick: this.attrs.preview\n })));\n }\n return items;\n }\n\n /**\n * Build an item list for the toolbar controls.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n toolbarItems() {\n return new ItemList();\n }\n\n /**\n * Handle input into the textarea.\n *\n * @param {string} value\n */\n oninput(value) {\n this.value = value;\n this.attrs.onchange(this.value);\n }\n\n /**\n * Handle the submit button being clicked.\n */\n onsubmit() {\n this.attrs.onsubmit(this.value);\n }\n}\nflarum.reg.add('core', 'common/components/TextEditor', TextEditor);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { createFocusTrap } from './focusTrap';\n\n/**\n * The `Drawer` class controls the page's drawer. The drawer is the area the\n * slides out from the left on mobile devices; it contains the header and the\n * footer.\n */\nexport default class Drawer {\n constructor() {\n /**\n * @type {import('./focusTrap').FocusTrap}\n */\n _defineProperty(this, \"focusTrap\", void 0);\n /**\n * @type {HTMLDivElement}\n */\n _defineProperty(this, \"appElement\", void 0);\n /**\n * Handler for the `resize` event on `window`.\n *\n * This is used to close the drawer when the viewport is widened past the `phone` size.\n * At this point, the drawer turns into the standard header that we see on desktop, but\n * the drawer is still registered as 'open' internally.\n *\n * This causes issues with the focus trap, resulting in focus becoming trapped within\n * the header on desktop viewports.\n *\n * @internal\n */\n _defineProperty(this, \"resizeHandler\", (e => {\n if (!e.matches && this.isOpen()) {\n // Drawer is open but we've made window bigger, so hide it.\n this.hide();\n }\n }).bind(this));\n /**\n * @internal\n * @type {MediaQueryList}\n */\n _defineProperty(this, \"drawerAvailableMediaQuery\", void 0);\n // Set up an event handler so that whenever the content area is tapped,\n // the drawer will close.\n document.getElementById('content').addEventListener('click', e => {\n if (this.isOpen()) {\n e.preventDefault();\n this.hide();\n }\n });\n this.appElement = document.getElementById('app');\n // Despite the `focus-trap` documentation, both `clickOutsideDeactivates`\n // and `allowOutsideClick` are necessary so that inputs in modals triggered\n // from the drawer's nav components can be interacted with.\n this.focusTrap = createFocusTrap('#drawer', {\n allowOutsideClick: true,\n clickOutsideDeactivates: true\n });\n this.drawerAvailableMediaQuery = window.matchMedia(\"(max-width: \".concat(getComputedStyle(document.documentElement).getPropertyValue('--screen-phone-max'), \")\"));\n }\n /**\n * Check whether or not the drawer is currently open.\n *\n * @return {boolean}\n */\n isOpen() {\n return this.appElement.classList.contains('drawerOpen');\n }\n\n /**\n * Hide the drawer.\n */\n hide() {\n var _this$$backdrop, _this$$backdrop$remov;\n /**\n * As part of hiding the drawer, this function also ensures that the drawer\n * correctly animates out, while ensuring it is not part of the navigation\n * tree while off-screen.\n *\n * More info: https://github.com/flarum/core/pull/2666#discussion_r595381014\n */\n\n this.focusTrap.deactivate();\n this.drawerAvailableMediaQuery.removeListener(this.resizeHandler);\n if (!this.isOpen()) return;\n const $drawer = $('#drawer');\n\n // Used to prevent `visibility: hidden` from breaking the exit animation\n $drawer.css('visibility', 'visible').one('transitionend', () => $drawer.css('visibility', ''));\n this.appElement.classList.remove('drawerOpen');\n (_this$$backdrop = this.$backdrop) == null || (_this$$backdrop$remov = _this$$backdrop.remove) == null || _this$$backdrop$remov.call(_this$$backdrop);\n }\n\n /**\n * Show the drawer.\n */\n show() {\n this.appElement.classList.add('drawerOpen');\n this.drawerAvailableMediaQuery.addListener(this.resizeHandler);\n this.$backdrop = $('<div/>').addClass('drawer-backdrop fade').appendTo('body').on('click', this.hide.bind(this));\n requestAnimationFrame(() => {\n this.$backdrop.addClass('in');\n this.focusTrap.activate();\n });\n }\n}\nflarum.reg.add('core', 'common/utils/Drawer', Drawer);","/**\n * The `ScrollListener` class sets up a listener that handles element scroll\n * events.\n */\nexport default class ScrollListener {\n /**\n * @param {(top: number) => void} callback The callback to run when the scroll position\n * changes.\n * @param {Window|Element} element The element to listen for scroll events on. Defaults to\n * `window`.\n */\n constructor(callback, element) {\n if (element === void 0) {\n element = window;\n }\n this.callback = callback;\n this.ticking = false;\n this.element = element;\n }\n\n /**\n * On each animation frame, as long as the listener is active, run the\n * `update` method.\n *\n * @protected\n */\n loop() {\n // THROTTLE: If the callback is still running (or hasn't yet run), we ignore\n // further scroll events.\n if (this.ticking) return;\n\n // Schedule the callback to be executed soon (TM), and stop throttling once\n // the callback is done.\n requestAnimationFrame(() => {\n this.update();\n this.ticking = false;\n });\n this.ticking = true;\n }\n\n /**\n * Run the callback, whether there was a scroll event or not.\n */\n update() {\n this.callback(this.element.pageYOffset);\n }\n\n /**\n * Start listening to and handling the element's scroll position.\n */\n start() {\n if (!this.active) {\n this.element.addEventListener('scroll', this.active = this.loop.bind(this), {\n passive: true\n });\n }\n }\n\n /**\n * Stop listening to and handling the element's scroll position.\n */\n stop() {\n this.element.removeEventListener('scroll', this.active);\n this.active = null;\n }\n}\nflarum.reg.add('core', 'common/utils/ScrollListener', ScrollListener);","/**\n * The `anchorScroll` utility saves the scroll position relative to an element,\n * and then restores it after a callback has been run.\n *\n * This is useful if a redraw will change the page's content above the viewport.\n * Normally doing this will result in the content in the viewport being pushed\n * down or pulled up. By wrapping the redraw with this utility, the scroll\n * position can be anchor to an element that is in or below the viewport, so\n * the content in the viewport will stay the same.\n *\n * @param {string | HTMLElement | SVGElement | Element} element The element to anchor the scroll position to.\n * @param {() => void} callback The callback to run that will change page content.\n */\nexport default function anchorScroll(element, callback) {\n const $window = $(window);\n const relativeScroll = $(element).offset().top - $window.scrollTop();\n callback();\n $window.scrollTop($(element).offset().top - relativeScroll);\n}\nflarum.reg.add('core', 'common/utils/anchorScroll', anchorScroll);","/**\n * Check if class A is the same as or a subclass of class B.\n */\nexport default function subclassOf(A, B) {\n return A && (A === B || A.prototype instanceof B);\n}\nflarum.reg.add('core', 'common/utils/subclassOf', subclassOf);","import Component from '../../common/Component';\n\n/**\n * The `AffixedSidebar` component uses Bootstrap's \"affix\" plugin to keep a\n * sidebar navigation at the top of the viewport when scrolling.\n *\n * ### Children\n *\n * The component must wrap an element that itself wraps an <ul> element, which\n * will be \"affixed\".\n *\n * @see https://getbootstrap.com/docs/3.4/javascript/#affix\n */\nexport default class AffixedSidebar extends Component {\n view(vnode) {\n return vnode.children[0];\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n\n // Register the affix plugin to execute on every window resize (and trigger)\n this.boundOnresize = this.onresize.bind(this);\n $(window).on('resize', this.boundOnresize).resize();\n }\n onremove(vnode) {\n super.onremove(vnode);\n $(window).off('resize', this.boundOnresize);\n }\n onresize() {\n const $sidebar = this.$();\n const $header = $('#header');\n const $footer = $('#footer');\n const $affixElement = $sidebar.find('> ul');\n $(window).off('.affix');\n $affixElement.removeClass('affix affix-top affix-bottom').removeData('bs.affix');\n\n // Don't affix the sidebar if it is taller than the viewport (otherwise\n // there would be no way to scroll through its content).\n if ($sidebar.outerHeight(true) > $(window).height() - $header.outerHeight(true)) return;\n $affixElement.affix({\n offset: {\n top: () => $sidebar.offset().top - $header.outerHeight(true) - parseInt($sidebar.css('margin-top'), 10),\n bottom: () => this.bottom = $footer.outerHeight(true)\n }\n });\n }\n}\nflarum.reg.add('core', 'forum/components/AffixedSidebar', AffixedSidebar);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport listItems from '../../common/helpers/listItems';\nimport ItemList from '../../common/utils/ItemList';\nimport classList from '../../common/utils/classList';\nimport Button from '../../common/components/Button';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport Icon from '../../common/components/Icon';\nimport Avatar from '../../common/components/Avatar';\n\n/**\n * The `AvatarEditor` component displays a user's avatar along with a dropdown\n * menu which allows the user to upload/remove the avatar.\n *\n * ### Attrs\n *\n * - `className`\n * - `user`\n */\nexport default class AvatarEditor extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n /**\n * Whether or not an avatar upload is in progress.\n *\n * @type {Boolean}\n */\n this.loading = false;\n\n /**\n * Whether or not an image has been dragged over the dropzone.\n *\n * @type {Boolean}\n */\n this.isDraggedOver = false;\n }\n view() {\n const user = this.attrs.user;\n return m(\"div\", {\n className: classList(['AvatarEditor', 'Dropdown', this.attrs.className, this.loading && 'loading', this.isDraggedOver && 'dragover'])\n }, m(Avatar, {\n user: user,\n loading: \"eager\"\n }), m(\"a\", {\n className: user.avatarUrl() ? 'Dropdown-toggle' : 'Dropdown-toggle AvatarEditor--noAvatar',\n title: app.translator.trans('core.forum.user.avatar_upload_tooltip'),\n \"data-toggle\": \"dropdown\",\n onclick: this.quickUpload.bind(this),\n ondragover: this.enableDragover.bind(this),\n ondragenter: this.enableDragover.bind(this),\n ondragleave: this.disableDragover.bind(this),\n ondragend: this.disableDragover.bind(this),\n ondrop: this.dropUpload.bind(this)\n }, this.loading ? m(LoadingIndicator, {\n display: \"unset\",\n size: \"large\"\n }) : user.avatarUrl() ? m(Icon, {\n name: 'fas fa-pencil-alt'\n }) : m(Icon, {\n name: 'fas fa-plus-circle'\n })), m(\"ul\", {\n className: \"Dropdown-menu Menu\"\n }, listItems(this.controlItems().toArray())));\n }\n\n /**\n * Get the items in the edit avatar dropdown menu.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n controlItems() {\n const items = new ItemList();\n items.add('upload', m(Button, {\n icon: \"fas fa-upload\",\n onclick: this.openPicker.bind(this)\n }, app.translator.trans('core.forum.user.avatar_upload_button')));\n items.add('remove', m(Button, {\n icon: \"fas fa-times\",\n onclick: this.remove.bind(this)\n }, app.translator.trans('core.forum.user.avatar_remove_button')));\n return items;\n }\n\n /**\n * Enable dragover style\n *\n * @param {DragEvent} e\n */\n enableDragover(e) {\n e.preventDefault();\n e.stopPropagation();\n this.isDraggedOver = true;\n }\n\n /**\n * Disable dragover style\n *\n * @param {DragEvent} e\n */\n disableDragover(e) {\n e.preventDefault();\n e.stopPropagation();\n this.isDraggedOver = false;\n }\n\n /**\n * Upload avatar when file is dropped into dropzone.\n *\n * @param {DragEvent} e\n */\n dropUpload(e) {\n e.preventDefault();\n e.stopPropagation();\n this.isDraggedOver = false;\n this.upload(e.dataTransfer.files[0]);\n }\n\n /**\n * If the user doesn't have an avatar, there's no point in showing the\n * controls dropdown, because only one option would be viable: uploading.\n * Thus, when the avatar editor's dropdown toggle button is clicked, we prompt\n * the user to upload an avatar immediately.\n *\n * @param {MouseEvent} e\n */\n quickUpload(e) {\n if (!this.attrs.user.avatarUrl()) {\n e.preventDefault();\n e.stopPropagation();\n this.openPicker();\n }\n }\n\n /**\n * Upload avatar using file picker\n */\n openPicker() {\n if (this.loading) return;\n\n // Create a hidden HTML input element and click on it so the user can select\n // an avatar file. Once they have, we will upload it via the API.\n const $input = $('<input type=\"file\" accept=\".jpg, .jpeg, .png, .bmp, .gif\">');\n $input.appendTo('body').hide().click().on('input', e => {\n this.upload($(e.target)[0].files[0]);\n });\n }\n\n /**\n * Upload avatar\n *\n * @param {File} file\n */\n upload(file) {\n if (this.loading) return;\n const user = this.attrs.user;\n const data = new FormData();\n data.append('avatar', file);\n this.loading = true;\n m.redraw();\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/users/\").concat(user.id(), \"/avatar\"),\n serialize: raw => raw,\n body: data\n }).then(this.success.bind(this), this.failure.bind(this));\n }\n\n /**\n * Remove the user's avatar.\n */\n remove() {\n const user = this.attrs.user;\n this.loading = true;\n m.redraw();\n app.request({\n method: 'DELETE',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/users/\").concat(user.id(), \"/avatar\")\n }).then(this.success.bind(this), this.failure.bind(this));\n }\n\n /**\n * After a successful upload/removal, push the updated user data into the\n * store, and force a re-computation of the user's avatar color.\n *\n * @param {object} response\n * @protected\n */\n success(response) {\n app.store.pushPayload(response);\n delete this.attrs.user.avatarColor;\n this.loading = false;\n m.redraw();\n }\n\n /**\n * If avatar upload/removal fails, stop loading.\n *\n * @param {object} response\n * @protected\n */\n failure(response) {\n this.loading = false;\n m.redraw();\n }\n}\nflarum.reg.add('core', 'forum/components/AvatarEditor', AvatarEditor);","import Component from '../../common/Component';\nimport listItems from '../../common/helpers/listItems';\nimport UserCard from './UserCard';\nimport ComposerPostPreview from './ComposerPostPreview';\nimport app from '../app';\nimport escapeRegExp from '../../common/utils/escapeRegExp';\nimport highlight from '../../common/helpers/highlight';\nexport default class Comment extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view() {\n let contentHtml = this.attrs.isEditing ? '' : this.attrs.contentHtml;\n if (!this.attrs.isEditing && this.attrs.search) {\n const phrase = escapeRegExp(this.attrs.search);\n const highlightRegExp = new RegExp(phrase + '|' + phrase.trim().replace(/\\s+/g, '|'), 'gi');\n contentHtml = highlight(contentHtml, highlightRegExp, undefined, true);\n } else {\n contentHtml = m.trust(contentHtml);\n }\n return [m(\"header\", {\n className: \"Post-header\"\n }, m(\"ul\", null, listItems(this.attrs.headerItems.toArray())), !this.attrs.isHidden && this.attrs.cardVisible && m(UserCard, {\n user: this.attrs.user,\n className: \"UserCard--popover\",\n controlsButtonClassName: \"Button Button--icon Button--flat\"\n })), m(\"div\", {\n className: \"Post-body\"\n }, this.attrs.isEditing ? m(ComposerPostPreview, {\n className: \"Post-preview\",\n composer: app.composer\n }) : contentHtml)];\n }\n}\nflarum.reg.add('core', 'forum/components/Comment', Comment);","import app from '../../forum/app';\nimport Post from './Post';\nimport classList from '../../common/utils/classList';\nimport PostUser from './PostUser';\nimport PostMeta from './PostMeta';\nimport PostEdited from './PostEdited';\nimport ItemList from '../../common/utils/ItemList';\nimport Button from '../../common/components/Button';\nimport Link from '../../common/components/Link';\nimport Avatar from '../../common/components/Avatar';\nimport escapeRegExp from '../../common/utils/escapeRegExp';\nimport highlight from '../../common/helpers/highlight';\nimport Comment from './Comment';\n\n/**\n * The `CommentPost` component displays a standard `comment`-typed post. This\n * includes a number of item lists (controls, header, and footer) surrounding\n * the post's HTML content.\n *\n * ### Attrs\n *\n * - `post`\n */\nexport default class CommentPost extends Post {\n oninit(vnode) {\n super.oninit(vnode);\n\n /**\n * If the post has been hidden, then this flag determines whether or not its\n * content has been expanded.\n *\n * @type {Boolean}\n */\n this.revealContent = false;\n\n /**\n * Whether or not the user hover card inside of PostUser is visible.\n * The property must be managed in CommentPost to be able to use it in the subtree check\n *\n * @type {Boolean}\n */\n this.cardVisible = false;\n this.subtree.check(() => this.cardVisible, () => this.isEditing(), () => this.revealContent);\n }\n avatar() {\n const user = this.attrs.post.user();\n const view = m(Avatar, {\n user: user,\n className: \"Post-avatar\"\n });\n if (user) {\n return m(Link, {\n href: app.route.user(user)\n }, view);\n }\n return view;\n }\n content() {\n var _this$params;\n return super.content().concat([m(Comment, {\n headerItems: this.headerItems(),\n cardVisible: this.cardVisible,\n isEditing: this.isEditing(),\n isHidden: this.attrs.post.isHidden(),\n contentHtml: this.attrs.post.contentHtml(),\n user: this.attrs.post.user(),\n search: (_this$params = this.params) == null ? void 0 : _this$params.q\n })]);\n }\n refreshContent() {\n const contentHtml = this.isEditing() ? '' : this.attrs.post.contentHtml();\n\n // If the post content has changed since the last render, we'll run through\n // all of the <script> tags in the content and evaluate them. This is\n // necessary because TextFormatter outputs them for e.g. syntax highlighting.\n if (this.contentHtml !== contentHtml) {\n this.$('.Post-body script').each(function () {\n const script = document.createElement('script');\n script.textContent = this.textContent;\n Array.from(this.attributes).forEach(attr => script.setAttribute(attr.name, attr.value));\n this.parentNode.replaceChild(script, this);\n });\n }\n this.contentHtml = contentHtml;\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.listenForCard();\n this.refreshContent();\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n this.refreshContent();\n }\n isEditing() {\n const EditPostComposer = flarum.reg.checkModule('core', 'forum/components/EditPostComposer');\n if (!EditPostComposer) return false;\n return app.composer.bodyMatches(EditPostComposer, {\n post: this.attrs.post\n });\n }\n elementAttrs() {\n const post = this.attrs.post;\n const attrs = super.elementAttrs();\n attrs.className = classList(attrs.className, 'CommentPost', {\n 'Post--renderFailed': post.renderFailed(),\n 'Post--hidden': post.isHidden(),\n 'Post--edited': post.isEdited(),\n revealContent: this.revealContent,\n editing: this.isEditing()\n });\n if (this.isEditing()) attrs['aria-busy'] = 'true';\n return attrs;\n }\n\n /**\n * Toggle the visibility of a hidden post's content.\n */\n toggleContent() {\n this.revealContent = !this.revealContent;\n }\n\n /**\n * Build an item list for the post's header.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n headerItems() {\n const items = new ItemList();\n const post = this.attrs.post;\n items.add('user', m(PostUser, {\n post: post\n }), 100);\n items.add('meta', m(PostMeta, {\n post: post\n }));\n if (post.isEdited() && !post.isHidden()) {\n items.add('edited', m(PostEdited, {\n post: post\n }));\n }\n\n // If the post is hidden, add a button that allows toggling the visibility\n // of the post's content.\n if (post.isHidden()) {\n items.add('toggle', m(Button, {\n className: \"Button Button--default Button--more\",\n icon: \"fas fa-ellipsis-h\",\n onclick: this.toggleContent.bind(this)\n }));\n }\n return items;\n }\n listenForCard() {\n let timeout;\n this.$().on('mouseover', '.PostUser-name a, .UserCard, .Post-avatar', () => {\n clearTimeout(timeout);\n timeout = setTimeout(this.showCard.bind(this), 500);\n }).on('mouseout', '.PostUser-name a, .UserCard, .Post-avatar', () => {\n clearTimeout(timeout);\n timeout = setTimeout(this.hideCard.bind(this), 250);\n });\n }\n\n /**\n * Show the user card.\n */\n showCard() {\n this.cardVisible = true;\n m.redraw();\n setTimeout(() => this.$('.UserCard').addClass('in'));\n }\n\n /**\n * Hide the user card.\n */\n hideCard() {\n this.$('.UserCard').removeClass('in').one('transitionend webkitTransitionEnd oTransitionEnd', () => {\n this.cardVisible = false;\n m.redraw();\n });\n }\n}\nflarum.reg.add('core', 'forum/components/CommentPost', CommentPost);","/*global s9e*/\n\nimport Component from '../../common/Component';\n\n/**\n * The `ComposerPostPreview` component renders Markdown as HTML using the\n * TextFormatter library, polling a data source for changes every 50ms. This is\n * done to prevent expensive redraws on e.g. every single keystroke, while\n * still retaining the perception of live updates for the user.\n *\n * ### Attrs\n *\n * - `composer` The state of the composer controlling this preview.\n * - `className` A CSS class for the element surrounding the preview.\n * - `surround` A callback that can execute code before and after re-render, e.g. for scroll anchoring.\n */\nexport default class ComposerPostPreview extends Component {\n static initAttrs(attrs) {\n attrs.className = attrs.className || '';\n attrs.surround = attrs.surround || (preview => preview());\n }\n view() {\n return m(\"div\", {\n className: this.attrs.className\n });\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n\n // Every 50ms, if the composer content has changed, then update the post's\n // body with a preview.\n let preview;\n const updatePreview = () => {\n // Since we're polling, the composer may have been closed in the meantime,\n // so we bail in that case.\n if (!this.attrs.composer.isVisible()) return;\n const content = this.attrs.composer.fields.content();\n if (preview === content) return;\n preview = content;\n this.attrs.surround(() => s9e.TextFormatter.preview(preview || '', vnode.dom));\n };\n updatePreview();\n this.updateInterval = setInterval(updatePreview, 50);\n }\n onremove(vnode) {\n super.onremove(vnode);\n clearInterval(this.updateInterval);\n }\n}\nflarum.reg.add('core', 'forum/components/ComposerPostPreview', ComposerPostPreview);","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\n\n/**\n * The `DiscussionHero` component displays the hero on a discussion page.\n *\n * ### attrs\n *\n * - `discussion`\n */\nexport default class DiscussionHero extends Component {\n view() {\n return m(\"header\", {\n className: \"Hero DiscussionHero\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"ul\", {\n className: \"DiscussionHero-items\"\n }, listItems(this.items().toArray()))));\n }\n\n /**\n * Build an item list for the contents of the discussion hero.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n items() {\n const items = new ItemList();\n const discussion = this.attrs.discussion;\n const badges = discussion.badges().toArray();\n if (badges.length) {\n items.add('badges', m(\"ul\", {\n className: \"DiscussionHero-badges badges\"\n }, listItems(badges)), 10);\n }\n items.add('title', m(\"h1\", {\n className: \"DiscussionHero-title\"\n }, discussion.title()));\n return items;\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionHero', DiscussionHero);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport DiscussionListItem from './DiscussionListItem';\nimport Button from '../../common/components/Button';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport Placeholder from '../../common/components/Placeholder';\nimport classList from '../../common/utils/classList';\n\n/**\n * The `DiscussionList` component displays a list of discussions.\n *\n * ### Attrs\n *\n * - `state` A DiscussionListState object that represents the discussion lists's state.\n */\nexport default class DiscussionList extends Component {\n view() {\n /**\n * @type {import('../states/DiscussionListState').default}\n */\n const state = this.attrs.state;\n const params = state.getParams();\n const isLoading = state.isInitialLoading() || state.isLoadingNext();\n let loading;\n if (isLoading) {\n loading = m(LoadingIndicator, null);\n } else if (state.hasNext()) {\n loading = m(Button, {\n className: \"Button\",\n onclick: state.loadNext.bind(state)\n }, app.translator.trans('core.forum.discussion_list.load_more_button'));\n }\n if (state.isEmpty()) {\n const text = app.translator.trans('core.forum.discussion_list.empty_text');\n return m(\"div\", {\n className: \"DiscussionList\"\n }, m(Placeholder, {\n text: text\n }));\n }\n const pageSize = state.pageSize;\n return m(\"div\", {\n className: classList('DiscussionList', {\n 'DiscussionList--searchResults': state.isSearchResults()\n })\n }, m(\"ul\", {\n role: \"feed\",\n \"aria-busy\": isLoading,\n className: \"DiscussionList-discussions\"\n }, state.getPages().map((pg, pageNum) => {\n return pg.items.map((discussion, itemNum) => m(\"li\", {\n key: discussion.id(),\n \"data-id\": discussion.id(),\n role: \"article\",\n \"aria-setsize\": \"-1\",\n \"aria-posinset\": pageNum * pageSize + itemNum\n }, m(DiscussionListItem, {\n discussion: discussion,\n params: params\n })));\n })), m(\"div\", {\n className: \"DiscussionList-loadMore\"\n }, loading));\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionList', DiscussionList);","import app from '../../forum/app';\nimport DiscussionList from './DiscussionList';\nimport Component from '../../common/Component';\nimport DiscussionPage from './DiscussionPage';\nconst hotEdge = e => {\n if (e.pageX < 10) app.pane.show();\n};\n\n/**\n * The `DiscussionListPane` component displays the list of previously viewed\n * discussions in a panel that can be displayed by moving the mouse to the left\n * edge of the screen, where it can also be pinned in place.\n *\n * ### Attrs\n *\n * - `state` A DiscussionListState object that represents the discussion lists's state.\n */\nexport default class DiscussionListPane extends Component {\n view() {\n if (!this.attrs.state.hasItems()) {\n return;\n }\n return m(\"aside\", {\n className: \"DiscussionListPane\"\n }, this.enoughSpace() && m(DiscussionList, {\n state: this.attrs.state\n }));\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n const $list = $(vnode.dom);\n\n // When the mouse enters and leaves the discussions pane, we want to show\n // and hide the pane respectively. We also create a 10px 'hot edge' on the\n // left of the screen to activate the pane.\n const pane = app.pane;\n $list.hover(pane.show.bind(pane), pane.onmouseleave.bind(pane));\n $(document).on('mousemove', hotEdge);\n\n // When coming from another discussion, scroll to the previous postition\n // to prevent the discussion list jumping around.\n if (app.previous.matches(DiscussionPage)) {\n const top = app.cache.discussionListPaneScrollTop || 0;\n $list.scrollTop(top);\n } else {\n // If the discussion we are viewing is listed in the discussion list, then\n // we will make sure it is visible in the viewport – if it is not we will\n // scroll the list down to it.\n const $discussion = $list.find('.DiscussionListItem.active');\n if ($discussion.length) {\n const listTop = $list.offset().top;\n const listBottom = listTop + $list.outerHeight();\n const discussionTop = $discussion.offset().top;\n const discussionBottom = discussionTop + $discussion.outerHeight();\n if (discussionTop < listTop || discussionBottom > listBottom) {\n $list.scrollTop($list.scrollTop() - listTop + discussionTop);\n }\n }\n }\n }\n onremove(vnode) {\n app.cache.discussionListPaneScrollTop = $(vnode.dom).scrollTop();\n $(document).off('mousemove', hotEdge);\n }\n\n /**\n * Are we on a device that's larger than we consider \"mobile\"?\n *\n * @returns {boolean}\n */\n enoughSpace() {\n return !$('.App-navigation').is(':visible');\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionListPane', DiscussionListPane);","import app from '../../forum/app';\nimport EventPost from './EventPost';\nimport extractText from '../../common/utils/extractText';\nimport Tooltip from '../../common/components/Tooltip';\n\n/**\n * The `DiscussionRenamedPost` component displays a discussion event post\n * indicating that the discussion has been renamed.\n *\n * ### Attrs\n *\n * - All of the attrs for EventPost\n */\nexport default class DiscussionRenamedPost extends EventPost {\n icon() {\n return 'fas fa-pencil-alt';\n }\n description(data) {\n const renamed = app.translator.trans('core.forum.post_stream.discussion_renamed_text', data);\n return m(\"span\", null, renamed);\n }\n descriptionData() {\n const post = this.attrs.post;\n const oldTitle = post.content()[0];\n const newTitle = post.content()[1];\n return {\n new: m(Tooltip, {\n text: extractText(app.translator.trans('core.forum.post_stream.discussion_renamed_old_tooltip', {\n old: oldTitle\n }))\n }, m(\"strong\", {\n className: \"DiscussionRenamedPost-new\"\n }, newTitle))\n };\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionRenamedPost', DiscussionRenamedPost);","import app from '../../forum/app';\nimport Post from './Post';\nimport { ucfirst } from '../../common/utils/string';\nimport usernameHelper from '../../common/helpers/username';\nimport Link from '../../common/components/Link';\nimport humanTime from '../../common/helpers/humanTime';\nimport classList from '../../common/utils/classList';\nimport Icon from '../../common/components/Icon';\n\n/**\n * The `EventPost` component displays a post which indicating a discussion\n * event, like a discussion being renamed or stickied. Subclasses must implement\n * the `icon` and `description` methods.\n *\n * ### Attrs\n *\n * - All of the attrs for `Post`\n *\n * @abstract\n */\nexport default class EventPost extends Post {\n elementAttrs() {\n const attrs = super.elementAttrs();\n attrs.className = classList(attrs.className, 'EventPost', ucfirst(this.attrs.post.contentType()) + 'Post');\n return attrs;\n }\n avatar() {\n return m(Icon, {\n name: this.icon(),\n className: \"EventPost-icon\"\n });\n }\n content() {\n const user = this.attrs.post.user();\n const username = usernameHelper(user);\n const data = Object.assign(this.descriptionData(), {\n user,\n username: user ? m(Link, {\n className: \"EventPost-user\",\n href: app.route.user(user)\n }, username) : username,\n time: humanTime(this.attrs.post.createdAt())\n });\n return super.content().concat([m(\"div\", {\n className: \"EventPost-info\"\n }, this.description(data))]);\n }\n\n /**\n * Get the name of the event icon.\n *\n * @return {string}\n */\n icon() {\n return '';\n }\n\n /**\n * Get the description text for the event.\n *\n * @param {Record<string, unknown>} data\n * @return {import('mithril').Children} The description to render in the DOM\n */\n description(data) {\n return app.translator.trans(this.descriptionKey(), data);\n }\n\n /**\n * Get the translation key for the description of the event.\n *\n * @return {string}\n */\n descriptionKey() {\n return '';\n }\n\n /**\n * Get the translation data for the description of the event.\n *\n * @return {Record<string, unknown>}\n */\n descriptionData() {\n return {};\n }\n}\nflarum.reg.add('core', 'forum/components/EventPost', EventPost);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport Button from '../../common/components/Button';\nimport SessionDropdown from './SessionDropdown';\nimport SelectDropdown from '../../common/components/SelectDropdown';\nimport NotificationsDropdown from './NotificationsDropdown';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\nimport Search from '../components/Search';\n\n/**\n * The `HeaderSecondary` component displays secondary header controls, such as\n * the search box and the user menu. On the default skin, these are shown on the\n * right side of the header.\n */\nexport default class HeaderSecondary extends Component {\n view() {\n return m(\"ul\", {\n className: \"Header-controls\"\n }, listItems(this.items().toArray()));\n }\n\n /**\n * Build an item list for the controls.\n *\n * @return {ItemList}\n */\n items() {\n const items = new ItemList();\n items.add('search', m(Search, {\n state: app.search.state\n }), 30);\n if (app.forum.attribute('showLanguageSelector') && Object.keys(app.data.locales).length > 1) {\n const locales = [];\n for (const locale in app.data.locales) {\n locales.push(m(Button, {\n active: app.data.locale === locale,\n icon: app.data.locale === locale ? 'fas fa-check' : true,\n onclick: () => {\n if (app.session.user) {\n app.session.user.savePreferences({\n locale\n }).then(() => window.location.reload());\n } else {\n document.cookie = \"locale=\".concat(locale, \"; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT\");\n window.location.reload();\n }\n }\n }, app.data.locales[locale]));\n }\n items.add('locale', m(SelectDropdown, {\n buttonClassName: \"Button Button--link\",\n accessibleToggleLabel: app.translator.trans('core.forum.header.locale_dropdown_accessible_label')\n }, locales), 20);\n }\n if (app.session.user) {\n items.add('notifications', m(NotificationsDropdown, {\n state: app.notifications\n }), 10);\n items.add('session', m(SessionDropdown, null), 0);\n } else {\n if (app.forum.attribute('allowSignUp')) {\n items.add('signUp', m(Button, {\n className: \"Button Button--link\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'forum/components/SignUpModal', webpackMode: 'lazy-once' */ './SignUpModal'))\n }, app.translator.trans('core.forum.header.sign_up_link')), 10);\n }\n items.add('logIn', m(Button, {\n className: \"Button Button--link\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'forum/components/LogInModal', webpackMode: 'lazy-once' */ './LogInModal'))\n }, app.translator.trans('core.forum.header.log_in_link')), 0);\n }\n return items;\n }\n}\nflarum.reg.add('core', 'forum/components/HeaderSecondary', HeaderSecondary);flarum.reg.addChunkModule('559', '9509', 'core', 'forum/components/SignUpModal');","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\n\n/**\n * The `LogInButtons` component displays a collection of social login buttons.\n */\nexport default class LogInButtons extends Component {\n view() {\n return m(\"div\", {\n className: \"LogInButtons\"\n }, this.items().toArray());\n }\n\n /**\n * Build a list of LogInButton components.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n items() {\n return new ItemList();\n }\n}\nflarum.reg.add('core', 'forum/components/LogInButtons', LogInButtons);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from '../../common/Component';\nimport classList from '../../common/utils/classList';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nexport default class HeaderList extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"$content\", null);\n _defineProperty(this, \"$scrollParent\", null);\n _defineProperty(this, \"boundScrollHandler\", null);\n }\n view(vnode) {\n const {\n title,\n controls,\n hasItems,\n loading = false,\n emptyText,\n className,\n footer,\n ...attrs\n } = vnode.attrs;\n return m(\"div\", Object.assign({\n className: classList('HeaderList', className)\n }, attrs), m(\"div\", {\n className: \"HeaderList-header\"\n }, m(\"h4\", {\n className: \"App-titleControl App-titleControl--text\"\n }, title), m(\"div\", {\n className: \"App-primaryControl\"\n }, controls == null ? void 0 : controls.toArray())), m(\"div\", {\n className: \"HeaderList-content\"\n }, loading ? m(LoadingIndicator, {\n className: \"LoadingIndicator--block\"\n }) : hasItems ? vnode.children : m(\"div\", {\n className: \"HeaderList-empty\"\n }, emptyText)), !!footer && m(\"div\", {\n className: \"HeaderList-footer\"\n }, footer()));\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n if (this.attrs.loadMore) {\n this.$content = this.$('.HeaderList-content');\n\n // If we are on the notifications page, the window will be scrolling and not the $notifications element.\n this.$scrollParent = this.inPanel() ? this.$content : $(window);\n this.boundScrollHandler = this.scrollHandler.bind(this);\n this.$scrollParent.on('scroll', this.boundScrollHandler);\n }\n }\n onremove(vnode) {\n super.onremove(vnode);\n if (this.attrs.loadMore) {\n this.$scrollParent.off('scroll', this.boundScrollHandler);\n }\n }\n scrollHandler() {\n // Whole-page scroll events are listened to on `window`, but we need to get the actual\n // scrollHeight, scrollTop, and clientHeight from the document element.\n const scrollParent = this.inPanel() ? this.$scrollParent[0] : document.documentElement;\n\n // On very short screens, the scrollHeight + scrollTop might not reach the clientHeight\n // by a fraction of a pixel, so we compensate for that.\n const atBottom = Math.abs(scrollParent.scrollHeight - scrollParent.scrollTop - scrollParent.clientHeight) <= 1;\n if (atBottom) {\n var _this$attrs$loadMore, _this$attrs;\n (_this$attrs$loadMore = (_this$attrs = this.attrs).loadMore) == null || _this$attrs$loadMore.call(_this$attrs);\n }\n }\n\n /**\n * If the NotificationList component isn't in a panel (e.g. on NotificationPage when mobile),\n * we need to listen to scroll events on the window, and get scroll state from the body.\n */\n inPanel() {\n return this.$content.css('overflow') === 'auto';\n }\n}\nflarum.reg.add('core', 'forum/components/HeaderList', HeaderList);","import Component from '../../common/Component';\nimport listItems from '../../common/helpers/listItems';\nexport default class HeaderListGroup extends Component {\n view(vnode) {\n return m(\"div\", {\n className: \"HeaderListGroup\"\n }, m(\"div\", {\n className: \"HeaderListGroup-header\"\n }, vnode.attrs.label), m(\"ul\", {\n className: \"HeaderListGroup-content\"\n }, listItems(vnode.children)));\n }\n}\nflarum.reg.add('core', 'forum/components/HeaderListGroup', HeaderListGroup);","import Component from '../../common/Component';\nimport app from '../app';\nexport default class NotificationType extends Component {\n view() {\n const notification = this.attrs.notification;\n const NotificationComponent = app.notificationComponents[notification.contentType()];\n return !!NotificationComponent ? m(NotificationComponent, {\n notification: notification\n }) : null;\n }\n}\nflarum.reg.add('core', 'forum/components/NotificationType', NotificationType);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport listItems from '../../common/helpers/listItems';\nimport Button from '../../common/components/Button';\nimport Link from '../../common/components/Link';\nimport Discussion from '../../common/models/Discussion';\nimport ItemList from '../../common/utils/ItemList';\nimport Tooltip from '../../common/components/Tooltip';\nimport HeaderList from './HeaderList';\nimport HeaderListGroup from './HeaderListGroup';\nimport NotificationType from './NotificationType';\n\n/**\n * The `NotificationList` component displays a list of the logged-in user's\n * notifications, grouped by discussion.\n */\nexport default class NotificationList extends Component {\n view() {\n const state = this.attrs.state;\n return m(HeaderList, {\n className: \"NotificationList\",\n title: app.translator.trans('core.forum.notifications.title'),\n controls: this.controlItems(),\n hasItems: state.hasItems(),\n loading: state.isLoading(),\n emptyText: app.translator.trans('core.forum.notifications.empty_text'),\n loadMore: () => state.hasNext() && !state.isLoadingNext() && state.loadNext()\n }, this.content(state));\n }\n controlItems() {\n const items = new ItemList();\n const state = this.attrs.state;\n items.add('mark_all_as_read', m(Tooltip, {\n text: app.translator.trans('core.forum.notifications.mark_all_as_read_tooltip')\n }, m(Button, {\n className: \"Button Button--link\",\n \"data-container\": \".NotificationList\",\n icon: \"fas fa-check\",\n title: app.translator.trans('core.forum.notifications.mark_all_as_read_tooltip'),\n onclick: state.markAllAsRead.bind(state)\n })), 70);\n items.add('delete_all', m(Tooltip, {\n text: app.translator.trans('core.forum.notifications.delete_all_tooltip')\n }, m(Button, {\n className: \"Button Button--link\",\n \"data-container\": \".NotificationList\",\n icon: \"fas fa-trash-alt\",\n title: app.translator.trans('core.forum.notifications.delete_all_tooltip'),\n onclick: () => {\n if (confirm(app.translator.trans('core.forum.notifications.delete_all_confirm'))) {\n state.deleteAll.call(state);\n }\n }\n })), 50);\n return items;\n }\n content(state) {\n if (!state.isLoading() && state.hasItems()) {\n return state.getPages().map(page => {\n const groups = [];\n const discussions = {};\n page.items.forEach(notification => {\n const subject = notification.subject();\n if (typeof subject === 'undefined') return;\n\n // Get the discussion that this notification is related to. If it's not\n // directly related to a discussion, it may be related to a post or\n // other entity which is related to a discussion.\n let discussion = null;\n if (subject instanceof Discussion) discussion = subject;else if (subject && subject.discussion) discussion = subject.discussion();\n\n // If the notification is not related to a discussion directly or\n // indirectly, then we will assign it to a neutral group.\n const key = discussion ? discussion.id() : 0;\n discussions[key] = discussions[key] || {\n discussion: discussion,\n notifications: []\n };\n discussions[key].notifications.push(notification);\n if (groups.indexOf(discussions[key]) === -1) {\n groups.push(discussions[key]);\n }\n });\n return groups.map(group => {\n const badges = group.discussion && group.discussion.badges().toArray();\n return m(HeaderListGroup, {\n label: group.discussion ? m(Link, {\n href: app.route.discussion(group.discussion)\n }, badges && !!badges.length && m(\"ul\", {\n className: \"HeaderListGroup-badges badges\"\n }, listItems(badges)), m(\"span\", null, group.discussion.title())) : app.forum.attribute('title')\n }, group.notifications.map(notification => m(NotificationType, {\n notification: notification\n })).filter(component => !!component));\n });\n });\n }\n return null;\n }\n}\nflarum.reg.add('core', 'forum/components/NotificationList', NotificationList);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport humanTime from '../../common/utils/humanTime';\nimport Tooltip from '../../common/components/Tooltip';\n\n/**\n * The `PostEdited` component displays information about when and by whom a post\n * was edited.\n *\n * ### Attrs\n *\n * - `post`\n */\nexport default class PostEdited extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view() {\n const post = this.attrs.post;\n const editedUser = post.editedUser();\n const editedInfo = app.translator.trans('core.forum.post.edited_tooltip', {\n user: editedUser,\n ago: humanTime(post.editedAt())\n });\n return m(Tooltip, {\n text: editedInfo\n }, m(\"span\", {\n className: \"PostEdited\"\n }, app.translator.trans('core.forum.post.edited_text')));\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n }\n}\nflarum.reg.add('core', 'forum/components/PostEdited', PostEdited);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport humanTime from '../../common/helpers/humanTime';\nimport Icon from '../../common/components/Icon';\n\n/**\n * Displays information about a the first or last post in a discussion.\n *\n * ### Attrs\n *\n * - `discussion`\n * - `lastPost`\n */\nexport default class TerminalPost extends Component {\n view() {\n const discussion = this.attrs.discussion;\n const lastPost = this.attrs.lastPost && discussion.replyCount();\n const user = discussion[lastPost ? 'lastPostedUser' : 'user']();\n const time = discussion[lastPost ? 'lastPostedAt' : 'createdAt']();\n return m(\"span\", null, !!lastPost && m(Icon, {\n name: 'fas fa-reply'\n }), ' ', app.translator.trans('core.forum.discussion_list.' + (lastPost ? 'replied' : 'started') + '_text', {\n user,\n ago: humanTime(time)\n }));\n }\n}\nflarum.reg.add('core', 'forum/components/TerminalPost', TerminalPost);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport humanTime from '../../common/utils/humanTime';\nimport ItemList from '../../common/utils/ItemList';\nimport UserControls from '../utils/UserControls';\nimport username from '../../common/helpers/username';\nimport Dropdown from '../../common/components/Dropdown';\nimport Link from '../../common/components/Link';\nimport AvatarEditor from './AvatarEditor';\nimport listItems from '../../common/helpers/listItems';\nimport classList from '../../common/utils/classList';\nimport Icon from '../../common/components/Icon';\nimport Avatar from '../../common/components/Avatar';\n\n/**\n * The `UserCard` component displays a user's profile card. This is used both on\n * the `UserPage` (in the hero) and in discussions, shown when hovering over a\n * post author.\n *\n * ### Attrs\n *\n * - `user`\n * - `className`\n * - `editable`\n * - `controlsButtonClassName`\n */\nexport default class UserCard extends Component {\n view() {\n const user = this.attrs.user;\n const color = user.color();\n return m(\"div\", {\n className: classList('UserCard', this.attrs.className),\n style: color && !window.testing && {\n '--usercard-bg': color\n }\n }, m(\"div\", {\n className: \"darkenBackground\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"div\", {\n className: \"UserCard-profile\"\n }, this.profileItems().toArray()), m(\"div\", {\n className: \"UserCard-controls\"\n }, this.controlsItems().toArray()))));\n }\n profileItems() {\n const items = new ItemList();\n items.add('avatar', this.avatar(), 100);\n items.add('content', this.content(), 10);\n return items;\n }\n avatar() {\n const user = this.attrs.user;\n return this.attrs.editable ? m(AvatarEditor, {\n user: user,\n className: \"UserCard-avatar\"\n }) : m(Link, {\n href: app.route.user(user)\n }, m(\"div\", {\n className: \"UserCard-avatar\"\n }, m(Avatar, {\n user: user,\n loading: \"eager\"\n })));\n }\n content() {\n return m(\"div\", {\n className: \"UserCard-content\"\n }, this.contentItems().toArray());\n }\n contentItems() {\n const items = new ItemList();\n const user = this.attrs.user;\n const badges = user.badges().toArray();\n items.add('identity', m(\"h1\", {\n className: \"UserCard-identity\"\n }, username(user)), 100);\n if (badges.length) {\n items.add('badges', m(\"ul\", {\n className: \"UserCard-badges badges\"\n }, listItems(badges)), 90);\n }\n items.add('info', m(\"ul\", {\n className: \"UserCard-info\"\n }, listItems(this.infoItems().toArray())), 80);\n return items;\n }\n\n /**\n * Build an item list of tidbits of info to show on this user's profile.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n infoItems() {\n const items = new ItemList();\n const user = this.attrs.user;\n const lastSeenAt = user.lastSeenAt();\n if (lastSeenAt) {\n const online = user.isOnline();\n items.add('lastSeen', m(\"span\", {\n className: classList('UserCard-lastSeen', {\n online\n })\n }, online ? [m(Icon, {\n name: 'fas fa-circle'\n }), ' ', app.translator.trans('core.forum.user.online_text')] : [m(Icon, {\n name: 'far fa-clock'\n }), ' ', humanTime(lastSeenAt)]), 100);\n }\n items.add('joined', app.translator.trans('core.forum.user.joined_date_text', {\n ago: humanTime(user.joinTime())\n }), 90);\n return items;\n }\n controlsItems() {\n const items = new ItemList();\n const user = this.attrs.user;\n const controls = UserControls.controls(user, this).toArray();\n if (controls.length) {\n items.add('controls', m(Dropdown, {\n className: \"App-primaryControl\",\n menuClassName: \"Dropdown-menu--right\",\n buttonClassName: this.attrs.controlsButtonClassName,\n label: app.translator.trans('core.forum.user_controls.button'),\n accessibleToggleLabel: app.translator.trans('core.forum.user_controls.toggle_dropdown_accessible_label'),\n icon: \"fas fa-ellipsis-v\"\n }, controls), 100);\n }\n return items;\n }\n}\nflarum.reg.add('core', 'forum/components/UserCard', UserCard);","import app from '../../forum/app';\nimport DiscussionPage from '../components/DiscussionPage';\nimport Button from '../../common/components/Button';\nimport Separator from '../../common/components/Separator';\nimport RenameDiscussionModal from '../components/RenameDiscussionModal';\nimport ItemList from '../../common/utils/ItemList';\nimport extractText from '../../common/utils/extractText';\n\n/**\n * The `DiscussionControls` utility constructs a list of buttons for a\n * discussion which perform actions on it.\n */\nconst DiscussionControls = {\n /**\n * Get a list of controls for a discussion.\n *\n * @param {import('../../common/models/Discussion').default} discussion\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n controls(discussion, context) {\n const items = new ItemList();\n ['user', 'moderation', 'destructive'].forEach(section => {\n const controls = this[section + 'Controls'](discussion, context).toArray();\n if (controls.length) {\n controls.forEach(item => items.add(item.itemName, item));\n items.add(section + 'Separator', m(Separator, null));\n }\n });\n return items;\n },\n /**\n * Get controls for a discussion pertaining to the current user (e.g. reply,\n * follow).\n *\n * @param {import('../../common/models/Discussion').default} discussion\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n * @protected\n */\n userControls(discussion, context) {\n const items = new ItemList();\n\n // Only add a reply control if this is the discussion's controls dropdown\n // for the discussion page itself. We don't want it to show up for\n // discussions in the discussion list, etc.\n if (context instanceof DiscussionPage) {\n items.add('reply', !app.session.user || discussion.canReply() ? m(Button, {\n icon: \"fas fa-reply\",\n onclick: () => {\n // If the user is not logged in, the promise rejects, and a login modal shows up.\n // Since that's already handled, we dont need to show an error message in the console.\n return this.replyAction.bind(discussion)(true, false).catch(() => {});\n }\n }, app.translator.trans(app.session.user ? 'core.forum.discussion_controls.reply_button' : 'core.forum.discussion_controls.log_in_to_reply_button')) : m(Button, {\n icon: \"fas fa-reply\",\n className: \"disabled\",\n title: extractText(app.translator.trans('core.forum.discussion_controls.cannot_reply_text'))\n }, app.translator.trans('core.forum.discussion_controls.cannot_reply_button')));\n }\n return items;\n },\n /**\n * Get controls for a discussion pertaining to moderation (e.g. rename, lock).\n *\n * @param {import('../../common/models/Discussion').default} discussion\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n * @protected\n */\n moderationControls(discussion) {\n const items = new ItemList();\n if (discussion.canRename()) {\n items.add('rename', m(Button, {\n icon: \"fas fa-pencil-alt\",\n onclick: this.renameAction.bind(discussion)\n }, app.translator.trans('core.forum.discussion_controls.rename_button')));\n }\n return items;\n },\n /**\n * Get controls for a discussion which are destructive (e.g. delete).\n *\n * @param {import('../../common/models/Discussion').default} discussion\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n * @protected\n */\n destructiveControls(discussion) {\n const items = new ItemList();\n if (!discussion.isHidden()) {\n if (discussion.canHide()) {\n items.add('hide', m(Button, {\n icon: \"far fa-trash-alt\",\n onclick: this.hideAction.bind(discussion)\n }, app.translator.trans('core.forum.discussion_controls.delete_button')));\n }\n } else {\n if (discussion.canHide()) {\n items.add('restore', m(Button, {\n icon: \"fas fa-reply\",\n onclick: this.restoreAction.bind(discussion)\n }, app.translator.trans('core.forum.discussion_controls.restore_button')));\n }\n if (discussion.canDelete()) {\n items.add('delete', m(Button, {\n icon: \"fas fa-times\",\n onclick: this.deleteAction.bind(discussion)\n }, app.translator.trans('core.forum.discussion_controls.delete_forever_button')));\n }\n }\n return items;\n },\n /**\n * Open the reply composer for the discussion. A promise will be returned,\n * which resolves when the composer opens successfully. If the user is not\n * logged in, they will be prompted. If they don't have permission to\n * reply, the promise will be rejected.\n *\n * @param {boolean} goToLast Whether or not to scroll down to the last post if the discussion is being viewed.\n * @param {boolean} forceRefresh Whether or not to force a reload of the composer component, even if it is already open for this discussion.\n *\n * @return {Promise<ComposerState>}\n */\n async replyAction(goToLast, forceRefresh) {\n if (app.session.user) {\n if (this.canReply()) {\n if (!app.composer.composingReplyTo(this) || forceRefresh) {\n await app.composer.load(() => import(/* webpackChunkName: 'forum/components/ReplyComposer', webpackMode: 'lazy-once' */ '../components/ReplyComposer'), {\n user: app.session.user,\n discussion: this\n });\n }\n await app.composer.show();\n if (goToLast && app.viewingDiscussion(this) && !app.composer.isFullScreen()) {\n await app.current.get('stream').goToNumber('reply');\n }\n return Promise.resolve(app.composer);\n } else {\n return Promise.reject();\n }\n }\n await app.modal.show(() => import(/* webpackChunkName: 'forum/components/LogInModal', webpackMode: 'lazy-once' */ '../components/LogInModal'));\n return Promise.reject();\n },\n /**\n * Hide a discussion.\n *\n * @return {Promise<void>}\n */\n hideAction() {\n this.pushData({\n attributes: {\n hiddenAt: new Date()\n },\n relationships: {\n hiddenUser: app.session.user\n }\n });\n return this.save({\n isHidden: true\n });\n },\n /**\n * Restore a discussion.\n *\n * @return {Promise<void>}\n */\n restoreAction() {\n this.pushData({\n attributes: {\n hiddenAt: null\n },\n relationships: {\n hiddenUser: null\n }\n });\n return this.save({\n isHidden: false\n });\n },\n /**\n * Delete the discussion after confirming with the user.\n *\n * @return {Promise<void>}\n */\n deleteAction() {\n if (confirm(extractText(app.translator.trans('core.forum.discussion_controls.delete_confirmation')))) {\n // If we're currently viewing the discussion that was deleted, go back\n // to the previous page.\n if (app.viewingDiscussion(this)) {\n app.history.back();\n }\n return this.delete().then(() => app.discussions.removeDiscussion(this));\n }\n },\n /**\n * Rename the discussion.\n */\n renameAction() {\n return app.modal.show(RenameDiscussionModal, {\n currentTitle: this.title(),\n discussion: this\n });\n }\n};\nexport default DiscussionControls;\nflarum.reg.add('core', 'forum/utils/DiscussionControls', DiscussionControls);flarum.reg.addChunkModule('378', '6349', 'core', 'forum/components/ReplyComposer');\nflarum.reg.addChunkModule('378', '6349', 'core', 'forum/components/ComposerBody');\nflarum.reg.addChunkModule('378', '6349', 'core', 'common/components/ConfirmDocumentUnload');\nflarum.reg.addChunkModule('226', '1793', 'core', 'forum/components/LogInModal');\nflarum.reg.addChunkModule('226', '1793', 'core', 'forum/components/ForgotPasswordModal');","/**\n * The `Pane` class manages the page's discussion list sidepane. The pane is a\n * part of the content view (DiscussionPage component), but its visibility is\n * determined by CSS classes applied to the outer page element. This class\n * manages the application of those CSS classes.\n */\nexport default class Pane {\n constructor(element) {\n /**\n * The localStorage key to store the pane's pinned state with.\n *\n * @type {String}\n * @protected\n */\n this.pinnedKey = 'panePinned';\n\n /**\n * The page element.\n *\n * @type {jQuery}\n * @protected\n */\n this.$element = $(element);\n\n /**\n * Whether or not the pane is currently pinned.\n *\n * @type {Boolean}\n * @protected\n */\n this.pinned = localStorage.getItem(this.pinnedKey) === 'true';\n\n /**\n * Whether or not the pane is currently exists.\n *\n * @type {Boolean}\n * @protected\n */\n this.active = false;\n\n /**\n * Whether or not the pane is currently showing, or is hidden off the edge\n * of the screen.\n *\n * @type {Boolean}\n * @protected\n */\n this.showing = false;\n this.render();\n }\n\n /**\n * Enable the pane.\n */\n enable() {\n this.active = true;\n this.render();\n }\n\n /**\n * Disable the pane.\n */\n disable() {\n this.active = false;\n this.showing = false;\n this.render();\n }\n\n /**\n * Show the pane.\n */\n show() {\n clearTimeout(this.hideTimeout);\n this.showing = true;\n this.render();\n }\n\n /**\n * Hide the pane.\n */\n hide() {\n this.showing = false;\n this.render();\n }\n\n /**\n * Begin a timeout to hide the pane, which can be cancelled by showing the\n * pane.\n */\n onmouseleave() {\n this.hideTimeout = setTimeout(this.hide.bind(this), 250);\n }\n\n /**\n * Toggle whether or not the pane is pinned.\n */\n togglePinned() {\n this.pinned = !this.pinned;\n localStorage.setItem(this.pinnedKey, this.pinned ? 'true' : 'false');\n this.render();\n }\n\n /**\n * Apply the appropriate CSS classes to the page element.\n *\n * @protected\n */\n render() {\n this.$element.toggleClass('panePinned', this.pinned).toggleClass('hasPane', this.active).toggleClass('paneShowing', this.showing);\n }\n}\nflarum.reg.add('core', 'forum/utils/Pane', Pane);","import app from '../../forum/app';\nimport Button from '../../common/components/Button';\nimport Separator from '../../common/components/Separator';\nimport ItemList from '../../common/utils/ItemList';\nimport extractText from '../../common/utils/extractText';\n\n/**\n * The `PostControls` utility constructs a list of buttons for a post which\n * perform actions on it.\n */\nconst PostControls = {\n /**\n * Get a list of controls for a post.\n *\n * @param {import('../../common/models/Post').default} post\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}')}\n */\n controls(post, context) {\n const items = new ItemList();\n ['user', 'moderation', 'destructive'].forEach(section => {\n const controls = this[section + 'Controls'](post, context).toArray();\n if (controls.length) {\n controls.forEach(item => items.add(item.itemName, item));\n items.add(section + 'Separator', m(Separator, null));\n }\n });\n return items;\n },\n /**\n * Get controls for a post pertaining to the current user (e.g. report).\n *\n * @param {import('../../common/models/Post').default} post\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}')}\n * @protected\n */\n userControls(post, context) {\n return new ItemList();\n },\n /**\n * Get controls for a post pertaining to moderation (e.g. edit).\n *\n * @param {import('../../common/models/Post').default} post\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}')}\n * @protected\n */\n moderationControls(post, context) {\n const items = new ItemList();\n if (post.contentType() === 'comment' && post.canEdit()) {\n if (!post.isHidden()) {\n items.add('edit', m(Button, {\n icon: \"fas fa-pencil-alt\",\n onclick: this.editAction.bind(post)\n }, app.translator.trans('core.forum.post_controls.edit_button')));\n }\n }\n return items;\n },\n /**\n * Get controls for a post that are destructive (e.g. delete).\n *\n * @param {import('../../common/models/Post').default} post\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}')}\n * @protected\n */\n destructiveControls(post, context) {\n const items = new ItemList();\n if (post.contentType() === 'comment' && !post.isHidden()) {\n if (post.canHide()) {\n items.add('hide', m(Button, {\n icon: \"far fa-trash-alt\",\n onclick: this.hideAction.bind(post)\n }, app.translator.trans('core.forum.post_controls.delete_button')));\n }\n } else {\n if (post.contentType() === 'comment' && post.canHide()) {\n items.add('restore', m(Button, {\n icon: \"fas fa-reply\",\n onclick: this.restoreAction.bind(post)\n }, app.translator.trans('core.forum.post_controls.restore_button')));\n }\n if (post.canDelete()) {\n items.add('delete', m(Button, {\n icon: \"fas fa-times\",\n onclick: this.deleteAction.bind(post, context)\n }, app.translator.trans('core.forum.post_controls.delete_forever_button')));\n }\n }\n return items;\n },\n /**\n * Open the composer to edit a post.\n *\n * @return {Promise<void>}\n */\n editAction() {\n return new Promise(resolve => {\n app.composer.load(() => import(/* webpackChunkName: 'forum/components/EditPostComposer', webpackMode: 'lazy-once' */ '../components/EditPostComposer'), {\n post: this\n }).then(() => app.composer.show());\n return resolve();\n });\n },\n /**\n * Hide a post.\n *\n * @return {Promise<void>}\n */\n hideAction() {\n if (!confirm(extractText(app.translator.trans('core.forum.post_controls.hide_confirmation')))) return;\n this.pushData({\n attributes: {\n hiddenAt: new Date()\n },\n relationships: {\n hiddenUser: app.session.user\n }\n });\n return this.save({\n isHidden: true\n }).then(() => m.redraw());\n },\n /**\n * Restore a post.\n *\n * @return {Promise<void>}\n */\n restoreAction() {\n this.pushData({\n attributes: {\n hiddenAt: null\n },\n relationships: {\n hiddenUser: null\n }\n });\n return this.save({\n isHidden: false\n }).then(() => m.redraw());\n },\n /**\n * Delete a post.\n *\n * @return {Promise<void>}\n */\n deleteAction(context) {\n if (!confirm(extractText(app.translator.trans('core.forum.post_controls.delete_confirmation')))) return;\n if (context) context.loading = true;\n return this.delete().then(() => {\n const discussion = this.discussion();\n discussion.removePost(this.id());\n\n // If this was the last post in the discussion, then we will assume that\n // the whole discussion was deleted too.\n if (!discussion.postIds().length) {\n app.discussions.removeDiscussion(discussion);\n if (app.viewingDiscussion(discussion)) {\n app.history.back();\n }\n }\n }).catch(() => {}).then(() => {\n if (context) context.loading = false;\n m.redraw();\n });\n }\n};\nexport default PostControls;\nflarum.reg.add('core', 'forum/utils/PostControls', PostControls);flarum.reg.addChunkModule('948', '4191', 'core', 'forum/components/EditPostComposer');","import app from '../../forum/app';\nimport Button from '../../common/components/Button';\nimport Separator from '../../common/components/Separator';\nimport UserPage from '../components/UserPage';\nimport ItemList from '../../common/utils/ItemList';\n\n/**\n * The `UserControls` utility constructs a list of buttons for a user which\n * perform actions on it.\n */\nconst UserControls = {\n /**\n * Get a list of controls for a user.\n *\n * @param {import('../../common/models/User').default} user\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n controls(user, context) {\n const items = new ItemList();\n ['user', 'moderation', 'destructive'].forEach(section => {\n const controls = this[section + 'Controls'](user, context).toArray();\n if (controls.length) {\n controls.forEach(item => items.add(item.itemName, item));\n items.add(section + 'Separator', m(Separator, null));\n }\n });\n return items;\n },\n /**\n * Get controls for a user pertaining to the current user (e.g. poke, follow).\n *\n * @param {import('../../common/models/User').default} user\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n * @protected\n */\n userControls() {\n return new ItemList();\n },\n /**\n * Get controls for a user pertaining to moderation (e.g. suspend, edit).\n *\n * @param {import('../../common/models/User').default} user\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n * @protected\n */\n moderationControls(user) {\n const items = new ItemList();\n if (user.canEdit() || user.canEditCredentials() || user.canEditGroups()) {\n items.add('edit', m(Button, {\n icon: \"fas fa-pencil-alt\",\n onclick: this.editAction.bind(this, user)\n }, app.translator.trans('core.forum.user_controls.edit_button')));\n }\n return items;\n },\n /**\n * Get controls for a user which are destructive (e.g. delete).\n *\n * @param {import('../../common/models/User').default} user\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n * @protected\n */\n destructiveControls(user) {\n const items = new ItemList();\n if (user.id() !== '1' && user.canDelete()) {\n items.add('delete', m(Button, {\n icon: \"fas fa-times\",\n onclick: this.deleteAction.bind(this, user)\n }, app.translator.trans('core.forum.user_controls.delete_button')));\n }\n return items;\n },\n /**\n * Delete the user.\n *\n * @param {import('../../common/models/User').default} user\n */\n deleteAction(user) {\n if (!confirm(app.translator.trans('core.forum.user_controls.delete_confirmation'))) {\n return;\n }\n user.delete().then(() => {\n this.showDeletionAlert(user, 'success');\n if (app.current.matches(UserPage, {\n user\n })) {\n app.history.back();\n } else {\n window.location.reload();\n }\n }).catch(() => this.showDeletionAlert(user, 'error'));\n },\n /**\n * Show deletion alert of user.\n *\n * @param {import('../../common/models/User').default} user\n * @param {string} type\n */\n showDeletionAlert(user, type) {\n const message = {\n success: 'core.forum.user_controls.delete_success_message',\n error: 'core.forum.user_controls.delete_error_message'\n }[type];\n app.alerts.show({\n type\n }, app.translator.trans(message, {\n user,\n email: user.email()\n }));\n },\n /**\n * Edit the user.\n *\n * @param {import('../../common/models/User').default} user\n */\n editAction(user) {\n app.modal.show(() => import(/* webpackChunkName: 'common/components/EditUserModal', webpackMode: 'lazy-once' */ '../../common/components/EditUserModal'), {\n user\n });\n }\n};\nexport default UserControls;\nflarum.reg.add('core', 'forum/utils/UserControls', UserControls);flarum.reg.addChunkModule('234', '422', 'core', 'common/components/EditUserModal');","/**\n * The `slidable` utility adds touch gestures to an element so that it can be\n * slid away to reveal controls underneath, and then released to activate those\n * controls.\n *\n * It relies on the element having children with particular CSS classes.\n *\n * The function returns a record with a `reset` proeprty. This is a function\n * which reverts the slider to its original position. This should be called,\n * for example, when a controls dropdown is closed.\n *\n * @param {HTMLElement | SVGElement | Element} element\n * @return {{ reset : () => void }}\n */\nexport default function slidable(element) {\n const $element = $(element);\n const threshold = 50;\n let $underneathLeft;\n let $underneathRight;\n let startX;\n let startY;\n let couldBeSliding = false;\n let isSliding = false;\n let pos = 0;\n\n /**\n * Animate the slider to a new position.\n *\n * @param {number} newPos\n * @param {Partial<JQueryAnimationOptions>} [options]\n */\n const animatePos = function (newPos, options) {\n var _options;\n if (options === void 0) {\n options = {};\n }\n // Since we can't animate the transform property with jQuery, we'll use a\n // bit of a workaround. We set up the animation with a step function that\n // will set the transform property, but then we animate an unused property\n // (background-position-x) with jQuery.\n (_options = options).duration || (_options.duration = 'fast');\n options.step = function (x) {\n $(this).css('transform', 'translate(' + x + 'px, 0)');\n };\n $element.find('.Slidable-content').animate({\n 'background-position-x': newPos\n }, options);\n };\n\n /**\n * Revert the slider to its original position.\n */\n const reset = () => {\n animatePos(0, {\n complete: function () {\n $element.removeClass('sliding');\n $underneathLeft.hide();\n $underneathRight.hide();\n isSliding = false;\n }\n });\n };\n $element.find('.Slidable-content').on('touchstart', function (e) {\n // Update the references to the elements underneath the slider, provided\n // they're not disabled.\n $underneathLeft = $element.find('.Slidable-underneath--left:not(.disabled)');\n $underneathRight = $element.find('.Slidable-underneath--right:not(.disabled)');\n startX = e.originalEvent.targetTouches[0].clientX;\n startY = e.originalEvent.targetTouches[0].clientY;\n couldBeSliding = true;\n pos = 0;\n }).on('touchmove', function (e) {\n const newX = e.originalEvent.targetTouches[0].clientX;\n const newY = e.originalEvent.targetTouches[0].clientY;\n\n // Once the user moves their touch in a direction that's more up/down than\n // left/right, we'll assume they're scrolling the page. But if they do\n // move in a horizontal direction at first, then we'll lock their touch\n // into the slider.\n if (couldBeSliding && Math.abs(newX - startX) > Math.abs(newY - startY)) {\n isSliding = true;\n }\n couldBeSliding = false;\n if (isSliding) {\n pos = newX - startX;\n\n // If there are controls underneath the either side, then we'll show/hide\n // them depending on the slider's position. We also make the controls\n // icon get a bit bigger the further they slide.\n const toggle = ($underneath, side) => {\n if ($underneath.length) {\n const active = side === 'left' ? pos > 0 : pos < 0;\n if (active && $underneath.hasClass('Slidable-underneath--elastic')) {\n pos -= pos * 0.5;\n }\n $underneath.toggle(active);\n const scale = Math.max(0, Math.min(1, (Math.abs(pos) - 25) / threshold));\n $underneath.find('.icon').css('transform', 'scale(' + scale + ')');\n } else {\n pos = Math[side === 'left' ? 'min' : 'max'](0, pos);\n }\n };\n toggle($underneathLeft, 'left');\n toggle($underneathRight, 'right');\n $(this).css('transform', 'translate(' + pos + 'px, 0)');\n $(this).css('background-position-x', pos + 'px');\n $element.toggleClass('sliding', !!pos);\n e.preventDefault();\n }\n }).on('touchend', function () {\n // If the user releases the touch and the slider is past the threshold\n // position on either side, then we will activate the control for that\n // side. We will also animate the slider's position all the way to the\n // other side, or back to its original position, depending on whether or\n // not the side is 'elastic'.\n const activate = $underneath => {\n $underneath.click();\n if ($underneath.hasClass('Slidable-underneath--elastic')) {\n reset();\n } else {\n animatePos((pos > 0 ? 1 : -1) * $element.width());\n }\n };\n if ($underneathRight.length && pos < -threshold) {\n activate($underneathRight);\n } else if ($underneathLeft.length && pos > threshold) {\n activate($underneathLeft);\n } else {\n reset();\n }\n couldBeSliding = false;\n isSliding = false;\n });\n return {\n reset\n };\n}\nflarum.reg.add('core', 'forum/utils/slidable', slidable);","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}","import _typeof from \"./typeof.js\";\nexport default function toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {boolean} [noTrailing] - Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n * throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n * after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n * the internal counter is reset).\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the throttled-function is executed.\n * @param {boolean} [debounceMode] - If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n * schedule `callback` to execute after `delay` ms.\n *\n * @returns {Function} A new, throttled, function.\n */\nexport default function (delay, noTrailing, callback, debounceMode) {\n\t/*\n\t * After wrapper has stopped being called, this timeout ensures that\n\t * `callback` is executed at the proper times in `throttle` and `end`\n\t * debounce modes.\n\t */\n\tlet timeoutID;\n\tlet cancelled = false;\n\n\t// Keep track of the last time `callback` was executed.\n\tlet lastExec = 0;\n\n\t// Function to clear existing timeout\n\tfunction clearExistingTimeout() {\n\t\tif (timeoutID) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\t}\n\n\t// Function to cancel next exec\n\tfunction cancel() {\n\t\tclearExistingTimeout();\n\t\tcancelled = true;\n\t}\n\n\t// `noTrailing` defaults to falsy.\n\tif (typeof noTrailing !== 'boolean') {\n\t\tdebounceMode = callback;\n\t\tcallback = noTrailing;\n\t\tnoTrailing = undefined;\n\t}\n\n\t/*\n\t * The `wrapper` function encapsulates all of the throttling / debouncing\n\t * functionality and when executed will limit the rate at which `callback`\n\t * is executed.\n\t */\n\tfunction wrapper(...arguments_) {\n\t\tlet self = this;\n\t\tlet elapsed = Date.now() - lastExec;\n\n\t\tif (cancelled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\tfunction exec() {\n\t\t\tlastExec = Date.now();\n\t\t\tcallback.apply(self, arguments_);\n\t\t}\n\n\t\t/*\n\t\t * If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t * to allow future `callback` executions.\n\t\t */\n\t\tfunction clear() {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif (debounceMode && !timeoutID) {\n\t\t\t/*\n\t\t\t * Since `wrapper` is being called for the first time and\n\t\t\t * `debounceMode` is true (at begin), execute `callback`.\n\t\t\t */\n\t\t\texec();\n\t\t}\n\n\t\tclearExistingTimeout();\n\n\t\tif (debounceMode === undefined && elapsed > delay) {\n\t\t\t/*\n\t\t\t * In throttle mode, if `delay` time has been exceeded, execute\n\t\t\t * `callback`.\n\t\t\t */\n\t\t\texec();\n\t\t} else if (noTrailing !== true) {\n\t\t\t/*\n\t\t\t * In trailing throttle mode, since `delay` time has not been\n\t\t\t * exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t * recent execution.\n\t\t\t *\n\t\t\t * If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t * after `delay` ms.\n\t\t\t *\n\t\t\t * If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t * execute after `delay` ms.\n\t\t\t */\n\t\t\ttimeoutID = setTimeout(\n\t\t\t\tdebounceMode ? clear : exec,\n\t\t\t\tdebounceMode === undefined ? delay - elapsed : delay\n\t\t\t);\n\t\t}\n\t}\n\n\twrapper.cancel = cancel;\n\n\t// Return the wrapper function.\n\treturn wrapper;\n}\n","/* eslint-disable no-undefined */\n\nimport throttle from './throttle';\n\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {boolean} [atBegin] - Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n * after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n * (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the debounced-function is executed.\n *\n * @returns {Function} A new, debounced function.\n */\nexport default function (delay, atBegin, callback) {\n\treturn callback === undefined\n\t\t? throttle(delay, atBegin, false)\n\t\t: throttle(delay, callback, atBegin !== false);\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + {\"158\":\"forum/components/PostStream\",\"173\":\"forum/components/NotificationsPage\",\"226\":\"forum/components/LogInModal\",\"234\":\"common/components/EditUserModal\",\"298\":\"forum/components/SettingsPage\",\"366\":\"forum/components/Composer\",\"378\":\"forum/components/ReplyComposer\",\"485\":\"common/components/SearchModal\",\"486\":\"forum/components/PostStreamScrubber\",\"559\":\"forum/components/SignUpModal\",\"698\":\"forum/components/UserSecurityPage\",\"814\":\"forum/components/DiscussionComposer\",\"879\":\"forum/components/DiscussionsUserPage\",\"948\":\"forum/components/EditPostComposer\"}[chunkId] + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t170: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkflarum_core\"] = self[\"webpackChunkflarum_core\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","function bidi(node, prop) {\n var type = node.tag === 'select' ? node.attrs.multi ? 'multi' : 'select' : node.attrs.type;\n\n // Setup: bind listeners\n if (type === 'multi') {\n node.attrs.onchange = function () {\n prop([].slice.call(this.selectedOptions, function (x) {\n return x.value;\n }));\n };\n } else if (type === 'select') {\n node.attrs.onchange = function (e) {\n prop(this.selectedOptions[0].value);\n };\n } else if (type === 'checkbox') {\n node.attrs.onchange = function (e) {\n prop(this.checked);\n };\n } else {\n node.attrs.onchange = node.attrs.oninput = function (e) {\n prop(this.value);\n };\n }\n if (node.tag === 'select') {\n node.children.forEach(function (option) {\n if (option.attrs.value === prop() || option.children[0] === prop()) {\n option.attrs.selected = true;\n }\n });\n } else if (type === 'checkbox') {\n node.attrs.checked = prop();\n } else if (type === 'radio') {\n node.attrs.checked = prop() === node.attrs.value;\n } else {\n node.attrs.value = prop();\n }\n node.attrs.bidi = null;\n return node;\n}\nbidi.view = function (ctrl, node, prop) {\n return bidi(node, node.attrs.bidi);\n};\nexport default bidi;\nflarum.reg.add('core', 'common/utils/bidi', bidi);","import ExportRegistry from './ExportRegistry';\nflarum.reg = new ExportRegistry();","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/**\n * @internal\n */\n\n/**\n * @internal\n */\n\nexport default class ExportRegistry {\n constructor() {\n _defineProperty(this, \"moduleExports\", new Map());\n _defineProperty(this, \"onLoads\", new Map());\n _defineProperty(this, \"chunks\", new Map());\n _defineProperty(this, \"chunkModules\", new Map());\n _defineProperty(this, \"_revisions\", null);\n }\n add(namespace, id, object) {\n var _this$moduleExports$g, _this$onLoads$get;\n this.moduleExports.set(namespace, this.moduleExports.get(namespace) || new Map());\n (_this$moduleExports$g = this.moduleExports.get(namespace)) == null || _this$moduleExports$g.set(id, object);\n (_this$onLoads$get = this.onLoads.get(namespace)) == null || (_this$onLoads$get = _this$onLoads$get.get(id)) == null || _this$onLoads$get.forEach(handler => handler(object));\n }\n onLoad(namespace, id, handler) {\n var _this$moduleExports$g2;\n if (this.moduleExports.has(namespace) && (_this$moduleExports$g2 = this.moduleExports.get(namespace)) != null && _this$moduleExports$g2.has(id)) {\n var _this$moduleExports$g3;\n handler((_this$moduleExports$g3 = this.moduleExports.get(namespace)) == null ? void 0 : _this$moduleExports$g3.get(id));\n } else {\n var _this$onLoads$get2, _this$onLoads$get3, _this$onLoads$get4;\n this.onLoads.set(namespace, this.onLoads.get(namespace) || new Map());\n (_this$onLoads$get2 = this.onLoads.get(namespace)) == null || _this$onLoads$get2.set(id, ((_this$onLoads$get3 = this.onLoads.get(namespace)) == null ? void 0 : _this$onLoads$get3.get(id)) || []);\n (_this$onLoads$get4 = this.onLoads.get(namespace)) == null || (_this$onLoads$get4 = _this$onLoads$get4.get(id)) == null || _this$onLoads$get4.push(handler);\n }\n }\n get(namespace, id) {\n var _this$moduleExports$g4;\n const module = (_this$moduleExports$g4 = this.moduleExports.get(namespace)) == null ? void 0 : _this$moduleExports$g4.get(id);\n const error = \"No module found for \".concat(namespace, \":\").concat(id);\n\n // @ts-ignore\n if (!module && flarum.debug) {\n throw new Error(error);\n } else if (!module) {\n console.warn(error);\n }\n return module;\n }\n checkModule(namespace, id) {\n var _this$moduleExports$g5;\n const exists = this.moduleExports.has(namespace) && ((_this$moduleExports$g5 = this.moduleExports.get(namespace)) == null ? void 0 : _this$moduleExports$g5.has(id)) || false;\n return exists ? this.get(namespace, id) : false;\n }\n addChunkModule(chunkId, moduleId, namespace, urlPath) {\n if (!this.chunks.has(chunkId.toString())) {\n this.chunks.set(chunkId.toString(), {\n namespace,\n urlPath,\n modules: [urlPath]\n });\n } else {\n var _this$chunks$get;\n (_this$chunks$get = this.chunks.get(chunkId.toString())) == null || (_this$chunks$get = _this$chunks$get.modules) == null || _this$chunks$get.push(urlPath);\n }\n this.chunkModules.set(\"\".concat(namespace, \":\").concat(urlPath), {\n chunkId: chunkId.toString(),\n moduleId: moduleId.toString()\n });\n }\n getChunk(chunkId) {\n var _this$chunks$get2;\n const chunk = (_this$chunks$get2 = this.chunks.get(chunkId.toString())) != null ? _this$chunks$get2 : null;\n if (!chunk) {\n console.warn(\"[Export Registry] No chunk by the ID \".concat(chunkId, \" found.\"));\n return null;\n }\n return chunk;\n }\n async loadChunk(original, url, done, key, chunkId) {\n // @ts-ignore\n app.alerts.showLoading();\n return await original(this.chunkUrl(chunkId) || url, function () {\n // @ts-ignore\n app.alerts.clearLoading();\n return done(...arguments);\n }, key, chunkId);\n }\n chunkUrl(chunkId) {\n var _this$_revisions, _document$getElementB, _document$getElementB2;\n const chunk = this.getChunk(chunkId.toString());\n if (!chunk) return null;\n (_this$_revisions = this._revisions) != null ? _this$_revisions : this._revisions = JSON.parse((_document$getElementB = (_document$getElementB2 = document.getElementById('flarum-rev-manifest')) == null ? void 0 : _document$getElementB2.textContent) != null ? _document$getElementB : '{}');\n\n // @ts-ignore cannot import the app object here, so we use the global one.\n const path = \"\".concat(app.forum.attribute('jsChunksBaseUrl'), \"/\").concat(chunk.namespace, \"/\").concat(chunk.urlPath, \".js\");\n\n // The paths in the revision are stored as (relative path from the assets path) + the path.\n // @ts-ignore\n const assetsPath = app.forum.attribute('assetsBaseUrl');\n const key = path.replace(assetsPath, '').replace(/^\\//, '');\n const revision = this._revisions[key];\n return revision ? \"\".concat(path, \"?v=\").concat(revision) : path;\n }\n async asyncModuleImport(path) {\n const [namespace, id] = this.namespaceAndIdFromPath(path);\n const module = this.chunkModules.get(\"\".concat(namespace, \":\").concat(id));\n if (!module) {\n throw new Error(\"No chunk found for module \".concat(namespace, \":\").concat(id));\n }\n\n // @ts-ignore\n const wr = __webpack_require__;\n return await wr.e(module.chunkId).then(() => {\n // Needed to make sure the module is loaded.\n // Taken care of by webpack.\n wr.bind(wr, module.moduleId)();\n const moduleExport = this.get(namespace, id);\n\n // For consistent access to async modules.\n moduleExport.default = moduleExport.default || moduleExport;\n return moduleExport;\n });\n }\n clear() {\n this.moduleExports.clear();\n this.onLoads.clear();\n this.chunks.clear();\n this.chunkModules.clear();\n }\n namespaceAndIdFromPath(path) {\n // Either we get a path like `flarum/forum/components/LogInModal` or `ext:flarum/tags/forum/components/TagPage`.\n const matches = /^(?:ext:([^\\/]+)\\/(?:flarum-(?:ext-)?)?([^\\/]+)|(flarum))(?:\\/(.+))?$/.exec(path);\n const id = matches[4];\n let namespace;\n if (matches[1]) {\n namespace = \"\".concat(matches[1], \"-\").concat(matches[2]);\n } else {\n namespace = 'core';\n }\n return [namespace, id];\n }\n}","import bidi from './bidi';\nexport default function patchMithril(global) {\n const defaultMithril = global.m;\n const modifiedMithril = function (comp) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n const node = defaultMithril.apply(this, arguments);\n if (!node.attrs) node.attrs = {};\n\n // Allows the use of the bidi attr.\n if (node.attrs.bidi) {\n bidi(node, node.attrs.bidi);\n }\n return node;\n };\n Object.keys(defaultMithril).forEach(key => modifiedMithril[key] = defaultMithril[key]);\n global.m = modifiedMithril;\n}\nflarum.reg.add('core', 'common/utils/patchMithril', patchMithril);","// Expose jQuery, mithril and dayjs to the window browser object\nimport 'expose-loader?exposes=$,jQuery!jquery';\nimport 'expose-loader?exposes=m!mithril';\nimport 'expose-loader?exposes=dayjs!dayjs';\nimport 'bootstrap/js/affix';\nimport 'bootstrap/js/dropdown';\nimport 'bootstrap/js/tooltip';\nimport 'bootstrap/js/transition';\nimport 'jquery.hotkeys/jquery.hotkeys';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport localizedFormat from 'dayjs/plugin/localizedFormat';\ndayjs.extend(relativeTime);\ndayjs.extend(localizedFormat);\nimport './registry';\nimport patchMithril from './utils/patchMithril';\npatchMithril(window);\nimport app from './app';\nexport { app };\nimport './utils/arrayFlatPolyfill';\nconst tooltipGen = $.fn.tooltip;\n\n// Remove in a future version of Flarum.\n// @ts-ignore\n$.fn.tooltip = function (options, caller) {\n // Show a warning when `$.tooltip` is used outside of the Tooltip component.\n // This functionality is deprecated and should not be used.\n if (!['DANGEROUS_tooltip_jquery_fn_deprecation_exempt'].includes(caller)) {\n console.warn(\"Calling `$.tooltip` is now deprecated. Please use the `<Tooltip>` component exposed by flarum/core instead. `$.tooltip` may be removed in a future version of Flarum.\\n\\nIf this component doesn't meet your requirements, please open an issue: https://github.com/flarum/core/issues/new?assignees=davwheat&labels=type/bug,needs-verification&template=bug-report.md&title=Tooltip%20component%20unsuitable%20for%20use%20case\");\n }\n tooltipGen.bind(this)(options);\n};","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport ActualModel from '../Model';\nexport default class Model {\n constructor(model) {\n _defineProperty(this, \"model\", void 0);\n _defineProperty(this, \"callbacks\", []);\n this.model = model;\n }\n attribute(name, transform) {\n if (transform === void 0) {\n transform = null;\n }\n this.callbacks.push(() => {\n this.model.prototype[name] = transform ? ActualModel.attribute(name, transform) : ActualModel.attribute(name);\n });\n return this;\n }\n hasOne(name) {\n this.callbacks.push(() => {\n this.model.prototype[name] = ActualModel.hasOne(name);\n });\n return this;\n }\n hasMany(name) {\n this.callbacks.push(() => {\n this.model.prototype[name] = ActualModel.hasMany(name);\n });\n return this;\n }\n extend(app, extension) {\n for (const callback of this.callbacks) {\n callback.call(this);\n }\n }\n}\nflarum.reg.add('core', 'common/extenders/Model', Model);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class PostTypes {\n constructor() {\n _defineProperty(this, \"postComponents\", {});\n }\n /**\n * Register a new post component type.\n * Usually used for event posts.\n *\n * @param name The name of the post type.\n * @param component The component class to render the post.\n */\n add(name, component) {\n this.postComponents[name] = component;\n return this;\n }\n extend(app, extension) {\n Object.assign(app.postComponents, this.postComponents);\n }\n}\nflarum.reg.add('core', 'common/extenders/PostTypes', PostTypes);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class Routes {\n constructor() {\n _defineProperty(this, \"routes\", {});\n _defineProperty(this, \"helpers\", {});\n }\n /**\n * Add a mithril route to the application.\n *\n * @param name The name of the route.\n * @param path The path of the route.\n * @param component must extend `Page` component.\n */\n add(name, path, component) {\n this.routes[name] = {\n path,\n component\n };\n return this;\n }\n helper(name, callback) {\n this.helpers[name] = callback;\n return this;\n }\n extend(app, extension) {\n Object.assign(app.routes, this.routes);\n Object.assign(app.route, this.helpers);\n }\n}\nflarum.reg.add('core', 'common/extenders/Routes', Routes);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class Store {\n constructor() {\n _defineProperty(this, \"models\", {});\n }\n add(type, model) {\n this.models[type] = model;\n return this;\n }\n extend(app, extension) {\n for (const type in this.models) {\n if (app.store.models[type]) {\n throw new Error(\"The model type \\\"\".concat(type, \"\\\" has already been registered with the class \\\"\").concat(app.store.models[type].name, \"\\\".\"));\n }\n app.store.models[type] = this.models[type];\n }\n }\n}\nflarum.reg.add('core', 'common/extenders/Store', Store);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class Search {\n constructor() {\n _defineProperty(this, \"gambits\", {});\n }\n gambit(modelType, gambit) {\n var _this$gambits;\n (_this$gambits = this.gambits)[modelType] || (_this$gambits[modelType] = []);\n this.gambits[modelType].push(gambit);\n return this;\n }\n extend(app, extension) {\n for (const [modelType, gambits] of Object.entries(this.gambits)) {\n for (const gambit of gambits) {\n var _app$search$gambits$g;\n (_app$search$gambits$g = app.search.gambits.gambits)[modelType] || (_app$search$gambits$g[modelType] = []);\n app.search.gambits.gambits[modelType].push(gambit);\n }\n }\n }\n}\nflarum.reg.add('core', 'common/extenders/Search', Search);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class Notification {\n constructor() {\n _defineProperty(this, \"notificationComponents\", {});\n }\n /**\n * Register a new notification component type.\n *\n * @param name The name of the notification type.\n * @param component The component class to render the notification.\n */\n add(name, component) {\n this.notificationComponents[name] = component;\n return this;\n }\n extend(app, extension) {\n Object.assign(app.notificationComponents, this.notificationComponents);\n }\n}\nflarum.reg.add('core', 'common/extenders/Notification', Notification);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport ThemeModeComponent from '../components/ThemeMode';\nexport default class ThemeMode {\n constructor() {\n _defineProperty(this, \"colorSchemes\", []);\n }\n add(mode, label) {\n this.colorSchemes.push({\n id: mode,\n label\n });\n return this;\n }\n extend(app, extension) {\n ThemeModeComponent.colorSchemes = Array.from(new Set([...ThemeModeComponent.colorSchemes, ...this.colorSchemes]));\n }\n}\nflarum.reg.add('core', 'common/extenders/ThemeMode', ThemeMode);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class Admin {\n constructor() {\n _defineProperty(this, \"settings\", []);\n _defineProperty(this, \"permissions\", []);\n _defineProperty(this, \"customPage\", null);\n _defineProperty(this, \"generalIndexes\", {});\n }\n /**\n * Register a setting to be shown on the extension's settings page.\n */\n setting(setting, priority) {\n if (priority === void 0) {\n priority = 0;\n }\n this.settings.push({\n setting,\n priority\n });\n return this;\n }\n\n /**\n * Register a custom setting to be shown on the extension's settings page.\n */\n customSetting(setting, priority) {\n if (priority === void 0) {\n priority = 0;\n }\n this.settings.push({\n customSetting: setting,\n priority\n });\n return this;\n }\n\n /**\n * Register a permission to be shown on the extension's permissions page.\n */\n permission(permission, type, priority) {\n if (priority === void 0) {\n priority = 0;\n }\n this.permissions.push({\n permission,\n type,\n priority\n });\n return this;\n }\n\n /**\n * Register a custom page to be shown in the admin interface.\n */\n page(page) {\n this.customPage = page;\n return this;\n }\n\n /**\n * Register a custom general search index entry.\n */\n generalIndexItems(type, items) {\n this.generalIndexes[type] = items;\n return this;\n }\n extend(app, extension) {\n app.registry.for(extension.name);\n this.settings.forEach(_ref => {\n let {\n setting,\n customSetting,\n priority\n } = _ref;\n app.registry.registerSetting(setting ? setting() : customSetting, priority);\n });\n this.permissions.forEach(_ref2 => {\n let {\n permission,\n type,\n priority\n } = _ref2;\n app.registry.registerPermission(permission(), type, priority);\n });\n if (this.customPage) {\n app.registry.registerPage(this.customPage);\n }\n app.generalIndex.for(extension.name);\n Object.keys(this.generalIndexes).forEach(key => {\n if (key !== 'settings' && key !== 'permissions') return;\n const callback = this.generalIndexes[key];\n if (callback) {\n app.generalIndex.add(key, callback());\n }\n });\n }\n}\nflarum.reg.add('core', 'common/extenders/Admin', Admin);","import Model from './Model';\nimport PostTypes from './PostTypes';\nimport Routes from './Routes';\nimport Store from './Store';\nimport Search from './Search';\nimport Notification from './Notification';\nimport ThemeMode from './ThemeMode';\nimport Admin from './Admin';\nconst extenders = {\n Model,\n PostTypes,\n Routes,\n Store,\n Search,\n Notification,\n ThemeMode,\n Admin\n};\nexport default extenders;\nflarum.reg.add('core', 'common/extenders', extenders);","/**\n * The `mixin` utility assigns the properties of a set of 'mixin' objects to\n * the prototype of a parent object.\n *\n * @example\n * class MyClass extends mixin(ExistingClass, evented, etc) {}\n *\n * @param {object} Parent The class to extend the new class from.\n * @param {Record<string, any>[]} mixins The objects to mix in.\n * @return {object} A new class that extends Parent and contains the mixins.\n */\nexport default function mixin(Parent) {\n class Mixed extends Parent {}\n for (var _len = arguments.length, mixins = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n mixins[_key - 1] = arguments[_key];\n }\n mixins.forEach(object => {\n Object.assign(Mixed.prototype, object);\n });\n return Mixed;\n}\nflarum.reg.add('core', 'common/utils/mixin', mixin);","/*\n * Original Copyright GitHub, Inc. Licensed under the MIT License.\n * See license text at https://github.com/github/markdown-toolbar-element/blob/master/LICENSE.\n */\n\nimport insertText from './insertText';\nconst defaults = {\n prefix: '',\n suffix: '',\n blockPrefix: '',\n blockSuffix: '',\n multiline: false,\n replaceNext: '',\n prefixSpace: false,\n scanFor: '',\n surroundWithNewlines: false,\n orderedList: false,\n unorderedList: false,\n trimFirst: false\n};\nexport default function styleSelectedText(textarea, styleArgs) {\n // Next 2 lines are added\n textarea.focus();\n styleArgs = Object.assign({}, defaults, styleArgs);\n // Prev 2 lines are added\n const text = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n let result;\n if (styleArgs.orderedList || styleArgs.unorderedList) {\n result = listStyle(textarea, styleArgs);\n } else if (styleArgs.multiline && isMultipleLines(text)) {\n result = multilineStyle(textarea, styleArgs);\n } else {\n result = blockStyle(textarea, styleArgs);\n }\n insertText(textarea, result);\n}\nfunction isMultipleLines(string) {\n return string.trim().split('\\n').length > 1;\n}\nfunction repeat(string, n) {\n return Array(n + 1).join(string);\n}\nfunction wordSelectionStart(text, i) {\n let index = i;\n while (text[index] && text[index - 1] != null && !text[index - 1].match(/\\s/)) {\n index--;\n }\n return index;\n}\nfunction wordSelectionEnd(text, i, multiline) {\n let index = i;\n const breakpoint = multiline ? /\\n/ : /\\s/;\n while (text[index] && !text[index].match(breakpoint)) {\n index++;\n }\n return index;\n}\nfunction expandSelectionToLine(textarea) {\n const lines = textarea.value.split('\\n');\n let counter = 0;\n for (let index = 0; index < lines.length; index++) {\n const lineLength = lines[index].length + 1;\n if (textarea.selectionStart >= counter && textarea.selectionStart < counter + lineLength) {\n textarea.selectionStart = counter;\n }\n if (textarea.selectionEnd >= counter && textarea.selectionEnd < counter + lineLength) {\n textarea.selectionEnd = counter + lineLength - 1;\n }\n counter += lineLength;\n }\n}\nfunction expandSelectedText(textarea, prefixToUse, suffixToUse, multiline) {\n if (multiline === void 0) {\n multiline = false;\n }\n if (textarea.selectionStart === textarea.selectionEnd) {\n textarea.selectionStart = wordSelectionStart(textarea.value, textarea.selectionStart);\n textarea.selectionEnd = wordSelectionEnd(textarea.value, textarea.selectionEnd, multiline);\n } else {\n const expandedSelectionStart = textarea.selectionStart - prefixToUse.length;\n const expandedSelectionEnd = textarea.selectionEnd + suffixToUse.length;\n const beginsWithPrefix = textarea.value.slice(expandedSelectionStart, textarea.selectionStart) === prefixToUse;\n const endsWithSuffix = textarea.value.slice(textarea.selectionEnd, expandedSelectionEnd) === suffixToUse;\n if (beginsWithPrefix && endsWithSuffix) {\n textarea.selectionStart = expandedSelectionStart;\n textarea.selectionEnd = expandedSelectionEnd;\n }\n }\n return textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n}\nfunction newlinesToSurroundSelectedText(textarea) {\n const beforeSelection = textarea.value.slice(0, textarea.selectionStart);\n const afterSelection = textarea.value.slice(textarea.selectionEnd);\n const breaksBefore = beforeSelection.match(/\\n*$/);\n const breaksAfter = afterSelection.match(/^\\n*/);\n const newlinesBeforeSelection = breaksBefore ? breaksBefore[0].length : 0;\n const newlinesAfterSelection = breaksAfter ? breaksAfter[0].length : 0;\n let newlinesToAppend;\n let newlinesToPrepend;\n if (beforeSelection.match(/\\S/) && newlinesBeforeSelection < 2) {\n newlinesToAppend = repeat('\\n', 2 - newlinesBeforeSelection);\n }\n if (afterSelection.match(/\\S/) && newlinesAfterSelection < 2) {\n newlinesToPrepend = repeat('\\n', 2 - newlinesAfterSelection);\n }\n if (newlinesToAppend == null) {\n newlinesToAppend = '';\n }\n if (newlinesToPrepend == null) {\n newlinesToPrepend = '';\n }\n return {\n newlinesToAppend,\n newlinesToPrepend\n };\n}\nfunction blockStyle(textarea, arg) {\n let newlinesToAppend;\n let newlinesToPrepend;\n const {\n prefix,\n suffix,\n blockPrefix,\n blockSuffix,\n replaceNext,\n prefixSpace,\n scanFor,\n surroundWithNewlines\n } = arg;\n const originalSelectionStart = textarea.selectionStart;\n const originalSelectionEnd = textarea.selectionEnd;\n let selectedText = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n let prefixToUse = isMultipleLines(selectedText) && blockPrefix.length > 0 ? \"\".concat(blockPrefix, \"\\n\") : prefix;\n // CHANGED\n let suffixToUse = isMultipleLines(selectedText) && blockSuffix.length > 0 ? \"\\n\".concat(blockSuffix) : prefixToUse === prefix ? suffix : '';\n // END CHANGED\n\n if (prefixSpace) {\n const beforeSelection = textarea.value[textarea.selectionStart - 1];\n if (textarea.selectionStart !== 0 && beforeSelection != null && !beforeSelection.match(/\\s/)) {\n prefixToUse = \" \".concat(prefixToUse);\n }\n }\n selectedText = expandSelectedText(textarea, prefixToUse, suffixToUse, arg.multiline);\n let selectionStart = textarea.selectionStart;\n let selectionEnd = textarea.selectionEnd;\n const hasReplaceNext = replaceNext.length > 0 && suffixToUse.indexOf(replaceNext) > -1 && selectedText.length > 0;\n if (surroundWithNewlines) {\n const ref = newlinesToSurroundSelectedText(textarea);\n newlinesToAppend = ref.newlinesToAppend;\n newlinesToPrepend = ref.newlinesToPrepend;\n prefixToUse = newlinesToAppend + prefix;\n suffixToUse += newlinesToPrepend;\n }\n if (selectedText.startsWith(prefixToUse) && selectedText.endsWith(suffixToUse)) {\n const replacementText = selectedText.slice(prefixToUse.length, selectedText.length - suffixToUse.length);\n if (originalSelectionStart === originalSelectionEnd) {\n let position = originalSelectionStart - prefixToUse.length;\n position = Math.max(position, selectionStart);\n position = Math.min(position, selectionStart + replacementText.length);\n selectionStart = selectionEnd = position;\n } else {\n selectionEnd = selectionStart + replacementText.length;\n }\n return {\n text: replacementText,\n selectionStart,\n selectionEnd\n };\n } else if (!hasReplaceNext) {\n let replacementText = prefixToUse + selectedText + suffixToUse;\n selectionStart = originalSelectionStart + prefixToUse.length;\n selectionEnd = originalSelectionEnd + prefixToUse.length;\n const whitespaceEdges = selectedText.match(/^\\s*|\\s*$/g);\n if (arg.trimFirst && whitespaceEdges) {\n const leadingWhitespace = whitespaceEdges[0] || '';\n const trailingWhitespace = whitespaceEdges[1] || '';\n replacementText = leadingWhitespace + prefixToUse + selectedText.trim() + suffixToUse + trailingWhitespace;\n selectionStart += leadingWhitespace.length;\n selectionEnd -= trailingWhitespace.length;\n }\n return {\n text: replacementText,\n selectionStart,\n selectionEnd\n };\n } else if (scanFor.length > 0 && selectedText.match(scanFor)) {\n suffixToUse = suffixToUse.replace(replaceNext, selectedText);\n const replacementText = prefixToUse + suffixToUse;\n selectionStart = selectionEnd = selectionStart + prefixToUse.length;\n return {\n text: replacementText,\n selectionStart,\n selectionEnd\n };\n } else {\n const replacementText = prefixToUse + selectedText + suffixToUse;\n selectionStart = selectionStart + prefixToUse.length + selectedText.length + suffixToUse.indexOf(replaceNext);\n selectionEnd = selectionStart + replaceNext.length;\n return {\n text: replacementText,\n selectionStart,\n selectionEnd\n };\n }\n}\nfunction multilineStyle(textarea, arg) {\n const {\n prefix,\n suffix,\n blockPrefix,\n blockSuffix,\n surroundWithNewlines\n } = arg;\n let text = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n let selectionStart = textarea.selectionStart;\n let selectionEnd = textarea.selectionEnd;\n const lines = text.split('\\n');\n // CHANGED\n let prefixToUse = blockPrefix.length > 0 ? blockPrefix : prefix;\n let suffixToUse = blockSuffix.length > 0 ? blockSuffix : prefixToUse == prefix ? suffix : '';\n const undoStyle = lines.every(line => line.startsWith(prefixToUse) && line.endsWith(suffixToUse));\n // END CHANGED\n\n if (undoStyle) {\n text = lines.map(line => line.slice(prefixToUse.length, line.length - suffixToUse.length)).join('\\n');\n selectionEnd = selectionStart + text.length;\n } else {\n // CHANGED\n text = lines.map(line => prefixToUse + line + suffixToUse).join('\\n');\n if (surroundWithNewlines || suffixToUse === '') {\n // END CHANGED\n const {\n newlinesToAppend,\n newlinesToPrepend\n } = newlinesToSurroundSelectedText(textarea);\n selectionStart += newlinesToAppend.length;\n selectionEnd = selectionStart + text.length;\n text = newlinesToAppend + text + newlinesToPrepend;\n }\n }\n return {\n text,\n selectionStart,\n selectionEnd\n };\n}\nfunction undoOrderedListStyle(text) {\n const lines = text.split('\\n');\n const orderedListRegex = /^\\d+\\.\\s+/;\n const shouldUndoOrderedList = lines.every(line => orderedListRegex.test(line));\n let result = lines;\n if (shouldUndoOrderedList) {\n result = lines.map(line => line.replace(orderedListRegex, ''));\n }\n return {\n text: result.join('\\n'),\n processed: shouldUndoOrderedList\n };\n}\nfunction undoUnorderedListStyle(text) {\n const lines = text.split('\\n');\n const unorderedListPrefix = '- ';\n const shouldUndoUnorderedList = lines.every(line => line.startsWith(unorderedListPrefix));\n let result = lines;\n if (shouldUndoUnorderedList) {\n result = lines.map(line => line.slice(unorderedListPrefix.length, line.length));\n }\n return {\n text: result.join('\\n'),\n processed: shouldUndoUnorderedList\n };\n}\nfunction makePrefix(index, unorderedList) {\n if (unorderedList) {\n return '- ';\n } else {\n return \"\".concat(index + 1, \". \");\n }\n}\nfunction clearExistingListStyle(style, selectedText) {\n let undoResultOpositeList;\n let undoResult;\n let pristineText;\n if (style.orderedList) {\n undoResult = undoOrderedListStyle(selectedText);\n undoResultOpositeList = undoUnorderedListStyle(undoResult.text);\n pristineText = undoResultOpositeList.text;\n } else {\n undoResult = undoUnorderedListStyle(selectedText);\n undoResultOpositeList = undoOrderedListStyle(undoResult.text);\n pristineText = undoResultOpositeList.text;\n }\n return [undoResult, undoResultOpositeList, pristineText];\n}\nfunction listStyle(textarea, style) {\n const noInitialSelection = textarea.selectionStart === textarea.selectionEnd;\n let selectionStart = textarea.selectionStart;\n let selectionEnd = textarea.selectionEnd;\n\n // Select whole line\n expandSelectionToLine(textarea);\n const selectedText = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n\n // If the user intent was to do an undo, we will stop after this.\n // Otherwise, we will still undo to other list type to prevent list stacking\n const [undoResult, undoResultOpositeList, pristineText] = clearExistingListStyle(style, selectedText);\n const prefixedLines = pristineText.split('\\n').map((value, index) => {\n return \"\".concat(makePrefix(index, style.unorderedList)).concat(value);\n });\n const totalPrefixLength = prefixedLines.reduce((previousValue, _currentValue, currentIndex) => {\n return previousValue + makePrefix(currentIndex, style.unorderedList).length;\n }, 0);\n const totalPrefixLengthOpositeList = prefixedLines.reduce((previousValue, _currentValue, currentIndex) => {\n return previousValue + makePrefix(currentIndex, !style.unorderedList).length;\n }, 0);\n if (undoResult.processed) {\n if (noInitialSelection) {\n selectionStart = Math.max(selectionStart - makePrefix(0, style.unorderedList).length, 0);\n selectionEnd = selectionStart;\n } else {\n selectionStart = textarea.selectionStart;\n selectionEnd = textarea.selectionEnd - totalPrefixLength;\n }\n return {\n text: pristineText,\n selectionStart,\n selectionEnd\n };\n }\n const {\n newlinesToAppend,\n newlinesToPrepend\n } = newlinesToSurroundSelectedText(textarea);\n const text = newlinesToAppend + prefixedLines.join('\\n') + newlinesToPrepend;\n if (noInitialSelection) {\n selectionStart = Math.max(selectionStart + makePrefix(0, style.unorderedList).length + newlinesToAppend.length, 0);\n selectionEnd = selectionStart;\n } else {\n if (undoResultOpositeList.processed) {\n selectionStart = Math.max(textarea.selectionStart + newlinesToAppend.length, 0);\n selectionEnd = textarea.selectionEnd + newlinesToAppend.length + totalPrefixLength - totalPrefixLengthOpositeList;\n } else {\n selectionStart = Math.max(textarea.selectionStart + newlinesToAppend.length, 0);\n selectionEnd = textarea.selectionEnd + newlinesToAppend.length + totalPrefixLength;\n }\n }\n return {\n text,\n selectionStart,\n selectionEnd\n };\n}\nflarum.reg.add('core', 'common/utils/styleSelectedText', styleSelectedText);","// Re-exports `throttle-debounce` to be added in the export registry.\n\nimport { throttle } from 'throttle-debounce';\nexport { throttle }\nimport { debounce } from 'throttle-debounce';\nexport { debounce };\nflarum.reg.add('core', 'common/utils/throttleDebounce', { throttle: throttle,debounce: debounce, });","export default function formatAmount(size) {\n const units = ['K', 'M', 'B'];\n for (let i = units.length - 1; i >= 0; i--) {\n const decimal = Math.pow(1000, i + 1);\n if (size >= decimal) {\n return (size / decimal).toFixed(1).replace(/\\.0$/, '') + units[i];\n }\n }\n return size.toString();\n}\nflarum.reg.add('core', 'common/utils/formatAmount', formatAmount);","import { urlAlphabet } from './url-alphabet/index.js'\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) =>\n crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {\n byte &= 63\n if (byte < 36) {\n id += byte.toString(36)\n } else if (byte < 62) {\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte > 62) {\n id += '-'\n } else {\n id += '_'\n }\n return id\n }, '')\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","import { nanoid } from 'nanoid';\nexport default nanoid;\nflarum.reg.add('core', 'common/utils/generateElementId', nanoid);","import Component from '../Component';\nimport Icon from './Icon';\nexport default class DetailedDropdownItem extends Component {\n view() {\n return m(\"button\", {\n className: \"DetailedDropdownItem hasIcon\",\n onclick: this.attrs.onclick\n }, m(Icon, {\n name: this.attrs.active ? 'fas fa-check' : 'fas',\n className: \"Button-icon\"\n }), m(\"span\", {\n className: \"DetailedDropdownItem-content\"\n }, m(Icon, {\n name: this.attrs.icon,\n className: \"Button-icon\"\n }), m(\"span\", {\n className: \"DetailedDropdownItem-label\"\n }, m(\"strong\", null, this.attrs.label), m(\"span\", {\n className: \"DetailedDropdownItem-description\"\n }, this.attrs.description))));\n }\n}\nflarum.reg.add('core', 'common/components/DetailedDropdownItem', DetailedDropdownItem);","import Component from '../Component';\nimport withAttr from '../utils/withAttr';\nimport classList from '../utils/classList';\nimport Icon from './Icon';\n/**\n * The `Select` component displays a <select> input, surrounded with some extra\n * elements for styling. It accepts the following attrs:\n *\n * - `options` A map of option values to labels.\n * - `onchange` A callback to run when the selected value is changed.\n * - `value` The value of the selected option.\n * - `disabled` Disabled state for the input.\n * - `wrapperAttrs` A map of attrs to be passed to the DOM element wrapping the `<select>`\n *\n * Other attributes are passed directly to the `<select>` element rendered to the DOM.\n */\nexport default class Select extends Component {\n view() {\n const {\n // Destructure the `wrapperAttrs` object to extract the `className` for passing to `classList()`\n // `= {}` prevents errors when `wrapperAttrs` is undefined\n wrapperAttrs: {\n className: wrapperClassName,\n class: wrapperClass,\n ...wrapperAttrs\n } = {}\n } = this.attrs;\n return m(\"span\", Object.assign({\n className: classList('Select', wrapperClassName, wrapperClass)\n }, wrapperAttrs), this.input());\n }\n input() {\n const {\n options,\n onchange,\n value,\n disabled,\n className,\n class: _class,\n ...domAttrs\n } = this.attrs;\n return m('[', null, m(\"select\", Object.assign({\n className: classList('Select-input FormControl', className, _class),\n onchange: onchange ? withAttr('value', onchange.bind(this)) : undefined,\n value: value,\n disabled: disabled\n }, domAttrs), Object.keys(options).map(key => {\n const option = options[key];\n const label = typeof option === 'object' && 'label' in option ? option.label : option;\n let disabled = typeof option === 'object' && 'disabled' in option ? option.disabled : false;\n if (typeof disabled === 'function') {\n disabled = disabled(value != null ? value : null);\n }\n return m(\"option\", {\n value: key,\n disabled: disabled\n }, label);\n })), m(Icon, {\n name: \"fas fa-sort\",\n className: \"Select-caret\"\n }));\n }\n}\nflarum.reg.add('core', 'common/components/Select', Select);","import Component from '../Component';\nimport classList from '../utils/classList';\nimport Icon from './Icon';\nexport default class ColorPreviewInput extends Component {\n view(vnode) {\n const {\n className,\n id,\n ...otherAttrs\n } = this.attrs;\n const attrs = otherAttrs;\n attrs.type || (attrs.type = 'text');\n attrs.onblur = () => {\n if (attrs.value.length === 4) {\n var _attrs$onchange;\n attrs.value = attrs.value.replace(/#([a-f0-9])([a-f0-9])([a-f0-9])/, '#$1$1$2$2$3$3');\n (_attrs$onchange = attrs.onchange) == null || _attrs$onchange.call(attrs, {\n target: {\n value: attrs.value\n }\n });\n }\n\n // Validate the color\n if (!/^#[a-f0-9]{6}$/i.test(attrs.value)) {\n var _attrs$onchange2;\n attrs.value = '#000000';\n (_attrs$onchange2 = attrs.onchange) == null || _attrs$onchange2.call(attrs, {\n target: {\n value: attrs.value\n }\n });\n }\n };\n return m(\"div\", {\n className: \"ColorInput\"\n }, m(\"input\", Object.assign({\n className: classList('FormControl', className),\n id: id\n }, attrs)), m(\"span\", {\n className: \"ColorInput-icon\",\n role: \"presentation\"\n }, m(Icon, {\n name: 'fas fa-exclamation-circle'\n })), m(\"input\", Object.assign({\n className: \"ColorInput-preview\"\n }, attrs, {\n type: \"color\"\n })));\n }\n}\nflarum.reg.add('core', 'common/components/ColorPreviewInput', ColorPreviewInput);","import Component from '../Component';\nimport Button from './Button';\nimport classList from '../utils/classList';\nexport default class Pill extends Component {\n view(vnode) {\n return m(\"span\", {\n className: classList('Pill', this.attrs.className)\n }, m(\"span\", {\n className: \"Pill-content\"\n }, vnode.children), this.attrs.deletable && m(Button, {\n type: \"button\",\n className: \"Button Button--icon\",\n icon: \"fas fa-times\",\n onclick: this.attrs.ondelete\n }));\n }\n}\nflarum.reg.add('core', 'common/components/Pill', Pill);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport FormModal from './FormModal';\nimport Stream from '../utils/Stream';\nimport classList from '../utils/classList';\nimport Avatar from './Avatar';\nimport Button from './Button';\nimport LoadingIndicator from './LoadingIndicator';\nimport { throttle } from '../utils/throttleDebounce';\nimport InfoTile from './InfoTile';\nimport UserSearchResult from '../../common/components/UserSearchResult';\nimport Pill from './Pill';\n/**\n * The `UserSelectionModal` component displays a modal dialog with searchable\n * user list and submit button. The user can select one or more users from the\n * list and submit them to the callback.\n */\nexport default class UserSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"search\", Stream(''));\n _defineProperty(this, \"selected\", void 0);\n _defineProperty(this, \"focused\", false);\n _defineProperty(this, \"results\", Stream({}));\n _defineProperty(this, \"load\", throttle(500, () => {\n if (this.results()[this.search()]) return;\n if (this.attrs.maxItems && this.selected().length === this.attrs.maxItems) return;\n this.loading = true;\n return app.store.find('users', {\n filter: {\n q: this.search()\n }\n }).then(results => {\n this.results({\n ...this.results(),\n [this.search()]: results\n });\n }).finally(() => {\n this.loading = false;\n m.redraw();\n });\n }));\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.selected = Stream(this.attrs.selected || []);\n\n // preload.\n this.load();\n }\n className() {\n return 'UserSelectionModal Modal--simple';\n }\n title() {\n return this.attrs.title || app.translator.trans('core.lib.user_selection_modal.title');\n }\n content() {\n var _this$results$this$se;\n let list = this.attrs.maxItems && this.selected().length === this.attrs.maxItems ? this.selected() : this.results()[this.search()] || [];\n if (this.attrs.excluded) {\n list = list.filter(user => {\n var _this$attrs$excluded;\n return !((_this$attrs$excluded = this.attrs.excluded) != null && _this$attrs$excluded.map(String).includes(user.id()));\n });\n }\n return [m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"UserSelectionModal-form\"\n }, m(\"div\", {\n className: \"UserSelectionModal-form-input\"\n }, m(\"input\", {\n type: \"text\",\n className: \"FormControl\",\n placeholder: this.attrs.maxItems ? app.translator.trans('core.lib.user_selection_modal.max_items_to_select', {\n count: this.attrs.maxItems\n }, true) : app.translator.trans('core.lib.user_selection_modal.search_placeholder'),\n value: this.search(),\n oninput: e => {\n this.search(e.target.value);\n this.load();\n },\n onfocus: () => this.focused = true,\n onblur: () => this.focused = false,\n disabled: this.attrs.maxItems && this.selected().length === this.attrs.maxItems\n })), m(\"div\", {\n className: \"UserSelectionModal-form-submit App-primaryControl\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary\",\n disabled: !this.meetsRequirements(),\n icon: \"fas fa-check\"\n }, app.translator.trans('core.lib.user_selection_modal.submit_button')))), m(\"div\", {\n className: \"UserSelectionModal-selected Pill-list\"\n }, this.selected().map(user => m(Pill, {\n deletable: true,\n ondelete: () => {\n const selected = this.selected().filter(u => u !== user);\n this.selected(selected);\n if (!selected.length) {\n this.load();\n }\n },\n className: \"Pill-alt\"\n }, m(Avatar, {\n user: user\n }), user.displayName())))), this.loading || this.results()[this.search()] ? m(\"div\", {\n className: \"Modal-footer\"\n }, this.loading ? m(LoadingIndicator, null) : this.results() && !((_this$results$this$se = this.results()[this.search()]) != null && _this$results$this$se.length) ? m(InfoTile, {\n icon: \"fas fa-search\"\n }, app.translator.trans('core.lib.user_selection_modal.empty_results')) : m(\"ul\", {\n className: \"UserSelectionModal-list Dropdown-menu\"\n }, list.map(user => this.userListItem(user)))) : null];\n }\n userListItem(user) {\n const selected = this.selected().includes(user);\n return m(UserSearchResult, {\n user: user,\n query: this.search(),\n className: classList({\n 'UserSelectionModal-listItem': true,\n 'UserSelectionModal-listItem--selected': selected\n }),\n onclick: () => {\n if (selected) {\n this.selected(this.selected().filter(u => u !== user));\n } else {\n this.selected([...this.selected(), user]);\n }\n }\n }, m(\"input\", {\n type: \"checkbox\",\n checked: selected,\n readOnly: true\n }));\n }\n meetsRequirements() {\n return this.selected().length > 0 && this.selected().length <= (this.attrs.maxItems || Infinity);\n }\n onsubmit(e) {\n e.preventDefault();\n if (this.attrs.onsubmit) this.attrs.onsubmit(this.selected());\n this.hide();\n }\n}\nflarum.reg.add('core', 'common/components/UserSelectionModal', UserSelectionModal);","import extractText from '../utils/extractText';\nimport Button from './Button';\nimport Tooltip from './Tooltip';\n\n/**\n * The `TextEditorButton` component displays a button suitable for the text\n * editor toolbar.\n *\n * Automatically creates tooltips using the Tooltip component and provided text.\n *\n * ## Attrs\n * - `title` - Tooltip for the button\n */\nexport default class TextEditorButton extends Button {\n view(vnode) {\n const originalView = super.view(vnode);\n return m(Tooltip, {\n text: this.attrs.tooltipText || extractText(vnode.children)\n }, originalView);\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n attrs.className = attrs.className || 'Button Button--icon Button--link';\n attrs.tooltipText = attrs.title;\n }\n}\nflarum.reg.add('core', 'common/components/TextEditorButton', TextEditorButton);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from '../Component';\nimport KeyboardNavigatable from '../utils/KeyboardNavigatable';\nimport classList from '../utils/classList';\n/**\n * A reusable component that wraps around an input element and displays a list\n * of suggestions based on the input's value.\n * Must be extended and the `suggestions` method implemented.\n */\nexport default class AutocompleteDropdown extends Component {\n constructor() {\n super(...arguments);\n /**\n * The index of the currently-selected <li> in the results list. This can be\n * a unique string (to account for the fact that an item's position may jump\n * around as new results load), but otherwise it will be numeric (the\n * sequential position within the list).\n */\n _defineProperty(this, \"index\", 0);\n _defineProperty(this, \"navigator\", void 0);\n _defineProperty(this, \"updateMaxHeightHandler\", void 0);\n /**\n * Whether the input has focus.\n */\n _defineProperty(this, \"hasFocus\", false);\n }\n view(vnode) {\n const suggestions = this.suggestions();\n const shouldShowSuggestions = !!suggestions.length;\n return m(\"div\", {\n className: classList('AutocompleteDropdown', {\n focused: this.hasFocus,\n open: shouldShowSuggestions && this.hasFocus\n })\n }, vnode.children, m(\"ul\", {\n className: \"Dropdown-menu Dropdown-suggestions\",\n \"aria-hidden\": !shouldShowSuggestions || undefined,\n \"aria-live\": shouldShowSuggestions ? 'polite' : undefined\n }, suggestions));\n }\n updateMaxHeight() {\n var _this$element$querySe;\n // Since extensions might add elements above the search box on mobile,\n // we need to calculate and set the max height dynamically.\n const resultsElementMargin = 14;\n const maxHeight = window.innerHeight - this.element.querySelector('.FormControl').getBoundingClientRect().bottom - resultsElementMargin;\n (_this$element$querySe = this.element.querySelector('.Dropdown-suggestions')) == null || (_this$element$querySe = _this$element$querySe.style) == null || _this$element$querySe.setProperty('max-height', \"\".concat(maxHeight, \"px\"));\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n\n // Highlight the item that is currently selected.\n this.setIndex(this.getCurrentNumericIndex());\n this.updateMaxHeight();\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n const component = this;\n\n // Highlight the item that is currently selected.\n this.setIndex(this.getCurrentNumericIndex());\n this.$('.Dropdown-suggestions').on('mousedown', e => e.preventDefault())\n // Whenever the mouse is hovered over a search result, highlight it.\n .on('mouseenter', '> li:not(.Dropdown-header)', function () {\n component.setIndex(component.selectableItems().index(this));\n });\n const $input = this.inputElement();\n this.navigator = new KeyboardNavigatable();\n this.navigator.onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true)).onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true)).onSelect(this.selectSuggestion.bind(this), true).bindTo($input);\n $input.on('focus', function () {\n component.hasFocus = true;\n m.redraw();\n $(this).one('mouseup', e => e.preventDefault()).trigger('select');\n }).on('blur', function () {\n component.hasFocus = false;\n m.redraw();\n });\n this.updateMaxHeightHandler = this.updateMaxHeight.bind(this);\n window.addEventListener('resize', this.updateMaxHeightHandler);\n }\n onremove(vnode) {\n super.onremove(vnode);\n if (this.updateMaxHeightHandler) {\n window.removeEventListener('resize', this.updateMaxHeightHandler);\n }\n }\n selectableItems() {\n return this.$('.Dropdown-suggestions > li:not(.Dropdown-header)');\n }\n inputElement() {\n return this.$('input');\n }\n selectSuggestion() {\n this.getItem(this.index).find('button')[0].click();\n }\n\n /**\n * Get the position of the currently selected item.\n * Returns zero if not found.\n */\n getCurrentNumericIndex() {\n return Math.max(0, this.selectableItems().index(this.getItem(this.index)));\n }\n\n /**\n * Get the <li> in the search results with the given index (numeric or named).\n */\n getItem(index) {\n const $items = this.selectableItems();\n let $item = $items.filter(\"[data-index=\\\"\".concat(index, \"\\\"]\"));\n if (!$item.length) {\n $item = $items.eq(index);\n }\n return $item;\n }\n\n /**\n * Set the currently-selected search result item to the one with the given\n * index.\n */\n setIndex(index, scrollToItem) {\n if (scrollToItem === void 0) {\n scrollToItem = false;\n }\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n let fixedIndex = index;\n if (index < 0) {\n fixedIndex = $items.length - 1;\n } else if (index >= $items.length) {\n fixedIndex = 0;\n }\n const $item = $items.removeClass('active').eq(fixedIndex).addClass('active');\n this.index = parseInt($item.attr('data-index')) || fixedIndex;\n if (scrollToItem) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({\n scrollTop\n }, 100);\n }\n }\n }\n}\nflarum.reg.add('core', 'common/components/AutocompleteDropdown', AutocompleteDropdown);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AutocompleteDropdown from './AutocompleteDropdown';\nimport GambitsAutocomplete from '../utils/GambitsAutocomplete';\n/**\n * This is an autocomplete component not related to the SearchModal forum components.\n * It is a standalone component that can be reused for search inputs of any other types\n * of resources. It will display a dropdown menu under the input with gambit suggestions\n * similar to the SearchModal component.\n */\nexport default class GambitsAutocompleteDropdown extends AutocompleteDropdown {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"gambitsAutocomplete\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.gambitsAutocomplete = new GambitsAutocomplete(this.attrs.resource, () => this.inputElement(), this.attrs.onchange, this.attrs.onchange);\n }\n suggestions() {\n return this.gambitsAutocomplete.suggestions(this.attrs.query);\n }\n}\nflarum.reg.add('core', 'common/components/GambitsAutocompleteDropdown', GambitsAutocompleteDropdown);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport Button from './Button';\nimport classList from '../utils/classList';\nimport Component from '../Component';\nexport default class UploadImageButton extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", false);\n }\n view(vnode) {\n let {\n name,\n value,\n url,\n ...attrs\n } = vnode.attrs;\n attrs.loading = this.loading;\n attrs.className = classList(attrs.className, 'Button');\n if (typeof value === 'function') {\n value = value();\n }\n if (typeof url === 'function') {\n url = url();\n }\n return m(\"div\", {\n className: \"UploadImageButton\"\n }, value ? m('[', null, m(\"div\", {\n className: \"UploadImageButton-image\"\n }, m(\"img\", {\n src: url,\n alt: name\n })), m(Button, Object.assign({\n onclick: this.remove.bind(this)\n }, attrs), app.translator.trans('core.admin.upload_image.remove_button'))) : m(Button, Object.assign({\n onclick: this.upload.bind(this)\n }, attrs), app.translator.trans('core.admin.upload_image.upload_button')));\n }\n upload() {\n if (this.loading) return;\n const $input = $('<input type=\"file\">');\n $input.appendTo('body').hide().trigger('click').on('change', e => {\n const body = new FormData();\n // @ts-ignore\n body.append(this.attrs.name, $(e.target)[0].files[0]);\n this.loading = true;\n m.redraw();\n app.request({\n method: 'POST',\n url: this.resourceUrl(),\n serialize: raw => raw,\n body\n }).then(this.success.bind(this), this.failure.bind(this));\n });\n }\n remove() {\n this.loading = true;\n m.redraw();\n app.request({\n method: 'DELETE',\n url: this.resourceUrl()\n }).then(this.success.bind(this), this.failure.bind(this));\n }\n resourceUrl() {\n return app.forum.attribute('apiUrl') + '/' + this.attrs.routePath;\n }\n\n /**\n * After a successful upload/removal, reload the page.\n */\n success(response) {\n window.location.reload();\n }\n\n /**\n * If upload/removal fails, stop loading.\n */\n failure(response) {\n this.loading = false;\n m.redraw();\n }\n}\nflarum.reg.add('core', 'common/components/UploadImageButton', UploadImageButton);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport classList from '../utils/classList';\nimport Dropdown from './Dropdown';\nimport Button from './Button';\nimport Tooltip from './Tooltip';\nimport Select from './Select';\nexport default class MultiSelect extends Select {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"selected\", []);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.selected = this.attrs.value || [];\n }\n input() {\n const {\n options,\n onchange,\n disabled,\n className,\n class: _class,\n ...domAttrs\n } = this.attrs;\n return m(Dropdown, {\n disabled: disabled,\n buttonClassName: \"Button\",\n buttonAttrs: {\n disabled\n },\n label: Object.keys(options).filter(key => this.selected.includes(key)).map(key => typeof options[key] === 'string' ? options[key] : options[key].label).join(', ') || app.translator.trans('core.lib.multi_select.placeholder')\n }, Object.keys(options).map(key => {\n const option = options[key];\n const label = typeof option === 'string' ? option : option.label;\n const tooltip = typeof option !== 'string' && option.tooltip;\n let disabled = typeof option !== 'string' && option.disabled;\n if (typeof disabled === 'function') {\n disabled = disabled(this.selected);\n }\n const button = m(Button, {\n type: \"button\",\n className: classList('Dropdown-item', \"Dropdown-item--\".concat(key), {\n disabled\n }),\n onclick: this.toggle.bind(this, key),\n disabled: disabled,\n icon: this.selected.includes(key) ? 'fas fa-check' : 'fas fa-empty'\n }, label);\n if (tooltip) {\n return m(Tooltip, {\n text: tooltip\n }, button);\n }\n return button;\n }));\n }\n select(value) {\n this.selected.push(value);\n }\n unselect(value) {\n this.selected = this.selected.filter(v => v !== value);\n }\n toggle(value, e) {\n e.stopPropagation();\n if (this.selected.includes(value)) {\n this.unselect(value);\n } else {\n this.select(value);\n }\n if (this.attrs.onchange) {\n this.attrs.onchange(this.selected);\n }\n }\n}\nflarum.reg.add('core', 'common/components/MultiSelect', MultiSelect);","import Component from '../Component';\nimport generateElementId from '../utils/generateElementId';\nimport Switch from './Switch';\nimport Select from './Select';\nimport UploadImageButton from './UploadImageButton';\nimport classList from '../utils/classList';\nimport ColorPreviewInput from './ColorPreviewInput';\nimport ItemList from '../utils/ItemList';\nimport MultiSelect from './MultiSelect';\nimport FieldSet from './FieldSet';\n\n/**\n * A type that matches any valid value for the `type` attribute on an HTML `<input>` element.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-type\n *\n * Note: this will be exported from a different location in the future.\n *\n * @see https://github.com/flarum/core/issues/3039\n */\n\n/**\n * Valid options for the setting component builder to generate an HTML input element.\n */\n\nconst BooleanSettingTypes = ['bool', 'checkbox', 'switch', 'boolean'];\nconst SelectSettingTypes = ['select', 'dropdown', 'selectdropdown'];\nconst RadioSettingTypes = ['radio'];\nconst TextareaSettingTypes = ['textarea'];\nconst ColorPreviewSettingType = 'color-preview';\nconst ImageUploadSettingType = 'image-upload';\nconst StackedFormControlType = 'stacked-text';\n\n/**\n * Valid options for the setting component builder to generate a Switch.\n */\n\n/**\n * Valid options for the setting component builder to generate a Select dropdown.\n */\n\n/**\n * Valid options for the setting component builder to generate a Textarea.\n */\n\n/**\n * Valid options for the setting component builder to generate a ColorPreviewInput.\n */\n\n/**\n * All valid options for the setting component builder.\n */\n\n/**\n * Builds a field component based on the provided attributes.\n * Depending on the type of input, you can set the type to 'bool', 'select', or\n * any standard <input> type. Any values inside the 'extra' object will be added\n * to the component as an attribute.\n *\n * Alternatively, you can pass a callback that will be executed in ExtensionPage's\n * context to include custom JSX elements.\n *\n * @example\n *\n * <FormGroup key=\"acme.checkbox\"\n * label={app.translator.trans('acme.admin.setting_label')}\n * type=\"bool\"\n * help={app.translator.trans('acme.admin.setting_help')}\n * className=\"Setting-item\" />\n *\n * @example\n *\n * <FormGroup key=\"acme.select\"\n * label={app.translator.trans('acme.admin.setting_label')}\n * type=\"select\"\n * options={{\n * 'option1': 'Option 1 label',\n * 'option2': 'Option 2 label',\n * }}\n * default=\"option1\" />\n */\nexport default class FormGroup extends Component {\n view(vnode) {\n const customFieldComponents = this.customFieldComponents();\n const {\n help,\n type,\n label,\n stream,\n getSetting,\n containerClassName,\n ...componentAttrs\n } = this.attrs;\n\n // TypeScript being TypeScript\n const attrs = componentAttrs;\n const value = stream ? stream() : null;\n const [inputId, helpTextId] = [generateElementId(), generateElementId()];\n let settingElement;\n\n // Typescript being Typescript\n // https://github.com/microsoft/TypeScript/issues/14520\n if (BooleanSettingTypes.includes(type)) {\n return (\n // TODO: Add aria-describedby for switch help text.\n //? Requires changes to Checkbox component to allow providing attrs directly for the element(s).\n m(\"div\", {\n className: classList('Form-group', containerClassName)\n }, m(Switch, Object.assign({\n state: !!value && value !== '0',\n onchange: stream\n }, attrs), label), help ? m(\"div\", {\n className: \"helpText\"\n }, help) : null)\n );\n } else if (SelectSettingTypes.includes(type)) {\n const {\n default: defaultValue,\n options,\n multiple,\n ...otherAttrs\n } = attrs;\n const Tag = multiple ? MultiSelect : Select;\n settingElement = m(Tag, Object.assign({\n id: inputId,\n \"aria-describedby\": helpTextId,\n value: value || defaultValue,\n options: options,\n onchange: stream\n }, otherAttrs));\n } else if (RadioSettingTypes.includes(type)) {\n const {\n default: defaultValue,\n options,\n multiple,\n ...otherAttrs\n } = attrs;\n settingElement = m(FieldSet, otherAttrs, options.map(_ref => {\n let {\n value,\n label\n } = _ref;\n return m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"homePage\",\n value: value,\n bidi: stream\n }), label);\n }));\n } else if (type === StackedFormControlType) {\n const {\n textArea,\n ...otherAttrs\n } = attrs;\n const {\n setting: textAreaSetting,\n ...textAreaAttrs\n } = textArea;\n settingElement = m(\"div\", Object.assign({\n className: \"StackedFormControl\"\n }, otherAttrs), m(\"input\", {\n type: \"text\",\n className: \"FormControl\",\n bidi: stream\n }), m(\"textarea\", Object.assign({\n className: \"FormControl\",\n bidi: getSetting == null ? void 0 : getSetting(textAreaSetting)\n }, textAreaAttrs)));\n } else if (type === ImageUploadSettingType) {\n const {\n value,\n ...otherAttrs\n } = attrs;\n settingElement = m(UploadImageButton, Object.assign({\n value: stream\n }, otherAttrs));\n } else if (customFieldComponents.has(type)) {\n return customFieldComponents.get(type)({\n ...this.attrs,\n bidi: this.attrs.stream\n });\n } else {\n attrs.className = classList('FormControl', attrs.className);\n if (TextareaSettingTypes.includes(type)) {\n settingElement = m(\"textarea\", Object.assign({\n id: inputId,\n \"aria-describedby\": helpTextId,\n bidi: stream\n }, attrs));\n } else {\n let Tag = 'input';\n if (type === ColorPreviewSettingType) {\n Tag = ColorPreviewInput;\n } else {\n attrs.type = type;\n }\n settingElement = m(Tag, Object.assign({\n id: inputId,\n \"aria-describedby\": helpTextId,\n bidi: stream\n }, attrs));\n }\n }\n return m(\"div\", {\n className: classList('Form-group', containerClassName)\n }, label && m(\"label\", {\n for: inputId\n }, label), help && m(\"div\", {\n id: helpTextId,\n className: \"helpText\"\n }, help), settingElement);\n }\n\n /**\n * A list of extension-defined custom setting components to be available.\n *\n * The ItemList key represents the value for the `type` attribute.\n * All attributes passed are provided as arguments to the function added to the ItemList.\n *\n * ItemList priority has no effect here.\n *\n * @example\n * ```tsx\n * extend(AdminPage.prototype, 'customFieldComponents', function (items) {\n * // You can access the AdminPage instance with `this` to access its `settings` property.\n *\n * // Prefixing the key with your extension ID is recommended to avoid collisions.\n * items.add('my-ext.setting-component', (attrs) => {\n * return (\n * <div className={attrs.className}>\n * <label>{attrs.label}</label>\n * {attrs.help && <p className=\"helpText\">{attrs.help}</p>}\n *\n * My setting component!\n * </div>\n * );\n * })\n * })\n * ```\n */\n customFieldComponents() {\n const items = new ItemList();\n return items;\n }\n}\nflarum.reg.add('core', 'common/components/FormGroup', FormGroup);","import app from '../../common/app';\n\n/**\n * The `punctuateSeries` helper formats a list of strings (e.g. names) to read\n * fluently in the application's locale.\n *\n * ```js\n * punctuateSeries(['Toby', 'Franz', 'Dominion']) // Toby, Franz, and Dominion\n * ```\n *\n * @param {import('mithril').Children[]} items\n * @return {import('mithril').Children}')}\n */\nexport default function punctuateSeries(items) {\n if (items.length === 2) {\n return app.translator.trans('core.lib.series.two_text', {\n first: items[0],\n second: items[1]\n });\n } else if (items.length >= 3) {\n // If there are three or more items, we will join all but the first and\n // last items with the equivalent of a comma, and then we will feed that\n // into the translator along with the first and last item.\n const second = items.slice(1, items.length - 1).reduce((list, item) => list.concat([item, app.translator.trans('core.lib.series.glue_text')]), []).slice(0, -1);\n return app.translator.trans('core.lib.series.three_text', {\n first: items[0],\n second,\n third: items[items.length - 1]\n });\n }\n return items;\n}\nflarum.reg.add('core', 'common/helpers/punctuateSeries', punctuateSeries);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/**\n * The `Fragment` class represents a chunk of DOM that is rendered once with Mithril and then takes\n * over control of its own DOM and lifecycle.\n *\n * This is very similar to the `Component` wrapper class, but is used for more fine-grained control over\n * the rendering and display of some significant chunks of the DOM. In contrast to components, fragments\n * do not offer Mithril's lifecycle hooks.\n *\n * Use this when you want to enjoy the benefits of JSX / VDOM for initial rendering, combined with\n * small helper methods that then make updates to that DOM directly, instead of fully redrawing\n * everything through Mithril.\n *\n * This should only be used when necessary, and only with `m.render`. If you are unsure whether you need\n * this or `Component, you probably need `Component`.\n */\nexport default class Fragment {\n constructor() {\n /**\n * The root DOM element for the fragment.\n */\n _defineProperty(this, \"element\", void 0);\n }\n /**\n * Returns a jQuery object for this fragment's element. If you pass in a\n * selector string, this method will return a jQuery object, using the current\n * element as its buffer.\n *\n * For example, calling `fragment.$('li')` will return a jQuery object\n * containing all of the `li` elements inside the DOM element of this\n * fragment.\n *\n * @param [selector] a jQuery-compatible selector string\n * @returns the jQuery object for the DOM node\n * @final\n */\n $(selector) {\n const $element = $(this.element);\n return selector ? $element.find(selector) : $element;\n }\n\n /**\n * Get the renderable virtual DOM that represents the fragment's view.\n *\n * This should NOT be overridden by subclasses. Subclasses wishing to define\n * their virtual DOM should override Fragment#view instead.\n *\n * @example\n * const fragment = new MyFragment();\n * m.render(document.body, fragment.render());\n *\n * @final\n */\n render() {\n const vdom = this.view();\n vdom.attrs = vdom.attrs || {};\n const originalOnCreate = vdom.attrs.oncreate;\n vdom.attrs.oncreate = vnode => {\n this.element = vnode.dom;\n if (originalOnCreate) originalOnCreate.apply(this, [vnode]);\n };\n return vdom;\n }\n\n /**\n * Creates a view out of virtual elements.\n */\n}\nflarum.reg.add('core', 'common/Fragment', Fragment);","import app from '../../forum/app';\nimport Button from '../../common/components/Button';\nimport classList from '../../common/utils/classList';\n\n/**\n * The `LogInButton` component displays a social login button which will open\n * a popup window containing the specified path.\n *\n * ### Attrs\n *\n * - `path`\n */\nexport default class LogInButton extends Button {\n static initAttrs(attrs) {\n attrs.className = classList(attrs.className, 'LogInButton');\n attrs.onclick = function () {\n const width = 580;\n const height = 400;\n const $window = $(window);\n window.open(app.forum.attribute('baseUrl') + attrs.path, 'logInPopup', \"width=\".concat(width, \",\") + \"height=\".concat(height, \",\") + \"top=\".concat($window.height() / 2 - height / 2, \",\") + \"left=\".concat($window.width() / 2 - width / 2, \",\") + 'status=no,scrollbars=yes,resizable=no');\n };\n super.initAttrs(attrs);\n }\n}\nflarum.reg.add('core', 'forum/components/LogInButton', LogInButton);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport Link from '../../common/components/Link';\nimport username from '../../common/helpers/username';\nimport highlight from '../../common/helpers/highlight';\nimport Avatar from '../../common/components/Avatar';\n\n/**\n * The `PostPreview` component shows a link to a post containing the avatar and\n * username of the author, and a short excerpt of the post's content.\n *\n * ### Attrs\n *\n * - `post`\n */\nexport default class PostPreview extends Component {\n view() {\n const post = this.attrs.post;\n const user = post.user();\n const content = post.contentType() === 'comment' && post.contentPlain();\n const excerpt = content ? highlight(content, this.attrs.highlight, 300) : '';\n return m(Link, {\n className: \"PostPreview\",\n href: app.route.post(post),\n onclick: this.attrs.onclick\n }, m(\"span\", {\n className: \"PostPreview-content\"\n }, m(Avatar, {\n user: user\n }), username(user), \" \", m(\"span\", {\n className: \"PostPreview-excerpt\"\n }, excerpt)));\n }\n}\nflarum.reg.add('core', 'forum/components/PostPreview', PostPreview);"],"names":["inProgress","dataWebpackPrefix","Application","constructor","this","A","forums","users","discussions","posts","groups","notifications","fontawesome","title","val","_title","titleCount","_titleCount","load","payload","data","translator","setLocale","locale","initialize","caughtInitializationErrors","initializers","toArray","forEach","initializer","e","extension","itemName","includes","replace","push","trans","concat","boot","_this$store$getById","store","pushPayload","resources","forum","getById","session","String","userId","csrfToken","beforeMount","mount","initialRoute","window","location","href","handler","bootExtensions","extensions","Object","keys","name","extend","extenders","flat","Infinity","extender","exports","basePath","m","document","getElementById","view","state","modal","alerts","drawer","route","routes","appEl","appHeaderEl","querySelector","scrollListener","top","offset","getBoundingClientRect","body","scrollTop","classList","toggle","start","update","add","initColorScheme","forumDefault","_app$forum$attribute","_this$session$user","attribute","allowUserColorScheme","userConfiguredPreference","user","preferences","colorScheme","scheme","setColorScheme","watchSystemColorSchemePreference","getSystemColorSchemePreference","matchMedia","matches","callback","addEventListener","Auto","documentElement","setAttribute","setColoredHeader","value","preloadedApiDocument","apiDocument","results","screen","getComputedStyle","getPropertyValue","setTitle","updateTitle","setTitleCount","count","onHomepage","get","params","pageTitle","forumName","pageNumber","parser","DOMParser","parseFromString","innerText","transformRequestOptions","flarumOptions","background","deserialize","modifyText","tmpOptions","options","response","_","xhr","setRequestHeader","method","extract","responseText","status","getResponseHeader","JSON","parse","request","originalOptions","requestErrorAlert","dismiss","catch","requestErrorCatch","errorHandler","error","customErrorHandler","_error$response$error","_error$response","_error$response2","_app$session$user","formattedErrors","errors","map","_e$detail","decodeURI","detail","content","slice","code","isAdmin","requestWasCrossOrigin","isDebug","alert","type","controls","className","onclick","showDebug","bind","requestErrorDefaultHandler","Promise","reject","URL","url","baseURI","origin","console","group","length","groupEnd","show","formattedError","Error","path","key","hasOwnProperty","queryString","buildQueryString","prefix","flarum","reg","Component","oninit","vnode","setAttrs","attrs","oncreate","element","dom","onbeforeupdate","onupdate","onbeforeremove","onremove","$","selector","$element","find","component","children","componentAttrs","initAttrs","Model","Date","id","undefined","_this$data","attributes","pushData","_this$data2","assign","_this$data$relationsh","relationships","r","relationship","identifier","getIdentifier","Array","freshness","pushAttributes","save","model","oldData","copyData","meta","exists","apiEndpoint","then","err","redraw","remove","resolve","stringify","rawRelationship","_this$data$relationsh2","transform","hasOne","_this$data$relationsh3","relationshipData","hasMany","_this$data$relationsh4","transformDate","AuthorGambit","app","hint","filterKey","CreatedGambit","valuePattern","HiddenGambit","enabled","UnreadGambit","EmailGambit","GroupGambit","DiscussionGambit","GambitManager","apply","filter","q","match","gambit","negate","additions","toFilter","predicates","isArray","query","onmatch","gambits","for","bits","split","bit","pattern","RegExp","splice","trim","from","substring","fromFilter","gambitClass","SearchManager","Session","login","logout","payloadIsPlural","Store","models","included","pushObject","result","o","setTimeout","curr","instance","createRecord","idOrParams","_params","join","search","getBy","all","records","values","Translator","formatterTypeHandlers","formatter","getLocale","addTranslations","translations","plural","select","preprocessParameters","parameters","username","translation","rich","w","appProxy","Proxy","properties","Reflect","set","Alert","icon","dismissible","ondismiss","dismissControl","containerClassName","AlertManager","super","activeAlerts","getActiveAlerts","Number","urgent","role","componentClass","Avatar","loading","hasTitle","displayName","avatarUrl","src","alt","charAt","toUpperCase","style","testing","color","Badge","iconName","label","iconChild","trust","newStyle","badgeAttrs","badgeNode","text","fireDebugWarning","warn","arguments","Button","ariaLabel","disabled","class","_class","extractText","hasIcon","buttonAttrs","getButtonContent","_this$element","_this$element$getAttr","prototype","getAttribute","call","Icon","LoadingIndicator","size","display","Checkbox","checked","onchange","getDisplay","Dropdown","buttonClassName","menuClassName","caretIcon","accessibleToggleLabel","items","renderItems","lazyDraw","showing","getButton","getMenu","on","_$menu$offset$top","_$menu$offset","_$menu$height","_$$scrollTop","_$$height","_$menu$offset2","_$menu$offset$left","_$menu$offset3","_$menu$width","_$$scrollLeft","_$$width","onshow","sync","$menu","isRight","hasClass","height","windowSrollTop","windowHeight","removeClass","toggleClass","left","width","windowScrollLeft","scrollLeft","windowWidth","onhide","button","tooltip","position","FieldSet","description","Form","FormModal","wrapper","onsubmit","onready","first","trigger","onerror","alertAttrs","source","pointer","GroupBadge","nameSingular","InfoTile","iconElement","Input","_this$attrs$stream","_this$attrs","inputClassName","inputAttrs","stream","prefixIcon","clearable","input","clear","clearLabel","_ref","oninput","_this$onchange","target","placeholder","readonly","renderInput","_this$attrs$onchange","_this$attrs2","completeClassName","completeContainerClassName","containerAttrs","Modal","dismissibleOptions","viaCloseButton","isDismissibleViaCloseButton","viaEscKey","isDismissibleViaEscKey","viaBackdropClick","isDismissibleViaBackdropClick","animateShow","hide","inner","animateHide","loaded","ModalManager","modalList","i","Tag","handlePossibleBackdropClick","backdropShown","loadingModal","ontransitionend","onBackdropTransitionEnd","keyUpListener","handleEscPress","removeEventListener","requestAnimationFrame","_document$getElementB2","_document$getElementB","_deactivate","isModalOpen","focusTrap","deactivate","dialogKey","_deactivate2","_ref2","_activate","_ref3","lastSetFocusTrap","activeDialogElement","allowOutsideClick","activate","activeDialogManagerElement","reserveScrollBarGap","_this$attrs$state$mod","_this$attrs$state$mod2","readyCallback","_this$activeDialogEle","once","_this$activeDialogEle2","closedCallback","_this$activeDialogEle3","_this$activeDialogEle4","_this$activeDialogEle5","modalClosing","close","dismissibleState","preventDefault","propertyName","currentTarget","Navigation","history","pane","onmouseenter","onmouseleave","canGoBack","getBackButton","getPaneButton","getDrawerButton","previous","getPrevious","backUrl","shiftKey","ctrlKey","metaKey","which","back","active","pinned","togglePinned","new","newNotificationCount","stopPropagation","Page","current","routeName","bodyClass","addClass","scrollTopOnCreate","scrollRestoration","useBrowserScrollRestoration","RequestErrorModal","statusText","_responseText","srcdoc","onload","_iframe$contentWindow","iframe","contentWindow","offsetHeight","isActive","tag","SelectDropdown","activeChild","defaultLabel","SplitDropdown","mainAction","firstChild","getFirstChild","Switch","ColorScheme","ThemeMode","mode","selected","alternate","Light","Dark","LightHighContrast","DarkHighContrast","Tooltip","tooltipVisible","showOnFocus","ignoreTitleWarning","html","delay","realText","getRealText","oldText","shouldRecreateTooltip","oldVisibility","shouldChangeTooltipVisibility","checkDomNodeChanged","recreateTooltip","childDomNode","createTooltip","updateVisibility","placement","domNode","isSameNode","UserSearchResult","badges","object","methods","namespace","namespaceAndIdFromPath","onLoad","module","original","_len","args","_key","override","newMethod","_len2","_key2","fireApplicationError","userTitle","consoleTitle","_app$session","fullTime","time","d","datetime","format","full","pubdate","highlight","string","phrase","safe","regexp","highlighted","Math","max","humanTime","ago","isVnode","item","isSeparator","listItems","rawItems","customTag","newItems","prevItem","Boolean","withoutUnnecessarySeparators","_item$attrs2","classes","isListItem","_item$attrs","_item$tag$isActive","_item$tag","itemClassName","textContrastClass","hexcolor","userOnline","lastSeenAt","isOnline","transformer","AccessToken","token","createdAt","lastActivityAt","lastIpAddress","device","isCurrent","isSessionToken","Discussion","slug","firstPost","lastPostedAt","lastPostedUser","lastPost","lastPostNumber","commentCount","replyCount","mostRelevantPost","lastReadAt","lastReadPostNumber","isUnread","unreadCount","isRead","hiddenAt","hiddenUser","isHidden","canReply","canRename","canHide","canDelete","removePost","some","_user$markedAllAsRead","_user$markedAllAsRead2","_this$lastPostedAt","markedAllAsReadAt","getTime","_this$lastPostNumber","_this$commentCount","min","postIds","_this$rawRelationship","_this$rawRelationship2","link","Forum","Group","namePlural","Notification","contentType","fromUser","subject","Post","number","discussion","contentHtml","renderFailed","contentPlain","editedAt","editedUser","isEdited","canEdit","User","email","isEmailConfirmed","password","joinTime","unreadNotificationCount","discussionCount","canEditCredentials","canEditGroups","avatarColor","calculateAvatarColor","dayjs","subtract","isBefore","_this$avatarUrl","image","Image","colorThief","getColor","TypeError","crossOrigin","savePreferences","newPreferences","GambitType","BooleanGambit","Grouped","is","_matches","suggestion","KeyValueGambit","KeyValue","gambitValueToFilterValue","filterValueToGambitValue","toString","DefaultResolver","makeKey","param","makeAttrs","requestedPath","default","render","AlertManagerState","arg1","arg2","arg3","alertId","showLoading","loadingPool","clearLoading","ModalManagerState","stackModal","invalidModalWarning","pop","PageState","every","PaginatedListState","page","pageSize","pages","loadPrev","loadingPrev","getLocation","getPrevPageNumber","loadPage","parseResults","finally","loadNext","loadingNext","getNextPageNumber","pg","_results$payload","pageNum","links","hasNext","next","hasPrev","prev","isEmpty","unshift","reqParams","requestParams","include","limit","_results$payload2","_results$payload3","usedPerPage","perPage","usedTotal","total","DEFAULT_PAGE_SIZE","totalItems","refreshParams","newParams","paramsChanged","refresh","initialLoading","goto","loadingPage","getPages","isLoading","isInitialLoading","isLoadingPrev","isLoadingNext","hasItems","getAllItems","_this$pages$","_this$pages","getParams","_this$pages2","isNaN","_this$pages$2","isSearchResults","lastPage","getSort","sort","sortMap","sortValue","currentSort","changeSort","changeFilter","SearchState","cachedSearches","Set","getInitialSearch","getValue","setValue","cache","isCached","has","AutocompleteReader","symbol","check","lastChunk","cursor","validBit","absoluteStart","_validBit","character","substr","test","relativeStart","typed","toLowerCase","BasicEditorDriver","el","createElement","build","classNames","callInputListeners","inputListeners","listener","onkeyup","keyHandlers","append","moveCursorTo","setSelectionRange","getSelectionRange","selectionStart","selectionEnd","getLastNChars","n","insertAtCursor","insertAt","pos","insertBetween","cursorPos","replaceBeforeCursor","end","focus","getCaretCoordinates","relCoords","destroy","EventEmitter","events","event","emit","GambitsAutocomplete","resource","jqueryInput","afterSuggest","suggestions","groupedGambits","keyValueGambits","uniqueGroups","instancePerGroup","autocompleteReader","cursorPosition","prop","autocomplete","negative","startsWith","endsWith","gambitKey","gambitQuery","specificGambitSuggestions","gambitSuggestion","negated","_autocomplete$relativ","suggest","flatMap","fromTyped","$input","replaced","Item","priority","ItemList","_items","getPriority","setContent","setPriority","merge","otherList","keepPrimitives","createItemContentProxy","a","b","toObject","reduce","obj","property","receiver","Keys","KeyboardNavigatable","Map","onUp","onDirection","ArrowUp","onDown","ArrowDown","onLeft","ArrowLeft","onRight","ArrowRight","direction","callbacks","onSelect","ignoreTabPress","Tab","Enter","onTab","onCancel","Escape","onRemove","Backspace","KeyboardEvent","HTMLInputElement","when","whenCallback","bindTo","navigate","keyCallback","RequestError","SubtreeRetainer","needsRebuild","invalidate","abbreviateNumber","floor","toFixed","depth","acc","t","f","computed","compute","dependentValues","computedValue","recompute","attr","specialChars","escapeRegExp","vdom","createFocusTrap","escapeDeactivates","formatNumber","Intl","NumberFormat","now","isAfter","diff","year","fromNow","canInsertText","insertText","textarea","originalSelectionStart","before","after","contentEditable","execCommand","dispatchEvent","CustomEvent","bubbles","cancelable","isDark","hexnumbers","char","repeat","parseInt","isObject","updateHumanTimes","each","$this","liveHumanTimes","setInterval","mapRoutes","resolver","resolverClass","setRouteWithForcedRefresh","newOptions","truncate","SluggingMode","getPlainContent","removeSelectors","querySelectorAll","ucfirst","camelCaseToSnakeCase","str","letter","ALPHANUMERIC","UTF8","generateRandomString","arr","Uint8Array","crypto","getRandomValues","dec","padStart","stringToColor","num","charCodeAt","rgb","h","s","v","g","p","hsvToRgb","withAttr","cb","isSafariMobile","navigator","vendor","userAgent","Notices","onclickEmailConfirmation","sent","bisecting","maintenanceMode","Footer","ForumApplication","discussionRenamed","DiscussionRenamedNotification","comment","CommentPost","DiscussionRenamedPost","History","NotificationListState","GlobalSearchState","ComposerState","DiscussionListState","getPrototypeOf","defaultRoute","defaultAction","Pane","HeaderPrimary","HeaderSecondary","home","viewingDiscussion","DiscussionPage","authenticationComplete","loggedIn","reload","DiscussionListItem","subtree","elementAttrs","Slidable","viewItems","controlsView","slidableUnderneathView","contentView","markAsRead","unread","read","contentItems","authorView","mainView","statsView","authorItems","author","badgesView","jumpTo","getJumpTo","highlightRegExp","infoItems","post","_discussion$lastPostN","slidableInstance","reset","showFirstPost","_this$attrs$params$so","showRepliesCount","_post$contentPlain","excerpt","statsItems","replyCountItem","showUnread","a11yKey","DiscussionListItemStatsItem","a11yLabel","_app$pane","_app$pane2","enable","_app$pane3","_app$composer","disable","composer","composingReplyTo","fields","minimize","hero","sidebar","PostStream","onPositionChange","positionChanged","sidebarItems","PostStreamImport","PostStreamScrubberImport","PostStreamScrubber","preloadedDiscussion","bySlug","near","_includedPosts$0$numb","_includedPosts$","includedPosts","discussionId","record","rawNearParam","nearParam","goToNumber","startNumber","endNumber","replaceState","addChunkModule","notification","postNumber","DiscussionsSearchSource","customGrouping","fullPage","gotoItem","IndexPage","lastDiscussion","actionItems","oldHeroHeight","heroHeight","outerHeight","css","$discussion","indexTop","indexBottom","discussionOffset","discussionTop","discussionBottom","sortOptions","sortId","markAllAsRead","confirm","IndexSidebar","canStartDiscussion","newDiscussionAction","navItems","stickyParams","LoadingPost","MinimalDiscussionListItem","HeaderListItem","avatar","actions","Link","external","_this$href","_app$session$user$unr","HeaderDropdown","newCount","getNewCount","getUnreadCount","menuClick","getContent","_this$attrs$state","isOpen","goToRoute","NotificationsDropdown","NotificationList","PageStructure","rootItems","providedPane","main","mainItems","providedHero","container","loadingItems","containerItems","providedContent","AbstractPost","footerItems","header","sideItems","$actions","$controls","existing","createdByStarter","PostControls","PostListItem","PostList","Placeholder","itemNum","PostMeta","permalink","getPermalink","touch","parent","postIdentifier","ipAddress","_this$attrs$permalink","PostUser","PostsPage","PostsUserPage","loadLimit","loadUser","RenameDiscussionModal","currentTitle","newTitle","bidi","PostsSearchSource","LinkButton","AbstractSearch","searchState","sourceItems","openSearchModal","blur","sources","a11yRoleLabel","onkeydown","Search","UsersSearchSource","SessionDropdown","UserPage","editable","controlsButtonClassName","lowercaseUsername","isActor","lastIndexOf","localeCompare","LOCAL_STORAGE_KEY","WelcomeHero","slideUp","welcomeItems","localStorage","setItem","getItem","DiscussionPageResolver","canonicalizeDiscussionSlug","scrollToPostNumber","index","settings","makeRouteHelpers","Position","HIDDEN","preventExit","isVisible","onExit","editor","mounted","Composer","NORMAL","FULLSCREEN","MINIMIZED","fullScreen","exitFullScreen","bodyMatches","isFullScreen","ReplyComposer","checkModule","message","preventClosingWhen","minimumHeight","maximumHeight","computedHeight","globalEventEmitter","eventEmitter","deleteDiscussion","preloadedDiscussions","_preloadedDiscussions","extraDiscussions","relevance","latest","newest","oldest","removeDiscussion","indexOf","addDiscussion","initialValueSet","currPageProvidesSearch","intializeValue","providesInitialSearch","searchToQuery","clearInitialSearch","_app$session$user2","_app$session$user3","deleteAll","_app$session$user4","PostListState","_this$params$sort","preloadedPosts","_preloadedPosts$paylo","extraPosts","PostStreamState","_loadNext","loadPrevious","_loadPrevious","viewingEnd","visibleEnd","loadRange","visibleStart","goToFirst","goToIndex","goToLast","noAnimation","resultPromise","targetPost","reply","paused","loadPromise","loadNearNumber","needsScroll","animateScroll","loadNearIndex","sanitizeIndex","loadCount","twoPagesAway","loadPageTimeouts","clearTimeout","pagesLoading","backwards","anchorIndex","loadIds","newPosts","_posts$0$id","visible","abs","getCurrent","stack","secondTop","replaceRichTags","dontUnescapeIndices","traverseMessageTags","segment","currTagIsClosing","currTag","j","currTagStart","break","endingLocation","startIndex","startSegmentIndex","segmentIndex","segmentStart","segmentEnd","exit","findClosingTag","entireTagInSegment","segmentContainingClosingTag","tagContents","k","processedSegment","newSegmentIndex","unEscapeHtml","startI","startJ","onTagClose","ch","inTag","instructions","recSanitizeArr","defaultRichHandler","contents","RichMessageFormatter","_MessageFormatter","_this","typeHandlers","richHandler","_classCallCheck","_super","cleanedValues","sanitizeValues","formatted","flatten","process","sym","random","fakeValues","fromEntries","entries","_slicedToArray","originalTemplateSegmentIndices","MessageFormatter","mithrilRichHandler","fragment","_objectSpread","array","accumulator","memoize","func","arg","toISOString","parseCases","isWhitespace","cases","currTermStart","latestTerm","inTerm","caseBody","branchEndIndex","findClosingBracket","fromIndex","splitFormattedArgument","block","separator","indexOfDelimiter","head","tail","pluralFormatter","_defineProperty","blockStartIndex","blockEndIndex","_splitFormattedArgume","_splitFormattedArgume2","typeHandler","keyCounter","ONE","OTHER$1","replaceNumberSign","output","numBraces","numberValues","keyParam","pluralTypeHandler","_parseCases","intValue","keywordPossibilities","resolvedOptions","PluralRules","pluralKeyword","keyword","_replaceNumberSign","OTHER","selectTypeHandler","hasPassiveEvents","passiveTestOptions","passive","isIosDevice","platform","maxTouchPoints","locks","documentListenerAdded","initialClientY","previousBodyOverflowSetting","previousBodyPosition","previousBodyPaddingRight","allowTouchMove","lock","rawEvent","touches","disableBodyScroll","targetElement","arr2","_toConsumableArray","_window","scrollY","scrollX","innerHeight","bottomBarHeight","_reserveScrollBarGap","scrollBarGap","innerWidth","clientWidth","computedBodyPaddingRight","paddingRight","overflow","setOverflowHidden","ontouchstart","targetTouches","clientY","ontouchmove","scrollHeight","clientHeight","isTargetElementTotallyScrolled","handleScroll","clearAllBodyScrollLocks","y","x","scrollTo","restorePositionSetting","Affix","DEFAULTS","$target","proxy","checkPosition","checkPositionWithEventLoop","affixed","unpin","pinnedOffset","Plugin","option","VERSION","RESET","getState","offsetTop","offsetBottom","targetHeight","initializing","colliderTop","getPinnedOffset","bottom","affix","affixType","Event","isDefaultPrevented","old","fn","Constructor","noConflict","$spy","jQuery","getParent","$parent","clearMenus","relatedTarget","tagName","contains","closest","insertAfter","keydown","$items","eq","dropdown","DISALLOWED_ATTRIBUTES","uriAttrs","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attrName","nodeName","inArray","nodeValue","regExp","l","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","implementation","createHTMLDocument","createdDocument","innerHTML","whitelistKeys","elements","len","elName","attributeList","whitelistedAttributes","len2","removeAttribute","parentNode","removeChild","timeout","hoverState","inState","init","TRANSITION_DURATION","animation","template","viewport","padding","sanitize","area","br","col","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","pre","small","span","sub","sup","strong","u","ul","getOptions","$viewport","isFunction","click","hover","triggers","eventIn","eventOut","enter","leave","_options","fixTitle","getDefaults","dataAttributes","dataAttr","getDelegateOptions","defaults","self","tip","isInStateTrue","hasContent","inDom","ownerDocument","that","$tip","tipId","getUID","autoToken","autoPlace","detach","appendTo","getPosition","actualWidth","offsetWidth","actualHeight","orgPlacement","viewportDim","right","calculatedOffset","getCalculatedOffset","applyPlacement","complete","prevHoverState","support","transition","one","emulateTransitionEnd","marginTop","marginLeft","setOffset","using","props","round","delta","getViewportAdjustedDelta","isVertical","arrowDelta","arrowOffsetPosition","replaceArrow","dimension","arrow","getTitle","removeAttr","$e","isBody","elRect","isSvg","SVGElement","elOffset","scroll","outerDims","viewportPadding","viewportDimensions","topEdgeOffset","bottomEdgeOffset","leftEdgeOffset","rightEdgeOffset","$arrow","toggleEnabled","off","removeData","duration","called","$el","transEndEventNames","WebkitTransition","MozTransition","OTransition","transitionEnd","special","bsTransitionEnd","bindType","delegateType","handle","handleObj","CanvasImage","canvas","context","getContext","appendChild","drawImage","clearRect","putImageData","getPixelCount","getImageData","removeCanvas","ColorThief","getPalette","c","MMCQ","quantize","palette","pv","naturalOrder","sum","peek","debug","r1","r2","g1","g2","b1","b2","histo","vboxes","vbox","volume","copy","_volume","_count_set","_count","avg","_avg","gval","bval","nearest","sqrt","pow","forcebw","M","weekdays","months","ordinal","z","utcOffset","date","month","clone","ceil","D","ms","Q","S","O","$L","utc","$u","$x","$offset","$d","NaN","UTC","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","isSame","startOf","endOf","$g","unix","valueOf","toDate","$locale","weekStart","$set","daysInMonth","invalidDate","meridiem","monthsShort","weekdaysMin","weekdaysShort","getTimezoneOffset","toJSON","toUTCString","$i","isDayjs","en","Ls","LTS","LT","L","LL","LLL","LLLL","formats","future","past","mm","hh","dd","MM","yy","fromToBase","relativeTime","thresholds","rounding","to","toNow","globalThis","Function","global","trapQueue","activeFocusTraps","activateTrap","trap","activeTrap","pause","trapIndex","deactivateTrap","unpause","findIndex","idx","valueOrHandler","getActualTarget","shadowRoot","composedPath","userOptions","doc","config","_objectSpread2","returnFocusOnDeactivate","delayInitialFocus","containers","containerGroups","tabbableGroups","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","delayInitialFocusTimer","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","tabbableNodes","node","getNodeForOption","optionValue","getInitialFocusNode","activeElement","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","tabbable","tabbableOptions","focusableNodes","focusable","lastTabbableNode","nextTabbableNode","forward","nodeIdx","isTabbable","reverse","tryFocus","preventScroll","isSelectableInput","getReturnFocusNode","previousActiveElement","checkPointerDown","clickOutsideDeactivates","returnFocus","isFocusable","checkFocusIn","targetContained","Document","stopImmediatePropagation","checkKey","keyCode","isEscapeEvent","isTabEvent","destinationNode","containerIndex","containerGroup","startOfGroupIndex","destinationGroupIndex","lastOfGroupIndex","_destinationGroupIndex","checkTab","checkClick","addListeners","capture","removeListeners","activateOptions","onActivate","onPostActivate","checkCanFocusTrap","finishActivation","deactivateOptions","onDeactivate","onPostDeactivate","checkCanReturnFocus","finishDeactivation","updateContainerElements","containerElements","elementsAsArray","keyHandler","origHandler","hotkeys","filterInputAcceptingElements","textInputTypes","filterContentEditable","filterTextInputs","textAcceptingInputTypes","specialKeys","fromCharCode","modif","possible","specialKey","shiftNums","version","factory","noGlobal","getProto","class2type","hasOwn","fnToString","ObjectFunctionString","nodeType","isWindow","preservedScriptAttributes","nonce","noModule","DOMEval","script","toType","rhtmlSuffix","isArrayLike","elem","jquery","pushStack","elems","ret","prevObject","last","even","grep","_elem","odd","copyIsArray","deep","isPlainObject","expando","isReady","msg","noop","proto","Ctor","isEmptyObject","globalEval","textContent","makeArray","isXMLDoc","namespaceURI","docElem","second","invert","callbackExpect","guid","Symbol","iterator","_i","whitespace","rtrimCSS","bup","compareDocumentPosition","rcssescape","fcssescape","asCodePoint","escapeSelector","sel","preferredDoc","pushNative","Expr","outermostContext","sortInput","hasDuplicate","documentIsHTML","rbuggyQSA","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","booleans","pseudos","rwhitespace","rcomma","rleadingCombinator","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","unloadHandler","setDocument","inDisabledFieldset","addCombinator","dir","childNodes","els","seed","nid","newSelector","newContext","exec","getElementsByTagName","getElementsByClassName","testContext","scope","tokenize","toSelector","qsaError","cacheLength","shift","markFunction","assert","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","subWindow","webkitMatchesSelector","msMatchesSelector","defaultView","getElementsByName","disconnectedMatch","cssHas","attrId","getAttributeNode","compare","sortDetached","expr","matchesSelector","attrHandle","uniqueSort","duplicates","sortStable","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","expectedNodeName","operator","what","_argument","simple","ofType","_context","xml","outerCache","nodeIndex","useCache","lastChild","pseudo","setFilters","matched","not","matcher","compile","unmatched","lang","elemLang","hash","root","safeActiveElement","hasFocus","tabIndex","selectedIndex","empty","nextSibling","_matchIndexes","lt","gt","nth","radio","checkbox","file","submit","parseOnly","tokens","soFar","preFilters","cached","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","matcherOut","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","filters","unique","getText","isXML","selectors","until","siblings","rneedsContext","rsingleTag","winnow","qualifier","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","sibling","cur","targets","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","rnothtmlwhite","Identity","Thrower","ex","adoptValue","noValue","promise","fail","Callbacks","flag","createOptions","firing","memory","fired","locked","list","queue","firingIndex","fire","stopOnFalse","fireWith","Deferred","tuples","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","mightThrow","notifyWith","resolveWith","exceptionHook","rejectWith","getErrorHook","getStackHook","stateString","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","asyncError","readyException","readyList","completed","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","rmsPrefix","rdashAlpha","fcamelCase","_all","camelCase","acceptData","owner","Data","uid","defineProperty","configurable","hasData","dataPriv","dataUser","rbrace","rmultiDash","getData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","tmp","defer","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","defaultValue","wrapMap","thead","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","rhtml","buildFragment","scripts","selection","ignored","wrap","attached","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","types","origFn","leverageNative","isSetup","saved","isTrigger","isImmediatePropagationStopped","handleObjIn","eventHandle","handlers","namespaces","origType","elemData","create","triggered","dispatch","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","enumerable","originalEvent","writable","noBubble","beforeunload","returnValue","defaultPrevented","timeStamp","isSimulated","altKey","changedTouches","eventPhase","pageX","pageY","charCode","buttons","clientX","offsetX","offsetY","pointerId","pointerType","screenX","screenY","toElement","focusMappedHandler","documentMode","simulate","attaches","dataHolder","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","prepend","insertBefore","replaceWith","replaceChild","prependTo","replaceAll","insert","rnumnonpx","rcustomProp","getStyles","opener","swap","rboxStyle","curCSS","minWidth","maxWidth","isCustomProp","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","borderTopWidth","borderBottomWidth","cssPrefixes","emptyStyle","vendorProps","finalPropName","cssProps","capName","vendorPropName","rdisplayswap","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","boxModelAdjustment","box","isBorderBox","styles","computedVal","extra","marginDelta","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","animationIterationCount","aspectRatio","borderImageSlice","columnCount","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeMiterlimit","strokeOpacity","origName","setProperty","isFinite","scrollboxSizeBuggy","margin","border","suffix","expand","expanded","parts","propHooks","run","percent","eased","step","fx","linear","swing","cos","PI","fxNow","rfxtypes","rrun","schedule","hidden","interval","tick","createFxNow","genFx","includeWidth","createTween","Animation","tweeners","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","gotoEnd","propFilter","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","checkOn","optSelected","radioValue","boolHook","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","curValue","finalValue","stateVal","isValidValue","rreturn","valHooks","optionSet","rquery","parseXML","parserErrorElem","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","triggerHandler","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","lastModified","etag","isLocal","protocol","processData","async","accepts","json","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","overrideMimeType","mimeType","abort","finalText","crossDomain","host","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","errorCallback","open","xhrFields","onabort","ontimeout","onreadystatechange","responseType","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","animated","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","fnOver","fnOut","rtrim","holdReady","hold","parseJSON","isNumeric","_jQuery","_$","Vnode","require","subscriptions","pending","buildPathname","parsePathname","compileTemplate","censor","sentinel","decodeURIComponentSave","decodeURIComponent","$window","mountRedraw","fallbackRoute","currentPath","lastUpdate","callAsync","setImmediate","scheduled","currentResolver","RouterRoot","fireAsync","resolveRoute","SKIP","pathname","setPath","loop","matchedRoute","localComp","comp","pushState","SyntaxError","defaultData","ReferenceError","child","handleEvent","hyperscript","Fragment","parseQueryString","PromisePolyfill","queryIndex","hashIndex","queryEnd","pathEnd","resolved","variadic","newQueryIndex","newHashIndex","newQueryEnd","newPathEnd","querystring","templateData","templateKeys","executor","resolvers","rejectors","resolveCurrent","rejectCurrent","_instance","shouldAbsorb","execute","retry","executeOnce","runs","onRejection","resolveNext","rejectNext","reason","consume","race","destructure","counters","entry","levels","level","nextLevel","isNumber","desc","getOwnPropertyDescriptor","hyperscriptVnode","normalizeChildren","selectorParser","selectorCache","newAttrs","execSelector","attrValue","compileSelector","currentRedraw","$doc","nameSpace","svg","math","getNameSpace","xmlns","checkState","callHook","createNodes","vnodes","ns","createNode","initLifecycle","insertNode","createText","createHTML","domSize","createFragment","createElementNS","isFileInput","setAttr","maybeSetContentEditable","normalized","setLateSelectAttrs","$$reentrantLock$$","normalize","initComponent","createComponent","possibleParents","updateNodes","removeNodes","isOldKeyed","isKeyed","oldStart","oe","ve","topSibling","oldEnd","updateNode","getNextSibling","moveNodes","lisIndices","originalNextSibling","vnodesLength","oldIndices","getKeyMap","oldIndex","il","lisTemp","makeLisIndices","commonLength","removeNode","oldTag","force","shouldNotUpdate","updateLifecycle","updateText","removeHTML","updateHTML","updateFragment","updateAttrs","updateElement","updateComponent","frag","moveChildToFrag","contenteditable","stateResult","attrsResult","mask","reallyRemove","isLifecycleMethod","isFormAttribute","updateEvent","setAttributeNS","updateStyle","hasPropertyKey","nsLastIndex","currentDOM","uppercaseRegex","capital","normalizeKey","removeProperty","EventDict","ev","prevRedraw","prevDOM","oncompletion","callbackCount","PromiseProxy","makeRequest","hasHeader","__proto__","replacedAbort","assumeJSON","FormData","URLSearchParams","aborted","isTimeout","withCredentials","completeErrorResponse","callbackKey","Stream","lift","streams","scan","combine","scanMerge","changed","warnedHalt","dependentStreams","dependentFns","_changing","_state","_parents","_map","ignoreInitial","s1","s2","_unregisterChild","childIndex","mappers","endStream","mapper","log","magic","extras","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","RangeError","mapDomain","domain","encoded","ucs2decode","counter","ucs2encode","codePoints","fromCodePoint","digitToBasic","digit","adapt","numPoints","firstTime","baseMinusTMin","decode","inputLength","bias","basic","oldi","codePoint","baseMinusT","out","encode","basicLength","handledCPCount","handledCPCountPlusOne","qMinusT","toUnicode","toASCII","candidateSelectors","candidateSelector","NoElement","Element","getCandidates","includeContainer","candidates","getCandidatesIteratively","elementsToCheck","assigned","assignedElements","nestedCandidates","getShadowRoot","validShadowRoot","shadowRootFilter","_nestedCandidates","getTabindex","isScope","isContentEditable","sortOrderedTabbables","documentOrder","isInput","isZeroArea","_node$getBoundingClie","isNodeMatchingSelectorFocusable","isHiddenInput","displayCheck","nodeUnderDetails","parentElement","nodeRootHost","nodeIsAttached","originalNode","rootNode","assignedSlot","isDetailsWithSummary","isDisabledFromFieldset","isNodeMatchingSelectorTabbable","isRadio","radioSet","radioScope","form","queryRadios","CSS","getCheckedRadio","isTabbableRadio","isNonTabbableRadio","isValidShadowRootTabbable","shadowHostNode","sortByOrder","regularTabbables","orderedTabbables","candidateTabindex","sortable","focusableCandidateSelector","isBrowser","isFirefox","mozInnerScreenX","currentStyle","whiteSpace","wordWrap","coordinates","offsetLeft","backgroundColor","___EXPOSE_LOADER_IMPORT___","___EXPOSE_LOADER_GLOBAL_THIS___","__esModule","toPropertyKey","_defineProperties","descriptor","protoProps","staticProps","_getPrototypeOf","setPrototypeOf","subClass","superClass","_typeof","assertThisInitialized","_setPrototypeOf","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","toPrimitive","arrayLikeToArray","minLen","_m$route$get","_attrs$href","Separator","TextEditor","_loaders","controlItems","toolbarItems","_load","onbuild","buildEditor","newDisabled","loader","buildEditorParams","submitLabel","preview","Drawer","appElement","drawerAvailableMediaQuery","_this$$backdrop","_this$$backdrop$remov","removeListener","resizeHandler","$drawer","$backdrop","addListener","ScrollListener","ticking","anchorScroll","relativeScroll","subclassOf","B","AffixedSidebar","boundOnresize","onresize","resize","$sidebar","$header","$footer","$affixElement","AvatarEditor","isDraggedOver","quickUpload","ondragover","enableDragover","ondragenter","ondragleave","disableDragover","ondragend","ondrop","dropUpload","openPicker","upload","dataTransfer","files","failure","Comment","isEditing","headerItems","cardVisible","UserCard","ComposerPostPreview","revealContent","_this$params","refreshContent","listenForCard","EditPostComposer","editing","toggleContent","PostEdited","showCard","hideCard","surround","updatePreview","s9e","TextFormatter","updateInterval","clearInterval","DiscussionHero","DiscussionList","hotEdge","DiscussionListPane","enoughSpace","$list","discussionListPaneScrollTop","listTop","listBottom","renamed","descriptionData","oldTitle","EventPost","descriptionKey","locales","cookie","LogInButtons","HeaderList","emptyText","footer","loadMore","$content","$scrollParent","inPanel","boundScrollHandler","scrollHandler","scrollParent","_this$attrs$loadMore","HeaderListGroup","NotificationType","NotificationComponent","notificationComponents","editedInfo","TerminalPost","profileItems","controlsItems","online","DiscussionControls","section","userControls","replyAction","moderationControls","renameAction","destructiveControls","restoreAction","deleteAction","hideAction","forceRefresh","delete","pinnedKey","hideTimeout","editAction","UserControls","showDeletionAlert","slidable","$underneathLeft","$underneathRight","startX","startY","couldBeSliding","isSliding","animatePos","newPos","newX","newY","$underneath","side","throttle","noTrailing","debounceMode","timeoutID","cancelled","lastExec","clearExistingTimeout","arguments_","elapsed","cancel","debounce","atBegin","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","chunkId","promises","needAttach","nc","onScriptComplete","doneFns","toStringTag","scriptUrl","importScripts","currentScript","compat","originalLoadChunk","loadChunk","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","multi","selectedOptions","_this$moduleExports$g","_this$onLoads$get","moduleExports","onLoads","_this$moduleExports$g2","_this$moduleExports$g3","_this$onLoads$get2","_this$onLoads$get3","_this$onLoads$get4","_this$moduleExports$g4","_this$moduleExports$g5","urlPath","_this$chunks$get","chunks","modules","chunkModules","getChunk","_this$chunks$get2","chunkUrl","chunk","_revisions","assetsPath","revision","asyncModuleImport","wr","moduleExport","ctrl","patchMithril","defaultMithril","modifiedMithril","tooltipGen","caller","PostTypes","postComponents","Routes","helper","helpers","modelType","_this$gambits","_app$search$gambits$g","colorSchemes","Admin","setting","customSetting","permission","permissions","customPage","generalIndexItems","generalIndexes","registry","registerSetting","registerPermission","registerPage","generalIndex","Parent","Mixed","mixins","blockPrefix","blockSuffix","multiline","replaceNext","prefixSpace","scanFor","surroundWithNewlines","orderedList","unorderedList","trimFirst","isMultipleLines","newlinesToSurroundSelectedText","beforeSelection","afterSelection","breaksBefore","breaksAfter","newlinesBeforeSelection","newlinesAfterSelection","newlinesToAppend","newlinesToPrepend","undoOrderedListStyle","lines","orderedListRegex","shouldUndoOrderedList","line","processed","undoUnorderedListStyle","shouldUndoUnorderedList","unorderedListPrefix","makePrefix","styleArgs","noInitialSelection","lineLength","expandSelectionToLine","selectedText","undoResult","undoResultOpositeList","pristineText","clearExistingListStyle","prefixedLines","totalPrefixLength","previousValue","_currentValue","currentIndex","totalPrefixLengthOpositeList","listStyle","prefixToUse","suffixToUse","multilineStyle","originalSelectionEnd","wordSelectionStart","breakpoint","wordSelectionEnd","expandedSelectionStart","expandedSelectionEnd","beginsWithPrefix","endsWithSuffix","expandSelectedText","hasReplaceNext","ref","replacementText","whitespaceEdges","leadingWhitespace","trailingWhitespace","blockStyle","units","decimal","nanoid","byte","DetailedDropdownItem","Select","wrapperAttrs","wrapperClassName","wrapperClass","domAttrs","ColorPreviewInput","otherAttrs","onblur","_attrs$onchange","_attrs$onchange2","Pill","deletable","ondelete","UserSelectionModal","maxItems","_this$results$this$se","excluded","_this$attrs$excluded","onfocus","focused","meetsRequirements","userListItem","readOnly","TextEditorButton","originalView","tooltipText","AutocompleteDropdown","shouldShowSuggestions","updateMaxHeight","_this$element$querySe","maxHeight","setIndex","getCurrentNumericIndex","selectableItems","inputElement","selectSuggestion","updateMaxHeightHandler","$item","scrollToItem","$dropdown","fixedIndex","dropdownScroll","dropdownTop","dropdownBottom","itemTop","itemBottom","gambitsAutocomplete","UploadImageButton","resourceUrl","routePath","MultiSelect","unselect","BooleanSettingTypes","SelectSettingTypes","RadioSettingTypes","TextareaSettingTypes","FormGroup","customFieldComponents","help","getSetting","inputId","helpTextId","generateElementId","settingElement","multiple","textArea","textAreaSetting","textAreaAttrs","third","originalOnCreate","LogInButton","PostPreview"],"sourceRoot":""} \ No newline at end of file +{"version":3,"file":"forum.js","mappings":"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","sources":["webpack://@flarum/core/webpack/runtime/load script","webpack://@flarum/core/./src/common/Application.tsx","webpack://@flarum/core/./src/common/Component.ts","webpack://@flarum/core/./src/common/Model.ts","webpack://@flarum/core/./src/common/query/discussions/AuthorGambit.ts","webpack://@flarum/core/./src/common/query/discussions/CreatedGambit.ts","webpack://@flarum/core/./src/common/query/discussions/HiddenGambit.ts","webpack://@flarum/core/./src/common/query/discussions/UnreadGambit.ts","webpack://@flarum/core/./src/common/query/users/EmailGambit.ts","webpack://@flarum/core/./src/common/query/users/GroupGambit.ts","webpack://@flarum/core/./src/common/query/discussions/DiscussionGambit.ts","webpack://@flarum/core/./src/common/GambitManager.ts","webpack://@flarum/core/./src/common/SearchManager.ts","webpack://@flarum/core/./src/common/Session.ts","webpack://@flarum/core/./src/common/Store.ts","webpack://@flarum/core/./src/common/Translator.tsx","webpack://@flarum/core/./src/common/app.ts","webpack://@flarum/core/./src/common/components/Alert.tsx","webpack://@flarum/core/./src/common/components/AlertManager.tsx","webpack://@flarum/core/./src/common/components/Avatar.tsx","webpack://@flarum/core/./src/common/components/Badge.tsx","webpack://@flarum/core/./src/common/helpers/fireDebugWarning.ts","webpack://@flarum/core/./src/common/components/Button.tsx","webpack://@flarum/core/./src/common/components/Checkbox.tsx","webpack://@flarum/core/./src/common/components/Dropdown.tsx","webpack://@flarum/core/./src/common/components/FieldSet.tsx","webpack://@flarum/core/./src/common/components/Form.tsx","webpack://@flarum/core/./src/common/components/FormModal.tsx","webpack://@flarum/core/./src/common/components/GroupBadge.tsx","webpack://@flarum/core/./src/common/components/Icon.tsx","webpack://@flarum/core/./src/common/components/InfoTile.tsx","webpack://@flarum/core/./src/common/components/Input.tsx","webpack://@flarum/core/./src/common/components/LoadingIndicator.tsx","webpack://@flarum/core/./src/common/components/Modal.tsx","webpack://@flarum/core/./src/common/components/ModalManager.tsx","webpack://@flarum/core/./src/common/components/Navigation.tsx","webpack://@flarum/core/./src/common/components/Page.tsx","webpack://@flarum/core/./src/common/components/RequestErrorModal.tsx","webpack://@flarum/core/./src/common/components/SelectDropdown.tsx","webpack://@flarum/core/./src/common/components/SplitDropdown.tsx","webpack://@flarum/core/./src/common/components/Switch.tsx","webpack://@flarum/core/./src/common/components/ThemeMode.tsx","webpack://@flarum/core/./src/common/components/Tooltip.tsx","webpack://@flarum/core/./src/common/components/UserSearchResult.tsx","webpack://@flarum/core/./src/common/extend.ts","webpack://@flarum/core/./src/common/helpers/fireApplicationError.ts","webpack://@flarum/core/./src/common/helpers/fullTime.tsx","webpack://@flarum/core/./src/common/helpers/highlight.tsx","webpack://@flarum/core/./src/common/helpers/humanTime.tsx","webpack://@flarum/core/./src/common/helpers/listItems.tsx","webpack://@flarum/core/./src/common/helpers/textContrastClass.ts","webpack://@flarum/core/./src/common/helpers/userOnline.tsx","webpack://@flarum/core/./src/common/helpers/username.tsx","webpack://@flarum/core/./src/common/models/AccessToken.ts","webpack://@flarum/core/./src/common/models/Discussion.tsx","webpack://@flarum/core/./src/common/models/Forum.ts","webpack://@flarum/core/./src/common/models/Group.ts","webpack://@flarum/core/./src/common/models/Notification.ts","webpack://@flarum/core/./src/common/models/Post.ts","webpack://@flarum/core/./src/common/models/User.tsx","webpack://@flarum/core/./src/common/query/IGambit.ts","webpack://@flarum/core/./src/common/resolvers/DefaultResolver.tsx","webpack://@flarum/core/./src/common/states/AlertManagerState.ts","webpack://@flarum/core/./src/common/states/ModalManagerState.ts","webpack://@flarum/core/./src/common/states/PageState.ts","webpack://@flarum/core/./src/common/states/PaginatedListState.ts","webpack://@flarum/core/./src/common/states/SearchState.ts","webpack://@flarum/core/./src/common/utils/AutocompleteReader.ts","webpack://@flarum/core/./src/common/utils/BasicEditorDriver.ts","webpack://@flarum/core/./src/common/utils/EventEmitter.ts","webpack://@flarum/core/./src/common/utils/GambitsAutocomplete.tsx","webpack://@flarum/core/./src/common/utils/ItemList.ts","webpack://@flarum/core/./src/common/utils/KeyboardNavigatable.ts","webpack://@flarum/core/./src/common/utils/RequestError.ts","webpack://@flarum/core/./src/common/utils/Stream.ts","webpack://@flarum/core/./src/common/utils/SubtreeRetainer.ts","webpack://@flarum/core/./src/common/utils/abbreviateNumber.ts","webpack://@flarum/core/./src/common/utils/arrayFlatPolyfill.ts","webpack://@flarum/core/../../../node_modules/clsx/dist/clsx.m.js","webpack://@flarum/core/./src/common/utils/classList.ts","webpack://@flarum/core/./src/common/utils/computed.ts","webpack://@flarum/core/./src/common/utils/escapeRegExp.ts","webpack://@flarum/core/./src/common/utils/extract.ts","webpack://@flarum/core/./src/common/utils/extractText.ts","webpack://@flarum/core/./src/common/utils/focusTrap.ts","webpack://@flarum/core/./src/common/utils/formatNumber.ts","webpack://@flarum/core/./src/common/utils/humanTime.ts","webpack://@flarum/core/./src/common/utils/insertText.ts","webpack://@flarum/core/./src/common/utils/isDark.ts","webpack://@flarum/core/./src/common/utils/isObject.ts","webpack://@flarum/core/./src/common/utils/liveHumanTimes.ts","webpack://@flarum/core/./src/common/utils/mapRoutes.ts","webpack://@flarum/core/./src/common/utils/setRouteWithForcedRefresh.ts","webpack://@flarum/core/./src/common/utils/string.ts","webpack://@flarum/core/./src/common/utils/stringToColor.ts","webpack://@flarum/core/./src/common/utils/withAttr.ts","webpack://@flarum/core/./src/forum/utils/isSafariMobile.ts","webpack://@flarum/core/./src/forum/components/Notices.tsx","webpack://@flarum/core/./src/forum/components/Footer.tsx","webpack://@flarum/core/./src/forum/ForumApplication.tsx","webpack://@flarum/core/./src/forum/app.ts","webpack://@flarum/core/./src/forum/components/DiscussionListItem.tsx","webpack://@flarum/core/./src/forum/components/DiscussionPage.tsx","webpack://@flarum/core/./src/forum/components/DiscussionRenamedNotification.tsx","webpack://@flarum/core/./src/forum/components/DiscussionsSearchSource.tsx","webpack://@flarum/core/./src/forum/components/HeaderPrimary.tsx","webpack://@flarum/core/./src/forum/components/IndexPage.tsx","webpack://@flarum/core/./src/forum/components/IndexSidebar.tsx","webpack://@flarum/core/./src/forum/components/LoadingPost.tsx","webpack://@flarum/core/./src/forum/components/MinimalDiscussionListItem.tsx","webpack://@flarum/core/./src/forum/components/HeaderListItem.tsx","webpack://@flarum/core/./src/forum/components/Notification.tsx","webpack://@flarum/core/./src/forum/components/HeaderDropdown.tsx","webpack://@flarum/core/./src/forum/components/NotificationsDropdown.tsx","webpack://@flarum/core/./src/forum/components/PageStructure.tsx","webpack://@flarum/core/./src/forum/components/AbstractPost.tsx","webpack://@flarum/core/./src/forum/components/Post.tsx","webpack://@flarum/core/./src/forum/components/PostListItem.tsx","webpack://@flarum/core/./src/forum/components/PostList.tsx","webpack://@flarum/core/./src/forum/components/PostMeta.tsx","webpack://@flarum/core/./src/forum/components/PostUser.tsx","webpack://@flarum/core/./src/forum/components/PostsPage.tsx","webpack://@flarum/core/./src/forum/components/PostsUserPage.tsx","webpack://@flarum/core/./src/forum/components/RenameDiscussionModal.tsx","webpack://@flarum/core/./src/forum/components/PostsSearchSource.tsx","webpack://@flarum/core/./src/common/components/AbstractSearch.tsx","webpack://@flarum/core/./src/forum/components/Search.tsx","webpack://@flarum/core/./src/forum/components/SessionDropdown.tsx","webpack://@flarum/core/./src/forum/components/UserPage.tsx","webpack://@flarum/core/./src/forum/components/UsersSearchSource.tsx","webpack://@flarum/core/./src/forum/components/WelcomeHero.tsx","webpack://@flarum/core/./src/forum/resolvers/DiscussionPageResolver.ts","webpack://@flarum/core/./src/forum/routes.ts","webpack://@flarum/core/./src/forum/states/ComposerState.tsx","webpack://@flarum/core/./src/forum/states/DiscussionListState.ts","webpack://@flarum/core/./src/forum/states/GlobalSearchState.ts","webpack://@flarum/core/./src/forum/states/NotificationListState.ts","webpack://@flarum/core/./src/forum/states/PostListState.ts","webpack://@flarum/core/./src/forum/states/PostStreamState.ts","webpack://@flarum/core/./src/forum/utils/History.ts","webpack://@flarum/core/../source/utilities.js","webpack://@flarum/core/../source/defaultRichHandler.js","webpack://@flarum/core/../source/RichMessageFormatter.js","webpack://@flarum/core/../source/mithrilRichHandler.js","webpack://@flarum/core/array-utils.js","webpack://@flarum/core/function-utils.js","webpack://@flarum/core/../source/pluralTypeHandler.js","webpack://@flarum/core/../source/MessageFormatter.js","webpack://@flarum/core/../source/selectTypeHandler.js","webpack://@flarum/core/../../../node_modules/body-scroll-lock/lib/bodyScrollLock.esm.js","webpack://@flarum/core/../../../node_modules/bootstrap/js/affix.js","webpack://@flarum/core/../../../node_modules/bootstrap/js/dropdown.js","webpack://@flarum/core/../../../node_modules/bootstrap/js/tooltip.js","webpack://@flarum/core/../../../node_modules/bootstrap/js/transition.js","webpack://@flarum/core/../../../node_modules/color-thief-browser/dist/color-thief.min.js","webpack://@flarum/core/../../../node_modules/dayjs/dayjs.min.js","webpack://@flarum/core/../../../node_modules/dayjs/plugin/localizedFormat.js","webpack://@flarum/core/../../../node_modules/dayjs/plugin/relativeTime.js","webpack://@flarum/core/../../../node_modules/expose-loader/dist/runtime/getGlobalThis.js","webpack://@flarum/core/../index.js","webpack://@flarum/core/../../../node_modules/jquery.hotkeys/jquery.hotkeys.js","webpack://@flarum/core/../../../node_modules/jquery/dist/jquery.js","webpack://@flarum/core/../../../node_modules/mithril/api/mount-redraw.js","webpack://@flarum/core/../../../node_modules/mithril/api/router.js","webpack://@flarum/core/../../../node_modules/mithril/hyperscript.js","webpack://@flarum/core/../../../node_modules/mithril/index.js","webpack://@flarum/core/../../../node_modules/mithril/mount-redraw.js","webpack://@flarum/core/../../../node_modules/mithril/pathname/build.js","webpack://@flarum/core/../../../node_modules/mithril/pathname/compileTemplate.js","webpack://@flarum/core/../../../node_modules/mithril/pathname/parse.js","webpack://@flarum/core/../../../node_modules/mithril/promise/polyfill.js","webpack://@flarum/core/../../../node_modules/mithril/promise/promise.js","webpack://@flarum/core/../../../node_modules/mithril/querystring/build.js","webpack://@flarum/core/../../../node_modules/mithril/querystring/parse.js","webpack://@flarum/core/../../../node_modules/mithril/render.js","webpack://@flarum/core/../../../node_modules/mithril/render/fragment.js","webpack://@flarum/core/../../../node_modules/mithril/render/hyperscript.js","webpack://@flarum/core/../../../node_modules/mithril/render/hyperscriptVnode.js","webpack://@flarum/core/../../../node_modules/mithril/render/render.js","webpack://@flarum/core/../../../node_modules/mithril/render/trust.js","webpack://@flarum/core/../../../node_modules/mithril/render/vnode.js","webpack://@flarum/core/../../../node_modules/mithril/request.js","webpack://@flarum/core/../../../node_modules/mithril/request/request.js","webpack://@flarum/core/../../../node_modules/mithril/route.js","webpack://@flarum/core/../../../node_modules/mithril/stream.js","webpack://@flarum/core/../../../node_modules/mithril/stream/stream.js","webpack://@flarum/core/../../../node_modules/mithril/util/assign.js","webpack://@flarum/core/../../../node_modules/mithril/util/censor.js","webpack://@flarum/core/../../../node_modules/mithril/util/hasOwn.js","webpack://@flarum/core/../../../node_modules/punycode/punycode.es6.js","webpack://@flarum/core/../src/index.js","webpack://@flarum/core/../../../node_modules/textarea-caret/index.js","webpack://@flarum/core/../../../node_modules/jquery/dist/jquery-exposed.js","webpack://@flarum/core/../../../node_modules/color-thief-browser/dist/color-thief.min-exposed.js","webpack://@flarum/core/../../../node_modules/dayjs/dayjs.min-exposed.js","webpack://@flarum/core/../../../node_modules/mithril/index-exposed.js","webpack://@flarum/core/../../../node_modules/punycode/punycode.es6-exposed.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/arrayLikeToArray.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/arrayWithHoles.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/assertThisInitialized.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/classCallCheck.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/createClass.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/defineProperty.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/getPrototypeOf.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/inherits.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/nonIterableRest.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/possibleConstructorReturn.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/setPrototypeOf.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/slicedToArray.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/toPrimitive.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/toPropertyKey.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/typeof.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/unsupportedIterableToArray.js","webpack://@flarum/core/./src/common/components/Link.js","webpack://@flarum/core/./src/common/components/LinkButton.js","webpack://@flarum/core/./src/common/components/Placeholder.js","webpack://@flarum/core/./src/common/components/Separator.js","webpack://@flarum/core/./src/common/components/TextEditor.js","webpack://@flarum/core/./src/common/utils/Drawer.js","webpack://@flarum/core/./src/common/utils/ScrollListener.js","webpack://@flarum/core/./src/common/utils/anchorScroll.js","webpack://@flarum/core/./src/common/utils/subclassOf.js","webpack://@flarum/core/./src/forum/components/AffixedSidebar.js","webpack://@flarum/core/./src/forum/components/AvatarEditor.js","webpack://@flarum/core/./src/forum/components/Comment.tsx","webpack://@flarum/core/./src/forum/components/CommentPost.js","webpack://@flarum/core/./src/forum/components/ComposerPostPreview.js","webpack://@flarum/core/./src/forum/components/DiscussionHero.js","webpack://@flarum/core/./src/forum/components/DiscussionList.js","webpack://@flarum/core/./src/forum/components/DiscussionListPane.js","webpack://@flarum/core/./src/forum/components/DiscussionRenamedPost.js","webpack://@flarum/core/./src/forum/components/EventPost.js","webpack://@flarum/core/./src/forum/components/HeaderSecondary.js","webpack://@flarum/core/./src/forum/components/LogInButtons.js","webpack://@flarum/core/./src/forum/components/HeaderList.tsx","webpack://@flarum/core/./src/forum/components/HeaderListGroup.tsx","webpack://@flarum/core/./src/forum/components/NotificationType.tsx","webpack://@flarum/core/./src/forum/components/NotificationList.js","webpack://@flarum/core/./src/forum/components/PostEdited.js","webpack://@flarum/core/./src/forum/components/TerminalPost.js","webpack://@flarum/core/./src/forum/components/UserCard.js","webpack://@flarum/core/./src/forum/utils/DiscussionControls.js","webpack://@flarum/core/./src/forum/utils/Pane.js","webpack://@flarum/core/./src/forum/utils/PostControls.js","webpack://@flarum/core/./src/forum/utils/UserControls.js","webpack://@flarum/core/./src/forum/utils/slidable.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/esm/typeof.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/esm/toPropertyKey.js","webpack://@flarum/core/../../../node_modules/@babel/runtime/helpers/esm/toPrimitive.js","webpack://@flarum/core/../throttle.js","webpack://@flarum/core/../debounce.js","webpack://@flarum/core/webpack/bootstrap","webpack://@flarum/core/webpack/runtime/compat get default export","webpack://@flarum/core/webpack/runtime/define property getters","webpack://@flarum/core/webpack/runtime/ensure chunk","webpack://@flarum/core/webpack/runtime/get javascript chunk filename","webpack://@flarum/core/webpack/runtime/global","webpack://@flarum/core/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/core/webpack/runtime/make namespace object","webpack://@flarum/core/webpack/runtime/publicPath","webpack://@flarum/core/webpack/runtime/compat","webpack://@flarum/core/webpack/runtime/jsonp chunk loading","webpack://@flarum/core/./src/common/utils/bidi.js","webpack://@flarum/core/./src/common/registry.ts","webpack://@flarum/core/./src/common/ExportRegistry.ts","webpack://@flarum/core/./src/common/utils/patchMithril.js","webpack://@flarum/core/./src/common/index.ts","webpack://@flarum/core/./src/common/extenders/Model.ts","webpack://@flarum/core/./src/common/extenders/PostTypes.ts","webpack://@flarum/core/./src/common/extenders/Routes.ts","webpack://@flarum/core/./src/common/extenders/Store.ts","webpack://@flarum/core/./src/common/extenders/Search.ts","webpack://@flarum/core/./src/common/extenders/Notification.ts","webpack://@flarum/core/./src/common/extenders/ThemeMode.ts","webpack://@flarum/core/./src/common/extenders/Admin.ts","webpack://@flarum/core/./src/common/extenders/index.ts","webpack://@flarum/core/./src/common/utils/mixin.js","webpack://@flarum/core/./src/common/utils/styleSelectedText.ts","webpack://@flarum/core/./src/common/utils/throttleDebounce.ts","webpack://@flarum/core/./src/common/utils/formatAmount.ts","webpack://@flarum/core/../../../node_modules/nanoid/index.browser.js","webpack://@flarum/core/./src/common/utils/generateElementId.ts","webpack://@flarum/core/./src/common/components/DetailedDropdownItem.tsx","webpack://@flarum/core/./src/common/components/Select.tsx","webpack://@flarum/core/./src/common/components/ColorPreviewInput.tsx","webpack://@flarum/core/./src/common/components/Pill.tsx","webpack://@flarum/core/./src/common/components/UserSelectionModal.tsx","webpack://@flarum/core/./src/common/components/TextEditorButton.js","webpack://@flarum/core/./src/common/components/AutocompleteDropdown.tsx","webpack://@flarum/core/./src/common/components/GambitsAutocompleteDropdown.tsx","webpack://@flarum/core/./src/common/components/UploadImageButton.tsx","webpack://@flarum/core/./src/common/components/MultiSelect.tsx","webpack://@flarum/core/./src/common/components/FormGroup.tsx","webpack://@flarum/core/./src/common/helpers/punctuateSeries.js","webpack://@flarum/core/./src/common/Fragment.ts","webpack://@flarum/core/./src/forum/components/LogInButton.js","webpack://@flarum/core/./src/forum/components/PostPreview.js"],"sourcesContent":["var inProgress = {};\nvar dataWebpackPrefix = \"flarum.core:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../common/app';\nimport ItemList from './utils/ItemList';\nimport Button from './components/Button';\nimport ModalManager from './components/ModalManager';\nimport AlertManager from './components/AlertManager';\nimport RequestErrorModal from './components/RequestErrorModal';\nimport Translator from './Translator';\nimport Store, { payloadIsPlural } from './Store';\nimport Session from './Session';\nimport extract from './utils/extract';\nimport extractText from './utils/extractText';\nimport Drawer from './utils/Drawer';\nimport mapRoutes from './utils/mapRoutes';\nimport RequestError from './utils/RequestError';\nimport ScrollListener from './utils/ScrollListener';\nimport liveHumanTimes from './utils/liveHumanTimes';\n// @ts-expect-error We need to explicitly use the prefix to distinguish between the extend folder.\nimport { extend } from './extend.ts';\nimport Forum from './models/Forum';\nimport User from './models/User';\nimport Discussion from './models/Discussion';\nimport Post from './models/Post';\nimport Group from './models/Group';\nimport Notification from './models/Notification';\nimport PageState from './states/PageState';\nimport ModalManagerState from './states/ModalManagerState';\nimport AlertManagerState from './states/AlertManagerState';\nimport fireApplicationError from './helpers/fireApplicationError';\nimport AccessToken from './models/AccessToken';\nimport { ColorScheme } from './components/ThemeMode';\n\n/**\n * A valid route definition.\n */\n\nexport let MaintenanceMode = /*#__PURE__*/function (MaintenanceMode) {\n MaintenanceMode[\"NO_MAINTENANCE\"] = \"none\";\n MaintenanceMode[\"HIGH_MAINTENANCE\"] = \"high\";\n MaintenanceMode[\"LOW_MAINTENANCE\"] = \"low\";\n MaintenanceMode[\"SAFE_MODE\"] = \"safe\";\n return MaintenanceMode;\n}({});\n/**\n * The `App` class provides a container for an application, as well as various\n * utilities for the rest of the app to use.\n */\nexport default class Application {\n constructor() {\n /**\n * The forum model for this application.\n */\n _defineProperty(this, \"forum\", void 0);\n /**\n * A map of routes, keyed by a unique route name. Each route is an object\n * containing the following properties:\n *\n * - `path` The path that the route is accessed at.\n * - `component` The Mithril component to render when this route is active.\n *\n * @example\n * app.routes.discussion = { path: '/d/:id', component: DiscussionPage };\n */\n _defineProperty(this, \"routes\", {});\n /**\n * An ordered list of initializers to bootstrap the application.\n */\n _defineProperty(this, \"initializers\", new ItemList());\n /**\n * The app's session.\n *\n * Stores info about the current user.\n */\n _defineProperty(this, \"session\", void 0);\n /**\n * The app's translator.\n */\n _defineProperty(this, \"translator\", new Translator());\n /**\n * The app's data store.\n */\n _defineProperty(this, \"store\", new Store({\n 'access-tokens': AccessToken,\n forums: Forum,\n users: User,\n discussions: Discussion,\n posts: Post,\n groups: Group,\n notifications: Notification\n }));\n _defineProperty(this, \"search\", void 0);\n /**\n * A local cache that can be used to store data at the application level, so\n * that is persists between different routes.\n */\n _defineProperty(this, \"cache\", {});\n /**\n * Whether or not the app has been booted.\n */\n _defineProperty(this, \"booted\", false);\n /**\n * The page the app is currently on.\n *\n * This object holds information about the type of page we are currently\n * visiting, and sometimes additional arbitrary page state that may be\n * relevant to lower-level components.\n */\n _defineProperty(this, \"current\", new PageState(null));\n /**\n * The page the app was on before the current page.\n *\n * Once the application navigates to another page, the object previously\n * assigned to this.current will be moved to this.previous, while this.current\n * is re-initialized.\n */\n _defineProperty(this, \"previous\", new PageState(null));\n /**\n * An object that manages modal state.\n */\n _defineProperty(this, \"modal\", new ModalManagerState());\n /**\n * An object that manages the state of active alerts.\n */\n _defineProperty(this, \"alerts\", new AlertManagerState());\n /**\n * An object that manages the state of the navigation drawer.\n */\n _defineProperty(this, \"drawer\", void 0);\n _defineProperty(this, \"history\", null);\n _defineProperty(this, \"pane\", null);\n _defineProperty(this, \"data\", void 0);\n _defineProperty(this, \"allowUserColorScheme\", void 0);\n _defineProperty(this, \"refs\", {\n fontawesome: 'https://fontawesome.com/v6/icons?o=r&m=free'\n });\n _defineProperty(this, \"_title\", '');\n _defineProperty(this, \"_titleCount\", 0);\n /**\n * The key for an Alert that was shown as a result of an AJAX request error.\n * If present, it will be dismissed on the next successful request.\n */\n _defineProperty(this, \"requestErrorAlert\", null);\n _defineProperty(this, \"initialRoute\", void 0);\n }\n set title(val) {\n this._title = val;\n }\n get title() {\n return this._title;\n }\n set titleCount(val) {\n this._titleCount = val;\n }\n get titleCount() {\n return this._titleCount;\n }\n load(payload) {\n this.data = payload;\n this.translator.setLocale(payload.locale);\n }\n initialize() {\n const caughtInitializationErrors = [];\n this.initializers.toArray().forEach(initializer => {\n try {\n initializer(this);\n } catch (e) {\n const extension = initializer.itemName.includes('/') ? initializer.itemName.replace(/(\\/flarum-ext-)|(\\/flarum-)/g, '-') : initializer.itemName;\n caughtInitializationErrors.push(() => fireApplicationError(extractText(app.translator.trans('core.lib.error.extension_initialiation_failed_message', {\n extension\n })), \"\".concat(extension, \" failed to initialize\"), e));\n }\n });\n return caughtInitializationErrors;\n }\n boot() {\n var _this$store$getById;\n const caughtInitializationErrors = this.initialize();\n this.store.pushPayload({\n data: this.data.resources\n });\n this.forum = this.store.getById('forums', '1');\n this.session = new Session((_this$store$getById = this.store.getById('users', String(this.data.session.userId))) != null ? _this$store$getById : null, this.data.session.csrfToken);\n this.beforeMount();\n this.mount();\n this.initialRoute = window.location.href;\n caughtInitializationErrors.forEach(handler => handler());\n }\n beforeMount() {\n // ...\n }\n bootExtensions(extensions) {\n Object.keys(extensions).forEach(name => {\n const extension = extensions[name];\n\n // If an extension doesn't define extenders, there's nothing more to do here.\n if (!extension.extend) return;\n const extenders = extension.extend.flat(Infinity);\n for (const extender of extenders) {\n extender.extend(this, {\n name,\n exports: extension\n });\n }\n });\n }\n mount(basePath) {\n if (basePath === void 0) {\n basePath = '';\n }\n // An object with a callable view property is used in order to pass arguments to the component; see https://mithril.js.org/mount.html\n m.mount(document.getElementById('modal'), {\n view: () => m(ModalManager, {\n state: this.modal\n })\n });\n m.mount(document.getElementById('alerts'), {\n view: () => m(AlertManager, {\n state: this.alerts\n })\n });\n this.drawer = new Drawer();\n m.route(document.getElementById('content'), basePath + '/', mapRoutes(this.routes, basePath));\n const appEl = document.getElementById('app');\n const appHeaderEl = document.querySelector('.App-header');\n\n // Add a class to the body which indicates that the page has been scrolled\n // down. When this happens, we'll add classes to the header and app body\n // which will set the navbar's position to fixed. We don't want to always\n // have it fixed, as that could overlap with custom headers.\n const scrollListener = new ScrollListener(top => {\n const offset = appEl.getBoundingClientRect().top + document.body.scrollTop;\n appEl.classList.toggle('affix', top >= offset);\n appEl.classList.toggle('scrolled', top > offset);\n appHeaderEl.classList.toggle('navbar-fixed-top', top >= offset);\n });\n scrollListener.start();\n scrollListener.update();\n document.body.classList.add('ontouchstart' in window ? 'touch' : 'no-touch');\n this.initColorScheme();\n liveHumanTimes();\n }\n initColorScheme(forumDefault) {\n var _forumDefault, _app$forum$attribute, _this$session$user;\n if (forumDefault === void 0) {\n forumDefault = null;\n }\n (_forumDefault = forumDefault) != null ? _forumDefault : forumDefault = (_app$forum$attribute = app.forum.attribute('colorScheme')) != null ? _app$forum$attribute : 'auto';\n this.allowUserColorScheme = forumDefault === 'auto';\n const userConfiguredPreference = (_this$session$user = this.session.user) == null || (_this$session$user = _this$session$user.preferences()) == null ? void 0 : _this$session$user.colorScheme;\n let scheme;\n if (this.allowUserColorScheme) {\n scheme = userConfiguredPreference;\n }\n scheme || (scheme = forumDefault);\n this.setColorScheme(scheme);\n\n // Listen for browser color scheme changes and update the theme accordingly\n if (this.allowUserColorScheme) {\n this.watchSystemColorSchemePreference(() => {\n this.initColorScheme(forumDefault);\n });\n }\n }\n getSystemColorSchemePreference() {\n let colorScheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n if (window.matchMedia('(prefers-contrast: more)').matches) {\n colorScheme += '-hc';\n }\n return colorScheme;\n }\n watchSystemColorSchemePreference(callback) {\n window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', callback);\n window.matchMedia('(prefers-contrast: more)').addEventListener('change', callback);\n }\n setColorScheme(scheme) {\n if (scheme === ColorScheme.Auto) {\n scheme = this.getSystemColorSchemePreference();\n }\n document.documentElement.setAttribute('data-theme', scheme);\n }\n setColoredHeader(value) {\n document.documentElement.setAttribute('data-colored-header', value ? 'true' : 'false');\n }\n\n /**\n * Get the API response document that has been preloaded into the application.\n */\n\n preloadedApiDocument() {\n // If the URL has changed, the preloaded Api document is invalid.\n if (this.data.apiDocument && window.location.href === this.initialRoute) {\n const results = payloadIsPlural(this.data.apiDocument) ? this.store.pushPayload(this.data.apiDocument) : this.store.pushPayload(this.data.apiDocument);\n this.data.apiDocument = null;\n return results;\n }\n return null;\n }\n\n /**\n * Determine the current screen mode, based on our media queries.\n */\n screen() {\n const styles = getComputedStyle(document.documentElement);\n return styles.getPropertyValue('--flarum-screen');\n }\n\n /**\n * Set the `<title>` of the page.\n *\n * @param title New page title\n */\n setTitle(title) {\n this.title = title;\n this.updateTitle();\n }\n\n /**\n * Set a number to display in the `<title>` of the page.\n *\n * @param count Number to display in title\n */\n setTitleCount(count) {\n this.titleCount = count;\n this.updateTitle();\n }\n updateTitle() {\n const count = this.titleCount ? \"(\".concat(this.titleCount, \") \") : '';\n const onHomepage = m.route.get() === this.forum.attribute('basePath') + '/';\n const params = {\n pageTitle: this.title,\n forumName: this.forum.attribute('title'),\n // Until we add page numbers to the frontend, this is constant at 1\n // so that the page number portion doesn't show up in the URL.\n pageNumber: 1\n };\n let title = onHomepage || !this.title ? extractText(app.translator.trans('core.lib.meta_titles.without_page_title', params)) : extractText(app.translator.trans('core.lib.meta_titles.with_page_title', params));\n title = count + title;\n\n // We pass the title through a DOMParser to allow HTML entities\n // to be rendered correctly, while still preventing XSS attacks\n // from user input by using a script-disabled environment.\n // https://github.com/flarum/framework/issues/3514\n // https://github.com/flarum/framework/pull/3684\n // This is only a temporary solution for 1.x,\n // and the actual source of the issue will be fixed in 2.x\n // Actual source of the issue: https://github.com/flarum/framework/issues/3685\n const parser = new DOMParser();\n document.title = parser.parseFromString(title, 'text/html').body.innerText;\n }\n transformRequestOptions(flarumOptions) {\n const {\n background,\n deserialize,\n modifyText,\n ...tmpOptions\n } = {\n ...flarumOptions\n };\n\n // Unless specified otherwise, requests should run asynchronously in the\n // background, so that they don't prevent redraws from occurring.\n const defaultBackground = true;\n\n // When we deserialize JSON data, if for some reason the server has provided\n // a dud response, we don't want the application to crash. We'll show an\n // error message to the user instead.\n\n const defaultDeserialize = response => response;\n const options = {\n background: background != null ? background : defaultBackground,\n deserialize: deserialize != null ? deserialize : defaultDeserialize,\n ...tmpOptions\n };\n extend(options, 'config', (_, xhr) => {\n xhr.setRequestHeader('X-CSRF-Token', this.session.csrfToken);\n });\n\n // If the method is something like PATCH or DELETE, which not all servers\n // and clients support, then we'll send it as a POST request with the\n // intended method specified in the X-HTTP-Method-Override header.\n if (options.method && !['GET', 'POST'].includes(options.method)) {\n const method = options.method;\n extend(options, 'config', (_, xhr) => {\n xhr.setRequestHeader('X-HTTP-Method-Override', method);\n });\n options.method = 'POST';\n }\n\n // When extracting the data from the response, we can check the server\n // response code and show an error message to the user if something's gone\n // awry.\n options.extract = xhr => {\n let responseText;\n if (modifyText) {\n responseText = modifyText(xhr.responseText);\n } else {\n responseText = xhr.responseText;\n }\n const status = xhr.status;\n if (status < 200 || status > 299) {\n throw new RequestError(status, \"\".concat(responseText), options, xhr);\n }\n if (xhr.getResponseHeader) {\n const csrfToken = xhr.getResponseHeader('X-CSRF-Token');\n if (csrfToken) app.session.csrfToken = csrfToken;\n }\n try {\n if (responseText === '') {\n return null;\n }\n return JSON.parse(responseText);\n } catch (e) {\n throw new RequestError(500, \"\".concat(responseText), options, xhr);\n }\n };\n return options;\n }\n\n /**\n * Make an AJAX request, handling any low-level errors that may occur.\n *\n * @see https://mithril.js.org/request.html\n */\n request(originalOptions) {\n const options = this.transformRequestOptions(originalOptions);\n if (this.requestErrorAlert) this.alerts.dismiss(this.requestErrorAlert);\n return m.request(options).catch(e => this.requestErrorCatch(e, originalOptions.errorHandler));\n }\n\n /**\n * By default, show an error alert, and log the error to the console.\n */\n requestErrorCatch(error, customErrorHandler) {\n var _error$response$error, _error$response, _error$response2, _app$session$user;\n // the details property is decoded to transform escaped characters such as '\\n'\n const formattedErrors = (_error$response$error = (_error$response = error.response) == null || (_error$response = _error$response.errors) == null ? void 0 : _error$response.map(e => {\n var _e$detail;\n return decodeURI((_e$detail = e.detail) != null ? _e$detail : '');\n })) != null ? _error$response$error : [];\n let content;\n switch (error.status) {\n case 422:\n content = formattedErrors.map(detail => [detail, m(\"br\", null)]).flat().slice(0, -1);\n break;\n case 401:\n case 403:\n content = app.translator.trans('core.lib.error.permission_denied_message');\n break;\n case 404:\n case 410:\n content = app.translator.trans('core.lib.error.not_found_message');\n break;\n case 413:\n content = app.translator.trans('core.lib.error.payload_too_large_message');\n break;\n case 429:\n content = app.translator.trans('core.lib.error.rate_limit_exceeded_message');\n break;\n default:\n const code = (_error$response2 = error.response) == null || (_error$response2 = _error$response2.errors) == null || (_error$response2 = _error$response2[0]) == null ? void 0 : _error$response2.code;\n if (code === 'db_error' && (_app$session$user = app.session.user) != null && _app$session$user.isAdmin()) {\n content = app.translator.trans('core.lib.error.db_error_message');\n } else if (this.requestWasCrossOrigin(error)) {\n content = app.translator.trans('core.lib.error.generic_cross_origin_message');\n } else {\n content = app.translator.trans('core.lib.error.generic_message');\n }\n }\n const isDebug = app.forum.attribute('debug');\n error.alert = {\n type: 'error',\n content,\n controls: isDebug && [m(Button, {\n className: \"Button Button--link\",\n onclick: this.showDebug.bind(this, error, formattedErrors)\n }, app.translator.trans('core.lib.debug_button'))]\n };\n if (customErrorHandler) {\n customErrorHandler(error);\n } else {\n this.requestErrorDefaultHandler(error, isDebug, formattedErrors);\n }\n return Promise.reject(error);\n }\n\n /**\n * Used to modify the error message shown on the page to help troubleshooting.\n * While not certain, a failing cross-origin request likely indicates a missing redirect to Flarum canonical URL.\n * Because XHR errors do not expose CORS information, we can only compare the requested URL origin to the page origin.\n *\n * @param error\n * @protected\n */\n requestWasCrossOrigin(error) {\n return new URL(error.options.url, document.baseURI).origin !== window.location.origin;\n }\n requestErrorDefaultHandler(e, isDebug, formattedErrors) {\n if (e instanceof RequestError) {\n if (isDebug && e.xhr) {\n const {\n method,\n url\n } = e.options;\n const {\n status = ''\n } = e.xhr;\n console.group(\"\".concat(method, \" \").concat(url, \" \").concat(status));\n if (formattedErrors.length) {\n console.error(...formattedErrors);\n } else {\n console.error(e);\n }\n console.groupEnd();\n }\n if (e.status === 500 && isDebug) {\n app.modal.show(RequestErrorModal, {\n error: e,\n formattedError: formattedErrors\n });\n } else if (e.alert) {\n this.requestErrorAlert = this.alerts.show(e.alert, e.alert.content);\n }\n } else {\n throw e;\n }\n }\n showDebug(error, formattedError) {\n if (this.requestErrorAlert !== null) this.alerts.dismiss(this.requestErrorAlert);\n this.modal.show(RequestErrorModal, {\n error,\n formattedError\n });\n }\n\n /**\n * Construct a URL to the route with the given name.\n */\n route(name, params) {\n if (params === void 0) {\n params = {};\n }\n const route = this.routes[name];\n if (!route) throw new Error(\"Route '\".concat(name, \"' does not exist\"));\n const url = route.path.replace(/:([^\\/]+)/g, (m, key) => \"\".concat(extract(params, key)));\n\n // Remove falsy values in params to avoid having urls like '/?sort&q'\n for (const key in params) {\n if (params.hasOwnProperty(key) && !params[key]) delete params[key];\n }\n const queryString = m.buildQueryString(params);\n const prefix = m.route.prefix === '' ? this.forum.attribute('basePath') : '';\n return prefix + url + (queryString ? '?' + queryString : '');\n }\n}\nflarum.reg.add('core', 'common/Application', Application);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/**\n * The `Component` class defines a user interface 'building block'. A component\n * generates a virtual DOM to be rendered on each redraw.\n *\n * Essentially, this is a wrapper for Mithril's components that adds several useful features:\n *\n * - In the `oninit` and `onbeforeupdate` lifecycle hooks, we store vnode attrs in `this.attrs.\n * This allows us to use attrs across components without having to pass the vnode to every single\n * method.\n * - The static `initAttrs` method allows a convenient way to provide defaults (or to otherwise modify)\n * the attrs that have been passed into a component.\n * - When the component is created in the DOM, we store its DOM element under `this.element`; this lets\n * us use jQuery to modify child DOM state from internal methods via the `this.$()` method.\n * - A convenience `component` method, which serves as an alternative to hyperscript and JSX.\n *\n * As with other Mithril components, components extending Component can be initialized\n * and nested using JSX, hyperscript, or a combination of both. The `component` method can also\n * be used.\n *\n * @example\n * return m('div', <MyComponent foo=\"bar\"><p>Hello World</p></MyComponent>);\n *\n * @example\n * return m('div', MyComponent.component({foo: 'bar'), m('p', 'Hello World!'));\n *\n * @see https://mithril.js.org/components.html\n */\nexport default class Component {\n constructor() {\n /**\n * The root DOM element for the component.\n */\n _defineProperty(this, \"element\", void 0);\n /**\n * The attributes passed into the component.\n *\n * @see https://mithril.js.org/components.html#passing-data-to-components\n */\n _defineProperty(this, \"attrs\", void 0);\n /**\n * Class component state that is persisted between redraws.\n *\n * Updating this will **not** automatically trigger a redraw, unlike\n * other frameworks.\n *\n * This is different to Vnode state, which is always an instance of your\n * class component.\n *\n * This is `undefined` by default.\n */\n _defineProperty(this, \"state\", void 0);\n }\n /**\n * @inheritdoc\n */\n /**\n * @inheritdoc\n */\n oninit(vnode) {\n this.setAttrs(vnode.attrs);\n }\n\n /**\n * @inheritdoc\n */\n oncreate(vnode) {\n this.element = vnode.dom;\n }\n\n /**\n * @inheritdoc\n */\n onbeforeupdate(vnode) {\n this.setAttrs(vnode.attrs);\n }\n\n /**\n * @inheritdoc\n */\n onupdate(vnode) {}\n\n /**\n * @inheritdoc\n */\n onbeforeremove(vnode) {}\n\n /**\n * @inheritdoc\n */\n onremove(vnode) {}\n\n /**\n * Returns a jQuery object for this component's element. If you pass in a\n * selector string, this method will return a jQuery object, using the current\n * element as its buffer.\n *\n * For example, calling `component.$('li')` will return a jQuery object\n * containing all of the `li` elements inside the DOM element of this\n * component.\n *\n * @param [selector] a jQuery-compatible selector string\n * @returns the jQuery object for the DOM node\n * @final\n */\n $(selector) {\n const $element = $(this.element);\n return selector ? $element.find(selector) : $element;\n }\n\n /**\n * Convenience method to attach a component without JSX.\n * Has the same effect as calling `m(THIS_CLASS, attrs, children)`.\n *\n * @see https://mithril.js.org/hyperscript.html#mselector,-attributes,-children\n */\n static component(attrs, children) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (children === void 0) {\n children = null;\n }\n const componentAttrs = {\n ...attrs\n };\n return m(this, componentAttrs, children);\n }\n\n /**\n * Saves a reference to the vnode attrs after running them through initAttrs,\n * and checking for common issues.\n */\n setAttrs(attrs) {\n if (attrs === void 0) {\n attrs = {};\n }\n this.constructor.initAttrs(attrs);\n if (attrs) {\n if ('children' in attrs) {\n throw new Error(\"[\".concat(this.constructor.name, \"] The \\\"children\\\" attribute of attrs should never be used. Either pass children in as the vnode children or rename the attribute\"));\n }\n if ('tag' in attrs) {\n throw new Error(\"[\".concat(this.constructor.name, \"] You cannot use the \\\"tag\\\" attribute name with Mithril 2.\"));\n }\n }\n this.attrs = attrs;\n }\n\n /**\n * Initialize the component's attrs.\n *\n * This can be used to assign default values for missing, optional attrs.\n */\n static initAttrs(attrs) {}\n}\nflarum.reg.add('core', 'common/Component', Component);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../common/app';\n/**\n * The `Model` class represents a local data resource. It provides methods to\n * persist changes via the API.\n */\nexport default class Model {\n /**\n * @param data A resource object from the API.\n * @param store The data store that this model should be persisted to.\n */\n constructor(data, store) {\n if (data === void 0) {\n data = {};\n }\n if (store === void 0) {\n store = app.store;\n }\n /**\n * The resource object from the API.\n */\n _defineProperty(this, \"data\", {});\n /**\n * The time at which the model's data was last updated. Watching the value\n * of this property is a fast way to retain/cache a subtree if data hasn't\n * changed.\n */\n _defineProperty(this, \"freshness\", new Date());\n /**\n * Whether or not the resource exists on the server.\n */\n _defineProperty(this, \"exists\", false);\n /**\n * The data store that this resource should be persisted to.\n */\n _defineProperty(this, \"store\", void 0);\n this.data = data;\n this.store = store;\n }\n\n /**\n * Get the model's ID.\n *\n * @final\n */\n id() {\n return 'id' in this.data ? this.data.id : undefined;\n }\n\n /**\n * Get one of the model's attributes.\n *\n * @final\n */\n attribute(attribute) {\n var _this$data;\n return (_this$data = this.data) == null || (_this$data = _this$data.attributes) == null ? void 0 : _this$data[attribute];\n }\n\n /**\n * Merge new data into this model locally.\n *\n * @param data A resource object to merge into this model\n */\n pushData(data) {\n if ('id' in data) {\n this.data.id = data.id;\n }\n if ('type' in data) {\n this.data.type = data.type;\n }\n if ('attributes' in data) {\n var _this$data2;\n (_this$data2 = this.data).attributes || (_this$data2.attributes = {});\n\n // Filter out relationships that got in by accident.\n for (const key in data.attributes) {\n const val = data.attributes[key];\n if (val && val instanceof Model) {\n delete data.attributes[key];\n }\n }\n Object.assign(this.data.attributes, data.attributes);\n }\n if ('relationships' in data) {\n var _this$data$relationsh;\n const relationships = (_this$data$relationsh = this.data.relationships) != null ? _this$data$relationsh : {};\n\n // For every relationship field, we need to check if we've\n // been handed a Model instance. If so, we will convert it to a\n // relationship data object.\n for (const r in data.relationships) {\n const relationship = data.relationships[r];\n if (relationship === null) {\n delete relationships[r];\n delete data.relationships[r];\n continue;\n }\n let identifier;\n if (relationship instanceof Model) {\n identifier = {\n data: Model.getIdentifier(relationship)\n };\n } else if (relationship instanceof Array) {\n identifier = {\n data: relationship.map(Model.getIdentifier)\n };\n } else {\n identifier = relationship;\n }\n data.relationships[r] = identifier;\n relationships[r] = identifier;\n }\n this.data.relationships = relationships;\n }\n\n // Now that we've updated the data, we can say that the model is fresh.\n // This is an easy way to invalidate retained subtrees etc.\n this.freshness = new Date();\n return this;\n }\n\n /**\n * Merge new attributes into this model locally.\n *\n * @param attributes The attributes to merge.\n */\n pushAttributes(attributes) {\n this.pushData({\n attributes\n });\n }\n\n /**\n * Merge new attributes into this model, both locally and with persistence.\n *\n * @param attributes The attributes to save. If a 'relationships' key\n * exists, it will be extracted and relationships will also be saved.\n */\n save(attributes, options) {\n if (options === void 0) {\n options = {};\n }\n const data = {\n type: this.data.type,\n attributes\n };\n if ('id' in this.data) {\n data.id = this.data.id;\n }\n\n // If a 'relationships' key exists, extract it from the attributes hash and\n // set it on the top-level data object instead. We will be sending this data\n // object to the API for persistence.\n if (attributes.relationships) {\n data.relationships = {};\n for (const key in attributes.relationships) {\n const model = attributes.relationships[key];\n if (model === null) continue;\n data.relationships[key] = {\n data: model instanceof Array ? model.map(Model.getIdentifier) : Model.getIdentifier(model)\n };\n }\n delete attributes.relationships;\n }\n\n // Before we update the model's data, we should make a copy of the model's\n // old data so that we can revert back to it if something goes awry during\n // persistence.\n const oldData = this.copyData();\n this.pushData(data);\n const request = {\n data,\n meta: options.meta || undefined\n };\n return app.request({\n method: this.exists ? 'PATCH' : 'POST',\n url: app.forum.attribute('apiUrl') + this.apiEndpoint(),\n body: request,\n ...options\n }).then(\n // If everything went well, we'll make sure the store knows that this\n // model exists now (if it didn't already), and we'll push the data that\n // the API returned into the store.\n payload => {\n return this.store.pushPayload(payload);\n },\n // If something went wrong, though... good thing we backed up our model's\n // old data! We'll revert to that and let others handle the error.\n err => {\n this.pushData(oldData);\n m.redraw();\n throw err;\n });\n }\n\n /**\n * Send a request to delete the resource.\n *\n * @param body Data to send along with the DELETE request.\n */\n delete(body, options) {\n if (body === void 0) {\n body = {};\n }\n if (options === void 0) {\n options = {};\n }\n if (!this.exists) return Promise.resolve();\n return app.request({\n method: 'DELETE',\n url: app.forum.attribute('apiUrl') + this.apiEndpoint(),\n body,\n ...options\n }).then(() => {\n this.exists = false;\n this.store.remove(this);\n });\n }\n\n /**\n * Construct a path to the API endpoint for this resource.\n */\n apiEndpoint() {\n return '/' + this.data.type + ('id' in this.data ? '/' + this.data.id : '');\n }\n copyData() {\n return JSON.parse(JSON.stringify(this.data));\n }\n rawRelationship(relationship) {\n var _this$data$relationsh2;\n return (_this$data$relationsh2 = this.data.relationships) == null || (_this$data$relationsh2 = _this$data$relationsh2[relationship]) == null ? void 0 : _this$data$relationsh2.data;\n }\n\n /**\n * Generate a function which returns the value of the given attribute.\n *\n * @param transform A function to transform the attribute value\n */\n\n static attribute(name, transform) {\n return function () {\n if (transform) {\n return transform(this.attribute(name));\n }\n return this.attribute(name);\n };\n }\n\n /**\n * Generate a function which returns the value of the given has-one\n * relationship.\n *\n * @return false if no information about the\n * relationship exists; undefined if the relationship exists but the model\n * has not been loaded; or the model if it has been loaded.\n */\n\n static hasOne(name) {\n return function () {\n var _this$data$relationsh3;\n const relationshipData = (_this$data$relationsh3 = this.data.relationships) == null || (_this$data$relationsh3 = _this$data$relationsh3[name]) == null ? void 0 : _this$data$relationsh3.data;\n if (relationshipData && relationshipData instanceof Array) {\n throw new Error(\"Relationship \".concat(name, \" on model \").concat(this.data.type, \" is plural, so the hasOne method cannot be used to access it.\"));\n }\n if (relationshipData) {\n return this.store.getById(relationshipData.type, relationshipData.id);\n }\n return false;\n };\n }\n\n /**\n * Generate a function which returns the value of the given has-many\n * relationship.\n *\n * @return false if no information about the relationship\n * exists; an array if it does, containing models if they have been\n * loaded, and undefined for those that have not.\n */\n static hasMany(name) {\n return function () {\n var _this$data$relationsh4;\n const relationshipData = (_this$data$relationsh4 = this.data.relationships) == null || (_this$data$relationsh4 = _this$data$relationsh4[name]) == null ? void 0 : _this$data$relationsh4.data;\n if (relationshipData && !(relationshipData instanceof Array)) {\n throw new Error(\"Relationship \".concat(name, \" on model \").concat(this.data.type, \" is singular, so the hasMany method cannot be used to access it.\"));\n }\n if (relationshipData) {\n return relationshipData.map(data => this.store.getById(data.type, data.id));\n }\n return false;\n };\n }\n\n /**\n * Transform the given value into a Date object.\n */\n\n static transformDate(value) {\n return value != null ? new Date(value) : value;\n }\n\n /**\n * Get a resource identifier object for the given model.\n */\n\n static getIdentifier(model) {\n if (!model || !model.data || !('id' in model.data)) return null;\n return {\n type: model.data.type,\n id: model.data.id\n };\n }\n}\nflarum.reg.add('core', 'common/Model', Model);","import app from '../../app';\nimport { KeyValueGambit } from '../IGambit';\nexport default class AuthorGambit extends KeyValueGambit {\n key() {\n return app.translator.trans('core.lib.gambits.discussions.author.key', {}, true);\n }\n hint() {\n return app.translator.trans('core.lib.gambits.discussions.author.hint', {}, true);\n }\n filterKey() {\n return 'author';\n }\n}\nflarum.reg.add('core', 'common/query/discussions/AuthorGambit', AuthorGambit);","import app from '../../app';\nimport { KeyValueGambit } from '../IGambit';\nexport default class CreatedGambit extends KeyValueGambit {\n key() {\n return app.translator.trans('core.lib.gambits.discussions.created.key', {}, true);\n }\n hint() {\n return app.translator.trans('core.lib.gambits.discussions.created.hint', {}, true);\n }\n valuePattern() {\n return '(\\\\d{4}\\\\-\\\\d\\\\d\\\\-\\\\d\\\\d(?:\\\\.\\\\.(\\\\d{4}\\\\-\\\\d\\\\d\\\\-\\\\d\\\\d))?)';\n }\n filterKey() {\n return 'created';\n }\n}\nflarum.reg.add('core', 'common/query/discussions/CreatedGambit', CreatedGambit);","import app from '../../app';\nimport { BooleanGambit } from '../IGambit';\nexport default class HiddenGambit extends BooleanGambit {\n key() {\n return app.translator.trans('core.lib.gambits.discussions.hidden.key', {}, true);\n }\n filterKey() {\n return 'hidden';\n }\n enabled() {\n return !!app.session.user;\n }\n}\nflarum.reg.add('core', 'common/query/discussions/HiddenGambit', HiddenGambit);","import app from '../../app';\nimport { BooleanGambit } from '../IGambit';\nexport default class UnreadGambit extends BooleanGambit {\n key() {\n return app.translator.trans('core.lib.gambits.discussions.unread.key', {}, true);\n }\n filterKey() {\n return 'unread';\n }\n enabled() {\n return !!app.session.user;\n }\n}\nflarum.reg.add('core', 'common/query/discussions/UnreadGambit', UnreadGambit);","import app from '../../app';\nimport { KeyValueGambit } from '../IGambit';\nexport default class EmailGambit extends KeyValueGambit {\n key() {\n return app.translator.trans('core.lib.gambits.users.email.key', {}, true);\n }\n hint() {\n return app.translator.trans('core.lib.gambits.users.email.hint', {}, true);\n }\n filterKey() {\n return 'email';\n }\n enabled() {\n return !!(app.session.user && app.forum.attribute('canEditUserCredentials'));\n }\n}\nflarum.reg.add('core', 'common/query/users/EmailGambit', EmailGambit);","import app from '../../app';\nimport { KeyValueGambit } from '../IGambit';\nexport default class GroupGambit extends KeyValueGambit {\n key() {\n return app.translator.trans('core.lib.gambits.users.group.key', {}, true);\n }\n hint() {\n return app.translator.trans('core.lib.gambits.users.group.hint', {}, true);\n }\n filterKey() {\n return 'group';\n }\n}\nflarum.reg.add('core', 'common/query/users/GroupGambit', GroupGambit);","import app from '../../app';\nimport { KeyValueGambit } from '../IGambit';\nexport default class DiscussionGambit extends KeyValueGambit {\n key() {\n return app.translator.trans('core.lib.gambits.posts.discussion.key', {}, true);\n }\n hint() {\n return app.translator.trans('core.lib.gambits.posts.discussion.hint', {}, true);\n }\n filterKey() {\n return 'discussion';\n }\n}\nflarum.reg.add('core', 'common/query/discussions/DiscussionGambit', DiscussionGambit);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AuthorGambit from './query/discussions/AuthorGambit';\nimport CreatedGambit from './query/discussions/CreatedGambit';\nimport HiddenGambit from './query/discussions/HiddenGambit';\nimport UnreadGambit from './query/discussions/UnreadGambit';\nimport EmailGambit from './query/users/EmailGambit';\nimport GroupGambit from './query/users/GroupGambit';\nimport DiscussionGambit from './query/discussions/DiscussionGambit';\n\n/**\n * The gambit registry. A map of resource types to gambit classes that\n * should be used to filter resources of that type. Gambits are automatically\n * converted to API filters when requesting resources. Gambits must be applied\n * on a filter object that has a `q` property containing the search query.\n */\nexport default class GambitManager {\n constructor() {\n _defineProperty(this, \"gambits\", {\n discussions: [AuthorGambit, CreatedGambit, HiddenGambit, UnreadGambit],\n posts: [AuthorGambit, DiscussionGambit],\n users: [EmailGambit, GroupGambit]\n });\n }\n apply(type, filter) {\n filter.q = this.match(type, filter.q, (gambit, matches, negate) => {\n const additions = gambit.toFilter(matches, negate);\n Object.keys(additions).forEach(key => {\n if (key in filter && gambit.predicates && Array.isArray(additions[key])) {\n filter[key] = filter[key].concat(additions[key]);\n } else {\n filter[key] = additions[key];\n }\n });\n });\n return filter;\n }\n match(type, query, onmatch) {\n const gambits = this.for(type).filter(gambit => gambit.enabled());\n if (gambits.length === 0) return query;\n const bits = query.split(' ');\n for (const gambit of gambits) {\n for (const bit of bits) {\n const pattern = new RegExp(\"^(-?)\".concat(gambit.pattern(), \"$\"), 'i');\n let matches = bit.match(pattern);\n if (matches) {\n const negate = matches[1] === '-';\n matches.splice(1, 1);\n onmatch(gambit, matches, negate, bit);\n query = query.replace(bit, '');\n }\n }\n }\n query = query.trim().replace(/\\s+/g, ' ');\n return query;\n }\n from(type, q, filter) {\n const gambits = this.for(type);\n if (gambits.length === 0) return q;\n Object.keys(filter).forEach(key => {\n for (const gambit of gambits) {\n const negate = key[0] === '-';\n if (negate) key = key.substring(1);\n if (gambit.filterKey() !== key) continue;\n q += \" \".concat(gambit.fromFilter(filter[key], negate));\n }\n });\n return q;\n }\n for(type) {\n return (this.gambits[type] || []).map(gambitClass => new gambitClass());\n }\n}\nflarum.reg.add('core', 'common/GambitManager', GambitManager);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport GambitManager from './GambitManager';\nexport default class SearchManager {\n constructor(state) {\n /**\n * An object which stores previously searched queries and provides convenient\n * tools for retrieving and managing search values.\n */\n _defineProperty(this, \"state\", void 0);\n /**\n * The gambit manager that will convert search query gambits\n * into API filters.\n */\n _defineProperty(this, \"gambits\", new GambitManager());\n this.state = state;\n }\n}\n/**\n * The minimum query length before sources are searched.\n */\n_defineProperty(SearchManager, \"MIN_SEARCH_LEN\", 3);\nflarum.reg.add('core', 'common/SearchManager', SearchManager);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../common/app';\n/**\n * The `Session` class defines the current user session. It stores a reference\n * to the current authenticated user, and provides methods to log in/out.\n */\nexport default class Session {\n constructor(user, csrfToken) {\n /**\n * The current authenticated user.\n */\n _defineProperty(this, \"user\", void 0);\n /**\n * The CSRF token.\n */\n _defineProperty(this, \"csrfToken\", void 0);\n this.user = user;\n this.csrfToken = csrfToken;\n }\n\n /**\n * Attempt to log in a user.\n */\n login(body, options) {\n if (options === void 0) {\n options = {};\n }\n return app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('baseUrl'), \"/login\"),\n body,\n ...options\n });\n }\n\n /**\n * Log the user out.\n */\n logout() {\n window.location.href = \"\".concat(app.forum.attribute('baseUrl'), \"/logout?token=\").concat(this.csrfToken);\n }\n}\nflarum.reg.add('core', 'common/Session', Session);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../common/app';\nexport function payloadIsPlural(payload) {\n return Array.isArray(payload.data);\n}\n\n/**\n * The `Store` class defines a local data store, and provides methods to\n * retrieve data from the API.\n */\nexport default class Store {\n constructor(models) {\n /**\n * The local data store. A tree of resource types to IDs, such that\n * accessing data[type][id] will return the model for that type/ID.\n */\n _defineProperty(this, \"data\", {});\n /**\n * The model registry. A map of resource types to the model class that\n * should be used to represent resources of that type.\n */\n _defineProperty(this, \"models\", void 0);\n this.models = models;\n }\n\n /**\n * Push resources contained within an API payload into the store.\n *\n * @return The model(s) representing the resource(s) contained\n * within the 'data' key of the payload.\n */\n\n pushPayload(payload) {\n if (payload.included) payload.included.map(this.pushObject.bind(this));\n const models = payload.data instanceof Array ? payload.data.map(o => this.pushObject(o)) : this.pushObject(payload.data);\n const result = models;\n\n // Attach the original payload to the model that we give back. This is\n // useful to consumers as it allows them to access meta information\n // associated with their request.\n result.payload = payload;\n return result;\n }\n\n /**\n * Create a model to represent a resource object (or update an existing one),\n * and push it into the store.\n *\n * @param data The resource object\n * @return The model, or null if no model class has been\n * registered for this resource type.\n */\n\n pushObject(data) {\n if (!this.models[data.type]) {\n setTimeout(() => {\n throw new Error(\"Pushing object of type `\".concat(data.type, \"` not allowed, as type not yet registered in the store.\"));\n });\n return null;\n }\n const type = this.data[data.type] = this.data[data.type] || {};\n\n // Necessary for TS to narrow correctly.\n const curr = type[data.id];\n const instance = curr ? curr.pushData(data) : this.createRecord(data.type, data);\n type[data.id] = instance;\n instance.exists = true;\n return instance;\n }\n\n /**\n * Make a request to the API to find record(s) of a specific type.\n */\n\n async find(type, idOrParams, query, options) {\n var _params;\n if (query === void 0) {\n query = {};\n }\n if (options === void 0) {\n options = {};\n }\n let params = query;\n let url = app.forum.attribute('apiUrl') + '/' + type;\n if (idOrParams instanceof Array) {\n url += '?filter[id]=' + idOrParams.join(',');\n } else if (typeof idOrParams === 'object') {\n params = idOrParams;\n } else if (idOrParams) {\n url += '/' + idOrParams;\n }\n if ('filter' in params && (_params = params) != null && (_params = _params.filter) != null && _params.q) {\n params.filter = app.search.gambits.apply(type, params.filter);\n }\n return app.request({\n method: 'GET',\n url,\n params,\n ...options\n }).then(payload => {\n if (payloadIsPlural(payload)) {\n return this.pushPayload(payload);\n } else {\n return this.pushPayload(payload);\n }\n });\n }\n\n /**\n * Get a record from the store by ID.\n */\n getById(type, id) {\n var _this$data;\n return (_this$data = this.data) == null || (_this$data = _this$data[type]) == null ? void 0 : _this$data[id];\n }\n\n /**\n * Get a record from the store by the value of a model attribute.\n *\n * @param type The resource type.\n * @param key The name of the method on the model.\n * @param value The value of the model attribute.\n */\n getBy(type, key, value) {\n // @ts-expect-error No way to do this safely, unfortunately.\n return this.all(type).filter(model => model[key]() === value)[0];\n }\n\n /**\n * Get all loaded records of a specific type.\n */\n all(type) {\n const records = this.data[type];\n return records ? Object.values(records) : [];\n }\n\n /**\n * Remove the given model from the store.\n */\n remove(model) {\n delete this.data[model.data.type][model.id()];\n }\n\n /**\n * Create a new record of the given type.\n *\n * @param type The resource type\n * @param data Any data to initialize the model with\n */\n createRecord(type, data) {\n if (data === void 0) {\n data = {};\n }\n data.type = data.type || type;\n\n // @ts-expect-error this will complain about initializing abstract models,\n // but we can safely assume that all models registered with the store are\n // not abstract.\n return new this.models[type](data, this);\n }\n}\nflarum.reg.add('core', 'common/Store', Store);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { RichMessageFormatter, mithrilRichHandler } from '@askvortsov/rich-icu-message-formatter';\nimport { pluralTypeHandler, selectTypeHandler } from '@ultraq/icu-message-formatter';\nimport username from './helpers/username';\nimport extract from './utils/extract';\nimport extractText from './utils/extractText';\nexport default class Translator {\n constructor() {\n /**\n * A map of translation keys to their translated values.\n */\n _defineProperty(this, \"translations\", {});\n /**\n * The underlying ICU MessageFormatter util.\n */\n _defineProperty(this, \"formatter\", new RichMessageFormatter(null, this.formatterTypeHandlers(), mithrilRichHandler));\n }\n /**\n * Sets the formatter's locale to the provided value.\n */\n setLocale(locale) {\n this.formatter.locale = locale;\n }\n\n /**\n * Returns the formatter's current locale.\n */\n getLocale() {\n return this.formatter.locale;\n }\n addTranslations(translations) {\n Object.assign(this.translations, translations);\n }\n\n /**\n * An extensible entrypoint for extenders to register type handlers for translations.\n */\n formatterTypeHandlers() {\n return {\n plural: pluralTypeHandler,\n select: selectTypeHandler\n };\n }\n\n /**\n * A temporary system to preprocess parameters.\n * Should not be used by extensions.\n * TODO: An extender will be added in v1.x.\n *\n * @internal\n */\n preprocessParameters(parameters) {\n // If we've been given a user model as one of the input parameters, then\n // we'll extract the username and use that for the translation. In the\n // future there should be a hook here to inspect the user and change the\n // translation key. This will allow a gender property to determine which\n // translation key is used.\n\n if ('user' in parameters) {\n const user = extract(parameters, 'user');\n if (!parameters.username) parameters.username = username(user);\n }\n return parameters;\n }\n trans(id, parameters, extract) {\n if (parameters === void 0) {\n parameters = {};\n }\n if (extract === void 0) {\n extract = false;\n }\n const translation = this.translations[id];\n if (translation) {\n parameters = this.preprocessParameters(parameters);\n const locale = this.formatter.rich(translation, parameters);\n if (extract) return extractText(locale);\n return locale;\n }\n return id;\n }\n}\nflarum.reg.add('core', 'common/Translator', Translator);","// Used to fix typings\nconst w = window;\n\n/**\n * Proxy app. Common JS is run first, at which point `window.app` is not\n * set as this is done by the namespaced JS.\n *\n * When the corrent value is set, this code would retain the reference to\n * the original invalid value.\n *\n * By using a proxy, we can ensure that our `window.app` value is always\n * up-to-date with the latest reference.\n */\nconst appProxy = new Proxy({}, {\n get(_, properties) {\n return Reflect.get(w.app, properties, w.app);\n },\n set(_, properties, value) {\n return Reflect.set(w.app, properties, value, w.app);\n }\n});\n\n/**\n * The instance of Application within the common namespace.\n */\nexport default appProxy;\nflarum.reg.add('core', 'common/app', appProxy);","import Component from '../Component';\nimport Button from './Button';\nimport listItems from '../helpers/listItems';\nimport extract from '../utils/extract';\nimport classList from '../utils/classList';\nimport app from '../app';\nimport Icon from './Icon';\n/**\n * The `Alert` component represents an alert box, which contains a message,\n * some controls, and may be dismissible.\n */\nexport default class Alert extends Component {\n view(vnode) {\n const attrs = Object.assign({}, this.attrs);\n const type = extract(attrs, 'type');\n attrs.className = classList('Alert', \"Alert--\".concat(type), attrs.className);\n const title = extract(attrs, 'title');\n const icon = extract(attrs, 'icon');\n const content = extract(attrs, 'content') || vnode.children;\n const controls = extract(attrs, 'controls') || [];\n\n // If the alert is meant to be dismissible (which is the case by default),\n // then we will create a dismiss button to append as the final control in\n // the alert.\n const dismissible = extract(attrs, 'dismissible');\n const ondismiss = extract(attrs, 'ondismiss');\n const dismissControl = [];\n if (dismissible || dismissible === undefined) {\n dismissControl.push(m(Button, {\n \"aria-label\": app.translator.trans('core.lib.alert.dismiss_a11y_label'),\n icon: \"fas fa-times\",\n className: \"Button Button--link Button--icon Alert-dismiss\",\n onclick: ondismiss\n }));\n }\n return m(\"div\", attrs, m(\"div\", {\n className: classList('Alert-container', attrs.containerClassName)\n }, !!title && m(\"div\", {\n className: \"Alert-title\"\n }, !!icon && m(\"span\", {\n className: \"Alert-title-icon\"\n }, m(Icon, {\n name: icon\n })), m(\"span\", {\n className: \"Alert-title-text\"\n }, title)), m(\"span\", {\n className: \"Alert-body\"\n }, content), m(\"ul\", {\n className: \"Alert-controls\"\n }, listItems(controls.concat(dismissControl)))));\n }\n}\nflarum.reg.add('core', 'common/components/Alert', Alert);","import Component from '../Component';\n/**\n * The `AlertManager` component provides an area in which `Alert` components can\n * be shown and dismissed.\n */\nexport default class AlertManager extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n this.state = this.attrs.state;\n }\n view() {\n const activeAlerts = this.state.getActiveAlerts();\n return m(\"div\", {\n className: \"AlertManager\"\n }, Object.keys(activeAlerts).map(Number).map(key => {\n const alert = activeAlerts[key];\n const urgent = alert.attrs.type === 'error';\n return m(\"div\", {\n className: \"AlertManager-alert\",\n role: \"alert\",\n \"aria-live\": urgent ? 'assertive' : 'polite'\n }, m(alert.componentClass, Object.assign({}, alert.attrs, {\n ondismiss: this.state.dismiss.bind(this.state, key)\n }), alert.children));\n }));\n }\n}\nflarum.reg.add('core', 'common/components/AlertManager', AlertManager);","import classList from '../utils/classList';\nimport Component from '../Component';\nexport default class Avatar extends Component {\n view(vnode) {\n var _attrs$loading;\n const {\n user,\n ...attrs\n } = vnode.attrs;\n attrs.className = classList('Avatar', attrs.className);\n (_attrs$loading = attrs.loading) != null ? _attrs$loading : attrs.loading = 'lazy';\n let content = '';\n\n // If the `title` attribute is set to null or false, we don't want to give the\n // avatar a title. On the other hand, if it hasn't been given at all, we can\n // safely default it to the user's username.\n const hasTitle = attrs.title === 'undefined' || attrs.title;\n if (!hasTitle) delete attrs.title;\n\n // If a user has been passed, then we will set up an avatar using their\n // uploaded image, or the first letter of their username if they haven't\n // uploaded one.\n if (user) {\n const username = user.displayName() || '?';\n const avatarUrl = user.avatarUrl();\n if (hasTitle) attrs.title = attrs.title || username;\n if (avatarUrl) {\n return m(\"img\", Object.assign({}, attrs, {\n src: avatarUrl,\n alt: \"\"\n }));\n }\n content = username.charAt(0).toUpperCase();\n attrs.style = !window.testing && {\n '--avatar-bg': user.color()\n };\n }\n return m(\"span\", attrs, content);\n }\n}\nflarum.reg.add('core', 'common/components/Avatar', Avatar);","import Tooltip from './Tooltip';\nimport Component from '../Component';\nimport classList from '../utils/classList';\nimport textContrastClass from '../helpers/textContrastClass';\nimport Icon from './Icon';\n/**\n * The `Badge` component represents a user/discussion badge, indicating some\n * status (e.g. a discussion is stickied, a user is an admin).\n *\n * A badge may have the following special attrs:\n *\n * - `type` The type of badge this is. This will be used to give the badge a\n * class name of `Badge--{type}`.\n * - `icon` The name of an icon to show inside the badge.\n * - `label`\n *\n * All other attrs will be assigned as attributes on the badge element.\n */\nexport default class Badge extends Component {\n view() {\n const {\n type,\n icon: iconName,\n label,\n color,\n style = {},\n ...attrs\n } = this.attrs;\n const className = classList('Badge', [type && \"Badge--\".concat(type)], attrs.className, textContrastClass(color));\n const iconChild = iconName ? m(Icon, {\n name: iconName,\n className: \"Badge-icon\"\n }) : m.trust(' ');\n const newStyle = {\n ...style\n };\n if (!window.testing) {\n newStyle['--badge-bg'] = color;\n }\n const badgeAttrs = {\n ...attrs,\n className,\n style: newStyle\n };\n const badgeNode = m(\"div\", badgeAttrs, iconChild);\n\n // If we don't have a tooltip label, don't render the tooltip component.\n if (!label) return badgeNode;\n return m(Tooltip, {\n text: label\n }, badgeNode);\n }\n}\nflarum.reg.add('core', 'common/components/Badge', Badge);","import app from '../app';\n\n/**\n * Calls `console.warn` with the provided arguments, but only if the forum is in debug mode.\n *\n * This function is intended to provide warnings to extension developers about issues with\n * their extensions that may not be easily noticed when testing, such as accessibility\n * issues.\n *\n * These warnings should be hidden on production forums to ensure webmasters are not\n * inundated with do-gooders telling them they have an issue when it isn't something they\n * can fix.\n */\nexport default function fireDebugWarning() {\n if (!app.forum.attribute('debug')) return;\n console.warn(...arguments);\n}\n\n/**\n * Fire a Flarum deprecation warning which is shown in the JS console.\n *\n * These warnings are only shown when the forum is in debug mode, and the function exists to\n * reduce bundle size caused by multiple warnings across our JavaScript.\n *\n * @param message The message to display. (Short, but sweet, please!)\n * @param githubId The PR or Issue ID with more info in relation to this change.\n * @param [removedFrom] The version in which this feature will be completely removed. (default: 2.0)\n * @param [repo] The repo which the issue or PR is located in. (default: flarum/core)\n *\n * @see {@link fireDebugWarning}\n */\nexport function fireDeprecationWarning(message, githubId, removedFrom, repo) {\n if (removedFrom === void 0) {\n removedFrom = '2.0';\n }\n if (repo === void 0) {\n repo = 'flarum/core';\n }\n // GitHub auto-redirects between `/pull` and `/issues` for us, so using `/pull` saves 2 bytes!\n fireDebugWarning(\"[Flarum \".concat(removedFrom, \" Deprecation] \").concat(message, \"\\n\\nSee: https://github.com/\").concat(repo, \"/pull/\").concat(githubId));\n}\nflarum.reg.add('core', 'common/helpers/fireDebugWarning', fireDebugWarning);","import Component from '../Component';\nimport fireDebugWarning from '../helpers/fireDebugWarning';\nimport classList from '../utils/classList';\nimport extractText from '../utils/extractText';\nimport LoadingIndicator from './LoadingIndicator';\nimport Icon from './Icon';\n/**\n * The `Button` component defines an element which, when clicked, performs an\n * action.\n *\n * Other attrs will be assigned as attributes on the `<button>` element.\n *\n * Note that a Button has no default class names. This is because a Button can\n * be used to represent any generic clickable control, like a menu item. Common\n * styles can be applied by providing `className=\"Button\"` to the Button component.\n */\nexport default class Button extends Component {\n view(vnode) {\n let {\n type,\n 'aria-label': ariaLabel,\n icon: iconName,\n disabled,\n loading,\n className,\n class: _class,\n ...attrs\n } = this.attrs;\n\n // If no `type` attr provided, set to \"button\"\n type || (type = 'button');\n\n // If given a translation object, extract the text.\n if (typeof ariaLabel === 'object') {\n ariaLabel = extractText(ariaLabel);\n }\n if (disabled || loading) {\n delete attrs.onclick;\n }\n className = classList(_class, className, {\n hasIcon: iconName,\n disabled: disabled || loading,\n loading: loading\n });\n const buttonAttrs = {\n disabled,\n className,\n type,\n 'aria-label': ariaLabel,\n ...attrs\n };\n return m(\"button\", buttonAttrs, this.getButtonContent(vnode.children));\n }\n oncreate(vnode) {\n var _this$element, _this$element$getAttr;\n super.oncreate(vnode);\n const {\n 'aria-label': ariaLabel\n } = this.attrs;\n if (this.view === Button.prototype.view && !ariaLabel && !extractText(vnode.children) && !((_this$element = this.element) != null && (_this$element$getAttr = _this$element.getAttribute) != null && _this$element$getAttr.call(_this$element, 'aria-label'))) {\n fireDebugWarning('[Flarum Accessibility Warning] Button has no content and no accessible label. This means that screen-readers will not be able to interpret its meaning and just read \"Button\". Consider providing accessible text via the `aria-label` attribute. https://web.dev/button-name', this.element);\n }\n }\n\n /**\n * Get the template for the button's content.\n */\n getButtonContent(children) {\n const iconName = this.attrs.icon;\n return [iconName && m(Icon, {\n name: iconName,\n className: \"Button-icon\"\n }), children && m(\"span\", {\n className: \"Button-label\"\n }, children), this.attrs.loading && m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\"\n })];\n }\n}\nflarum.reg.add('core', 'common/components/Button', Button);","import Component from '../Component';\nimport LoadingIndicator from './LoadingIndicator';\nimport classList from '../utils/classList';\nimport withAttr from '../utils/withAttr';\nimport Icon from './Icon';\n/**\n * The `Checkbox` component defines a checkbox input.\n *\n * ### Attrs\n *\n * - `state` Whether or not the checkbox is checked.\n * - `className` The class name for the root element.\n * - `disabled` Whether or not the checkbox is disabled.\n * - `loading` Whether or not the checkbox is loading.\n * - `onchange` A callback to run when the checkbox is checked/unchecked.\n * - `children` A text label to display next to the checkbox.\n */\nexport default class Checkbox extends Component {\n view(vnode) {\n const className = classList(['Checkbox', this.attrs.state ? 'on' : 'off', this.attrs.className, this.attrs.loading && 'loading', this.attrs.disabled && 'disabled']);\n return m(\"label\", {\n className: className\n }, m(\"input\", {\n type: \"checkbox\",\n checked: this.attrs.state,\n disabled: this.attrs.disabled,\n onchange: withAttr('checked', this.onchange.bind(this))\n }), m(\"div\", {\n className: \"Checkbox-display\",\n \"aria-hidden\": \"true\"\n }, this.getDisplay()), vnode.children);\n }\n\n /**\n * Get the template for the checkbox's display (tick/cross icon).\n */\n getDisplay() {\n return this.attrs.loading ? m(LoadingIndicator, {\n display: \"unset\",\n size: \"small\"\n }) : m(Icon, {\n name: this.attrs.state ? 'fas fa-check' : 'fas fa-times'\n });\n }\n\n /**\n * Run a callback when the state of the checkbox is changed.\n */\n onchange(checked) {\n if (this.attrs.onchange) this.attrs.onchange(checked, this);\n }\n}\nflarum.reg.add('core', 'common/components/Checkbox', Checkbox);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../common/app';\nimport Component from '../Component';\nimport listItems from '../helpers/listItems';\nimport extractText from '../utils/extractText';\nimport Tooltip from './Tooltip';\nimport Icon from './Icon';\n/**\n * The `Dropdown` component displays a button which, when clicked, shows a\n * dropdown menu beneath it.\n *\n * The children will be displayed as a list inside the dropdown menu.\n */\nexport default class Dropdown extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"showing\", false);\n }\n static initAttrs(attrs) {\n var _attrs$caretIcon;\n attrs.className || (attrs.className = '');\n attrs.buttonClassName || (attrs.buttonClassName = '');\n attrs.menuClassName || (attrs.menuClassName = '');\n attrs.label || (attrs.label = '');\n (_attrs$caretIcon = attrs.caretIcon) != null ? _attrs$caretIcon : attrs.caretIcon = 'fas fa-caret-down';\n attrs.accessibleToggleLabel || (attrs.accessibleToggleLabel = extractText(app.translator.trans('core.lib.dropdown.toggle_dropdown_accessible_label')));\n }\n view(vnode) {\n const items = vnode.children ? listItems(vnode.children) : [];\n const renderItems = this.attrs.lazyDraw ? this.showing : true;\n return m(\"div\", {\n className: 'ButtonGroup Dropdown dropdown ' + this.attrs.className + ' itemCount' + items.length + (this.showing ? ' open' : '')\n }, this.getButton(vnode.children), renderItems && this.getMenu(items));\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n\n // When opening the dropdown menu, work out if the menu goes beyond the\n // bottom of the viewport. If it does, we will apply class to make it show\n // above the toggle button instead of below it.\n this.$().on('shown.bs.dropdown', () => {\n var _$menu$offset$top, _$menu$offset, _$menu$height, _$$scrollTop, _$$height, _$menu$offset2, _$menu$offset$left, _$menu$offset3, _$menu$width, _$$scrollLeft, _$$width;\n const {\n lazyDraw,\n onshow\n } = this.attrs;\n this.showing = true;\n\n // If using lazy drawing, redraw before calling `onshow` function\n // to make sure the menu DOM exists in case the callback tries to use it.\n if (lazyDraw) {\n m.redraw.sync();\n }\n if (typeof onshow === 'function') {\n onshow();\n }\n\n // If not using lazy drawing, keep previous functionality\n // of redrawing after calling onshow()\n if (!lazyDraw) {\n m.redraw();\n }\n const $menu = this.$('.Dropdown-menu');\n const isRight = $menu.hasClass('Dropdown-menu--right');\n const top = (_$menu$offset$top = (_$menu$offset = $menu.offset()) == null ? void 0 : _$menu$offset.top) != null ? _$menu$offset$top : 0;\n const height = (_$menu$height = $menu.height()) != null ? _$menu$height : 0;\n const windowSrollTop = (_$$scrollTop = $(window).scrollTop()) != null ? _$$scrollTop : 0;\n const windowHeight = (_$$height = $(window).height()) != null ? _$$height : 0;\n $menu.removeClass('Dropdown-menu--top Dropdown-menu--right');\n $menu.toggleClass('Dropdown-menu--top', top + height > windowSrollTop + windowHeight);\n if ((((_$menu$offset2 = $menu.offset()) == null ? void 0 : _$menu$offset2.top) || 0) < 0) {\n $menu.removeClass('Dropdown-menu--top');\n }\n const left = (_$menu$offset$left = (_$menu$offset3 = $menu.offset()) == null ? void 0 : _$menu$offset3.left) != null ? _$menu$offset$left : 0;\n const width = (_$menu$width = $menu.width()) != null ? _$menu$width : 0;\n const windowScrollLeft = (_$$scrollLeft = $(window).scrollLeft()) != null ? _$$scrollLeft : 0;\n const windowWidth = (_$$width = $(window).width()) != null ? _$$width : 0;\n $menu.toggleClass('Dropdown-menu--right', isRight || left + width > windowScrollLeft + windowWidth);\n });\n this.$().on('hidden.bs.dropdown', () => {\n this.showing = false;\n if (this.attrs.onhide) {\n this.attrs.onhide();\n }\n m.redraw();\n });\n }\n\n /**\n * Get the template for the button.\n */\n getButton(children) {\n let button = m(\"button\", Object.assign({\n className: 'Dropdown-toggle ' + this.attrs.buttonClassName,\n \"aria-haspopup\": \"menu\",\n \"aria-label\": this.attrs.accessibleToggleLabel,\n \"data-toggle\": \"dropdown\",\n onclick: this.attrs.onclick\n }, this.attrs.buttonAttrs), this.getButtonContent(children));\n if (this.attrs.tooltip) {\n button = m(Tooltip, {\n text: this.attrs.tooltip,\n position: \"bottom\"\n }, button);\n }\n return button;\n }\n\n /**\n * Get the template for the button's content.\n */\n getButtonContent(children) {\n return [this.attrs.icon ? m(Icon, {\n name: this.attrs.icon,\n className: \"Button-icon\"\n }) : '', m(\"span\", {\n className: \"Button-label\"\n }, this.attrs.label), this.attrs.caretIcon ? m(Icon, {\n name: this.attrs.caretIcon,\n className: \"Button-caret\"\n }) : ''];\n }\n getMenu(items) {\n return m(\"ul\", {\n className: 'Dropdown-menu dropdown-menu ' + this.attrs.menuClassName\n }, items);\n }\n}\nflarum.reg.add('core', 'common/components/Dropdown', Dropdown);","import Component from '../Component';\nimport classList from '../utils/classList';\n/**\n * The `FieldSet` component defines a collection of fields, displayed in a list\n * underneath a title.\n *\n * The children should be an array of items to show in the fieldset.\n */\nexport default class FieldSet extends Component {\n view(vnode) {\n return m(\"div\", {\n className: classList('FieldSet', this.attrs.className),\n role: \"group\",\n \"aria-label\": this.attrs.label,\n \"aria-disabled\": false\n }, m(\"label\", {\n className: \"FieldSet-label\",\n \"aria-hidden\": \"true\"\n }, this.attrs.label), this.attrs.description ? m(\"div\", {\n className: \"FieldSet-description helpText\"\n }, this.attrs.description) : null, m(\"div\", {\n className: \"FieldSet-items\"\n }, vnode.children));\n }\n}\nflarum.reg.add('core', 'common/components/FieldSet', FieldSet);","import Component from '../Component';\nimport classList from '../utils/classList';\nexport default class Form extends Component {\n view(vnode) {\n const {\n label,\n description,\n className,\n ...attrs\n } = vnode.attrs;\n return m(\"div\", Object.assign({\n className: classList('Form', className)\n }, attrs), (label || description) && m(\"div\", {\n className: \"Form-header\"\n }, label && m(\"label\", null, label), description && m(\"p\", {\n className: \"helpText\"\n }, description)), m(\"div\", {\n className: \"Form-body\"\n }, vnode.children));\n }\n}\nflarum.reg.add('core', 'common/components/Form', Form);","import Modal from './Modal';\n/**\n * The `FormModal` component displays a modal dialog, wrapped in a form.\n * Subclasses should implement the `className`, `title`, and `content` methods.\n */\nexport default class FormModal extends Modal {\n wrapper(children) {\n return m(\"form\", {\n onsubmit: this.onsubmit.bind(this)\n }, children);\n }\n\n /**\n * Handle the modal form's submit event.\n */\n onsubmit(e) {\n // ...\n }\n\n /**\n * Callback executed when the modal is shown and ready to be interacted with.\n *\n * @remark Focuses the first input in the modal.\n */\n onready() {\n this.$().find('input, select, textarea').first().trigger('focus').trigger('select');\n }\n\n /**\n * Shows an alert describing an error returned from the API, and gives focus to\n * the first relevant field involved in the error.\n */\n onerror(error) {\n var _error$response;\n this.alertAttrs = error.alert;\n m.redraw();\n if (error.status === 422 && (_error$response = error.response) != null && _error$response.errors) {\n this.$('form [name=' + error.response.errors[0].source.pointer.replace('/data/attributes/', '') + ']').trigger('select');\n } else {\n this.onready();\n }\n }\n}\nflarum.reg.add('core', 'common/components/FormModal', FormModal);","import Badge from './Badge';\nexport default class GroupBadge extends Badge {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n if (attrs.group) {\n attrs.icon = attrs.group.icon() || '';\n attrs.color = attrs.group.color() || '';\n attrs.label = typeof attrs.label === 'undefined' ? attrs.group.nameSingular() : attrs.label;\n attrs.type = 'group--' + attrs.group.id();\n delete attrs.group;\n }\n }\n}\nflarum.reg.add('core', 'common/components/GroupBadge', GroupBadge);","import classList from '../utils/classList';\nimport Component from '../Component';\nexport default class Icon extends Component {\n view(vnode) {\n const {\n name,\n ...attrs\n } = vnode.attrs;\n\n // @ts-ignore\n attrs.className = classList('icon', name, attrs.className);\n return m(\"i\", Object.assign({\n \"aria-hidden\": \"true\"\n }, attrs));\n }\n}\nflarum.reg.add('core', 'common/components/Icon', Icon);","import Component from '../Component';\nimport Icon from './Icon';\nimport classList from '../utils/classList';\nexport default class InfoTile extends Component {\n view(vnode) {\n const {\n icon,\n className,\n ...attrs\n } = vnode.attrs;\n return m(\"div\", Object.assign({\n className: classList('InfoTile', className)\n }, attrs), this.icon(), m(\"div\", {\n className: \"InfoTile-text\"\n }, vnode.children));\n }\n icon() {\n if (this.attrs.iconElement) return this.attrs.iconElement;\n if (!this.attrs.icon) return null;\n return m(Icon, {\n name: classList(this.attrs.icon, 'InfoTile-icon')\n });\n }\n}\nflarum.reg.add('core', 'common/components/InfoTile', InfoTile);","import app from '../../common/app';\nimport Component from '../Component';\nimport Icon from './Icon';\nimport LoadingIndicator from './LoadingIndicator';\nimport classList from '../utils/classList';\nimport Button from './Button';\nexport default class Input extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view(vnode) {\n var _this$attrs$stream, _this$attrs;\n const {\n className: inputClassName,\n ...inputAttrs\n } = this.attrs.inputAttrs || {};\n const value = this.attrs.value || ((_this$attrs$stream = (_this$attrs = this.attrs).stream) == null ? void 0 : _this$attrs$stream.call(_this$attrs)) || '';\n return m(\"div\", {\n className: classList('Input', this.attrs.className, {\n 'Input--withPrefix': this.attrs.prefixIcon,\n 'Input--withClear': this.attrs.clearable\n })\n }, this.attrs.prefixIcon && m(Icon, {\n name: classList(this.attrs.prefixIcon, 'Input-prefix-icon')\n }), this.input({\n inputClassName,\n value,\n inputAttrs\n }), this.attrs.loading && m(LoadingIndicator, {\n size: \"small\",\n display: \"inline\",\n containerClassName: \"Button Button--icon Button--link\"\n }), this.attrs.clearable && value && !this.attrs.loading && m(Button, {\n className: \"Input-clear Button Button--icon Button--link\",\n onclick: this.clear.bind(this),\n \"aria-label\": this.attrs.clearLabel || app.translator.trans('core.lib.input.clear_button'),\n type: \"button\",\n icon: \"fas fa-times-circle\"\n }));\n }\n input(_ref) {\n let {\n inputClassName,\n value,\n inputAttrs\n } = _ref;\n const attrs = {\n className: classList('FormControl', inputClassName),\n type: this.attrs.type || 'text',\n value: value,\n oninput: e => {\n var _this$onchange;\n return (_this$onchange = this.onchange) == null ? void 0 : _this$onchange.call(this, e.target.value);\n },\n 'aria-label': this.attrs.ariaLabel,\n placeholder: this.attrs.placeholder,\n readonly: this.attrs.readonly || undefined,\n disabled: this.attrs.disabled || undefined,\n ...inputAttrs\n };\n if (this.attrs.renderInput) {\n return this.attrs.renderInput(attrs);\n }\n return m(\"input\", attrs);\n }\n onchange(value) {\n if (this.attrs.stream) {\n this.attrs.stream(value);\n } else {\n var _this$attrs$onchange, _this$attrs2;\n (_this$attrs$onchange = (_this$attrs2 = this.attrs).onchange) == null || _this$attrs$onchange.call(_this$attrs2, value);\n }\n }\n clear() {\n this.onchange('');\n }\n}\nflarum.reg.add('core', 'common/components/Input', Input);","import app from '../../common/app';\nimport Component from '../Component';\nimport classList from '../utils/classList';\n/**\n * The `LoadingIndicator` component displays a simple CSS-based loading spinner.\n *\n * To set a custom color, use the CSS `color` property.\n *\n * To increase spacing around the spinner, use the CSS `height` property on the\n * spinner's **container**. Setting the `display` attribute to `block` will set\n * a height of `100px` by default.\n *\n * To apply a custom size to the loading indicator, set the `--size` and\n * `--thickness` CSS custom properties on the loading indicator container.\n *\n * If you *really* want to change how this looks as part of your custom theme,\n * you can override the `border-radius` and `border` then set either a\n * background image, or use `content: \"\\<glyph>\"` (e.g. `content: \"\\f1ce\"`)\n * and `font-family: 'Font Awesome 5 Free'` to set an FA icon if you'd rather.\n *\n * ### Attrs\n *\n * - `containerClassName` Class name(s) to apply to the indicator's parent\n * - `className` Class name(s) to apply to the indicator itself\n * - `display` Determines how the spinner should be displayed (`inline`, `block` (default) or `unset`)\n * - `size` Size of the loading indicator (`small`, `medium` or `large`)\n * - `containerAttrs` Optional attrs to be applied to the container DOM element\n *\n * All other attrs will be assigned as attributes on the DOM element.\n */\nexport default class LoadingIndicator extends Component {\n view() {\n const {\n display = 'block',\n size = 'medium',\n containerClassName,\n className,\n ...attrs\n } = this.attrs;\n const completeClassName = classList('LoadingIndicator', className);\n const completeContainerClassName = classList('LoadingIndicator-container', display !== 'unset' && \"LoadingIndicator-container--\".concat(display), size && \"LoadingIndicator-container--\".concat(size), containerClassName);\n return m(\"div\", Object.assign({\n \"aria-label\": app.translator.trans('core.lib.loading_indicator.accessible_label'),\n role: \"status\"\n }, attrs.containerAttrs, {\n \"data-size\": size,\n className: completeContainerClassName\n }), m(\"div\", Object.assign({\n \"aria-hidden\": \"true\",\n className: completeClassName\n }, attrs)));\n }\n}\nflarum.reg.add('core', 'common/components/LoadingIndicator', LoadingIndicator);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../common/app';\nimport Component from '../Component';\nimport Alert from './Alert';\nimport Button from './Button';\nimport classList from '../utils/classList';\n/**\n * The `Modal` component displays a modal dialog, wrapped in a form. Subclasses\n * should implement the `className`, `title`, and `content` methods.\n */\nexport default class Modal extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", false);\n /**\n * Attributes for an alert component to show below the header.\n */\n _defineProperty(this, \"alertAttrs\", null);\n }\n static get dismissibleOptions() {\n return {\n viaCloseButton: this.isDismissibleViaCloseButton,\n viaEscKey: this.isDismissibleViaEscKey,\n viaBackdropClick: this.isDismissibleViaBackdropClick\n };\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.attrs.animateShow(() => this.onready());\n }\n onbeforeremove(vnode) {\n super.onbeforeremove(vnode);\n\n // If the global modal state currently contains a modal,\n // we've just opened up a new one, and accordingly,\n // we don't need to show a hide animation.\n if (!this.attrs.state.modal) {\n // Here, we ensure that the animation has time to complete.\n // See https://mithril.js.org/lifecycle-methods.html#onbeforeremove\n // Bootstrap's Modal.TRANSITION_DURATION is 300 ms.\n return new Promise(resolve => setTimeout(resolve, 300));\n }\n }\n view() {\n if (this.alertAttrs) {\n this.alertAttrs.dismissible = false;\n }\n return m(\"div\", {\n className: classList('Modal modal-dialog fade', this.className())\n }, m(\"div\", {\n className: \"Modal-content\"\n }, this.dismissibleOptions.viaCloseButton && m(\"div\", {\n className: \"Modal-close App-backControl\"\n }, m(Button, {\n icon: \"fas fa-times\",\n onclick: () => this.hide(),\n className: \"Button Button--icon Button--link\",\n \"aria-label\": app.translator.trans('core.lib.modal.close')\n })), this.wrapper(this.inner())));\n }\n wrapper(children) {\n return m('[', null, children);\n }\n inner() {\n return m('[', null, m(\"div\", {\n className: \"Modal-header\"\n }, m(\"h3\", {\n className: \"App-titleControl App-titleControl--text\"\n }, this.title())), !!this.alertAttrs && m(\"div\", {\n className: \"Modal-alert\"\n }, m(Alert, this.alertAttrs)), this.content());\n }\n\n /**\n * Get the class name to apply to the modal.\n */\n\n /**\n * Get the title of the modal dialog.\n */\n\n /**\n * Get the content of the modal.\n */\n\n /**\n * Callback executed when the modal is shown and ready to be interacted with.\n */\n onready() {\n // ...\n }\n\n /**\n * Hides the modal.\n */\n hide() {\n this.attrs.animateHide();\n }\n\n /**\n * Sets `loading` to false and triggers a redraw.\n */\n loaded() {\n this.loading = false;\n m.redraw();\n }\n get dismissibleOptions() {\n return this.constructor.dismissibleOptions;\n }\n}\n/**\n * Can the model be dismissed with a close button (X)?\n *\n * If `false`, no close button is shown.\n */\n_defineProperty(Modal, \"isDismissibleViaCloseButton\", true);\n/**\n * Can the modal be dismissed by pressing the Esc key on a keyboard?\n */\n_defineProperty(Modal, \"isDismissibleViaEscKey\", true);\n/**\n * Can the modal be dismissed via a click on the backdrop.\n */\n_defineProperty(Modal, \"isDismissibleViaBackdropClick\", true);\nflarum.reg.add('core', 'common/components/Modal', Modal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from '../Component';\nimport { createFocusTrap } from '../utils/focusTrap';\nimport { disableBodyScroll, clearAllBodyScrollLocks } from 'body-scroll-lock';\nimport LoadingIndicator from './LoadingIndicator';\n/**\n * The `ModalManager` component manages one or more modal dialogs. Stacking modals\n * is supported. Multiple dialogs can be shown at once; loading a new component\n * into the ModalManager will overwrite the previous one.\n */\nexport default class ModalManager extends Component {\n constructor() {\n super(...arguments);\n // Current focus trap\n _defineProperty(this, \"focusTrap\", void 0);\n // Keep track of the last set focus trap\n _defineProperty(this, \"lastSetFocusTrap\", void 0);\n // Keep track if there's an modal closing\n _defineProperty(this, \"modalClosing\", false);\n _defineProperty(this, \"keyUpListener\", null);\n }\n view(vnode) {\n return m('[', null, this.attrs.state.modalList.map((modal, i) => {\n const Tag = modal == null ? void 0 : modal.componentClass;\n return m(\"div\", {\n key: modal.key,\n className: \"ModalManager modal\",\n \"data-modal-key\": modal.key,\n \"data-modal-number\": i,\n role: \"dialog\",\n \"aria-modal\": \"true\",\n style: !window.testing && {\n '--modal-number': i\n },\n \"aria-hidden\": this.attrs.state.modal !== modal && 'true'\n }, !!Tag && [m(Tag, Object.assign({\n key: modal.key\n }, modal.attrs, {\n animateShow: this.animateShow.bind(this),\n animateHide: this.animateHide.bind(this),\n state: this.attrs.state\n })), /* This backdrop is invisible and used for outside clicks to close the modal. */\n m(\"div\", {\n key: modal.key,\n className: \"ModalManager-invisibleBackdrop\",\n onclick: this.handlePossibleBackdropClick.bind(this)\n })]);\n }), (this.attrs.state.backdropShown || this.attrs.state.loadingModal) && m(\"div\", {\n className: \"Modal-backdrop backdrop\",\n ontransitionend: this.onBackdropTransitionEnd.bind(this),\n \"data-showing\": !!this.attrs.state.modalList.length || this.attrs.state.loadingModal,\n style: !window.testing && {\n '--modal-count': this.attrs.state.modalList.length + Number(this.attrs.state.loadingModal)\n }\n }, this.attrs.state.loadingModal && m(LoadingIndicator, null)));\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.keyUpListener = this.handleEscPress.bind(this);\n document.body.addEventListener('keyup', this.keyUpListener);\n }\n onbeforeremove(vnode) {\n super.onbeforeremove(vnode);\n this.keyUpListener && document.body.removeEventListener('keyup', this.keyUpListener);\n this.keyUpListener = null;\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n requestAnimationFrame(() => {\n try {\n var _document$getElementB2;\n // Main content should gain or lose `aria-hidden` when modals are shown/removed\n // See: http://web-accessibility.carnegiemuseums.org/code/dialogs/\n\n if (!this.attrs.state.isModalOpen()) {\n var _document$getElementB, _deactivate, _ref;\n (_document$getElementB = document.getElementById('app')) == null || _document$getElementB.setAttribute('aria-hidden', 'false');\n (_deactivate = (_ref = this.focusTrap).deactivate) == null || _deactivate.call(_ref);\n clearAllBodyScrollLocks();\n return;\n }\n (_document$getElementB2 = document.getElementById('app')) == null || _document$getElementB2.setAttribute('aria-hidden', 'true');\n\n // Get current dialog key\n const dialogKey = this.attrs.state.modal.key;\n\n // Deactivate focus trap if there's a new dialog/closed\n if (this.focusTrap && this.lastSetFocusTrap !== dialogKey) {\n var _deactivate2, _ref2;\n (_deactivate2 = (_ref2 = this.focusTrap).deactivate) == null || _deactivate2.call(_ref2);\n clearAllBodyScrollLocks();\n }\n\n // Activate focus trap if there's a new dialog which is not trapped yet\n if (this.activeDialogElement && this.lastSetFocusTrap !== dialogKey) {\n var _activate, _ref3;\n this.focusTrap = createFocusTrap(this.activeDialogElement, {\n allowOutsideClick: true\n });\n (_activate = (_ref3 = this.focusTrap).activate) == null || _activate.call(_ref3);\n if (this.activeDialogManagerElement) {\n disableBodyScroll(this.activeDialogManagerElement, {\n reserveScrollBarGap: true\n });\n }\n }\n\n // Update key of current opened modal\n this.lastSetFocusTrap = dialogKey;\n } catch {\n // We can expect errors to occur here due to the nature of mithril rendering\n }\n });\n }\n\n /**\n * Get current active dialog\n */\n get activeDialogElement() {\n var _this$attrs$state$mod;\n return document.body.querySelector(\".ModalManager[data-modal-key=\\\"\".concat((_this$attrs$state$mod = this.attrs.state.modal) == null ? void 0 : _this$attrs$state$mod.key, \"\\\"] .Modal\"));\n }\n\n /**\n * Get current active dialog\n */\n get activeDialogManagerElement() {\n var _this$attrs$state$mod2;\n return document.body.querySelector(\".ModalManager[data-modal-key=\\\"\".concat((_this$attrs$state$mod2 = this.attrs.state.modal) == null ? void 0 : _this$attrs$state$mod2.key, \"\\\"]\"));\n }\n animateShow(readyCallback) {\n var _this$activeDialogEle;\n if (readyCallback === void 0) {\n readyCallback = () => {};\n }\n if (!this.attrs.state.modal) return;\n (_this$activeDialogEle = this.activeDialogElement) == null || _this$activeDialogEle.addEventListener('transitionend', () => {\n readyCallback();\n }, {\n once: true\n });\n requestAnimationFrame(() => {\n var _this$activeDialogEle2;\n (_this$activeDialogEle2 = this.activeDialogElement) == null || _this$activeDialogEle2.classList.add('in');\n });\n }\n animateHide(closedCallback) {\n var _this$activeDialogEle3, _this$activeDialogEle4, _this$activeDialogEle5;\n if (closedCallback === void 0) {\n closedCallback = () => {};\n }\n if (this.modalClosing) return;\n this.modalClosing = true;\n const afterModalClosedCallback = () => {\n this.modalClosing = false;\n\n // Close the dialog\n this.attrs.state.close();\n closedCallback();\n };\n (_this$activeDialogEle3 = this.activeDialogElement) == null || _this$activeDialogEle3.addEventListener('transitionend', afterModalClosedCallback, {\n once: true\n });\n (_this$activeDialogEle4 = this.activeDialogElement) == null || _this$activeDialogEle4.classList.remove('in');\n (_this$activeDialogEle5 = this.activeDialogElement) == null || _this$activeDialogEle5.classList.add('out');\n }\n handleEscPress(e) {\n if (!this.attrs.state.modal) return;\n const dismissibleState = this.attrs.state.modal.componentClass.dismissibleOptions;\n\n // Close the dialog if the escape key was pressed\n // Check if closing via escape key is enabled\n if (e.key === 'Escape' && dismissibleState.viaEscKey) {\n e.preventDefault();\n this.animateHide();\n }\n }\n handlePossibleBackdropClick(e) {\n if (!this.attrs.state.modal || !this.attrs.state.modal.componentClass.dismissibleOptions.viaBackdropClick) return;\n this.animateHide();\n }\n onBackdropTransitionEnd(e) {\n if (e.propertyName === 'opacity') {\n const backdrop = e.currentTarget;\n if (backdrop.getAttribute('data-showing') === null) {\n // Backdrop is fading out\n this.attrs.state.backdropShown = false;\n m.redraw();\n }\n }\n }\n}\nflarum.reg.add('core', 'common/components/ModalManager', ModalManager);","import app from '../../common/app';\nimport Component from '../Component';\nimport Button from './Button';\nimport LinkButton from './LinkButton';\nimport classList from '../utils/classList';\n\n/**\n * The `Navigation` component displays a set of navigation buttons. Typically\n * this is just a back button which pops the app's History. If the user is on\n * the root page and there is no history to pop, then in some instances it may\n * show a button that toggles the app's drawer.\n *\n * If the app has a pane, it will also include a 'pin' button which toggles the\n * pinned state of the pane.\n *\n * Accepts the following attrs:\n *\n * - `className` The name of a class to set on the root element.\n * - `drawer` Whether or not to show a button to toggle the app's drawer if\n * there is no more history to pop.\n */\nexport default class Navigation extends Component {\n view() {\n const {\n history,\n pane\n } = app;\n return m(\"div\", {\n className: classList('Navigation ButtonGroup', this.attrs.className),\n onmouseenter: pane && pane.show.bind(pane),\n onmouseleave: pane && pane.onmouseleave.bind(pane)\n }, history != null && history.canGoBack() ? [this.getBackButton(), this.getPaneButton()] : this.getDrawerButton());\n }\n\n /**\n * Get the back button.\n */\n getBackButton() {\n const {\n history\n } = app;\n const previous = history == null ? void 0 : history.getPrevious();\n return m(LinkButton, {\n className: \"Button Navigation-back Button--icon\",\n href: history == null ? void 0 : history.backUrl(),\n icon: \"fas fa-chevron-left\",\n \"aria-label\": previous == null ? void 0 : previous.title,\n onclick: e => {\n if (e.shiftKey || e.ctrlKey || e.metaKey || e.which === 2) return;\n e.preventDefault();\n history == null || history.back();\n }\n });\n }\n\n /**\n * Get the pane pinned toggle button.\n */\n getPaneButton() {\n const {\n pane\n } = app;\n if (!pane || !pane.active) return null;\n return m(Button, {\n className: classList('Button Button--icon Navigation-pin', {\n active: pane.pinned\n }),\n onclick: pane.togglePinned.bind(pane),\n icon: \"fas fa-thumbtack\"\n });\n }\n\n /**\n * Get the drawer toggle button.\n */\n getDrawerButton() {\n if (!this.attrs.drawer) return null;\n const {\n drawer\n } = app;\n const user = app.session.user;\n return m(Button, {\n className: classList('Button Button--icon Navigation-drawer', {\n new: user == null ? void 0 : user.newNotificationCount()\n }),\n onclick: e => {\n e.stopPropagation();\n drawer.show();\n },\n icon: \"fas fa-bars\",\n \"aria-label\": app.translator.trans('core.lib.nav.drawer_button')\n });\n }\n}\nflarum.reg.add('core', 'common/components/Navigation', Navigation);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport Component from '../Component';\nimport PageState from '../states/PageState';\n/**\n * The `Page` component\n *\n * @abstract\n */\nexport default class Page extends Component {\n constructor() {\n super(...arguments);\n /**\n * A class name to apply to the body while the route is active.\n */\n _defineProperty(this, \"bodyClass\", '');\n /**\n * Whether we should scroll to the top of the page when its rendered.\n */\n _defineProperty(this, \"scrollTopOnCreate\", true);\n /**\n * Whether the browser should restore scroll state on refreshes.\n */\n _defineProperty(this, \"useBrowserScrollRestoration\", true);\n }\n oninit(vnode) {\n super.oninit(vnode);\n app.previous = app.current;\n app.current = new PageState(this.constructor, {\n routeName: this.attrs.routeName\n });\n app.drawer.hide();\n app.modal.close();\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n if (this.bodyClass) {\n $('#app').addClass(this.bodyClass);\n }\n if (this.scrollTopOnCreate) {\n $(window).scrollTop(0);\n }\n if ('scrollRestoration' in history) {\n history.scrollRestoration = this.useBrowserScrollRestoration ? 'auto' : 'manual';\n }\n }\n onremove(vnode) {\n super.onremove(vnode);\n if (this.bodyClass) {\n $('#app').removeClass(this.bodyClass);\n }\n }\n}\nflarum.reg.add('core', 'common/components/Page', Page);","import Modal from './Modal';\nexport default class RequestErrorModal extends Modal {\n className() {\n return 'RequestErrorModal Modal--large';\n }\n title() {\n return !!this.attrs.error.xhr && \"\".concat(this.attrs.error.xhr.status, \" \").concat(this.attrs.error.xhr.statusText);\n }\n content() {\n var _responseText;\n const {\n error,\n formattedError\n } = this.attrs;\n let responseText;\n\n // If the error is already formatted, just add line endings;\n // else try to parse it as JSON and stringify it with indentation\n if (formattedError.length) {\n responseText = formattedError.join('\\n\\n');\n } else if (error.response) {\n responseText = JSON.stringify(error.response, null, 2);\n } else {\n responseText = error.responseText;\n }\n if ((_responseText = responseText) != null && _responseText.includes('<script> Sfdump = window.Sfdump')) {\n responseText = m(\"iframe\", {\n srcdoc: responseText,\n className: \"RequestErrorModal-iframe\",\n onload: e => {\n var _iframe$contentWindow;\n const iframe = e.target;\n iframe.style.height = (((_iframe$contentWindow = iframe.contentWindow) == null ? void 0 : _iframe$contentWindow.document.body.offsetHeight) || 0) + 50 + 'px';\n }\n });\n }\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(\"pre\", null, this.attrs.error.options.method, \" \", this.attrs.error.options.url, m(\"br\", null), m(\"br\", null), responseText));\n }\n}\nflarum.reg.add('core', 'common/components/RequestErrorModal', RequestErrorModal);","import Dropdown from './Dropdown';\nimport classList from '../utils/classList';\nimport Icon from './Icon';\n\n/**\n * Determines via a vnode is currently \"active\".\n * Due to changes in Mithril 2, attrs will not be instantiated until AFTER view()\n * is initially called on the parent component, so we can not always depend on the\n * active attr to determine which element should be displayed as the \"active child\".\n *\n * This is a temporary patch, and as so, is not exported / placed in utils.\n */\nfunction isActive(vnode) {\n if (!vnode || typeof vnode !== 'object' || vnode instanceof Array) return false;\n const tag = vnode.tag;\n\n // Allow non-selectable dividers/headers to be added.\n if (typeof tag === 'string' && tag !== 'a' && tag !== 'button') return false;\n if ((typeof tag === 'object' || typeof tag === 'function') && 'initAttrs' in tag) {\n tag.initAttrs(vnode.attrs);\n }\n return (typeof tag === 'object' || typeof tag === 'function') && 'isActive' in tag ? tag.isActive(vnode.attrs) : vnode.attrs.active;\n}\n/**\n * The `SelectDropdown` component is the same as a `Dropdown`, except the toggle\n * button's label is set as the label of the first child which has a truthy\n * `active` prop.\n */\nexport default class SelectDropdown extends Dropdown {\n static initAttrs(attrs) {\n var _attrs$caretIcon;\n (_attrs$caretIcon = attrs.caretIcon) != null ? _attrs$caretIcon : attrs.caretIcon = 'fas fa-sort';\n super.initAttrs(attrs);\n attrs.className = classList(attrs.className, 'Dropdown--select');\n }\n getButtonContent(children) {\n const activeChild = children.find(isActive);\n let label = activeChild && typeof activeChild === 'object' && 'children' in activeChild && activeChild.children || this.attrs.defaultLabel;\n return [m(\"span\", {\n className: \"Button-label\"\n }, label), this.attrs.caretIcon ? m(Icon, {\n name: this.attrs.caretIcon,\n className: \"Button-caret\"\n }) : null];\n }\n}\nflarum.reg.add('core', 'common/components/SelectDropdown', SelectDropdown);","import Dropdown from './Dropdown';\nimport Button from './Button';\nimport classList from '../utils/classList';\nimport Tooltip from './Tooltip';\nimport Icon from './Icon';\n/**\n * The `SplitDropdown` component is similar to `Dropdown`, but the first child\n * is displayed as its own button prior to the toggle button. Unless a custom\n * `mainAction` is provided as the main control.\n */\nexport default class SplitDropdown extends Dropdown {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n attrs.className = classList(attrs.className, 'Dropdown--split', {\n 'Dropdown--withMainAction': attrs.mainAction\n });\n attrs.menuClassName = classList(attrs.menuClassName, 'Dropdown-menu--right');\n }\n getButton(children) {\n // Make a copy of the attrs of the first child component. We will assign\n // these attrs to a new button, so that it has exactly the same behaviour as\n // the first child.\n const firstChild = this.attrs.mainAction || this.getFirstChild(children);\n const buttonAttrs = Object.assign({}, firstChild == null ? void 0 : firstChild.attrs);\n buttonAttrs.className = classList(buttonAttrs.className, 'SplitDropdown-button Button', this.attrs.buttonClassName);\n let button = m(Button, buttonAttrs, firstChild.children);\n if (this.attrs.tooltip) {\n button = m(Tooltip, {\n text: this.attrs.tooltip,\n position: \"bottom\"\n }, button);\n }\n return m('[', null, button, m(\"button\", {\n className: 'Dropdown-toggle Button Button--icon ' + this.attrs.buttonClassName,\n \"aria-haspopup\": \"menu\",\n \"aria-label\": this.attrs.accessibleToggleLabel,\n \"data-toggle\": \"dropdown\"\n }, this.attrs.icon ? m(Icon, {\n name: this.attrs.icon,\n className: \"Button-icon\"\n }) : null, m(Icon, {\n name: \"fas fa-caret-down\",\n className: \"Button-caret\"\n })));\n }\n\n /**\n * Get the first child. If the first child is an array, the first item in that\n * array will be returned.\n */\n getFirstChild(children) {\n let firstChild = children;\n while (firstChild instanceof Array) firstChild = firstChild[0];\n return firstChild;\n }\n}\nflarum.reg.add('core', 'common/components/SplitDropdown', SplitDropdown);","import classList from '../utils/classList';\nimport Checkbox from './Checkbox';\n\n/**\n * The `Switch` component is a `Checkbox`, but with a switch display instead of\n * a tick/cross one.\n */\nexport default class Switch extends Checkbox {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n attrs.className = classList(attrs.className, 'Checkbox--switch');\n }\n getDisplay() {\n return !!this.attrs.loading && super.getDisplay();\n }\n}\nflarum.reg.add('core', 'common/components/Switch', Switch);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from '../../common/Component';\nimport classList from '../../common/utils/classList';\nexport let ColorScheme = /*#__PURE__*/function (ColorScheme) {\n ColorScheme[\"Auto\"] = \"auto\";\n ColorScheme[\"Light\"] = \"light\";\n ColorScheme[\"Dark\"] = \"dark\";\n ColorScheme[\"LightHighContrast\"] = \"light-hc\";\n ColorScheme[\"DarkHighContrast\"] = \"dark-hc\";\n return ColorScheme;\n}({});\nexport default class ThemeMode extends Component {\n view(vnode) {\n const {\n mode,\n selected,\n className,\n alternate,\n label,\n ...attrs\n } = vnode.attrs;\n return m(\"label\", Object.assign({\n className: classList('ThemeMode', className, \"ThemeMode--\".concat(mode), {\n 'ThemeMode--active': selected,\n 'ThemeMode--switch': alternate\n })\n }, attrs), m(\"div\", {\n className: \"ThemeMode-container\",\n \"data-theme\": mode === 'auto' ? 'light' : mode,\n \"data-colored-header\": document.documentElement.getAttribute('data-colored-header')\n }, m(\"div\", {\n className: \"ThemeMode-preview\"\n }, m(\"div\", {\n className: \"ThemeMode-header\"\n }, m(\"div\", {\n className: \"ThemeMode-header-text\"\n }), m(\"div\", {\n className: \"ThemeMode-header-icon\"\n }), m(\"div\", {\n className: \"ThemeMode-header-icon\"\n })), m(\"div\", {\n className: \"ThemeMode-hero\"\n }, m(\"div\", {\n className: \"ThemeMode-hero-title\"\n }), m(\"div\", {\n className: \"ThemeMode-hero-desc\"\n })), m(\"div\", {\n className: \"ThemeMode-main\"\n }, m(\"div\", {\n className: \"ThemeMode-sidebar\"\n }, m(\"div\", {\n className: \"ThemeMode-startDiscussion\"\n }, m(\"div\", {\n className: \"ThemeMode-startDiscussion-text\"\n })), m(\"div\", {\n className: \"ThemeMode-items\"\n }, Array.from({\n length: 3\n }).map((_, i) => m(\"div\", {\n className: \"ThemeMode-sidebar-line\",\n key: i\n }, m(\"div\", {\n className: \"ThemeMode-sidebar-icon\"\n }), m(\"div\", {\n className: \"ThemeMode-sidebar-text\"\n }))))), m(\"div\", {\n className: \"ThemeMode-content\"\n }, m(\"div\", {\n className: \"ThemeMode-toolbar\"\n }, m(\"div\", {\n className: \"ThemeMode-button\"\n }), m(\"div\", {\n className: \"ThemeMode-button\"\n })), m(\"div\", {\n className: \"ThemeMode-items\"\n }, Array.from({\n length: 3\n }).map((_, i) => m(\"div\", {\n className: \"ThemeMode-content-item\",\n key: i\n }, m(\"div\", {\n className: \"ThemeMode-content-item-author\"\n }), m(\"div\", {\n className: \"ThemeMode-content-item-meta\"\n }, m(\"div\", {\n className: \"ThemeMode-content-item-title\"\n }), m(\"div\", {\n className: \"ThemeMode-content-item-excerpt\"\n })))))))), mode === 'auto' ? m(ThemeMode, Object.assign({\n mode: mode === 'auto' ? 'dark' : null,\n alternate: true,\n selected: selected\n }, attrs)) : null), !alternate ? m(\"div\", {\n className: \"ThemeMode-legend\"\n }, label) : null);\n }\n}\n_defineProperty(ThemeMode, \"colorSchemes\", [{\n id: ColorScheme.Auto\n}, {\n id: ColorScheme.Light\n}, {\n id: ColorScheme.Dark\n}, {\n id: ColorScheme.LightHighContrast\n}, {\n id: ColorScheme.DarkHighContrast\n}]);\nflarum.reg.add('core', 'common/components/ThemeMode', ThemeMode);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from '../Component';\nimport classList from '../utils/classList';\nimport extractText from '../utils/extractText';\n/**\n * The `Tooltip` component is used to create a tooltip for an element. It\n * requires a single child element to be passed to it. Passing multiple\n * children or fragments will throw an error.\n *\n * You should use this for any tooltips you create to allow for backwards\n * compatibility when we switch to another tooltip library instead of\n * Bootstrap tooltips.\n *\n * If you need to pass multiple children, surround them with another element,\n * such as a `<span>` or `<div>`.\n *\n * **Note:** this component will overwrite the `title` attribute of the first\n * child you pass to it, as this is how the current tooltip system works in\n * Flarum. This shouldn't be an issue if you're using this component correctly.\n *\n * @example <caption>Basic usage</caption>\n * <Tooltip text=\"You wish!\">\n * <Button>\n * Click for free money!\n * </Button>\n * </Tooltip>\n *\n * @example <caption>Use of `position` and `showOnFocus` attrs</caption>\n * <Tooltip text=\"Woah! That's cool!\" position=\"bottom\" showOnFocus>\n * <span>3 replies</span>\n * </Tooltip>\n *\n * @example <caption>Incorrect usage</caption>\n * // This is wrong! Surround the children with a <span> or similar.\n * <Tooltip text=\"This won't work\">\n * Click\n * <a href=\"/\">here</a>\n * </Tooltip>\n */\nexport default class Tooltip extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"firstChild\", null);\n _defineProperty(this, \"childDomNode\", null);\n _defineProperty(this, \"oldText\", '');\n _defineProperty(this, \"oldVisibility\", void 0);\n _defineProperty(this, \"shouldRecreateTooltip\", false);\n _defineProperty(this, \"shouldChangeTooltipVisibility\", false);\n }\n view(vnode) {\n /**\n * We know this will be a ChildArray and not a primitive as this\n * vnode is a component, not a text or trusted HTML vnode.\n */\n const children = vnode.children;\n\n // We remove these to get the remaining attrs to pass to the DOM element\n const {\n text,\n tooltipVisible,\n showOnFocus = true,\n position = 'top',\n ignoreTitleWarning = false,\n html = false,\n delay = 0,\n ...attrs\n } = this.attrs;\n if (this.attrs.title && !ignoreTitleWarning) {\n console.warn('`title` attribute was passed to Tooltip component. Was this intentional? Tooltip content should be passed to the `text` attr instead.');\n }\n const realText = this.getRealText();\n\n // We need to recreate the tooltip if the text has changed\n if (realText !== this.oldText) {\n this.oldText = realText;\n this.shouldRecreateTooltip = true;\n }\n if (tooltipVisible !== this.oldVisibility) {\n this.oldVisibility = this.attrs.tooltipVisible;\n this.shouldChangeTooltipVisibility = true;\n }\n\n // We'll try our best to detect any issues created by devs before they cause any weird effects.\n // Throwing an error will prevent the forum rendering, but will be better at alerting devs to\n // an issue.\n\n if (typeof children === 'undefined') {\n throw new Error(\"Tooltip component was provided with no direct child DOM element. Tooltips must contain a single direct DOM node to attach to.\");\n }\n if (children.length !== 1) {\n throw new Error(\"Tooltip component was either passed more than one or no child node.\\n\\nPlease wrap multiple children in another element, such as a <div> or <span>.\");\n }\n const firstChild = children[0];\n if (typeof firstChild !== 'object' || Array.isArray(firstChild) || firstChild === null) {\n throw new Error(\"Tooltip component was provided with no direct child DOM element. Tooltips must contain a single direct DOM node to attach to.\");\n }\n if (typeof firstChild.tag === 'string' && ['#', '[', '<'].includes(firstChild.tag)) {\n throw new Error(\"Tooltip component with provided with a vnode with tag \\\"\".concat(firstChild.tag, \"\\\". This is not a DOM element, so is not a valid child element. Please wrap this vnode in another element, such as a <div> or <span>.\"));\n }\n this.firstChild = firstChild;\n return children;\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.checkDomNodeChanged();\n this.recreateTooltip();\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n this.checkDomNodeChanged();\n this.recreateTooltip();\n }\n recreateTooltip() {\n if (this.shouldRecreateTooltip && this.childDomNode !== null) {\n $(this.childDomNode).tooltip('destroy',\n // @ts-expect-error We don't want this arg to be part of the public API. It only exists to prevent deprecation warnings when using `$.tooltip` in this component.\n 'DANGEROUS_tooltip_jquery_fn_deprecation_exempt');\n this.createTooltip();\n this.shouldRecreateTooltip = false;\n }\n if (this.shouldChangeTooltipVisibility) {\n this.shouldChangeTooltipVisibility = false;\n this.updateVisibility();\n }\n }\n updateVisibility() {\n if (this.childDomNode === null) return;\n if (this.attrs.tooltipVisible === true) {\n $(this.childDomNode).tooltip('show',\n // @ts-expect-error We don't want this arg to be part of the public API. It only exists to prevent deprecation warnings when using `$.tooltip` in this component.\n 'DANGEROUS_tooltip_jquery_fn_deprecation_exempt');\n } else if (this.attrs.tooltipVisible === false) {\n $(this.childDomNode).tooltip('hide',\n // @ts-expect-error We don't want this arg to be part of the public API. It only exists to prevent deprecation warnings when using `$.tooltip` in this component.\n 'DANGEROUS_tooltip_jquery_fn_deprecation_exempt');\n }\n }\n createTooltip() {\n if (this.childDomNode === null) return;\n const {\n showOnFocus = true,\n position = 'top',\n delay,\n // This will have no effect when switching to CSS tooltips\n html = false,\n tooltipVisible,\n text\n } = this.attrs;\n\n // Fancy \"hack\" to assemble the trigger string\n const trigger = typeof tooltipVisible === 'boolean' ? 'manual' : classList('hover', [showOnFocus && 'focus']);\n const realText = this.getRealText();\n this.childDomNode.setAttribute('title', realText);\n this.childDomNode.setAttribute('aria-label', realText);\n\n // https://getbootstrap.com/docs/3.3/javascript/#tooltips-options\n $(this.childDomNode).tooltip({\n html,\n delay,\n placement: position,\n trigger\n },\n // @ts-expect-error We don't want this arg to be part of the public API. It only exists to prevent deprecation warnings when using `$.tooltip` in this component.\n 'DANGEROUS_tooltip_jquery_fn_deprecation_exempt');\n }\n getRealText() {\n const {\n text\n } = this.attrs;\n return Array.isArray(text) ? extractText(text) : text;\n }\n\n /**\n * Checks if the tooltip DOM node has changed.\n *\n * If it has, it updates `this.childDomNode` to the new node, and sets\n * `shouldRecreateTooltip` to `true`.\n */\n checkDomNodeChanged() {\n const domNode = this.firstChild.dom;\n if (domNode && !domNode.isSameNode(this.childDomNode)) {\n this.childDomNode = domNode;\n this.shouldRecreateTooltip = true;\n }\n }\n}\nflarum.reg.add('core', 'common/components/Tooltip', Tooltip);","import Component from '../../common/Component';\nimport Link from '../../common/components/Link';\nimport app from '../app';\nimport Avatar from '../../common/components/Avatar';\nimport listItems from '../../common/helpers/listItems';\nimport username from '../../common/helpers/username';\nimport highlight from '../../common/helpers/highlight';\nimport classList from '../../common/utils/classList';\nexport default class UserSearchResult extends Component {\n view(vnode) {\n const user = this.attrs.user;\n return m(\"li\", {\n className: classList('UserSearchResult', this.attrs.className),\n \"data-index\": 'users' + user.id(),\n \"data-id\": user.id(),\n onclick: this.attrs.onclick\n }, this.attrs.onclick ? m(\"button\", {\n type: \"button\"\n }, this.content(vnode)) : m(Link, {\n href: 'user' in app.route ? app.route.user(user) : app.forum.attribute('baseUrl') + '/u/' + user.username()\n }, this.content(vnode)));\n }\n content(vnode) {\n const user = this.attrs.user;\n const query = this.attrs.query;\n const name = username(user, name => highlight(name, query));\n return m('[', null, m(Avatar, {\n user: user\n }), m(\"div\", {\n className: \"UserSearchResult-name\"\n }, name, m(\"div\", {\n className: \"badges badges--packed\"\n }, listItems(user.badges().toArray()))), vnode.children);\n }\n}\nflarum.reg.add('core', 'common/components/UserSearchResult', UserSearchResult);","/**\n * Extend an object's method by running its output through a mutating callback\n * every time it is called.\n *\n * The callback accepts the method's return value and should perform any\n * mutations directly on this value. For this reason, this function will not be\n * effective on methods which return scalar values (numbers, strings, booleans).\n *\n * Care should be taken to extend the correct object – in most cases, a class'\n * prototype will be the desired target of extension, not the class itself.\n *\n * @example <caption>Example usage of extending one method.</caption>\n * extend(Discussion.prototype, 'badges', function(badges) {\n * // do something with `badges`\n * });\n *\n * @example <caption>Example usage of extending multiple methods.</caption>\n * extend(IndexPage.prototype, ['oncreate', 'onupdate'], function(vnode) {\n * // something that needs to be run on creation and update\n * });\n *\n * @param object The object that owns the method\n * @param methods The name or names of the method(s) to extend\n * @param callback A callback which mutates the method's output\n */\nexport function extend(object, methods, callback) {\n // A lazy loaded module, only apply the function after the module is loaded.\n if (typeof object === 'string') {\n let [namespace, id] = flarum.reg.namespaceAndIdFromPath(object);\n return flarum.reg.onLoad(namespace, id, module => {\n extend(module.prototype, methods, callback);\n });\n }\n const allMethods = Array.isArray(methods) ? methods : [methods];\n allMethods.forEach(method => {\n const original = object[method];\n object[method] = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n const value = original ? original.apply(this, args) : undefined;\n callback.apply(this, [value, ...args]);\n return value;\n };\n Object.assign(object[method], original);\n });\n}\n\n/**\n * Override an object's method by replacing it with a new function, so that the\n * new function will be run every time the object's method is called.\n *\n * The replacement function accepts the original method as its first argument,\n * which is like a call to `super`. Any arguments passed to the original method\n * are also passed to the replacement.\n *\n * Care should be taken to extend the correct object – in most cases, a class'\n * prototype will be the desired target of extension, not the class itself.\n *\n * @example <caption>Example usage of overriding one method.</caption>\n * override(Discussion.prototype, 'badges', function(original) {\n * const badges = original();\n * // do something with badges\n * return badges;\n * });\n *\n * @example <caption>Example usage of overriding multiple methods.</caption>\n * extend(Discussion.prototype, ['oncreate', 'onupdate'], function(original, vnode) {\n * // something that needs to be run on creation and update\n * });\n *\n * @param object The object that owns the method\n * @param methods The name or names of the method(s) to override\n * @param newMethod The method to replace it with\n */\nexport function override(object, methods, newMethod) {\n // A lazy loaded module, only apply the function after the module is loaded.\n if (typeof object === 'string') {\n let [namespace, id] = flarum.reg.namespaceAndIdFromPath(object);\n return flarum.reg.onLoad(namespace, id, module => {\n override(module.prototype, methods, newMethod);\n });\n }\n const allMethods = Array.isArray(methods) ? methods : [methods];\n allMethods.forEach(method => {\n const original = object[method];\n object[method] = function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return newMethod.apply(this, [original == null ? void 0 : original.bind(this), ...args]);\n };\n Object.assign(object[method], original);\n });\n}\nflarum.reg.add('core', 'common/extend', { extend: extend,override: override, });","import app from '../app';\n\n/**\n * Fire a Flarum error which is shown in the JS console for everyone and in an alert for the admin.\n *\n * @param userTitle: a user friendly title of the error, should be localized.\n * @param consoleTitle: an error title that goes in the console, doesn't have to be localized.\n * @param error: the error.\n */\nexport default function fireApplicationError(userTitle, consoleTitle, error) {\n var _app$session;\n console.group(\"%c\".concat(consoleTitle), 'background-color: #d83e3e; color: #ffffff; font-weight: bold;');\n console.error(error);\n console.groupEnd();\n if ((_app$session = app.session) != null && (_app$session = _app$session.user) != null && _app$session.isAdmin()) {\n app.alerts.show({\n type: 'error'\n }, \"\".concat(userTitle));\n }\n}\nflarum.reg.add('core', 'common/helpers/fireApplicationError', fireApplicationError);","import dayjs from 'dayjs';\n/**\n * The `fullTime` helper displays a formatted time string wrapped in a <time>\n * tag.\n */\nexport default function fullTime(time) {\n const d = dayjs(time);\n const datetime = d.format();\n const full = d.format('LLLL');\n return m(\"time\", {\n pubdate: true,\n datetime: datetime\n }, full);\n}\nflarum.reg.add('core', 'common/helpers/fullTime', fullTime);","import { truncate } from '../utils/string';\n\n/**\n * The `highlight` helper searches for a word phrase in a string, and wraps\n * matches with the <mark> tag.\n *\n * @param string The string to highlight.\n * @param phrase The word or words to highlight.\n * @param [length] The number of characters to truncate the string to.\n * The string will be truncated surrounding the first match.\n * @param safe Whether the content is safe to render as HTML or\n * should be escaped (HTML entities encoded).\n */\nexport default function highlight(string, phrase, length, safe) {\n if (safe === void 0) {\n safe = false;\n }\n if (!phrase && !length) return string;\n\n // Convert the word phrase into a global regular expression (if it isn't\n // already) so we can search the string for matched.\n const regexp = phrase instanceof RegExp ? phrase : new RegExp(phrase != null ? phrase : '', 'gi');\n let highlighted = string;\n let start = 0;\n\n // If a length was given, the truncate the string surrounding the first match.\n if (length) {\n if (phrase) start = Math.max(0, string.search(regexp) - length / 2);\n highlighted = truncate(highlighted, length, start);\n }\n\n // Convert the string into HTML entities, then highlight all matches with\n // <mark> tags. Then we will return the result as a trusted HTML string.\n if (!safe) {\n highlighted = $('<div/>').text(highlighted).html();\n }\n if (phrase) highlighted = highlighted.replace(regexp, '<mark>$&</mark>');\n return m.trust(highlighted);\n}\nflarum.reg.add('core', 'common/helpers/highlight', highlight);","import dayjs from 'dayjs';\nimport humanTimeUtil from '../utils/humanTime';\n\n/**\n * The `humanTime` helper displays a time in a human-friendly time-ago format\n * (e.g. '12 days ago'), wrapped in a <time> tag with other information about\n * the time.\n */\nexport default function humanTime(time) {\n const d = dayjs(time);\n const datetime = d.format();\n const full = d.format('LLLL');\n const ago = humanTimeUtil(time);\n return m(\"time\", {\n pubdate: true,\n datetime: datetime,\n title: full,\n \"data-humantime\": true\n }, ago);\n}\nflarum.reg.add('core', 'common/helpers/humanTime', humanTime);","import Separator from '../components/Separator';\nimport classList from '../utils/classList';\n\n/**\n * This type represents an element of a list returned by `ItemList.toArray()`,\n * coupled with some static properties used on various components.\n */\n\nfunction isVnode(item) {\n return typeof item === 'object' && item !== null && 'tag' in item;\n}\nfunction isSeparator(item) {\n return isVnode(item) && item.tag === Separator;\n}\nfunction withoutUnnecessarySeparators(items) {\n const newItems = [];\n let prevItem;\n items.filter(Boolean).forEach((item, i) => {\n if (!isSeparator(item) || prevItem && !isSeparator(prevItem) && i !== items.length - 1) {\n prevItem = item;\n newItems.push(item);\n }\n });\n return newItems;\n}\n\n/**\n * The `listItems` helper wraps an array of components in the provided tag,\n * stripping out any unnecessary `Separator` components.\n *\n * By default, this tag is an `<li>` tag, but this is customisable through the\n * second function parameter, `customTag`.\n */\nexport default function listItems(rawItems, customTag, attributes) {\n if (customTag === void 0) {\n customTag = 'li';\n }\n if (attributes === void 0) {\n attributes = {};\n }\n const items = rawItems instanceof Array ? rawItems : [rawItems];\n const Tag = customTag;\n return withoutUnnecessarySeparators(items).map(item => {\n var _item$attrs2;\n const classes = [item.itemName && \"item-\".concat(item.itemName)];\n if (isVnode(item) && item.tag.isListItem) {\n item.attrs = item.attrs || {};\n item.attrs.key = item.attrs.key || item.itemName;\n item.key = item.attrs.key;\n return item;\n }\n if (isVnode(item)) {\n var _item$attrs, _item$tag$isActive, _item$tag;\n classes.push(((_item$attrs = item.attrs) == null ? void 0 : _item$attrs.itemClassName) || item.itemClassName);\n if ((_item$tag$isActive = (_item$tag = item.tag).isActive) != null && _item$tag$isActive.call(_item$tag, item.attrs)) {\n classes.push('active');\n }\n }\n const key = isVnode(item) && (item == null || (_item$attrs2 = item.attrs) == null ? void 0 : _item$attrs2.key) || item.itemName;\n return m(Tag, Object.assign({\n className: classList(classes),\n key: key\n }, attributes), item);\n });\n}\nflarum.reg.add('core', 'common/helpers/listItems', listItems);","import isDark from '../utils/isDark';\nexport default function textContrastClass(hexcolor) {\n if (!hexcolor) return 'text-contrast--unchanged';\n return isDark(hexcolor) ? 'text-contrast--light' : 'text-contrast--dark';\n}\nflarum.reg.add('core', 'common/helpers/textContrastClass', textContrastClass);","import Icon from '../components/Icon';\n\n/**\n * The `useronline` helper displays a green circle if the user is online.\n */\nexport default function userOnline(user) {\n if (user.lastSeenAt() && user.isOnline()) {\n return m(\"span\", {\n className: \"UserOnline\"\n }, m(Icon, {\n name: 'fas fa-circle'\n }));\n }\n return null;\n}\nflarum.reg.add('core', 'common/helpers/userOnline', userOnline);","import app from '../../common/app';\nimport extractText from '../utils/extractText';\n\n/**\n * The `username` helper displays a user's username in a <span className=\"username\">\n * tag. If the user doesn't exist, the username will be displayed as [deleted].\n */\nexport default function username(user, transformer) {\n const name = user && user.displayName() || extractText(app.translator.trans('core.lib.username.deleted_text'));\n const children = transformer ? transformer(name) : name;\n return m(\"span\", {\n className: \"username\"\n }, children);\n}\nflarum.reg.add('core', 'common/helpers/username', username);","import Model from '../Model';\nexport default class AccessToken extends Model {\n token() {\n return Model.attribute('token').call(this);\n }\n userId() {\n return Model.attribute('userId').call(this);\n }\n title() {\n return Model.attribute('title').call(this);\n }\n type() {\n return Model.attribute('type').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n lastActivityAt() {\n return Model.attribute('lastActivityAt', Model.transformDate).call(this);\n }\n lastIpAddress() {\n return Model.attribute('lastIpAddress').call(this);\n }\n device() {\n return Model.attribute('device').call(this);\n }\n isCurrent() {\n return Model.attribute('isCurrent').call(this);\n }\n isSessionToken() {\n return Model.attribute('isSessionToken').call(this);\n }\n}\nflarum.reg.add('core', 'common/models/AccessToken', AccessToken);","import app from '../../common/app';\nimport Model from '../Model';\nimport computed from '../utils/computed';\nimport ItemList from '../utils/ItemList';\nimport Badge from '../components/Badge';\nexport default class Discussion extends Model {\n title() {\n return Model.attribute('title').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n user() {\n return Model.hasOne('user').call(this);\n }\n firstPost() {\n return Model.hasOne('firstPost').call(this);\n }\n lastPostedAt() {\n return Model.attribute('lastPostedAt', Model.transformDate).call(this);\n }\n lastPostedUser() {\n return Model.hasOne('lastPostedUser').call(this);\n }\n lastPost() {\n return Model.hasOne('lastPost').call(this);\n }\n lastPostNumber() {\n return Model.attribute('lastPostNumber').call(this);\n }\n commentCount() {\n return Model.attribute('commentCount').call(this);\n }\n replyCount() {\n return computed('commentCount', commentCount => {\n var _ref;\n return Math.max(0, ((_ref = commentCount) != null ? _ref : 0) - 1);\n }).call(this);\n }\n posts() {\n return Model.hasMany('posts').call(this);\n }\n mostRelevantPost() {\n return Model.hasOne('mostRelevantPost').call(this);\n }\n lastReadAt() {\n return Model.attribute('lastReadAt', Model.transformDate).call(this);\n }\n lastReadPostNumber() {\n return Model.attribute('lastReadPostNumber').call(this);\n }\n isUnread() {\n return computed('unreadCount', unreadCount => !!unreadCount).call(this);\n }\n isRead() {\n return computed('unreadCount', unreadCount => !!(app.session.user && !unreadCount)).call(this);\n }\n hiddenAt() {\n return Model.attribute('hiddenAt', Model.transformDate).call(this);\n }\n hiddenUser() {\n return Model.hasOne('hiddenUser').call(this);\n }\n isHidden() {\n return computed('hiddenAt', hiddenAt => !!hiddenAt).call(this);\n }\n canReply() {\n return Model.attribute('canReply').call(this);\n }\n canRename() {\n return Model.attribute('canRename').call(this);\n }\n canHide() {\n return Model.attribute('canHide').call(this);\n }\n canDelete() {\n return Model.attribute('canDelete').call(this);\n }\n\n /**\n * Remove a post from the discussion's posts relationship.\n */\n removePost(id) {\n const posts = this.rawRelationship('posts');\n if (!posts) {\n return;\n }\n posts.some((data, i) => {\n if (id === data.id) {\n posts.splice(i, 1);\n return true;\n }\n return false;\n });\n }\n\n /**\n * Get the estimated number of unread posts in this discussion for the current\n * user.\n */\n unreadCount() {\n var _user$markedAllAsRead, _user$markedAllAsRead2, _this$lastPostedAt;\n const user = app.session.user;\n if (user && ((_user$markedAllAsRead = (_user$markedAllAsRead2 = user.markedAllAsReadAt()) == null ? void 0 : _user$markedAllAsRead2.getTime()) != null ? _user$markedAllAsRead : 0) < ((_this$lastPostedAt = this.lastPostedAt()) == null ? void 0 : _this$lastPostedAt.getTime())) {\n var _this$lastPostNumber, _this$commentCount;\n const unreadCount = Math.max(0, ((_this$lastPostNumber = this.lastPostNumber()) != null ? _this$lastPostNumber : 0) - (this.lastReadPostNumber() || 0));\n // If posts have been deleted, it's possible that the unread count could exceed the\n // actual post count. As such, we take the min of the two to ensure this isn't an issue.\n return Math.min(unreadCount, (_this$commentCount = this.commentCount()) != null ? _this$commentCount : 0);\n }\n return 0;\n }\n\n /**\n * Get the Badge components that apply to this discussion.\n */\n badges() {\n const items = new ItemList();\n if (this.isHidden()) {\n items.add('hidden', m(Badge, {\n type: \"hidden\",\n icon: \"fas fa-trash\",\n label: app.translator.trans('core.lib.badge.hidden_tooltip')\n }));\n }\n return items;\n }\n\n /**\n * Get a list of all of the post IDs in this discussion.\n */\n postIds() {\n var _this$rawRelationship, _this$rawRelationship2;\n return (_this$rawRelationship = (_this$rawRelationship2 = this.rawRelationship('posts')) == null ? void 0 : _this$rawRelationship2.map(link => link.id)) != null ? _this$rawRelationship : [];\n }\n}\nflarum.reg.add('core', 'common/models/Discussion', Discussion);","import Model from '../Model';\nexport default class Forum extends Model {\n apiEndpoint() {\n return '/';\n }\n}\nflarum.reg.add('core', 'common/models/Forum', Forum);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Model from '../Model';\nexport default class Group extends Model {\n nameSingular() {\n return Model.attribute('nameSingular').call(this);\n }\n namePlural() {\n return Model.attribute('namePlural').call(this);\n }\n color() {\n return Model.attribute('color').call(this);\n }\n icon() {\n return Model.attribute('icon').call(this);\n }\n isHidden() {\n return Model.attribute('isHidden').call(this);\n }\n}\n_defineProperty(Group, \"ADMINISTRATOR_ID\", '1');\n_defineProperty(Group, \"GUEST_ID\", '2');\n_defineProperty(Group, \"MEMBER_ID\", '3');\nflarum.reg.add('core', 'common/models/Group', Group);","import Model from '../Model';\nexport default class Notification extends Model {\n contentType() {\n return Model.attribute('contentType').call(this);\n }\n content() {\n return Model.attribute('content').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n isRead() {\n return Model.attribute('isRead').call(this);\n }\n user() {\n return Model.hasOne('user').call(this);\n }\n fromUser() {\n return Model.hasOne('fromUser').call(this);\n }\n subject() {\n return Model.hasOne('subject').call(this);\n }\n}\nflarum.reg.add('core', 'common/models/Notification', Notification);","import Model from '../Model';\nimport computed from '../utils/computed';\nimport { getPlainContent } from '../utils/string';\nexport default class Post extends Model {\n number() {\n return Model.attribute('number').call(this);\n }\n discussion() {\n return Model.hasOne('discussion').call(this);\n }\n createdAt() {\n return Model.attribute('createdAt', Model.transformDate).call(this);\n }\n user() {\n return Model.hasOne('user').call(this);\n }\n contentType() {\n return Model.attribute('contentType').call(this);\n }\n content() {\n return Model.attribute('content').call(this);\n }\n contentHtml() {\n return Model.attribute('contentHtml').call(this);\n }\n renderFailed() {\n return Model.attribute('renderFailed').call(this);\n }\n contentPlain() {\n return computed('contentHtml', content => {\n if (typeof content === 'string') {\n return getPlainContent(content);\n }\n return content;\n }).call(this);\n }\n editedAt() {\n return Model.attribute('editedAt', Model.transformDate).call(this);\n }\n editedUser() {\n return Model.hasOne('editedUser').call(this);\n }\n isEdited() {\n return computed('editedAt', editedAt => !!editedAt).call(this);\n }\n hiddenAt() {\n return Model.attribute('hiddenAt', Model.transformDate).call(this);\n }\n hiddenUser() {\n return Model.hasOne('hiddenUser').call(this);\n }\n isHidden() {\n return computed('hiddenAt', hiddenAt => !!hiddenAt).call(this);\n }\n canEdit() {\n return Model.attribute('canEdit').call(this);\n }\n canHide() {\n return Model.attribute('canHide').call(this);\n }\n canDelete() {\n return Model.attribute('canDelete').call(this);\n }\n}\nflarum.reg.add('core', 'common/models/Post', Post);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport ColorThief from 'color-thief-browser';\nimport Model from '../Model';\nimport stringToColor from '../utils/stringToColor';\nimport ItemList from '../utils/ItemList';\nimport computed from '../utils/computed';\nimport GroupBadge from '../components/GroupBadge';\nexport default class User extends Model {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"avatarColor\", null);\n }\n username() {\n return Model.attribute('username').call(this);\n }\n slug() {\n return Model.attribute('slug').call(this);\n }\n displayName() {\n return Model.attribute('displayName').call(this);\n }\n email() {\n return Model.attribute('email').call(this);\n }\n isEmailConfirmed() {\n return Model.attribute('isEmailConfirmed').call(this);\n }\n password() {\n return Model.attribute('password').call(this);\n }\n avatarUrl() {\n return Model.attribute('avatarUrl').call(this);\n }\n preferences() {\n return Model.attribute('preferences').call(this);\n }\n groups() {\n return Model.hasMany('groups').call(this);\n }\n isAdmin() {\n return Model.attribute('isAdmin').call(this);\n }\n joinTime() {\n return Model.attribute('joinTime', Model.transformDate).call(this);\n }\n lastSeenAt() {\n return Model.attribute('lastSeenAt', Model.transformDate).call(this);\n }\n markedAllAsReadAt() {\n return Model.attribute('markedAllAsReadAt', Model.transformDate).call(this);\n }\n unreadNotificationCount() {\n return Model.attribute('unreadNotificationCount').call(this);\n }\n newNotificationCount() {\n return Model.attribute('newNotificationCount').call(this);\n }\n discussionCount() {\n return Model.attribute('discussionCount').call(this);\n }\n commentCount() {\n return Model.attribute('commentCount').call(this);\n }\n canEdit() {\n return Model.attribute('canEdit').call(this);\n }\n canEditCredentials() {\n return Model.attribute('canEditCredentials').call(this);\n }\n canEditGroups() {\n return Model.attribute('canEditGroups').call(this);\n }\n canDelete() {\n return Model.attribute('canDelete').call(this);\n }\n color() {\n return computed('displayName', 'avatarUrl', 'avatarColor', (displayName, avatarUrl, avatarColor) => {\n // If we've already calculated and cached the dominant color of the user's\n // avatar, then we can return that in RGB format. If we haven't, we'll want\n // to calculate it. Unless the user doesn't have an avatar, in which case\n // we generate a color from their display name.\n if (avatarColor) {\n return \"rgb(\".concat(avatarColor.join(', '), \")\");\n } else if (avatarUrl) {\n this.calculateAvatarColor();\n return '';\n }\n return '#' + stringToColor(displayName);\n }).call(this);\n }\n /**\n * Check whether or not the user has been seen in the last 5 minutes.\n */\n isOnline() {\n return dayjs().subtract(5, 'minutes').isBefore(this.lastSeenAt());\n }\n\n /**\n * Get the Badge components that apply to this user.\n */\n badges() {\n const items = new ItemList();\n const groups = this.groups();\n if (groups) {\n groups.forEach(group => {\n items.add(\"group\".concat(group == null ? void 0 : group.id()), m(GroupBadge, {\n group: group\n }));\n });\n }\n return items;\n }\n\n /**\n * Calculate the dominant color of the user's avatar. The dominant color will\n * be set to the `avatarColor` property once it has been calculated.\n */\n calculateAvatarColor() {\n var _this$avatarUrl;\n const image = new Image();\n const user = this;\n image.addEventListener('load', function () {\n try {\n const colorThief = new ColorThief();\n user.avatarColor = colorThief.getColor(this);\n } catch (e) {\n // Completely white avatars throw errors due to a glitch in color thief\n // See https://github.com/lokesh/color-thief/issues/40\n if (e instanceof TypeError) {\n user.avatarColor = [255, 255, 255];\n } else {\n throw e;\n }\n }\n user.freshness = new Date();\n m.redraw();\n });\n image.crossOrigin = 'anonymous';\n image.src = (_this$avatarUrl = this.avatarUrl()) != null ? _this$avatarUrl : '';\n }\n\n /**\n * Update the user's preferences.\n */\n savePreferences(newPreferences) {\n const preferences = this.preferences();\n Object.assign(preferences != null ? preferences : {}, newPreferences);\n return this.save({\n preferences\n });\n }\n}\nflarum.reg.add('core', 'common/models/User', User);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nexport let GambitType = /*#__PURE__*/function (GambitType) {\n GambitType[\"KeyValue\"] = \"key:value\";\n GambitType[\"Grouped\"] = \"grouped\";\n return GambitType;\n}({});\nexport class BooleanGambit {\n constructor() {\n _defineProperty(this, \"type\", GambitType.Grouped);\n _defineProperty(this, \"predicates\", false);\n }\n pattern() {\n const is = app.translator.trans('core.lib.gambits.boolean_key', {}, true);\n let key = this.key();\n if (Array.isArray(key)) {\n key = key.join('|');\n }\n return \"\".concat(is, \":(\").concat(key, \")\");\n }\n toFilter(_matches, negate) {\n const key = (negate ? '-' : '') + this.filterKey();\n return {\n [key]: true\n };\n }\n fromFilter(value, negate) {\n const is = app.translator.trans('core.lib.gambits.boolean_key', {}, true);\n const key = this.key();\n return \"\".concat(negate ? '-' : '').concat(is, \":\").concat(key);\n }\n suggestion() {\n return {\n group: app.translator.trans('core.lib.gambits.boolean_key', {}, true),\n key: this.key()\n };\n }\n enabled() {\n return true;\n }\n}\nexport class KeyValueGambit {\n constructor() {\n _defineProperty(this, \"type\", GambitType.KeyValue);\n _defineProperty(this, \"predicates\", false);\n }\n valuePattern() {\n return '(.+)';\n }\n gambitValueToFilterValue(value) {\n return value;\n }\n filterValueToGambitValue(value) {\n return Array.isArray(value) ? value.join(',') : value.toString();\n }\n pattern() {\n const key = this.key();\n return \"\".concat(key, \":\") + this.valuePattern();\n }\n toFilter(matches, negate) {\n const key = (negate ? '-' : '') + this.filterKey();\n return {\n [key]: this.gambitValueToFilterValue(matches[1])\n };\n }\n fromFilter(value, negate) {\n return \"\".concat(negate ? '-' : '').concat(this.key(), \":\").concat(this.filterValueToGambitValue(value));\n }\n suggestion() {\n return {\n key: this.key(),\n hint: this.hint()\n };\n }\n enabled() {\n return true;\n }\n}\nflarum.reg.add('core', 'common/query/IGambit', { GambitType: GambitType,BooleanGambit: BooleanGambit,KeyValueGambit: KeyValueGambit, });","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from '../Component';\n\n/**\n * Generates a route resolver for a given component.\n *\n * In addition to regular route resolver functionality:\n * - It provide the current route name as an attr\n * - It sets a key on the component so a rerender will be triggered on route change.\n */\nexport default class DefaultResolver {\n constructor(component, routeName) {\n _defineProperty(this, \"component\", void 0);\n _defineProperty(this, \"routeName\", void 0);\n this.component = component;\n this.routeName = routeName;\n }\n\n /**\n * When a route change results in a changed key, a full page\n * rerender occurs. This method can be overriden in subclasses\n * to prevent rerenders on some route changes.\n */\n makeKey() {\n return this.routeName + JSON.stringify(m.route.param());\n }\n makeAttrs(vnode) {\n return {\n ...vnode.attrs,\n routeName: this.routeName\n };\n }\n async onmatch(args, requestedPath, route) {\n if (this.component.prototype instanceof Component) {\n return this.component;\n }\n return (await this.component()).default;\n }\n render(vnode) {\n return [{\n ...vnode,\n attrs: this.makeAttrs(vnode),\n key: this.makeKey()\n }];\n }\n}\nflarum.reg.add('core', 'common/resolvers/DefaultResolver', DefaultResolver);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Alert from '../components/Alert';\nimport app from '../app';\n\n/**\n * Returned by `AlertManagerState.show`. Used to dismiss alerts.\n */\n\nexport default class AlertManagerState {\n constructor() {\n _defineProperty(this, \"activeAlerts\", {});\n _defineProperty(this, \"alertId\", 0);\n _defineProperty(this, \"loadingPool\", 0);\n }\n getActiveAlerts() {\n return this.activeAlerts;\n }\n\n /**\n * Show an Alert in the alerts area.\n *\n * @return The alert's ID, which can be used to dismiss the alert.\n */\n\n show(arg1, arg2, arg3) {\n // Assigns variables as per the above signatures\n let componentClass = Alert;\n let attrs = {};\n let children;\n if (arguments.length == 1) {\n children = arg1;\n } else if (arguments.length == 2) {\n attrs = arg1;\n children = arg2;\n } else if (arguments.length == 3) {\n componentClass = arg1;\n attrs = arg2;\n children = arg3;\n }\n this.activeAlerts[++this.alertId] = {\n children,\n attrs,\n componentClass\n };\n m.redraw();\n return this.alertId;\n }\n\n /**\n * Dismiss an alert.\n */\n dismiss(key) {\n if (!key || !(key in this.activeAlerts)) return;\n delete this.activeAlerts[key];\n m.redraw();\n }\n\n /**\n * Clear all alerts.\n */\n clear() {\n this.activeAlerts = {};\n m.redraw();\n }\n\n /**\n * Shows a loading alert.\n */\n showLoading() {\n this.loadingPool++;\n if (this.loadingPool > 1) return null;\n return this.show({\n type: 'warning',\n dismissible: false\n }, app.translator.trans('core.lib.loading_indicator.accessible_label'));\n }\n\n /**\n * Hides a loading alert.\n */\n clearLoading() {\n this.loadingPool--;\n if (this.loadingPool === 0) this.clear();\n }\n}\nflarum.reg.add('core', 'common/states/AlertManagerState', AlertManagerState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Modal from '../components/Modal';\n\n/**\n * Ideally, `show` would take a higher-kinded generic, ala:\n * `show<Attrs, C>(componentClass: C<Attrs>, attrs: Attrs): void`\n * Unfortunately, TypeScript does not support this:\n * https://github.com/Microsoft/TypeScript/issues/1213\n * Therefore, we have to use this ugly, messy workaround.\n */\n\n/**\n * Alternatively, `show` takes an async function that returns a modal class.\n * This is useful for lazy-loading modals.\n */\n\n/**\n * Class used to manage modal state.\n *\n * Accessible on the `app` object via `app.modal` property.\n */\nexport default class ModalManagerState {\n constructor() {\n /**\n * @internal\n */\n _defineProperty(this, \"modal\", null);\n /**\n * @internal\n */\n _defineProperty(this, \"modalList\", []);\n /**\n * @internal\n */\n _defineProperty(this, \"backdropShown\", false);\n /**\n * @internal\n */\n _defineProperty(this, \"loadingModal\", false);\n /**\n * Used to force re-initialization of modals if a modal\n * is replaced by another of the same type.\n */\n _defineProperty(this, \"key\", 0);\n }\n /**\n * Shows a modal dialog.\n *\n * If `stackModal` is `true`, the modal will be shown on top of the current modal.\n *\n * If a value for `stackModal` is not provided, opening a new modal will close\n * any others currently being shown for backwards compatibility.\n *\n * @example <caption>Show a modal</caption>\n * app.modal.show(MyCoolModal, { attr: 'value' });\n *\n * @example <caption>Show a modal from a lifecycle method (`oncreate`, `view`, etc.)</caption>\n * // This \"hack\" is needed due to quirks with nested redraws in Mithril.\n * setTimeout(() => app.modal.show(MyCoolModal, { attr: 'value' }), 0);\n *\n * @example <caption>Stacking modals</caption>\n * app.modal.show(MyCoolStackedModal, { attr: 'value' }, true);\n */\n async show(componentClass, attrs, stackModal) {\n if (attrs === void 0) {\n attrs = {};\n }\n if (stackModal === void 0) {\n stackModal = false;\n }\n if (!(componentClass.prototype instanceof Modal) && typeof componentClass !== 'function') {\n // This is duplicated so that if the error is caught, an error message still shows up in the debug console.\n const invalidModalWarning = 'The ModalManager can only show Modals.';\n console.error(invalidModalWarning);\n throw new Error(invalidModalWarning);\n }\n if (!(componentClass.prototype instanceof Modal)) {\n this.loadingModal = true;\n m.redraw.sync();\n componentClass = componentClass;\n componentClass = (await componentClass()).default;\n this.loadingModal = false;\n }\n this.backdropShown = true;\n m.redraw.sync();\n\n // We use requestAnimationFrame here, since we need to wait for the backdrop to be added\n // to the DOM before actually adding the modal to the modal list.\n //\n // This is because we use RAF inside the ModalManager onupdate lifecycle hook, and if we\n // skip this RAF call, the hook will attempt to add a focus trap as well as lock scroll\n // onto the newly added modal before it's in the DOM, creating an extra scrollbar.\n requestAnimationFrame(() => {\n componentClass = componentClass;\n\n // Set current modal\n this.modal = {\n componentClass,\n attrs,\n key: this.key++\n };\n\n // We want to stack this modal\n if (stackModal) {\n // Remember previously opened modal and add new modal to the modal list\n this.modalList.push(this.modal);\n } else {\n // Override last modals\n this.modalList = [this.modal];\n }\n m.redraw();\n });\n }\n\n /**\n * Closes the topmost currently open dialog, if one is open.\n */\n close() {\n if (!this.modal) return;\n\n // If there are two modals, remove the most recent one\n if (this.modalList.length > 1) {\n // Remove last modal from list\n this.modalList.pop();\n\n // Open last modal from list\n this.modal = this.modalList[this.modalList.length - 1];\n } else {\n // Reset state\n this.modal = null;\n this.modalList = [];\n }\n m.redraw();\n }\n\n /**\n * Checks if a modal is currently open.\n *\n * @return `true` if a modal dialog is currently open, otherwise `false`.\n */\n isModalOpen() {\n return !!this.modal;\n }\n}\nflarum.reg.add('core', 'common/states/ModalManagerState', ModalManagerState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport subclassOf from '../../common/utils/subclassOf';\nexport default class PageState {\n constructor(type, data) {\n if (data === void 0) {\n data = {};\n }\n _defineProperty(this, \"type\", void 0);\n _defineProperty(this, \"data\", void 0);\n this.type = type;\n /**\n * @type any\n */\n this.data = data;\n }\n\n /**\n * Determine whether the page matches the given class and data.\n *\n * @param {object} type The page class to check against. Subclasses are accepted as well.\n * @param {Record<string, unknown>} data\n * @return {boolean}\n */\n matches(type, data) {\n if (data === void 0) {\n data = {};\n }\n // Fail early when the page is of a different type\n if (!subclassOf(this.type, type)) return false;\n\n // Now that the type is known to be correct, we loop through the provided\n // data to see whether it matches the data in our state.\n return Object.keys(data).every(key => this.data[key] === data[key]);\n }\n get(key) {\n return this.data[key];\n }\n set(key, value) {\n this.data[key] = value;\n }\n}\nflarum.reg.add('core', 'common/states/PageState', PageState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../common/app';\nexport default class PaginatedListState {\n constructor(params, page, pageSize) {\n if (params === void 0) {\n params = {};\n }\n if (page === void 0) {\n page = 1;\n }\n if (pageSize === void 0) {\n pageSize = null;\n }\n _defineProperty(this, \"location\", void 0);\n _defineProperty(this, \"pageSize\", void 0);\n _defineProperty(this, \"totalItems\", null);\n _defineProperty(this, \"pages\", []);\n _defineProperty(this, \"params\", {});\n _defineProperty(this, \"initialLoading\", false);\n _defineProperty(this, \"loadingPrev\", false);\n _defineProperty(this, \"loadingNext\", false);\n _defineProperty(this, \"loadingPage\", false);\n this.params = params;\n this.location = {\n page\n };\n this.pageSize = pageSize;\n }\n clear() {\n this.pages = [];\n m.redraw();\n }\n loadPrev() {\n if (this.loadingPrev || this.getLocation().page === 1) return Promise.resolve();\n this.loadingPrev = true;\n const page = this.getPrevPageNumber();\n return this.loadPage(page).then(this.parseResults.bind(this, page)).finally(() => this.loadingPrev = false);\n }\n loadNext() {\n if (this.loadingNext) return Promise.resolve();\n this.loadingNext = true;\n const page = this.getNextPageNumber();\n return this.loadPage(page).then(this.parseResults.bind(this, page)).finally(() => this.loadingNext = false);\n }\n parseResults(pg, results) {\n var _results$payload;\n const pageNum = Number(pg);\n const links = (_results$payload = results.payload) == null ? void 0 : _results$payload.links;\n const page = {\n number: pageNum,\n items: results,\n hasNext: !!(links != null && links.next),\n hasPrev: !!(links != null && links.prev)\n };\n if (this.isEmpty() || pageNum > this.getNextPageNumber() - 1) {\n this.pages.push(page);\n } else {\n this.pages.unshift(page);\n }\n this.location = {\n page: pageNum\n };\n m.redraw();\n }\n\n /**\n * Load a new page of results.\n */\n loadPage(page) {\n if (page === void 0) {\n page = 1;\n }\n const reqParams = this.requestParams();\n const include = Array.isArray(reqParams.include) ? reqParams.include.join(',') : reqParams.include;\n const params = {\n ...reqParams,\n page: {\n ...reqParams.page,\n offset: this.pageSize && this.pageSize * (page - 1) || 0,\n limit: this.pageSize || undefined\n },\n include\n };\n if (typeof params.include === 'undefined') {\n delete params.include;\n }\n return app.store.find(this.type, params).then(results => {\n var _results$payload2, _results$payload3;\n const usedPerPage = (_results$payload2 = results.payload) == null || (_results$payload2 = _results$payload2.meta) == null ? void 0 : _results$payload2.perPage;\n const usedTotal = (_results$payload3 = results.payload) == null || (_results$payload3 = _results$payload3.meta) == null || (_results$payload3 = _results$payload3.page) == null ? void 0 : _results$payload3.total;\n\n /*\n * If this state does not rely on a preloaded API document to know the page size,\n * then there is no initial list, and therefore the page size can be taken from subsequent requests.\n */\n if (!this.pageSize || usedPerPage && this.pageSize !== usedPerPage) {\n this.pageSize = usedPerPage || PaginatedListState.DEFAULT_PAGE_SIZE;\n }\n if (!this.totalItems || usedTotal && this.totalItems !== usedTotal) {\n this.totalItems = usedTotal || null;\n }\n return results;\n });\n }\n\n /**\n * Get the parameters that should be passed in the API request.\n * Do not include page offset unless subclass overrides loadPage.\n *\n * @abstract\n * @see loadPage\n */\n requestParams() {\n return this.params;\n }\n\n /**\n * Update the `this.params` object, calling `refresh` if they have changed.\n * Use `requestParams` for converting `this.params` into API parameters\n *\n * @param newParams\n * @param page\n * @see requestParams\n */\n refreshParams(newParams, page) {\n if (this.isEmpty() || this.paramsChanged(newParams)) {\n this.params = newParams;\n return this.refresh(page);\n }\n return Promise.resolve();\n }\n refresh(page) {\n if (page === void 0) {\n page = 1;\n }\n this.initialLoading = true;\n this.loadingPrev = false;\n this.loadingNext = false;\n this.clear();\n return this.goto(page);\n }\n goto(page) {\n this.location = {\n page\n };\n if (!this.initialLoading) {\n this.loadingPage = true;\n }\n return this.loadPage(page).then(results => {\n this.pages = [];\n this.parseResults(this.location.page, results);\n }).finally(() => {\n this.initialLoading = false;\n this.loadingPage = false;\n });\n }\n getPages() {\n return this.pages;\n }\n getLocation() {\n return this.location;\n }\n isLoading() {\n return this.initialLoading || this.loadingNext || this.loadingPrev || this.loadingPage;\n }\n isInitialLoading() {\n return this.initialLoading;\n }\n isLoadingPrev() {\n return this.loadingPrev;\n }\n isLoadingNext() {\n return this.loadingNext;\n }\n\n /**\n * Returns true when the number of items across all loaded pages is not 0.\n *\n * @see isEmpty\n */\n hasItems() {\n return !!this.getAllItems().length;\n }\n\n /**\n * Returns true when there aren't any items *and* the state has already done its initial loading.\n * If you want to know whether there are items regardless of load state, use `hasItems()` instead\n *\n * @see hasItems\n */\n isEmpty() {\n return !this.isInitialLoading() && !this.hasItems();\n }\n hasPrev() {\n var _this$pages$;\n return !!((_this$pages$ = this.pages[0]) != null && _this$pages$.hasPrev);\n }\n hasNext() {\n var _this$pages;\n return !!((_this$pages = this.pages[this.pages.length - 1]) != null && _this$pages.hasNext);\n }\n\n /**\n * Stored state parameters.\n */\n getParams() {\n return this.params;\n }\n getNextPageNumber() {\n var _this$pages2;\n const pg = (_this$pages2 = this.pages[this.pages.length - 1]) == null ? void 0 : _this$pages2.number;\n if (pg && !isNaN(pg)) {\n return pg + 1;\n } else {\n return this.location.page;\n }\n }\n getPrevPageNumber() {\n var _this$pages$2;\n const pg = (_this$pages$2 = this.pages[0]) == null ? void 0 : _this$pages$2.number;\n if (pg && !isNaN(pg)) {\n // If the calculated page number is less than 1,\n // return 1 as the prev page (first possible page number)\n return Math.max(pg - 1, 1);\n } else {\n return this.location.page;\n }\n }\n paramsChanged(newParams) {\n return Object.keys(newParams).some(key => this.getParams()[key] !== newParams[key]);\n }\n getAllItems() {\n return this.getPages().map(pg => pg.items).flat();\n }\n\n /**\n * In the last request, has the user searched for a model?\n */\n isSearchResults() {\n return !!this.params.q;\n }\n push(model) {\n const lastPage = this.pages[this.pages.length - 1];\n if (lastPage && lastPage.items.length < (this.pageSize || PaginatedListState.DEFAULT_PAGE_SIZE)) {\n lastPage.items.push(model);\n } else {\n this.pages.push({\n number: lastPage ? lastPage.number + 1 : 1,\n items: [model],\n hasNext: lastPage.hasNext,\n hasPrev: Boolean(lastPage)\n });\n }\n m.redraw();\n }\n getSort() {\n return this.params.sort || '';\n }\n sortMap() {\n return {};\n }\n sortValue(sort) {\n return typeof sort === 'string' ? sort : sort == null ? void 0 : sort.sort;\n }\n currentSort() {\n return this.sortValue(this.sortMap()[this.getSort()]);\n }\n changeSort(sort) {\n this.refreshParams({\n ...this.params,\n sort: sort\n }, 1);\n }\n changeFilter(key, value) {\n this.refreshParams({\n ...this.params,\n filter: {\n ...this.params.filter,\n [key]: value\n }\n }, 1);\n }\n}\n/**\n * This value should not be relied upon when preloading an API document.\n * In those cases the pageSize should be taken from the meta information of the preloaded\n * document. Checkout `DiscussionListState.loadPage` for an example.\n */\n_defineProperty(PaginatedListState, \"DEFAULT_PAGE_SIZE\", 20);\nflarum.reg.add('core', 'common/states/PaginatedListState', PaginatedListState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class SearchState {\n constructor(cachedSearches) {\n if (cachedSearches === void 0) {\n cachedSearches = [];\n }\n _defineProperty(this, \"cachedSearches\", void 0);\n _defineProperty(this, \"value\", '');\n this.cachedSearches = new Set(cachedSearches);\n }\n\n /**\n * If we are displaying the full results of a search (not just a preview),\n * this value should return the query that prompted that search.\n *\n * In this generic class, full page searching is not supported.\n * This method should be implemented by subclasses that do support it.\n *\n * @see Search\n */\n getInitialSearch() {\n return '';\n }\n getValue() {\n return this.value;\n }\n setValue(value) {\n this.value = value;\n }\n\n /**\n * Clear the search value.\n */\n clear() {\n this.setValue('');\n }\n\n /**\n * Mark that we have already searched for this query so that we don't\n * have to ping the endpoint again.\n */\n cache(query) {\n this.cachedSearches.add(query);\n }\n\n /**\n * Check if this query has been searched before.\n */\n isCached(query) {\n return this.cachedSearches.has(query);\n }\n}\nflarum.reg.add('core', 'common/states/SearchState', SearchState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class AutocompleteReader {\n constructor(symbol) {\n _defineProperty(this, \"symbol\", void 0);\n _defineProperty(this, \"relativeStart\", 0);\n _defineProperty(this, \"absoluteStart\", 0);\n this.symbol = symbol;\n }\n check(lastChunk, cursor, validBit) {\n if (validBit === void 0) {\n validBit = null;\n }\n this.absoluteStart = 0;\n\n // Search backwards from the cursor for a symbol. If we find\n // one and followed by a whitespace, we will want to show the\n // autocomplete dropdown!\n for (let i = lastChunk.length - 1; i >= 0; i--) {\n var _validBit;\n const character = lastChunk.substr(i, 1);\n\n // check what the user typed is valid.\n if (validBit && !((_validBit = validBit) != null && _validBit.test(character))) return null;\n\n // check if the character is the symbol we are looking for.\n if (this.symbol) {\n const symbol = typeof this.symbol === 'string' ? character => character === this.symbol : this.symbol;\n if (!symbol(character)) continue;\n }\n\n // make sure the symbol preceded by a whitespace or newline\n if (i === 0 || /\\s/.test(lastChunk.substr(i - 1, 1))) {\n this.relativeStart = i + (this.symbol ? 1 : 0);\n this.absoluteStart = cursor - lastChunk.length + i + (this.symbol ? 1 : 0);\n return {\n symbol: this.symbol && character,\n relativeStart: this.relativeStart,\n absoluteStart: this.absoluteStart,\n typed: lastChunk.substring(this.relativeStart).toLowerCase()\n };\n }\n }\n return null;\n }\n}\nflarum.reg.add('core', 'common/utils/AutocompleteReader', AutocompleteReader);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport getCaretCoordinates from 'textarea-caret';\nimport insertText from './insertText';\nimport ItemList from './ItemList';\nexport default class BasicEditorDriver {\n constructor(dom, params) {\n _defineProperty(this, \"el\", void 0);\n this.el = document.createElement('textarea');\n this.build(dom, params);\n }\n build(dom, params) {\n this.el.className = params.classNames.join(' ');\n this.el.disabled = params.disabled;\n this.el.placeholder = params.placeholder;\n this.el.value = params.value;\n const callInputListeners = e => {\n params.inputListeners.forEach(listener => {\n listener();\n });\n e.redraw = false;\n };\n this.el.oninput = e => {\n params.oninput(this.el.value);\n callInputListeners(e);\n };\n this.el.onclick = callInputListeners;\n this.el.onkeyup = callInputListeners;\n this.el.addEventListener('keydown', e => {\n this.keyHandlers(params).toArray().forEach(handler => handler(e));\n });\n dom.append(this.el);\n }\n keyHandlers(params) {\n const items = new ItemList();\n items.add('submit', function (e) {\n if ((e.metaKey || e.ctrlKey) && e.key === 'Enter') {\n params.onsubmit();\n }\n });\n return items;\n }\n moveCursorTo(position) {\n this.setSelectionRange(position, position);\n }\n getSelectionRange() {\n return [this.el.selectionStart, this.el.selectionEnd];\n }\n getLastNChars(n) {\n const value = this.el.value;\n return value.slice(Math.max(0, this.el.selectionStart - n), this.el.selectionStart);\n }\n insertAtCursor(text) {\n this.insertAt(this.el.selectionStart, text);\n }\n insertAt(pos, text) {\n this.insertBetween(pos, pos, text);\n }\n insertBetween(selectionStart, selectionEnd, text) {\n this.setSelectionRange(selectionStart, selectionEnd);\n const cursorPos = selectionStart + text.length;\n insertText(this.el, {\n text,\n selectionStart: cursorPos,\n selectionEnd: cursorPos\n });\n }\n replaceBeforeCursor(start, text) {\n this.insertBetween(start, this.el.selectionStart, text);\n }\n setSelectionRange(start, end) {\n this.el.setSelectionRange(start, end);\n this.focus();\n }\n getCaretCoordinates(position) {\n const relCoords = getCaretCoordinates(this.el, position);\n return {\n top: relCoords.top - this.el.scrollTop,\n left: relCoords.left\n };\n }\n\n // DOM Interactions\n\n /**\n * Set the disabled status of the editor.\n */\n disabled(disabled) {\n this.el.disabled = disabled;\n }\n\n /**\n * Focus on the editor.\n */\n focus() {\n this.el.focus();\n }\n\n /**\n * Destroy the editor\n */\n destroy() {\n this.el.remove();\n }\n}\nflarum.reg.add('core', 'common/utils/BasicEditorDriver', BasicEditorDriver);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class EventEmitter {\n constructor() {\n _defineProperty(this, \"events\", {});\n this.events = {};\n }\n on(event, listener) {\n if (!this.events[event]) {\n this.events[event] = [];\n }\n this.events[event].push(listener);\n return this;\n }\n emit(event) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n if (this.events[event]) {\n this.events[event].forEach(listener => listener(...args));\n }\n }\n}\nflarum.reg.add('core', 'common/utils/EventEmitter', EventEmitter);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport { GambitType } from '../query/IGambit';\nimport AutocompleteReader from '../utils/AutocompleteReader';\nimport Button from '../components/Button';\nexport default class GambitsAutocomplete {\n constructor(resource, jqueryInput, onchange, afterSuggest) {\n this.resource = resource;\n this.jqueryInput = jqueryInput;\n this.onchange = onchange;\n this.afterSuggest = afterSuggest;\n _defineProperty(this, \"query\", '');\n }\n suggestions(query) {\n const gambits = app.search.gambits.for(this.resource).filter(gambit => gambit.enabled());\n this.query = query;\n\n // We group the boolean gambits together to produce an initial item of\n // is:unread,sticky,locked, etc.\n const groupedGambits = gambits.filter(gambit => gambit.type === GambitType.Grouped);\n const keyValueGambits = gambits.filter(gambit => gambit.type !== GambitType.Grouped);\n const uniqueGroups = [];\n for (const gambit of groupedGambits) {\n if (uniqueGroups.includes(gambit.suggestion().group)) continue;\n uniqueGroups.push(gambit.suggestion().group);\n }\n const instancePerGroup = [];\n for (const group of uniqueGroups) {\n instancePerGroup.push({\n type: GambitType.Grouped,\n suggestion: () => ({\n group,\n key: groupedGambits.filter(gambit => gambit.suggestion().group === group).map(gambit => {\n const key = gambit.suggestion().key;\n return key instanceof Array ? key.join(', ') : key;\n }).join(', ')\n }),\n pattern: () => '',\n filterKey: () => '',\n toFilter: () => [],\n fromFilter: () => '',\n predicates: false,\n enabled: () => true\n });\n }\n const autocompleteReader = new AutocompleteReader(null);\n const cursorPosition = this.jqueryInput().prop('selectionStart') || query.length;\n const lastChunk = query.slice(0, cursorPosition);\n const autocomplete = autocompleteReader.check(lastChunk, cursorPosition, /\\S+$/);\n let typed = (autocomplete == null ? void 0 : autocomplete.typed) || '';\n\n // Negative gambits are a thing ;)\n const negative = typed.startsWith('-');\n if (negative) {\n typed = typed.slice(1);\n }\n\n // if the query ends with 'is:' we will only list keys from that group.\n if (typed.endsWith(':')) {\n const gambitKey = typed.replace(/:$/, '') || null;\n const gambitQuery = typed.split(':').pop() || '';\n if (gambitKey) {\n const specificGambitSuggestions = this.specificGambitSuggestions(gambitKey, gambitQuery, uniqueGroups, groupedGambits, autocomplete);\n if (specificGambitSuggestions) {\n return specificGambitSuggestions;\n }\n }\n }\n\n // This is all the gambit suggestions.\n return [...instancePerGroup, ...keyValueGambits].filter(gambit => !autocomplete || new RegExp(typed).test(gambit.type === GambitType.Grouped ? gambit.suggestion().group : gambit.suggestion().key)).map(gambit => {\n const suggestion = gambit.suggestion();\n const key = gambit.type === GambitType.Grouped ? suggestion.group : suggestion.key;\n const hint = gambit.type === GambitType.Grouped ? suggestion.key : suggestion.hint;\n return this.gambitSuggestion(key, hint, negated => {\n var _autocomplete$relativ;\n return this.suggest((!!negated && '-' || '') + key + ':', typed || '', ((_autocomplete$relativ = autocomplete == null ? void 0 : autocomplete.relativeStart) != null ? _autocomplete$relativ : cursorPosition) + Number(negative));\n });\n });\n }\n specificGambitSuggestions(gambitKey, gambitQuery, uniqueGroups, groupedGambits, autocomplete) {\n if (uniqueGroups.includes(gambitKey)) {\n return groupedGambits.filter(gambit => gambit.suggestion().group === gambitKey).flatMap(gambit => gambit.suggestion().key instanceof Array ? gambit.suggestion().key : [gambit.suggestion().key]).filter(key => !gambitQuery || key.toLowerCase().startsWith(gambitQuery)).map(gambit => this.gambitSuggestion(gambit, null, () => this.suggest(gambit, gambitQuery, autocomplete.relativeStart + autocomplete.typed.length)));\n }\n return null;\n }\n gambitSuggestion(key, value, suggest) {\n return m(\"li\", null, m(\"span\", {\n className: \"Dropdown-item GambitsAutocomplete-gambit\"\n }, m(\"button\", {\n type: \"button\",\n className: \"Button--ua-reset\",\n onclick: () => suggest()\n }, m(\"span\", {\n className: \"GambitsAutocomplete-gambit-key\"\n }, key, !!value && ':'), !!value && m(\"span\", {\n className: \"GambitsAutocomplete-gambit-value\"\n }, value)), !!value && m(\"span\", {\n className: \"GambitsAutocomplete-gambit-actions\"\n }, m(Button, {\n class: \"Button Button--icon\",\n onclick: () => suggest(),\n icon: \"fas fa-plus\",\n \"aria-label\": app.translator.trans('core.forum.search.gambit_plus_button_a11y_label')\n }), m(Button, {\n class: \"Button Button--icon\",\n onclick: () => suggest(true),\n icon: \"fas fa-minus\",\n \"aria-label\": app.translator.trans('core.forum.search.gambit_minus_button_a11y_label')\n }))));\n }\n suggest(text, fromTyped, start) {\n const $input = this.jqueryInput();\n const query = this.query;\n const replaced = query.slice(0, start) + text + query.slice(start + fromTyped.length);\n this.onchange(replaced);\n $input[0].focus();\n setTimeout(() => {\n $input[0].setSelectionRange(start + text.length, start + text.length);\n m.redraw();\n }, 50);\n this.afterSuggest(replaced);\n }\n}\nflarum.reg.add('core', 'common/utils/GambitsAutocomplete', GambitsAutocomplete);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport isObject from './isObject';\nclass Item {\n constructor(content, priority) {\n _defineProperty(this, \"content\", void 0);\n _defineProperty(this, \"priority\", void 0);\n this.content = content;\n this.priority = priority;\n }\n}\n\n/**\n * The `ItemList` class collects items and then arranges them into an array\n * by priority.\n */\nexport default class ItemList {\n constructor() {\n /**\n * The items in the list.\n */\n _defineProperty(this, \"_items\", {});\n }\n /**\n * Check whether the list is empty.\n */\n isEmpty() {\n return Object.keys(this._items).length === 0;\n }\n\n /**\n * Check whether an item is present in the list.\n */\n has(key) {\n return Object.keys(this._items).includes(key);\n }\n\n /**\n * Get the content of an item.\n */\n get(key) {\n return this._items[key].content;\n }\n\n /**\n * Get the priority of an item.\n */\n getPriority(key) {\n return this._items[key].priority;\n }\n\n /**\n * Add an item to the list.\n *\n * @param key A unique key for the item.\n * @param content The item's content.\n * @param priority The priority of the item. Items with a higher priority\n * will be positioned before items with a lower priority.\n */\n add(key, content, priority) {\n if (priority === void 0) {\n priority = 0;\n }\n this._items[key] = new Item(content, priority);\n return this;\n }\n\n /**\n * Replaces an item's content, if the provided item key exists.\n *\n * If the provided `key` is not present, an error will be thrown.\n *\n * @param key The key of the item in the list\n * @param content The item's new content\n *\n * @example <caption>Replace item content.</caption>\n * items.setContent('myItem', <p>My new value.</p>);\n *\n * @example <caption>Replace item content and priority.</caption>\n * items\n * .setContent('myItem', <p>My new value.</p>)\n * .setPriority('myItem', 10);\n *\n * @throws If the provided `key` is not present in the ItemList.\n */\n setContent(key, content) {\n if (!this.has(key)) {\n throw new Error(\"[ItemList] Cannot set content of Item. Key `\".concat(key, \"` is not present.\"));\n }\n if (content !== null) {\n this._items[key].content = content;\n }\n return this;\n }\n\n /**\n * Replaces an item's priority, if the provided item key exists.\n *\n * If the provided `key` is not present, an error will be thrown.\n *\n * @param key The key of the item in the list\n * @param priority The item's new priority\n *\n * @example <caption>Replace item priority.</caption>\n * items.setPriority('myItem', 10);\n *\n * @example <caption>Replace item priority and content.</caption>\n * items\n * .setPriority('myItem', 10)\n * .setContent('myItem', <p>My new value.</p>);\n *\n * @throws If the provided `key` is not present in the ItemList.\n */\n setPriority(key, priority) {\n if (!this.has(key)) {\n throw new Error(\"[ItemList] Cannot set priority of Item. Key `\".concat(key, \"` is not present.\"));\n }\n this._items[key].priority = priority;\n return this;\n }\n\n /**\n * Remove an item from the list.\n *\n * If the provided `key` is not present, nothing will happen.\n */\n remove(key) {\n delete this._items[key];\n return this;\n }\n\n /**\n * Merge another list's items into this one.\n *\n * The list passed to this function will overwrite items which already exist\n * with the same key.\n */\n merge(otherList) {\n Object.keys(otherList._items).forEach(key => {\n const val = otherList._items[key];\n if (val instanceof Item) {\n this._items[key] = val;\n }\n });\n return this;\n }\n\n /**\n * Convert the list into an array of item content arranged by priority.\n *\n * This **does not** preserve the original types of primitives and proxies\n * all content values to make `itemName` accessible on them.\n *\n * **NOTE:** If your ItemList holds primitive types (such as numbers, booleans\n * or strings), these will be converted to their object counterparts if you do\n * not provide `true` to this function.\n *\n * **NOTE:** Modifying any objects in the final array may also update the\n * content of the original ItemList.\n *\n * @param keepPrimitives Converts item content to objects and sets the\n * `itemName` property on them.\n *\n * @see https://github.com/flarum/core/issues/3030\n */\n\n /**\n * Convert the list into an array of item content arranged by priority.\n *\n * Content values that are already objects will be proxied and have\n * `itemName` accessible on them. Primitive values will not have the\n * `itemName` property accessible.\n *\n * **NOTE:** Modifying any objects in the final array may also update the\n * content of the original ItemList.\n *\n * @param keepPrimitives Converts item content to objects and sets the\n * `itemName` property on them.\n */\n\n toArray(keepPrimitives) {\n if (keepPrimitives === void 0) {\n keepPrimitives = false;\n }\n const items = Object.keys(this._items).map((key, i) => {\n const item = this._items[key];\n if (!keepPrimitives || isObject(item.content)) {\n // Convert content to object, then proxy it\n return {\n ...item,\n content: this.createItemContentProxy(isObject(item.content) ? item.content : Object(item.content), key)\n };\n } else {\n // ...otherwise just return a clone of the item.\n return {\n ...item\n };\n }\n });\n return items.sort((a, b) => b.priority - a.priority).map(item => item.content);\n }\n\n /**\n * A read-only map of all keys to their respective items in no particular order.\n *\n * We don't allow adding new items to the ItemList via setting new properties,\n * nor do we allow modifying existing items directly. You should use the\n * {@link ItemList.add}, {@link ItemList.setContent} and\n * {@link ItemList.setPriority} methods instead.\n *\n * To match the old behaviour of the `ItemList.items` property, call\n * `Object.values(ItemList.toObject())`.\n *\n * @example\n * const items = new ItemList();\n * items.add('b', 'My cool value', 20);\n * items.add('a', 'My value', 10);\n * items.toObject();\n * // {\n * // a: { content: 'My value', priority: 10, itemName: 'a' },\n * // b: { content: 'My cool value', priority: 20, itemName: 'b' },\n * // }\n */\n toObject() {\n return Object.keys(this._items).reduce((map, key) => {\n const obj = {\n content: this.get(key),\n itemName: key,\n priority: this.getPriority(key)\n };\n map[key] = obj;\n return map;\n }, {});\n }\n\n /**\n * Proxies an item's content, adding the `itemName` readonly property to it.\n *\n * @example\n * createItemContentProxy({ foo: 'bar' }, 'myItem');\n * // { foo: 'bar', itemName: 'myItem' }\n *\n * @param content The item's content (objects only)\n * @param key The item's key\n * @return Proxied content\n *\n * @internal\n */\n createItemContentProxy(content, key) {\n return new Proxy(content, {\n get(target, property, receiver) {\n if (property === 'itemName') return key;\n return Reflect.get(target, property, receiver);\n },\n set(target, property, value, receiver) {\n if (key !== null && property === 'itemName') {\n throw new Error('`itemName` property is read-only');\n }\n return Reflect.set(target, property, value, receiver);\n }\n });\n }\n}\nflarum.reg.add('core', 'common/utils/ItemList', ItemList);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nvar Keys = /*#__PURE__*/function (Keys) {\n Keys[Keys[\"Enter\"] = 13] = \"Enter\";\n Keys[Keys[\"Escape\"] = 27] = \"Escape\";\n Keys[Keys[\"Space\"] = 32] = \"Space\";\n Keys[Keys[\"ArrowUp\"] = 38] = \"ArrowUp\";\n Keys[Keys[\"ArrowDown\"] = 40] = \"ArrowDown\";\n Keys[Keys[\"ArrowLeft\"] = 37] = \"ArrowLeft\";\n Keys[Keys[\"ArrowRight\"] = 39] = \"ArrowRight\";\n Keys[Keys[\"Tab\"] = 9] = \"Tab\";\n Keys[Keys[\"Backspace\"] = 8] = \"Backspace\";\n return Keys;\n}(Keys || {});\n/**\n * The `KeyboardNavigatable` class manages lists that can be navigated with the\n * keyboard, calling callbacks for each actions.\n *\n * This helper encapsulates the key binding logic, providing a simple fluent\n * API for use.\n */\nexport default class KeyboardNavigatable {\n constructor() {\n /**\n * Callback to be executed for a specified input.\n */\n _defineProperty(this, \"callbacks\", new Map());\n /**\n * Callback that determines whether keyboard input should be handled.\n * By default, always handle keyboard navigation.\n */\n _defineProperty(this, \"whenCallback\", event => true);\n }\n /**\n * Provide a callback to be executed when navigating upwards.\n *\n * This will be triggered by the Up key.\n */\n onUp(callback) {\n return this.onDirection(callback, Keys.ArrowUp);\n }\n\n /**\n * Provide a callback to be executed when navigating downwards.\n *\n * This will be triggered by the Down key.\n */\n onDown(callback) {\n return this.onDirection(callback, Keys.ArrowDown);\n }\n\n /**\n * Provide a callback to be executed when navigating leftwards.\n *\n * This will be triggered by the Left key.\n */\n onLeft(callback) {\n return this.onDirection(callback, Keys.ArrowLeft);\n }\n\n /**\n * Provide a callback to be executed when navigating rightwards.\n *\n * This will be triggered by the Right key.\n */\n onRight(callback) {\n return this.onDirection(callback, Keys.ArrowRight);\n }\n onDirection(callback, direction) {\n this.callbacks.set(direction, e => {\n e.preventDefault();\n callback(e);\n });\n return this;\n }\n\n /**\n * Provide a callback to be executed when the current item is selected..\n *\n * This will be triggered by the Return key (and Tab key, if not disabled).\n */\n onSelect(callback, ignoreTabPress) {\n if (ignoreTabPress === void 0) {\n ignoreTabPress = false;\n }\n const handler = e => {\n e.preventDefault();\n callback(e);\n };\n if (!ignoreTabPress) this.callbacks.set(Keys.Tab, handler);\n this.callbacks.set(Keys.Enter, handler);\n return this;\n }\n\n /**\n * Provide a callback to be executed when the current item is tabbed into.\n *\n * This will be triggered by the Tab key.\n */\n onTab(callback) {\n const handler = e => {\n e.preventDefault();\n callback(e);\n };\n this.callbacks.set(9, handler);\n return this;\n }\n\n /**\n * Provide a callback to be executed when the navigation is canceled.\n *\n * This will be triggered by the Escape key.\n */\n onCancel(callback) {\n this.callbacks.set(Keys.Escape, e => {\n e.stopPropagation();\n e.preventDefault();\n callback(e);\n });\n return this;\n }\n\n /**\n * Provide a callback to be executed when previous input is removed.\n *\n * This will be triggered by the Backspace key.\n */\n onRemove(callback) {\n this.callbacks.set(Keys.Backspace, e => {\n if (e instanceof KeyboardEvent && e.target instanceof HTMLInputElement && e.target.selectionStart === 0 && e.target.selectionEnd === 0) {\n callback(e);\n e.preventDefault();\n }\n });\n return this;\n }\n\n /**\n * Provide a callback that determines whether keyboard input should be handled.\n */\n when(callback) {\n this.whenCallback = callback;\n return this;\n }\n\n /**\n * Set up the navigation key bindings on the given jQuery element.\n */\n bindTo($element) {\n // Handle navigation key events on the navigatable element.\n $element[0].addEventListener('keydown', this.navigate.bind(this));\n }\n\n /**\n * Interpret the given keyboard event as navigation commands.\n */\n navigate(event) {\n // This callback determines whether keyboard should be handled or ignored.\n if (!this.whenCallback(event)) return;\n const keyCallback = this.callbacks.get(event.which);\n if (keyCallback) {\n keyCallback(event);\n }\n }\n}\nflarum.reg.add('core', 'common/utils/KeyboardNavigatable', KeyboardNavigatable);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class RequestError {\n constructor(status, responseText, options, xhr) {\n _defineProperty(this, \"status\", void 0);\n _defineProperty(this, \"options\", void 0);\n _defineProperty(this, \"xhr\", void 0);\n _defineProperty(this, \"responseText\", void 0);\n _defineProperty(this, \"response\", void 0);\n _defineProperty(this, \"alert\", void 0);\n this.status = status;\n this.responseText = responseText;\n this.options = options;\n this.xhr = xhr;\n try {\n this.response = JSON.parse(responseText != null ? responseText : 'null');\n } catch (e) {\n this.response = null;\n }\n this.alert = null;\n }\n}\nflarum.reg.add('core', 'common/utils/RequestError', RequestError);","import Stream from 'mithril/stream';\nexport default Stream;\nflarum.reg.add('core', 'common/utils/Stream', Stream);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/**\n * The `SubtreeRetainer` class keeps track of a number of pieces of data,\n * comparing the values of these pieces at every iteration.\n *\n * This is useful for preventing redraws to relatively static (or huge)\n * components whose VDOM only depends on very few values, when none of them\n * have changed.\n *\n * @example\n * // Check two callbacks for changes on each update\n * this.subtree = new SubtreeRetainer(\n * () => this.attrs.post.freshness,\n * () => this.showing\n * );\n *\n * // Add more callbacks to be checked for updates\n * this.subtree.check(() => this.attrs.user.freshness);\n *\n * // In a component's onbeforeupdate() method:\n * return this.subtree.needsRebuild()\n *\n * @see https://mithril.js.org/lifecycle-methods.html#onbeforeupdate\n */\nexport default class SubtreeRetainer {\n /**\n * @param callbacks Functions returning data to keep track of.\n */\n constructor() {\n _defineProperty(this, \"callbacks\", void 0);\n _defineProperty(this, \"data\", void 0);\n for (var _len = arguments.length, callbacks = new Array(_len), _key = 0; _key < _len; _key++) {\n callbacks[_key] = arguments[_key];\n }\n this.callbacks = callbacks;\n this.data = {};\n\n // Build the initial data, so it is available when calling\n // needsRebuild from the onbeforeupdate hook.\n this.needsRebuild();\n }\n\n /**\n * Return whether any data has changed since the last check.\n * If so, Mithril needs to re-diff the vnode and its children.\n */\n needsRebuild() {\n let needsRebuild = false;\n this.callbacks.forEach((callback, i) => {\n const result = callback();\n if (result !== this.data[i]) {\n this.data[i] = result;\n needsRebuild = true;\n }\n });\n return needsRebuild;\n }\n\n /**\n * Add another callback to be checked.\n */\n check() {\n for (var _len2 = arguments.length, callbacks = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n callbacks[_key2] = arguments[_key2];\n }\n this.callbacks = this.callbacks.concat(callbacks);\n // Update the data cache when new checks are added.\n this.needsRebuild();\n }\n\n /**\n * Invalidate the subtree, forcing it to be redrawn.\n */\n invalidate() {\n this.data = {};\n }\n}\nflarum.reg.add('core', 'common/utils/SubtreeRetainer', SubtreeRetainer);","import app from '../../common/app';\nimport extractText from './extractText';\n\n/**\n * The `abbreviateNumber` utility converts a number to a shorter localized form.\n *\n * @example\n * abbreviateNumber(1234);\n * // \"1.2K\"\n */\nexport default function abbreviateNumber(number) {\n // TODO: translation\n if (number >= 1000000) {\n return Math.floor(number / 1000000) + extractText(app.translator.trans('core.lib.number_suffix.mega_text'));\n } else if (number >= 1000) {\n return (number / 1000).toFixed(1) + extractText(app.translator.trans('core.lib.number_suffix.kilo_text'));\n } else {\n return number.toString();\n }\n}\nflarum.reg.add('core', 'common/utils/abbreviateNumber', abbreviateNumber);","// Based off of the polyfill on MDN\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat#reduce_concat_isarray_recursivity\n//\n// Needed to provide support for Safari on iOS < 12\n\n// ts-ignored because we can afford to encapsulate some messy logic behind the clean typings.\n\nif (!Array.prototype['flat']) {\n Array.prototype['flat'] = function flat(depth) {\n // @ts-ignore\n return (depth != null ? depth : 1) > 0 ?\n // @ts-ignore\n Array.prototype.reduce.call(this, (acc, val) => acc.concat(Array.isArray(val) ? flat.call(val, depth - 1) : val), []) :\n // If no depth is provided, or depth is 0, just return a copy of\n // the array. Spread is supported in all major browsers (iOS 8+)\n // @ts-ignore\n [...this];\n };\n}","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f);else for(t in e)e[t]&&(n&&(n+=\" \"),n+=t);return n}export function clsx(){for(var e,t,f=0,n=\"\";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import clsx from 'clsx';\n\n/**\n * This util exposes `clsx` to core and extensions as a re-usable utility.\n *\n * For full documentation, see `clsx` on GitHub.\n *\n * @see https://github.com/lukeed/clsx\n */\nconst classList = clsx;\nexport default classList;\nflarum.reg.add('core', 'common/utils/classList', classList);","/**\n * The `computed` utility creates a function that will cache its output until\n * any of the dependent values are dirty.\n *\n * @param dependentKeys The keys of the dependent values.\n * @param compute The function which computes the value using the\n * dependent values.\n */\nexport default function computed() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n const keys = args.slice(0, -1);\n const compute = args.slice(-1)[0];\n const dependentValues = {};\n let computedValue;\n return function () {\n let recompute = false;\n\n // Read all of the dependent values. If any of them have changed since last\n // time, then we'll want to recompute our output.\n keys.forEach(key => {\n const attr = this[key];\n const value = typeof attr === 'function' ? attr.call(this) : attr;\n if (dependentValues[key] !== value) {\n recompute = true;\n dependentValues[key] = value;\n }\n });\n if (recompute) {\n computedValue = compute.apply(this, keys.map(key => dependentValues[key]));\n }\n return computedValue;\n };\n}\nflarum.reg.add('core', 'common/utils/computed', computed);","const specialChars = /[.*+?^${}()|[\\]\\\\]/g;\n\n/**\n * Escapes the `RegExp` special characters in `input`.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping\n */\nexport default function escapeRegExp(input) {\n return input.replace(specialChars, '\\\\$&');\n}\nflarum.reg.add('core', 'common/utils/escapeRegExp', escapeRegExp);","/**\n * The `extract` utility deletes a property from an object and returns its\n * value.\n *\n * @param object The object that owns the property\n * @param property The name of the property to extract\n * @return The value of the property\n */\nexport default function extract(object, property) {\n const value = object[property];\n delete object[property];\n return value;\n}\nflarum.reg.add('core', 'common/utils/extract', extract);","/**\n * Extract the text nodes from a virtual element.\n */\nexport default function extractText(vdom) {\n if (vdom instanceof Array) {\n return vdom.map(element => extractText(element)).join('');\n } else if (typeof vdom === 'object' && vdom !== null) {\n return extractText(vdom.children);\n } else {\n return String(vdom);\n }\n}\nflarum.reg.add('core', 'common/utils/extractText', extractText);","import { createFocusTrap as _createFocusTrap } from 'focus-trap';\n\n/**\n * Creates a focus trap for the given element with the given options.\n * \n * This function applies some default options that are different to the library.\n * Your own options still override these custom defaults:\n * \n * ```json\n * {\n escapeDeactivates: false,\n * }\n * ```\n * \n * @param element The element to be the focus trap, or a selector that will be used to find the element.\n * \n * @see https://github.com/focus-trap/focus-trap#readme - Library documentation\n */\nfunction createFocusTrap() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n args[1] = {\n escapeDeactivates: false,\n ...args[1]\n };\n return _createFocusTrap(...args);\n}\nexport * from 'focus-trap';\nexport { createFocusTrap };\nflarum.reg.add('core', 'common/utils/focusTrap', { createFocusTrap: createFocusTrap, });","import app from '../../common/app';\n\n/**\n * The `formatNumber` utility localizes a number into a string with the\n * appropriate punctuation based on the provided locale otherwise will default to the users locale.\n *\n * @example\n * formatNumber(1234);\n * // 1,234\n */\nexport default function formatNumber(number, locale) {\n if (locale === void 0) {\n locale = app.data.locale;\n }\n return new Intl.NumberFormat(locale).format(number);\n}\nflarum.reg.add('core', 'common/utils/formatNumber', formatNumber);","import dayjs from 'dayjs';\n\n/**\n * The `humanTime` utility converts a date to a localized, human-readable time-\n * ago string.\n */\nexport default function humanTime(time) {\n let d = dayjs(time);\n const now = dayjs();\n\n // To prevent showing things like \"in a few seconds\" due to small offsets\n // between client and server time, we always reset future dates to the\n // current time. This will result in \"just now\" being shown instead.\n if (d.isAfter(now)) {\n d = now;\n }\n const day = 864e5;\n const diff = d.diff(dayjs());\n let ago;\n\n // If this date was more than a month ago, we'll show the name of the month\n // in the string. If it wasn't this year, we'll show the year as well.\n if (diff < -30 * day) {\n if (d.year() === dayjs().year()) {\n ago = d.format('D MMM');\n } else {\n ago = d.format('ll');\n }\n } else {\n ago = d.fromNow();\n }\n return ago;\n}\nflarum.reg.add('core', 'common/utils/humanTime', humanTime);","/*\n * Original Copyright GitHub, Inc. Licensed under the MIT License.\n * See license text at https://github.com/github/markdown-toolbar-element/blob/master/LICENSE.\n */\n\nlet canInsertText = null;\nexport default function insertText(textarea, _ref) {\n let {\n text,\n selectionStart,\n selectionEnd\n } = _ref;\n const originalSelectionStart = textarea.selectionStart;\n const before = textarea.value.slice(0, originalSelectionStart);\n const after = textarea.value.slice(textarea.selectionEnd);\n if (canInsertText === null || canInsertText === true) {\n textarea.contentEditable = 'true';\n try {\n canInsertText = document.execCommand('insertText', false, text);\n } catch (error) {\n canInsertText = false;\n }\n textarea.contentEditable = 'false';\n }\n if (canInsertText && !textarea.value.slice(0, textarea.selectionStart).endsWith(text)) {\n canInsertText = false;\n }\n if (!canInsertText) {\n textarea.value = before + text + after;\n textarea.dispatchEvent(new CustomEvent('input', {\n bubbles: true,\n cancelable: true\n }));\n }\n if (selectionStart != null && selectionEnd != null) {\n textarea.setSelectionRange(selectionStart, selectionEnd);\n } else {\n textarea.setSelectionRange(originalSelectionStart, textarea.selectionEnd);\n }\n}\nflarum.reg.add('core', 'common/utils/insertText', insertText);","/**\n * The `isDark` utility converts a hex color to rgb, and then calculates a YIQ\n * value in order to get the appropriate brightness value. See\n * https://www.w3.org/TR/AERT/#color-contrast for references.\n *\n * A YIQ value >= 128 corresponds to a light color according to the W3C\n * standards, but we use a custom threshold for each light and dark modes\n * to preserve design consistency.\n */\nexport default function isDark(hexcolor) {\n // return if hexcolor is undefined or shorter than 4 characters, shortest hex form is #333;\n // decided against regex hex color validation for performance considerations\n if (!hexcolor || hexcolor.length < 4) {\n return false;\n }\n let hexnumbers = hexcolor.replace('#', '');\n if (hexnumbers.length === 3) {\n hexnumbers = hexnumbers.split('').map(char => char.repeat(2)).join('');\n }\n const r = parseInt(hexnumbers.slice(0, 2), 16);\n const g = parseInt(hexnumbers.slice(2, 4), 16);\n const b = parseInt(hexnumbers.slice(4, 6), 16);\n const yiq = (r * 299 + g * 587 + b * 114) / 1000;\n const threshold = parseInt(getComputedStyle(document.body).getPropertyValue('--yiq-threshold').trim()) || 128;\n return yiq < threshold;\n}\nflarum.reg.add('core', 'common/utils/isDark', isDark);","/**\n * Returns if the passed value is an object.\n *\n * In this context, \"object\" refers to **any non-primitive value**, including\n * arrays, function, maps, dates, and more.\n *\n * @example\n * isObject({}); // true\n * @example\n * isObject([]); // true\n * @example\n * isObject(function () {}); // true\n * @example\n * isObject(Object(1)); // true\n * @example\n * isObject(null); // false\n * @example\n * isObject(1); // false\n * @example\n * isObject(\"hello world\"); // false\n *\n * @see https://github.com/jashkenas/underscore/blob/943977e34e2279503528a71ddcc2dd5f96483945/underscore.js#L87-L91\n */\nexport default function isObject(obj) {\n const type = typeof obj;\n return type === 'function' || type === 'object' && !!obj;\n}\nflarum.reg.add('core', 'common/utils/isObject', isObject);","import humanTime from './humanTime';\nfunction updateHumanTimes() {\n $('[data-humantime]').each(function () {\n const $this = $(this);\n const ago = humanTime($this.attr('datetime'));\n $this.html(ago);\n });\n}\n\n/**\n * The `liveHumanTimes` initializer sets up a loop every 1 second to update\n * timestamps rendered with the `humanTime` helper.\n */\nexport default function liveHumanTimes() {\n setInterval(updateHumanTimes, 10000);\n}\nflarum.reg.add('core', 'common/utils/liveHumanTimes', liveHumanTimes);","import DefaultResolver from '../resolvers/DefaultResolver';\n\n/**\n * The `mapRoutes` utility converts a map of named application routes into a\n * format that can be understood by Mithril, and wraps them in route resolvers\n * to provide each route with the current route name.\n *\n * @see https://mithril.js.org/route.html#signature\n */\nexport default function mapRoutes(routes, basePath) {\n if (basePath === void 0) {\n basePath = '';\n }\n const map = {};\n for (const routeName in routes) {\n const route = routes[routeName];\n if ('resolver' in route) {\n map[basePath + route.path] = route.resolver;\n } else if ('component' in route) {\n const resolverClass = 'resolverClass' in route ? route.resolverClass : DefaultResolver;\n map[basePath + route.path] = new resolverClass(route.component, routeName);\n } else {\n throw new Error(\"Either a resolver or a component must be provided for the route [\".concat(routeName, \"]\"));\n }\n }\n return map;\n}\nflarum.reg.add('core', 'common/utils/mapRoutes', mapRoutes);","/**\n * Mithril 2 does not completely rerender the page if a route change leads to the same route\n * (or the same component handling a different route). This util calls m.route.set, forcing a reonit.\n *\n * @see https://mithril.js.org/route.html#key-parameter\n */\nexport default function setRouteWithForcedRefresh(route, params, options) {\n if (params === void 0) {\n params = null;\n }\n if (options === void 0) {\n options = {};\n }\n const newOptions = {\n ...options\n };\n newOptions.state = newOptions.state || {};\n newOptions.state.key = Date.now();\n m.route.set(route, params, newOptions);\n}\nflarum.reg.add('core', 'common/utils/setRouteWithForcedRefresh', setRouteWithForcedRefresh);","/**\n * Truncate a string to the given length, appending ellipses if necessary.\n */\nexport function truncate(string, length, start) {\n if (start === void 0) {\n start = 0;\n }\n return (start > 0 ? '...' : '') + string.substring(start, start + length) + (string.length > start + length ? '...' : '');\n}\n\n/**\n * Create a slug out of the given string depending on the selected mode.\n * Invalid characters are converted to hyphens.\n *\n * NOTE: This method does not use the comparably sophisticated transliteration\n * mechanism that is employed in the backend. Therefore, it should only be used\n * to *suggest* slugs that can be overridden by the user.\n */\nexport function slug(string, mode) {\n if (mode === void 0) {\n mode = SluggingMode.ALPHANUMERIC;\n }\n switch (mode) {\n case SluggingMode.UTF8:\n return string.toLowerCase()\n // Match non-word characters (take UTF8 into consideration) and replace with a dash.\n .replace(/[^\\p{L}\\p{N}\\p{M}]/giu, '-').replace(/-+/g, '-').replace(/-$|^-/g, '');\n case SluggingMode.ALPHANUMERIC:\n default:\n return string.toLowerCase().replace(/[^a-z0-9]/gi, '-').replace(/-+/g, '-').replace(/-$|^-/g, '');\n }\n}\nexport let SluggingMode = /*#__PURE__*/function (SluggingMode) {\n SluggingMode[\"ALPHANUMERIC\"] = \"alphanum\";\n SluggingMode[\"UTF8\"] = \"utf8\";\n return SluggingMode;\n}({});\n\n/**\n * Strip HTML tags and quotes out of the given string, replacing them with\n * meaningful punctuation.\n */\nexport function getPlainContent(string) {\n const html = string.replace(/(<\\/p>|<br>)/g, '$1  ').replace(/<img\\b[^>]*>/gi, ' ');\n const element = new DOMParser().parseFromString(html, 'text/html').documentElement;\n getPlainContent.removeSelectors.forEach(selector => {\n const el = element.querySelectorAll(selector);\n el.forEach(e => {\n e.remove();\n });\n });\n return element.innerText.replace(/\\s+/g, ' ').trim();\n}\n\n/**\n * An array of DOM selectors to remove when getting plain content.\n *\n * @type {Array}\n */\ngetPlainContent.removeSelectors = ['blockquote', 'script'];\n\n/**\n * Make a string's first character uppercase.\n */\nexport function ucfirst(string) {\n return string.substr(0, 1).toUpperCase() + string.substr(1);\n}\n\n/**\n * Transform a camel case string to snake case.\n */\nexport function camelCaseToSnakeCase(str) {\n return str.replace(/[A-Z]/g, letter => \"_\".concat(letter.toLowerCase()));\n}\n\n/**\n * Generate a random string (a-z, 0-9) of a given length.\n *\n * Providing a length of less than 0 will result in an error.\n *\n * @param length Length of the random string to generate\n * @returns A random string of provided length\n */\nexport function generateRandomString(length) {\n if (length < 0) throw new Error('Cannot generate a random string with length less than 0.');\n if (length === 0) return '';\n const arr = new Uint8Array(length / 2);\n window.crypto.getRandomValues(arr);\n return Array.from(arr, dec => {\n return dec.toString(16).padStart(2, '0');\n }).join('');\n}\nflarum.reg.add('core', 'common/utils/string', { truncate: truncate,slug: slug,SluggingMode: SluggingMode,getPlainContent: getPlainContent,ucfirst: ucfirst,camelCaseToSnakeCase: camelCaseToSnakeCase,generateRandomString: generateRandomString, });","function hsvToRgb(h, s, v) {\n let r;\n let g;\n let b;\n const i = Math.floor(h * 6);\n const f = h * 6 - i;\n const p = v * (1 - s);\n const q = v * (1 - f * s);\n const t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n return {\n r: Math.floor(r * 255),\n g: Math.floor(g * 255),\n b: Math.floor(b * 255)\n };\n}\n\n/**\n * Convert the given string to a unique color.\n */\nexport default function stringToColor(string) {\n let num = 0;\n\n // Convert the username into a number based on the ASCII value of each\n // character.\n for (let i = 0; i < string.length; i++) {\n num += string.charCodeAt(i);\n }\n\n // Construct a color using the remainder of that number divided by 360, and\n // some predefined saturation and value values.\n const hue = num % 360;\n const rgb = hsvToRgb(hue / 360, 0.3, 0.9);\n return '' + rgb.r.toString(16) + rgb.g.toString(16) + rgb.b.toString(16);\n}\nflarum.reg.add('core', 'common/utils/stringToColor', stringToColor);","/**\n * An event handler factory that makes it simpler to implement data binding\n * for component event listeners.\n *\n * The handler created by this factory passes the DOM element's attribute\n * identified by the first argument to the callback (usually a bidirectional\n * Mithril stream: https://mithril.js.org/stream.html#bidirectional-bindings).\n *\n * Replaces m.withAttr for Mithril 2.0.\n * @see https://mithril.js.org/archive/v0.2.5/mithril.withAttr.html\n */\nexport default function withAttr(key, cb) {\n return function () {\n cb(this.getAttribute(key) || this[key]);\n };\n}\nflarum.reg.add('core', 'common/utils/withAttr', withAttr);","/**\n * @see https://stackoverflow.com/a/31732310\n */\nexport default function isSafariMobile() {\n return 'ontouchstart' in window && navigator.vendor != null && navigator.vendor.includes('Apple') && navigator.userAgent != null && !navigator.userAgent.includes('CriOS') && !navigator.userAgent.includes('FxiOS');\n}\nflarum.reg.add('core', 'forum/utils/isSafariMobile', isSafariMobile);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\nimport Alert from '../../common/components/Alert';\nimport Button from '../../common/components/Button';\nimport Icon from '../../common/components/Icon';\nexport default class Notices extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", false);\n _defineProperty(this, \"sent\", false);\n }\n view() {\n return m(\"div\", {\n className: \"App-notices\"\n }, this.items().toArray());\n }\n items() {\n const items = new ItemList();\n const user = app.session.user;\n if (user && !user.isEmailConfirmed()) {\n items.add('emailConfirmation', m(Alert, {\n dismissible: false,\n controls: [m(Button, {\n className: \"Button Button--link\",\n onclick: this.onclickEmailConfirmation.bind(this),\n loading: this.loading,\n disabled: this.sent\n }, this.sent ? [m(Icon, {\n name: 'fas fa-check'\n }), ' ', app.translator.trans('core.forum.user_email_confirmation.sent_message')] : app.translator.trans('core.forum.user_email_confirmation.resend_button'))],\n className: \"Alert--emailConfirmation\",\n containerClassName: \"container\"\n }, app.translator.trans('core.forum.user_email_confirmation.alert_message', {\n email: m(\"strong\", null, user.email())\n })), 100);\n }\n if (app.data.bisecting) {\n items.add('bisecting', m(Alert, {\n type: \"error\",\n dismissible: false,\n className: \"Alert--bisecting\",\n containerClassName: \"container\",\n controls: [m(\"a\", {\n className: \"Button Button--link\",\n target: \"_blank\",\n href: app.forum.attribute('adminUrl') + '#/advanced?modal=extension-bisect'\n }, app.translator.trans('core.lib.notices.bisecting_continue'))]\n }, app.translator.trans('core.lib.notices.bisecting')), 90);\n }\n if (app.data.maintenanceMode) {\n items.add('maintenanceMode', m(Alert, {\n type: \"error\",\n dismissible: false,\n className: \"Alert--maintenanceMode\",\n containerClassName: \"container\"\n }, app.translator.trans('core.lib.notices.maintenance_mode_' + app.data.maintenanceMode)), 80);\n }\n return items;\n }\n onclickEmailConfirmation() {\n const user = app.session.user;\n this.loading = true;\n m.redraw();\n app.request({\n method: 'POST',\n url: app.forum.attribute('apiUrl') + '/users/' + user.id() + '/send-confirmation'\n }).then(() => {\n this.loading = false;\n this.sent = true;\n m.redraw();\n }).catch(() => {\n this.loading = false;\n m.redraw();\n });\n }\n}\nflarum.reg.add('core', 'forum/components/Notices', Notices);","import Component from '../../common/Component';\nexport default class Footer extends Component {\n view() {\n return null;\n }\n}\nflarum.reg.add('core', 'forum/components/Footer', Footer);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from './app';\nimport History from './utils/History';\nimport Pane from './utils/Pane';\nimport DiscussionPage from './components/DiscussionPage';\nimport HeaderPrimary from './components/HeaderPrimary';\nimport HeaderSecondary from './components/HeaderSecondary';\nimport DiscussionRenamedNotification from './components/DiscussionRenamedNotification';\nimport CommentPost from './components/CommentPost';\nimport DiscussionRenamedPost from './components/DiscussionRenamedPost';\nimport routes, { makeRouteHelpers } from './routes';\nimport Application from '../common/Application';\nimport Navigation from '../common/components/Navigation';\nimport NotificationListState from './states/NotificationListState';\nimport GlobalSearchState from './states/GlobalSearchState';\nimport DiscussionListState from './states/DiscussionListState';\nimport ComposerState from './states/ComposerState';\nimport isSafariMobile from './utils/isSafariMobile';\nimport extractText from '../common/utils/extractText';\nimport Notices from './components/Notices';\nimport Footer from './components/Footer';\nimport SearchManager from '../common/SearchManager';\nexport default class ForumApplication extends Application {\n constructor() {\n super();\n /**\n * A map of notification types to their components.\n */\n _defineProperty(this, \"notificationComponents\", {\n discussionRenamed: DiscussionRenamedNotification\n });\n /**\n * A map of post types to their components.\n */\n _defineProperty(this, \"postComponents\", {\n comment: CommentPost,\n discussionRenamed: DiscussionRenamedPost\n });\n /**\n * An object which controls the state of the page's side pane.\n */\n _defineProperty(this, \"pane\", null);\n /**\n * The app's history stack, which keeps track of which routes the user visits\n * so that they can easily navigate back to the previous route.\n */\n _defineProperty(this, \"history\", new History());\n /**\n * An object which controls the state of the user's notifications.\n */\n _defineProperty(this, \"notifications\", new NotificationListState());\n /**\n * An object which stores the global search state and manages search capabilities.\n */\n _defineProperty(this, \"search\", new SearchManager(new GlobalSearchState()));\n /**\n * An object which controls the state of the composer.\n */\n _defineProperty(this, \"composer\", new ComposerState());\n /**\n * An object which controls the state of the cached discussion list, which\n * is used in the index page and the slideout pane.\n */\n _defineProperty(this, \"discussions\", new DiscussionListState({}));\n _defineProperty(this, \"route\", void 0);\n _defineProperty(this, \"data\", void 0);\n routes(this);\n this.route = Object.assign(Object.getPrototypeOf(Object.getPrototypeOf(this)).route.bind(this), makeRouteHelpers(this));\n }\n\n /**\n * @inheritdoc\n */\n mount() {\n // Get the configured default route and update that route's path to be '/'.\n // Push the homepage as the first route, so that the user will always be\n // able to click on the 'back' button to go home, regardless of which page\n // they started on.\n const defaultRoute = this.forum.attribute('defaultRoute');\n let defaultAction = 'index';\n for (const i in this.routes) {\n if (this.routes[i].path === defaultRoute) defaultAction = i;\n }\n this.routes[defaultAction].path = '/';\n this.history.push(defaultAction, extractText(this.translator.trans('core.forum.header.back_to_index_tooltip')), '/');\n this.pane = new Pane(document.getElementById('app'));\n m.route.prefix = '';\n super.mount(this.forum.attribute('basePath'));\n\n // We mount navigation and header components after the page, so components\n // like the back button can access the updated state when rendering.\n m.mount(document.getElementById('app-navigation'), {\n view: () => m(Navigation, {\n className: \"App-backControl\",\n drawer: true\n })\n });\n m.mount(document.getElementById('header-navigation'), Navigation);\n m.mount(document.getElementById('header-primary'), HeaderPrimary);\n m.mount(document.getElementById('header-secondary'), HeaderSecondary);\n m.mount(document.getElementById('notices'), Notices);\n m.mount(document.getElementById('footer'), Footer);\n\n // Route the home link back home when clicked. We do not want it to register\n // if the user is opening it in a new tab, however.\n document.getElementById('home-link').addEventListener('click', e => {\n var _app$session$user;\n if (e.ctrlKey || e.metaKey || e.button === 1) return;\n e.preventDefault();\n app.history.home();\n\n // Reload the current user so that their unread notification count is refreshed.\n const userId = (_app$session$user = app.session.user) == null ? void 0 : _app$session$user.id();\n if (userId) {\n app.store.find('users', userId);\n m.redraw();\n }\n });\n if (isSafariMobile()) {\n $(() => {\n $('.App').addClass('mobile-safari');\n });\n }\n }\n\n /**\n * Check whether or not the user is currently viewing a discussion.\n */\n viewingDiscussion(discussion) {\n return this.current.matches(DiscussionPage, {\n discussion\n });\n }\n\n /**\n * Callback for when an external authenticator (social login) action has\n * completed.\n *\n * If the payload indicates that the user has been logged in, then the page\n * will be reloaded. Otherwise, a SignUpModal will be opened, prefilled\n * with the provided details.\n */\n authenticationComplete(payload) {\n if (payload.loggedIn) {\n window.location.reload();\n } else {\n this.modal.show(() => import(/* webpackChunkName: 'forum/components/SignUpModal', webpackMode: 'lazy-once' */ './components/SignUpModal'), payload);\n }\n }\n}","import Forum from './ForumApplication';\nconst app = new Forum();\n\n// @ts-expect-error We need to do this for backwards compatibility purposes.\nwindow.app = app;\nexport default app;\nflarum.reg.add('core', 'forum/app', app);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport Component from '../../common/Component';\nimport Link from '../../common/components/Link';\nimport listItems from '../../common/helpers/listItems';\nimport highlight from '../../common/helpers/highlight';\nimport humanTime from '../../common/utils/humanTime';\nimport ItemList from '../../common/utils/ItemList';\nimport abbreviateNumber from '../../common/utils/abbreviateNumber';\nimport Dropdown from '../../common/components/Dropdown';\nimport TerminalPost from './TerminalPost';\nimport SubtreeRetainer from '../../common/utils/SubtreeRetainer';\nimport DiscussionControls from '../utils/DiscussionControls';\nimport slidable from '../utils/slidable';\nimport classList from '../../common/utils/classList';\nimport DiscussionPage from './DiscussionPage';\nimport escapeRegExp from '../../common/utils/escapeRegExp';\nimport Tooltip from '../../common/components/Tooltip';\nimport Icon from '../../common/components/Icon';\nimport Avatar from '../../common/components/Avatar';\n/**\n * The `DiscussionListItem` component shows a single discussion in the\n * discussion list.\n */\nexport default class DiscussionListItem extends Component {\n constructor() {\n super(...arguments);\n /**\n * Ensures that the discussion will not be redrawn\n * unless new data comes in.\n */\n _defineProperty(this, \"subtree\", void 0);\n _defineProperty(this, \"highlightRegExp\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.subtree = new SubtreeRetainer(() => this.attrs.discussion.freshness, () => {\n const time = app.session.user && app.session.user.markedAllAsReadAt();\n return time && time.getTime();\n }, () => this.active());\n }\n elementAttrs() {\n return {\n className: classList('DiscussionListItem', this.attrs.className, {\n active: this.active(),\n 'DiscussionListItem--hidden': this.attrs.discussion.isHidden(),\n Slidable: 'ontouchstart' in window\n })\n };\n }\n view() {\n const attrs = this.elementAttrs();\n return m(\"div\", attrs, this.viewItems().toArray());\n }\n viewItems() {\n const items = new ItemList();\n const controls = DiscussionControls.controls(this.attrs.discussion, this).toArray();\n if (controls.length) {\n items.add('controls', this.controlsView(controls), 100);\n }\n items.add('slidableUnderneath', this.slidableUnderneathView(), 90);\n items.add('content', this.contentView(), 80);\n return items;\n }\n controlsView(controls) {\n return m(Dropdown, {\n icon: \"fas fa-ellipsis-v\",\n className: \"DiscussionListItem-controls\",\n buttonClassName: \"Button Button--icon Button--flat Slidable-underneath Slidable-underneath--right\",\n accessibleToggleLabel: app.translator.trans('core.forum.discussion_controls.toggle_dropdown_accessible_label')\n }, controls);\n }\n slidableUnderneathView() {\n const discussion = this.attrs.discussion;\n const isUnread = discussion.isUnread();\n return m(\"span\", {\n className: classList('Slidable-underneath Slidable-underneath--left Slidable-underneath--elastic', {\n disabled: !isUnread\n }),\n onclick: this.markAsRead.bind(this)\n }, m(Icon, {\n name: 'fas fa-check'\n }));\n }\n contentView() {\n const discussion = this.attrs.discussion;\n const isUnread = discussion.isUnread();\n const isRead = discussion.isRead();\n return m(\"div\", {\n className: classList('DiscussionListItem-content', 'Slidable-content', {\n unread: isUnread,\n read: isRead\n })\n }, this.contentItems().toArray());\n }\n contentItems() {\n const items = new ItemList();\n items.add('author', this.authorView(), 100);\n items.add('main', this.mainView(), 80);\n items.add('stats', this.statsView(), 70);\n return items;\n }\n authorView() {\n return m(\"div\", {\n className: \"DiscussionListItem-author\"\n }, this.authorItems().toArray());\n }\n authorItems() {\n const items = new ItemList();\n const discussion = this.attrs.discussion;\n const user = this.attrs.author || discussion.user();\n items.add('avatar', m(Tooltip, {\n text: app.translator.trans('core.forum.discussion_list.started_text', {\n user,\n ago: humanTime(discussion.createdAt())\n }),\n position: \"right\"\n }, user ? m(Link, {\n className: \"DiscussionListItem-author-avatar\",\n href: app.route.user(user)\n }, m(Avatar, {\n user: user,\n title: \"\"\n })) : m(\"span\", {\n className: \"DiscussionListItem-author-avatar\"\n }, m(Avatar, {\n user: null,\n title: \"\"\n }))), 100);\n items.add('badges', this.badgesView(), 90);\n return items;\n }\n badgesView() {\n const discussion = this.attrs.discussion;\n return m(\"ul\", {\n className: \"DiscussionListItem-badges badges badges--packed\"\n }, listItems(discussion.badges().toArray()));\n }\n mainView() {\n const discussion = this.attrs.discussion;\n const jumpTo = this.getJumpTo();\n return m(Link, {\n href: app.route.discussion(discussion, jumpTo),\n className: \"DiscussionListItem-main\"\n }, m(\"h2\", {\n className: \"DiscussionListItem-title\"\n }, highlight(discussion.title(), this.highlightRegExp)), m(\"ul\", {\n className: \"DiscussionListItem-info\"\n }, listItems(this.infoItems().toArray())));\n }\n getJumpTo() {\n if (this.attrs.jumpTo) {\n return this.attrs.jumpTo;\n }\n const discussion = this.attrs.discussion;\n let jumpTo = 0;\n if (this.attrs.params.q) {\n const post = discussion.mostRelevantPost();\n if (post) {\n jumpTo = post.number();\n }\n const phrase = escapeRegExp(this.attrs.params.q);\n this.highlightRegExp = new RegExp(phrase + '|' + phrase.trim().replace(/\\s+/g, '|'), 'gi');\n } else {\n var _discussion$lastPostN;\n jumpTo = Math.min((_discussion$lastPostN = discussion.lastPostNumber()) != null ? _discussion$lastPostN : 0, (discussion.lastReadPostNumber() || 0) + 1);\n }\n return jumpTo;\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n\n // If we're on a touch device, set up the discussion row to be slidable.\n // This allows the user to drag the row to either side of the screen to\n // reveal controls.\n if ('ontouchstart' in window) {\n const slidableInstance = slidable(this.element);\n this.$('.DiscussionListItem-controls').on('hidden.bs.dropdown', () => slidableInstance.reset());\n }\n }\n onbeforeupdate(vnode) {\n super.onbeforeupdate(vnode);\n return this.subtree.needsRebuild();\n }\n\n /**\n * Determine whether or not the discussion is currently being viewed.\n */\n active() {\n return app.current.matches(DiscussionPage, {\n discussion: this.attrs.discussion\n });\n }\n\n /**\n * Determine whether or not information about who started the discussion\n * should be displayed instead of information about the most recent reply to\n * the discussion.\n */\n showFirstPost() {\n var _this$attrs$params$so;\n return ['newest', 'oldest'].includes((_this$attrs$params$so = this.attrs.params.sort) != null ? _this$attrs$params$so : '');\n }\n\n /**\n * Determine whether or not the number of replies should be shown instead of\n * the number of unread posts.\n *\n * @return {boolean}\n */\n showRepliesCount() {\n return this.attrs.params.sort === 'replies';\n }\n\n /**\n * Mark the discussion as read.\n */\n markAsRead() {\n const discussion = this.attrs.discussion;\n if (discussion.isUnread()) {\n discussion.save({\n lastReadPostNumber: discussion.lastPostNumber()\n });\n m.redraw();\n }\n }\n\n /**\n * Build an item list of info for a discussion listing. By default this is\n * just the first/last post indicator.\n */\n infoItems() {\n const items = new ItemList();\n if (this.attrs.params.q) {\n const post = this.attrs.post || this.attrs.discussion.mostRelevantPost() || this.attrs.discussion.firstPost();\n if (post && post.contentType() === 'comment') {\n var _post$contentPlain;\n const excerpt = highlight((_post$contentPlain = post.contentPlain()) != null ? _post$contentPlain : '', this.highlightRegExp, 175);\n items.add('excerpt', excerpt, -100);\n }\n } else {\n items.add('terminalPost', m(TerminalPost, {\n discussion: this.attrs.discussion,\n lastPost: !this.showFirstPost()\n }));\n }\n return items;\n }\n statsView() {\n return m(\"div\", {\n className: \"DiscussionListItem-stats\"\n }, this.statsItems().toArray());\n }\n statsItems() {\n const items = new ItemList();\n items.add('replyCount', this.replyCountItem(), 70);\n return items;\n }\n replyCountItem() {\n const discussion = this.attrs.discussion;\n const showUnread = !this.showRepliesCount() && discussion.isUnread();\n const a11yKey = showUnread ? 'core.forum.discussion_list.unread_replies_a11y_label' : 'core.forum.discussion_list.total_replies_a11y_label';\n return m(DiscussionListItemStatsItem, {\n className: \"DiscussionListItem-count\",\n icon: showUnread ? [m(Icon, {\n name: 'fas fa-check _checkmark'\n }), m(Icon, {\n name: 'fas fa-comment _comment'\n })] : m(Icon, {\n name: 'far fa-comment'\n }),\n label: showUnread ? abbreviateNumber(discussion.unreadCount()) : abbreviateNumber(discussion.replyCount()),\n a11yLabel: app.translator.trans(a11yKey, {\n count: discussion.replyCount()\n }),\n onclick: showUnread ? this.markAsRead.bind(this) : undefined\n });\n }\n}\nexport class DiscussionListItemStatsItem extends Component {\n view(vnode) {\n const {\n icon,\n label,\n a11yLabel,\n className,\n ...attrs\n } = vnode.attrs;\n const Tag = attrs.onclick ? 'button' : 'span';\n return m(Tag, Object.assign({\n className: classList('DiscussionListItem-stats-item', className, {\n 'Button--ua-reset': Tag === 'button'\n })\n }, attrs), m(\"span\", {\n className: \"DiscussionListItem-stats-item-icon\"\n }, icon), m(\"span\", {\n className: \"DiscussionListItem-stats-item-label\"\n }, m(\"span\", {\n \"aria-hidden\": \"true\"\n }, label), m(\"span\", {\n className: \"visually-hidden\"\n }, a11yLabel != null ? a11yLabel : label)));\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionListItem', DiscussionListItem);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport Page from '../../common/components/Page';\nimport ItemList from '../../common/utils/ItemList';\nimport DiscussionHero from './DiscussionHero';\nimport DiscussionListPane from './DiscussionListPane';\nimport SplitDropdown from '../../common/components/SplitDropdown';\nimport listItems from '../../common/helpers/listItems';\nimport DiscussionControls from '../utils/DiscussionControls';\nimport PostStreamState from '../states/PostStreamState';\nimport PageStructure from './PageStructure';\n/**\n * The `DiscussionPage` component displays a whole discussion page, including\n * the discussion list pane, the hero, the posts, and the sidebar.\n */\nexport default class DiscussionPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", true);\n _defineProperty(this, \"PostStream\", null);\n _defineProperty(this, \"PostStreamScrubber\", null);\n /**\n * The discussion that is being viewed.\n */\n _defineProperty(this, \"discussion\", null);\n /**\n * A public API for interacting with the post stream.\n */\n _defineProperty(this, \"stream\", null);\n /**\n * The number of the first post that is currently visible in the viewport.\n */\n _defineProperty(this, \"near\", 0);\n _defineProperty(this, \"useBrowserScrollRestoration\", true);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.load();\n\n // If the discussion list has been loaded, then we'll enable the pane (and\n // hide it by default). Also, if we've just come from another discussion\n // page, then we don't want Mithril to redraw the whole page – if it did,\n // then the pane would redraw which would be slow and would cause problems with\n // event handlers.\n // We will also enable the pane if the discussion list is empty but loading,\n // because the DiscussionComposer refreshes the list and redirects to the new discussion at the same time.\n if (app.discussions.hasItems() || app.discussions.isLoading()) {\n var _app$pane, _app$pane2;\n (_app$pane = app.pane) == null || _app$pane.enable();\n (_app$pane2 = app.pane) == null || _app$pane2.hide();\n }\n this.bodyClass = 'App--discussion';\n }\n onremove(vnode) {\n var _app$pane3, _app$composer;\n super.onremove(vnode);\n\n // If we are indeed navigating away from this discussion, then disable the\n // discussion list pane. Also, if we're composing a reply to this\n // discussion, minimize the composer – unless it's empty, in which case\n // we'll just close it.\n (_app$pane3 = app.pane) == null || _app$pane3.disable();\n if (this.discussion && app.composer.composingReplyTo(this.discussion) && !((_app$composer = app.composer) != null && (_app$composer = _app$composer.fields) != null && _app$composer.content())) {\n app.composer.hide();\n } else {\n app.composer.minimize();\n }\n }\n view() {\n return m(PageStructure, {\n className: \"DiscussionPage\",\n loading: this.loading,\n hero: this.hero.bind(this),\n sidebar: this.sidebar.bind(this),\n pane: () => m(DiscussionListPane, {\n state: app.discussions\n })\n }, this.loading || m(\"div\", {\n className: \"DiscussionPage-stream\"\n }, m(this.PostStream, {\n discussion: this.discussion,\n stream: this.stream,\n onPositionChange: this.positionChanged.bind(this)\n })));\n }\n\n /**\n * Function that renders the `sidebarItems` ItemList.\n */\n sidebar() {\n return m(\"nav\", {\n className: \"DiscussionPage-nav\"\n }, m(\"ul\", null, listItems(this.sidebarItems().toArray())));\n }\n\n /**\n * Renders the discussion's hero.\n */\n hero() {\n return m(DiscussionHero, {\n discussion: this.discussion\n });\n }\n\n /**\n * Load the discussion from the API or use the preloaded one.\n */\n load() {\n Promise.all([import(/* webpackChunkName: 'forum/components/PostStream', webpackMode: 'lazy-once' */ './PostStream'), import(/* webpackChunkName: 'forum/components/PostStreamScrubber', webpackMode: 'lazy-once' */ './PostStreamScrubber')]).then(_ref => {\n let [PostStreamImport, PostStreamScrubberImport] = _ref;\n this.PostStream = PostStreamImport.default;\n this.PostStreamScrubber = PostStreamScrubberImport.default;\n const preloadedDiscussion = app.preloadedApiDocument();\n if (preloadedDiscussion) {\n // We must wrap this in a setTimeout because if we are mounting this\n // component for the first time on page load, then any calls to m.redraw\n // will be ineffective and thus any configs (scroll code) will be run\n // before stuff is drawn to the page.\n setTimeout(this.show.bind(this, preloadedDiscussion), 0);\n } else {\n const params = this.requestParams();\n app.store.find('discussions', m.route.param('id'), params).then(this.show.bind(this));\n }\n });\n m.redraw();\n }\n\n /**\n * Get the parameters that should be passed in the API request to get the\n * discussion.\n */\n requestParams() {\n return {\n bySlug: true,\n page: {\n near: this.near\n }\n };\n }\n\n /**\n * Initialize the component to display the given discussion.\n */\n show(discussion) {\n var _includedPosts$0$numb, _includedPosts$;\n this.loading = false;\n app.history.push('discussion', discussion.title());\n app.setTitle(discussion.title());\n app.setTitleCount(0);\n\n // When the API responds with a discussion, it will also include a number of\n // posts. Some of these posts are included because they are on the first\n // page of posts we want to display (determined by the `near` parameter) –\n // others may be included because due to other relationships introduced by\n // extensions. We need to distinguish the two so we don't end up displaying\n // the wrong posts. We do so by filtering out the posts that don't have\n // the 'discussion' relationship linked, then sorting and splicing.\n let includedPosts = [];\n if (discussion.payload && discussion.payload.included) {\n const discussionId = discussion.id();\n includedPosts = discussion.payload.included.filter(record => record.type === 'posts' && record.relationships && record.relationships.discussion && !Array.isArray(record.relationships.discussion.data) && record.relationships.discussion.data.id === discussionId)\n // We can make this assertion because posts should be in the store,\n // since they were in the discussion's payload.\n .map(record => app.store.getById('posts', record.id)).sort((a, b) => a.number() - b.number()).slice(0, 20);\n }\n\n // Set up the post stream for this discussion, along with the first page of\n // posts we want to display. Tell the stream to scroll down and highlight\n // the specific post that was routed to.\n this.stream = new PostStreamState(discussion, includedPosts);\n const rawNearParam = m.route.param('near');\n const nearParam = rawNearParam === 'reply' ? 'reply' : parseInt(rawNearParam);\n this.stream.goToNumber(nearParam || ((_includedPosts$0$numb = (_includedPosts$ = includedPosts[0]) == null ? void 0 : _includedPosts$.number()) != null ? _includedPosts$0$numb : 0), true).then(() => {\n this.discussion = discussion;\n app.current.set('discussion', discussion);\n app.current.set('stream', this.stream);\n });\n }\n\n /**\n * Build an item list for the contents of the sidebar.\n */\n sidebarItems() {\n const items = new ItemList();\n if (this.discussion) {\n items.add('controls', m(SplitDropdown, {\n icon: \"fas fa-ellipsis-v\",\n className: \"App-primaryControl\",\n buttonClassName: \"Button--primary\",\n accessibleToggleLabel: app.translator.trans('core.forum.discussion_controls.toggle_dropdown_accessible_label')\n }, DiscussionControls.controls(this.discussion, this).toArray()), 100);\n }\n items.add('scrubber', m(this.PostStreamScrubber, {\n stream: this.stream,\n className: \"App-titleControl\"\n }), -100);\n return items;\n }\n\n /**\n * When the posts that are visible in the post stream change (i.e. the user\n * scrolls up or down), then we update the URL and mark the posts as read.\n */\n positionChanged(startNumber, endNumber) {\n const discussion = this.discussion;\n if (!discussion) return;\n\n // Construct a URL to this discussion with the updated position, then\n // replace it into the window's history and our own history stack.\n const url = app.route.discussion(discussion, this.near = startNumber);\n window.history.replaceState(null, document.title, url);\n app.history.push('discussion', discussion.title());\n\n // If the user hasn't read past here before, then we'll update their read\n // state and redraw.\n if (app.session.user && endNumber > (discussion.lastReadPostNumber() || 0)) {\n discussion.save({\n lastReadPostNumber: endNumber\n });\n m.redraw();\n }\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionPage', DiscussionPage);flarum.reg.addChunkModule('158', '3038', 'core', 'forum/components/PostStream');\nflarum.reg.addChunkModule('158', '3038', 'core', 'forum/components/ReplyPlaceholder');\nflarum.reg.addChunkModule('158', '3038', 'core', 'forum/components/PostType');\nflarum.reg.addChunkModule('486', '8857', 'core', 'forum/components/PostStreamScrubber');","import app from '../../forum/app';\nimport Notification from './Notification';\n/**\n * The `DiscussionRenamedNotification` component displays a notification which\n * indicates that a discussion has had its title changed.\n */\nexport default class DiscussionRenamedNotification extends Notification {\n icon() {\n return 'fas fa-pencil-alt';\n }\n href() {\n const notification = this.attrs.notification;\n const discussion = notification.subject();\n if (!discussion) {\n return '#';\n }\n return app.route.discussion(discussion, notification.content().postNumber);\n }\n content() {\n return app.translator.trans('core.forum.notifications.discussion_renamed_text', {\n user: this.attrs.notification.fromUser()\n });\n }\n excerpt() {\n return null;\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionRenamedNotification', DiscussionRenamedNotification);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport LinkButton from '../../common/components/LinkButton';\nimport extractText from '../../common/utils/extractText';\nimport MinimalDiscussionListItem from './MinimalDiscussionListItem';\n\n/**\n * The `DiscussionsSearchSource` finds and displays discussion search results in\n * the search dropdown.\n */\nexport default class DiscussionsSearchSource {\n constructor() {\n _defineProperty(this, \"results\", new Map());\n _defineProperty(this, \"resource\", 'discussions');\n }\n title() {\n return extractText(app.translator.trans('core.lib.search_source.discussions.heading'));\n }\n isCached(query) {\n return this.results.has(query.toLowerCase());\n }\n async search(query, limit) {\n query = query.toLowerCase();\n this.results.set(query, []);\n const params = {\n filter: {\n q: query\n },\n page: {\n limit\n },\n include: 'mostRelevantPost,user,firstPost,tags'\n };\n return app.store.find('discussions', params).then(results => {\n this.results.set(query, results);\n m.redraw();\n });\n }\n view(query) {\n query = query.toLowerCase();\n return (this.results.get(query) || []).map(discussion => {\n return m(\"li\", {\n className: \"DiscussionSearchResult\",\n \"data-index\": 'discussions' + discussion.id(),\n \"data-id\": discussion.id()\n }, m(MinimalDiscussionListItem, {\n discussion: discussion,\n params: {\n q: query\n }\n }));\n });\n }\n customGrouping() {\n return false;\n }\n fullPage(query) {\n const filter = app.search.gambits.apply('discussions', {\n q: query\n });\n const q = filter.q || null;\n delete filter.q;\n return m(\"li\", null, m(LinkButton, {\n icon: \"fas fa-search\",\n href: app.route('index', {\n q,\n filter\n })\n }, app.translator.trans('core.lib.search_source.discussions.all_button', {\n query\n })));\n }\n gotoItem(id) {\n const discussion = app.store.getById('discussions', id);\n if (!discussion) return null;\n return app.route.discussion(discussion);\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionsSearchSource', DiscussionsSearchSource);","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\n/**\n * The `HeaderPrimary` component displays primary header controls. On the\n * default skin, these are shown just to the right of the forum title.\n */\nexport default class HeaderPrimary extends Component {\n view() {\n return m(\"ul\", {\n className: \"Header-controls\"\n }, listItems(this.items().toArray()));\n }\n\n /**\n * Build an item list for the controls.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n\n items() {\n return new ItemList();\n }\n}\nflarum.reg.add('core', 'forum/components/HeaderPrimary', HeaderPrimary);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport Page from '../../common/components/Page';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\nimport DiscussionList from './DiscussionList';\nimport WelcomeHero from './WelcomeHero';\nimport DiscussionPage from './DiscussionPage';\nimport Dropdown from '../../common/components/Dropdown';\nimport Button from '../../common/components/Button';\nimport extractText from '../../common/utils/extractText';\nimport PageStructure from './PageStructure';\nimport IndexSidebar from './IndexSidebar';\nimport PostsPage from './PostsPage';\n/**\n * The `IndexPage` component displays the index page, including the welcome\n * hero, the sidebar, and the discussion list.\n */\nexport default class IndexPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"lastDiscussion\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n\n // If the user is returning from a discussion page, then take note of which\n // discussion they have just visited. After the view is rendered, we will\n // scroll down so that this discussion is in view.\n if (app.previous.matches(DiscussionPage)) {\n this.lastDiscussion = app.previous.get('discussion');\n }\n const params = app.search.state.params();\n\n // If there is an active search and the user is coming from the PostsPage,\n // then we will clear the search state so that discussions aren't searched.\n if (app.previous.matches(PostsPage)) {\n app.search.state.clear();\n }\n\n // If the user is coming from the discussion list, then they have either\n // just switched one of the parameters (filter, sort, search) or they\n // probably want to refresh the results. We will clear the discussion list\n // cache so that results are reloaded.\n if (app.previous.matches(IndexPage)) {\n app.discussions.clear();\n }\n if (!app.previous.matches(PostsPage) || !params.q) {\n app.discussions.refreshParams(params, m.route.param('page') && Number(m.route.param('page')) || 1);\n }\n app.history.push('index', extractText(app.translator.trans('core.forum.header.back_to_index_tooltip')));\n this.bodyClass = 'App--index';\n this.scrollTopOnCreate = false;\n }\n view() {\n return m(PageStructure, {\n className: \"IndexPage\",\n hero: this.hero.bind(this),\n sidebar: this.sidebar.bind(this)\n }, m(\"div\", {\n className: \"IndexPage-toolbar\"\n }, m(\"ul\", {\n className: \"IndexPage-toolbar-view\"\n }, listItems(this.viewItems().toArray())), m(\"ul\", {\n className: \"IndexPage-toolbar-action\"\n }, listItems(this.actionItems().toArray()))), m(DiscussionList, {\n state: app.discussions\n }));\n }\n setTitle() {\n app.setTitle(extractText(app.translator.trans('core.forum.index.meta_title_text')));\n app.setTitleCount(0);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.setTitle();\n\n // Work out the difference between the height of this hero and that of the\n // previous hero. Maintain the same scroll position relative to the bottom\n // of the hero so that the sidebar doesn't jump around.\n const oldHeroHeight = app.cache.heroHeight;\n const heroHeight = app.cache.heroHeight = this.$('.Hero').outerHeight() || 0;\n const scrollTop = app.cache.scrollTop;\n $('#app').css('min-height', ($(window).height() || 0) + heroHeight);\n\n // Let browser handle scrolling on page reload.\n if (app.previous.type == null) return;\n\n // Only retain scroll position if we're coming from a discussion page.\n // Otherwise, we've just changed the filter, so we should go to the top of the page.\n if (this.lastDiscussion) {\n $(window).scrollTop(scrollTop - oldHeroHeight + heroHeight);\n } else {\n $(window).scrollTop(0);\n }\n\n // If we've just returned from a discussion page, then the constructor will\n // have set the `lastDiscussion` property. If this is the case, we want to\n // scroll down to that discussion so that it's in view.\n if (this.lastDiscussion) {\n const $discussion = this.$(\"li[data-id=\\\"\".concat(this.lastDiscussion.id(), \"\\\"] .DiscussionListItem\"));\n if ($discussion.length) {\n const indexTop = $('#header').outerHeight() || 0;\n const indexBottom = $(window).height() || 0;\n const discussionOffset = $discussion.offset();\n const discussionTop = discussionOffset && discussionOffset.top || 0;\n const discussionBottom = discussionTop + ($discussion.outerHeight() || 0);\n if (discussionTop < scrollTop + indexTop || discussionBottom > scrollTop + indexBottom) {\n $(window).scrollTop(discussionTop - indexTop);\n }\n }\n }\n }\n onbeforeremove(vnode) {\n super.onbeforeremove(vnode);\n\n // Save the scroll position so we can restore it when we return to the\n // discussion list.\n app.cache.scrollTop = $(window).scrollTop();\n }\n onremove(vnode) {\n super.onremove(vnode);\n $('#app').css('min-height', '');\n }\n\n /**\n * Get the component to display as the hero.\n */\n hero() {\n return m(WelcomeHero, null);\n }\n sidebar() {\n return m(IndexSidebar, null);\n }\n\n /**\n * Build an item list for the part of the toolbar which is concerned with how\n * the results are displayed. By default this is just a select box to change\n * the way discussions are sorted.\n */\n viewItems() {\n const items = new ItemList();\n const sortMap = app.discussions.sortMap();\n const sortOptions = Object.keys(sortMap).reduce((acc, sortId) => {\n const sort = sortMap[sortId];\n acc[sortId] = typeof sort !== 'string' ? sort.label : app.translator.trans(\"core.forum.index_sort.\".concat(sortId, \"_button\"));\n return acc;\n }, {});\n items.add('sort', m(Dropdown, {\n buttonClassName: \"Button\",\n label: sortOptions[app.search.state.params().sort] || Object.keys(sortMap).map(key => sortOptions[key])[0],\n accessibleToggleLabel: app.translator.trans('core.forum.index_sort.toggle_dropdown_accessible_label')\n }, Object.keys(sortOptions).map(value => {\n const label = sortOptions[value];\n const active = (app.search.state.params().sort || Object.keys(sortMap)[0]) === value;\n return m(Button, {\n icon: active ? 'fas fa-check' : true,\n onclick: () => app.search.state.changeSort(value),\n active: active\n }, label);\n })));\n return items;\n }\n\n /**\n * Build an item list for the part of the toolbar which is about taking action\n * on the results. By default this is just a \"mark all as read\" button.\n */\n actionItems() {\n const items = new ItemList();\n items.add('refresh', m(Button, {\n title: app.translator.trans('core.forum.index.refresh_tooltip'),\n \"aria-label\": app.translator.trans('core.forum.index.refresh_tooltip'),\n icon: \"fas fa-sync\",\n className: \"Button Button--icon\",\n onclick: () => {\n app.discussions.refresh();\n if (app.session.user) {\n app.store.find('users', app.session.user.id());\n m.redraw();\n }\n }\n }));\n if (app.session.user) {\n items.add('markAllAsRead', m(Button, {\n title: app.translator.trans('core.forum.index.mark_all_as_read_tooltip'),\n \"aria-label\": app.translator.trans('core.forum.index.mark_all_as_read_tooltip'),\n icon: \"fas fa-check\",\n className: \"Button Button--icon\",\n onclick: this.markAllAsRead.bind(this)\n }));\n }\n return items;\n }\n\n /**\n * Mark all discussions as read.\n */\n markAllAsRead() {\n const confirmation = confirm(extractText(app.translator.trans('core.forum.index.mark_all_as_read_confirmation')));\n if (confirmation) {\n var _app$session$user;\n (_app$session$user = app.session.user) == null || _app$session$user.save({\n markedAllAsReadAt: new Date()\n });\n }\n }\n}\n_defineProperty(IndexPage, \"providesInitialSearch\", true);\nflarum.reg.add('core', 'forum/components/IndexPage', IndexPage);","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\nimport app from '../app';\nimport Button from '../../common/components/Button';\nimport SelectDropdown from '../../common/components/SelectDropdown';\nimport listItems from '../../common/helpers/listItems';\nimport LinkButton from '../../common/components/LinkButton';\nimport classList from '../../common/utils/classList';\nexport default class IndexSidebar extends Component {\n view(vnode) {\n return m(\"nav\", {\n className: classList('IndexPage-nav sideNav', this.attrs.className)\n }, m(\"ul\", null, listItems(this.items().toArray())));\n }\n\n /**\n * Build an item list for the sidebar of the index page. By default this is a\n * \"New Discussion\" button, and then a DropdownSelect component containing a\n * list of navigation items.\n */\n items() {\n const items = new ItemList();\n const canStartDiscussion = app.forum.attribute('canStartDiscussion') || !app.session.user;\n items.add('newDiscussion', m(Button, {\n icon: \"fas fa-edit\",\n className: \"Button Button--primary IndexPage-newDiscussion\",\n itemClassName: \"App-primaryControl\",\n onclick: () => {\n // If the user is not logged in, the promise rejects, and a login modal shows up.\n // Since that's already handled, we dont need to show an error message in the console.\n return this.newDiscussionAction().catch(() => {});\n },\n disabled: !canStartDiscussion\n }, app.translator.trans(\"core.forum.index.\".concat(canStartDiscussion ? 'start_discussion_button' : 'cannot_start_discussion_button'))));\n items.add('nav', m(SelectDropdown, {\n buttonClassName: \"Button\",\n className: \"App-titleControl\",\n accessibleToggleLabel: app.translator.trans('core.forum.index.toggle_sidenav_dropdown_accessible_label')\n }, this.navItems().toArray()));\n return items;\n }\n\n /**\n * Build an item list for the navigation in the sidebar of the index page. By\n * default this is just the 'All Discussions' link.\n */\n navItems() {\n const items = new ItemList();\n const params = app.search.state.stickyParams();\n items.add('allDiscussions', m(LinkButton, {\n href: app.route('index', params),\n icon: \"far fa-comments\"\n }, app.translator.trans('core.forum.index.all_discussions_link')), 100);\n return items;\n }\n\n /**\n * Open the composer for a new discussion or prompt the user to login.\n */\n newDiscussionAction() {\n return new Promise((resolve, reject) => {\n if (app.session.user) {\n app.composer.load(() => import(/* webpackChunkName: 'forum/components/DiscussionComposer', webpackMode: 'lazy-once' */ './DiscussionComposer'), {\n user: app.session.user\n }).then(() => app.composer.show());\n return resolve(app.composer);\n } else {\n app.modal.show(() => import(/* webpackChunkName: 'forum/components/LogInModal', webpackMode: 'lazy-once' */ './LogInModal'));\n return reject();\n }\n });\n }\n}\nflarum.reg.add('core', 'forum/components/IndexSidebar', IndexSidebar);flarum.reg.addChunkModule('814', '1201', 'core', 'forum/components/DiscussionComposer');","import Component from '../../common/Component';\nimport Avatar from '../../common/components/Avatar';\nimport classList from '../../common/utils/classList';\n/**\n * The `LoadingPost` component shows a placeholder that looks like a post,\n * indicating that the post is loading.\n */\nexport default class LoadingPost extends Component {\n view() {\n return m(\"div\", {\n className: classList(this.attrs.className, 'Post CommentPost LoadingPost')\n }, m(\"header\", {\n className: \"Post-header\"\n }, m(Avatar, {\n user: null,\n className: \"PostUser-avatar\"\n }), m(\"div\", {\n className: \"fakeText\"\n })), m(\"div\", {\n className: \"Post-body\"\n }, m(\"div\", {\n className: \"fakeText\"\n }), m(\"div\", {\n className: \"fakeText\"\n }), m(\"div\", {\n className: \"fakeText\"\n })));\n }\n}\nflarum.reg.add('core', 'forum/components/LoadingPost', LoadingPost);","import DiscussionListItem from './DiscussionListItem';\nimport Link from '../../common/components/Link';\nimport app from '../app';\nimport highlight from '../../common/helpers/highlight';\nimport listItems from '../../common/helpers/listItems';\nimport classList from '../../common/utils/classList';\nexport default class MinimalDiscussionListItem extends DiscussionListItem {\n elementAttrs() {\n const attrs = super.elementAttrs();\n attrs.className = classList(attrs.className, 'MinimalDiscussionListItem');\n return attrs;\n }\n viewItems() {\n return super.viewItems().remove('controls').remove('slidableUnderneath');\n }\n contentItems() {\n return super.contentItems().remove('stats');\n }\n authorItems() {\n return super.authorItems().remove('badges');\n }\n mainView() {\n const discussion = this.attrs.discussion;\n const jumpTo = this.getJumpTo();\n return m(Link, {\n href: app.route.discussion(discussion, jumpTo),\n className: \"DiscussionListItem-main\"\n }, m(\"h2\", {\n className: \"DiscussionListItem-title\"\n }, this.badgesView(), m(\"div\", null, highlight(discussion.title(), this.highlightRegExp))), m(\"ul\", {\n className: \"DiscussionListItem-info\"\n }, listItems(this.infoItems().toArray())));\n }\n}\nflarum.reg.add('core', 'forum/components/MinimalDiscussionListItem', MinimalDiscussionListItem);","import Component from '../../common/Component';\nimport classList from '../../common/utils/classList';\nimport Link from '../../common/components/Link';\nimport humanTime from '../../common/helpers/humanTime';\nimport Icon from '../../common/components/Icon';\nexport default class HeaderListItem extends Component {\n view(vnode) {\n const {\n avatar,\n icon: iconName,\n content,\n excerpt,\n datetime,\n href,\n className,\n onclick,\n actions,\n ...attrs\n } = vnode.attrs;\n return m(Link, {\n className: classList('HeaderListItem', className),\n href: href,\n external: href.includes('://'),\n onclick: onclick\n }, avatar, m(Icon, {\n name: iconName,\n className: \"HeaderListItem-icon\"\n }), m(\"span\", {\n className: \"HeaderListItem-title\"\n }, m(\"span\", {\n className: \"HeaderListItem-content\"\n }, content), m(\"span\", {\n className: \"HeaderListItem-title-spring\"\n }), m(\"span\", {\n className: \"HeaderListItem-time\"\n }, datetime && humanTime(datetime))), m(\"div\", {\n className: \"HeaderListItem-actions\"\n }, actions), m(\"div\", {\n className: \"HeaderListItem-excerpt\"\n }, excerpt));\n }\n}\nflarum.reg.add('core', 'forum/components/HeaderListItem', HeaderListItem);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport Button from '../../common/components/Button';\nimport classList from '../../common/utils/classList';\nimport HeaderListItem from './HeaderListItem';\nimport ItemList from '../../common/utils/ItemList';\nimport Avatar from '../../common/components/Avatar';\n/**\n * The `Notification` component abstract displays a single notification.\n * Subclasses should implement the `icon`, `href`, and `content` methods.\n */\nexport default class Notification extends Component {\n view(vnode) {\n var _this$href;\n const notification = this.attrs.notification;\n const href = (_this$href = this.href()) != null ? _this$href : '';\n const fromUser = notification.fromUser();\n return m(HeaderListItem, {\n className: classList('Notification', \"Notification--\".concat(notification.contentType()), [!notification.isRead() && 'unread']),\n avatar: m(Avatar, {\n user: fromUser || null\n }),\n icon: this.icon(),\n content: this.content(),\n excerpt: this.excerpt(),\n datetime: notification.createdAt(),\n href: href,\n onclick: this.markAsRead.bind(this),\n actions: this.actionItems().toArray()\n });\n }\n actionItems() {\n const items = new ItemList();\n if (!this.attrs.notification.isRead()) {\n items.add('markAsRead', m(Button, {\n className: \"Notification-action Button Button--link\",\n icon: \"fas fa-check\",\n \"aria-label\": app.translator.trans('core.forum.notifications.mark_as_read_tooltip'),\n onclick: e => {\n e.preventDefault();\n e.stopPropagation();\n this.markAsRead();\n }\n }), 100);\n }\n return items;\n }\n\n /**\n * Get the name of the icon that should be displayed in the notification.\n */\n\n /**\n * Get the URL that the notification should link to.\n */\n\n /**\n * Get the content of the notification.\n */\n\n /**\n * Get the excerpt of the notification.\n */\n\n /**\n * Mark the notification as read.\n */\n markAsRead() {\n var _app$session$user, _app$session$user$unr;\n if (this.attrs.notification.isRead()) return;\n (_app$session$user = app.session.user) == null || _app$session$user.pushAttributes({\n unreadNotificationCount: ((_app$session$user$unr = app.session.user.unreadNotificationCount()) != null ? _app$session$user$unr : 1) - 1\n });\n this.attrs.notification.save({\n isRead: true\n });\n }\n}\nflarum.reg.add('core', 'forum/components/Notification', Notification);","import app from '../app';\nimport Dropdown from '../../common/components/Dropdown';\nimport extractText from '../../common/utils/extractText';\nimport classList from '../../common/utils/classList';\nimport Icon from '../../common/components/Icon';\nexport default class HeaderDropdown extends Dropdown {\n static initAttrs(attrs) {\n attrs.className = classList('HeaderDropdown', attrs.className);\n attrs.buttonClassName || (attrs.buttonClassName = 'Button Button--flat');\n attrs.menuClassName || (attrs.menuClassName = 'Dropdown-menu--right');\n attrs.label || (attrs.label = extractText(app.translator.trans('core.forum.notifications.tooltip')));\n // attrs.icon ||= 'fas fa-bell';\n //\n // // For best a11y support, both `title` and `aria-label` should be used\n // attrs.accessibleToggleLabel ||= extractText(app.translator.trans('core.forum.notifications.toggle_dropdown_accessible_label'));\n\n super.initAttrs(attrs);\n }\n getButton(children) {\n const newCount = this.getNewCount();\n const vdom = super.getButton(children);\n vdom.attrs.title = this.attrs.label;\n vdom.attrs.className = classList(vdom.attrs.className, [newCount && 'new']);\n vdom.attrs.onclick = this.onclick.bind(this);\n return vdom;\n }\n getButtonContent() {\n const unread = this.getUnreadCount();\n return [this.attrs.icon ? m(Icon, {\n name: this.attrs.icon,\n className: \"Button-icon\"\n }) : null, unread !== 0 && m(\"span\", {\n className: \"Bubble HeaderDropdownBubble\"\n }, unread), m(\"span\", {\n className: \"Button-label\"\n }, this.attrs.label)];\n }\n getMenu() {\n return m(\"div\", {\n className: classList('Dropdown-menu', this.attrs.menuClassName),\n onclick: this.menuClick.bind(this)\n }, this.showing && this.getContent());\n }\n menuClick(e) {\n // Don't close the notifications dropdown if the user is opening a link in a\n // new tab or window.\n if (e.shiftKey || e.metaKey || e.ctrlKey || e.button === 1) e.stopPropagation();\n }\n onclick() {\n if (app.drawer.isOpen()) {\n this.goToRoute();\n } else {\n var _this$attrs$state;\n (_this$attrs$state = this.attrs.state) == null || _this$attrs$state.load();\n }\n }\n}\nflarum.reg.add('core', 'forum/components/HeaderDropdown', HeaderDropdown);","import app from '../../forum/app';\nimport NotificationList from './NotificationList';\nimport extractText from '../../common/utils/extractText';\nimport HeaderDropdown from './HeaderDropdown';\nimport classList from '../../common/utils/classList';\nexport default class NotificationsDropdown extends HeaderDropdown {\n static initAttrs(attrs) {\n attrs.className = classList('NotificationsDropdown', attrs.className);\n attrs.icon || (attrs.icon = 'fas fa-bell');\n\n // For best a11y support, both `title` and `aria-label` should be used\n attrs.accessibleToggleLabel || (attrs.accessibleToggleLabel = extractText(app.translator.trans('core.forum.notifications.toggle_dropdown_accessible_label')));\n super.initAttrs(attrs);\n }\n getContent() {\n return m(NotificationList, {\n state: this.attrs.state\n });\n }\n goToRoute() {\n m.route.set(app.route('notifications'));\n }\n getUnreadCount() {\n return app.session.user.unreadNotificationCount();\n }\n getNewCount() {\n return app.session.user.newNotificationCount();\n }\n}\nflarum.reg.add('core', 'forum/components/NotificationsDropdown', NotificationsDropdown);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from '../../common/Component';\nimport classList from '../../common/utils/classList';\nimport ItemList from '../../common/utils/ItemList';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nexport default class PageStructure extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"content\", void 0);\n }\n view(vnode) {\n const {\n className\n } = vnode.attrs;\n this.content = vnode.children;\n return m(\"div\", {\n className: classList('Page', className)\n }, this.rootItems().toArray());\n }\n rootItems() {\n const items = new ItemList();\n items.add('pane', this.providedPane(), 100);\n items.add('main', this.main(), 10);\n return items;\n }\n mainItems() {\n const items = new ItemList();\n items.add('hero', this.providedHero(), 100);\n items.add('container', this.container(), 10);\n return items;\n }\n loadingItems() {\n const items = new ItemList();\n items.add('spinner', m(LoadingIndicator, {\n display: \"block\"\n }), 100);\n return items;\n }\n main() {\n return m(\"div\", {\n className: \"Page-main\"\n }, this.attrs.loading ? this.loadingItems().toArray() : this.mainItems().toArray());\n }\n containerItems() {\n const items = new ItemList();\n items.add('sidebar', this.sidebar(), 100);\n items.add('content', this.providedContent(), 10);\n return items;\n }\n container() {\n return m(\"div\", {\n className: \"Page-container container\"\n }, this.containerItems().toArray());\n }\n sidebarItems() {\n const items = new ItemList();\n items.add('sidebar', this.attrs.sidebar && this.attrs.sidebar() || null, 100);\n return items;\n }\n sidebar() {\n return m(\"div\", {\n className: \"Page-sidebar\"\n }, this.sidebarItems().toArray());\n }\n providedPane() {\n return m(\"div\", {\n className: \"Page-pane\"\n }, this.attrs.pane && this.attrs.pane() || null);\n }\n providedHero() {\n return m(\"div\", {\n className: \"Page-hero\"\n }, this.attrs.hero && this.attrs.hero() || null);\n }\n providedContent() {\n return m(\"div\", {\n className: \"Page-content\"\n }, this.content);\n }\n}\nflarum.reg.add('core', 'forum/components/PageStructure', PageStructure);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport Component from '../../common/Component';\nimport SubtreeRetainer from '../../common/utils/SubtreeRetainer';\nimport Dropdown from '../../common/components/Dropdown';\nimport listItems from '../../common/helpers/listItems';\nimport ItemList from '../../common/utils/ItemList';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\n/**\n * This component can be used on any type of model with an author and content.\n * Subclasses are specialized for specific types of models.\n */\nexport default class AbstractPost extends Component {\n constructor() {\n super(...arguments);\n /**\n * May be set by subclasses.\n */\n _defineProperty(this, \"loading\", false);\n /**\n * Ensures that the post will not be redrawn\n * unless new data comes in.\n */\n _defineProperty(this, \"subtree\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.loading = false;\n this.subtree = new SubtreeRetainer(() => this.loading, () => this.freshness(), () => {\n const user = this.user();\n return user && user.freshness;\n });\n }\n view(vnode) {\n const attrs = this.elementAttrs();\n attrs.className = this.classes(attrs.className).join(' ');\n const controls = this.controls();\n const footerItems = this.footerItems().toArray();\n return m(\"article\", attrs, this.header(), m(\"div\", {\n className: \"Post-container\"\n }, m(\"div\", {\n className: \"Post-side\"\n }, this.sideItems().toArray()), m(\"div\", {\n className: \"Post-main\"\n }, this.loading ? m(LoadingIndicator, null) : this.content(), m(\"aside\", {\n className: \"Post-actions\"\n }, m(\"ul\", null, listItems(this.actionItems().toArray()), !!controls.length && m(\"li\", null, m(Dropdown, {\n className: \"Post-controls\",\n buttonClassName: \"Button Button--icon Button--flat\",\n menuClassName: \"Dropdown-menu--right\",\n icon: \"fas fa-ellipsis-h\",\n onshow: () => this.$('.Post-controls').addClass('open'),\n onhide: () => this.$('.Post-controls').removeClass('open'),\n accessibleToggleLabel: app.translator.trans('core.forum.post_controls.toggle_dropdown_accessible_label')\n }, controls)))), m(\"footer\", {\n className: \"Post-footer\"\n }, footerItems.length ? m(\"ul\", null, listItems(footerItems)) : null))));\n }\n onbeforeupdate(vnode) {\n super.onbeforeupdate(vnode);\n return this.subtree.needsRebuild();\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n const $actions = this.$('.Post-actions');\n const $controls = this.$('.Post-controls');\n $actions.toggleClass('openWithin', $controls.hasClass('open'));\n }\n elementAttrs() {\n return {};\n }\n header() {\n return null;\n }\n content() {\n return [];\n }\n classes(existing) {\n let classes = (existing || '').split(' ').concat(['Post']);\n const user = this.user();\n if (this.loading) {\n classes.push('Post--loading');\n }\n if (user && user === app.session.user) {\n classes.push('Post--by-actor');\n }\n if (this.createdByStarter()) {\n classes.push('Post--by-start-user');\n }\n return classes;\n }\n actionItems() {\n return new ItemList();\n }\n footerItems() {\n return new ItemList();\n }\n sideItems() {\n const items = new ItemList();\n items.add('avatar', this.avatar(), 100);\n return items;\n }\n avatar() {\n return null;\n }\n}\nflarum.reg.add('core', 'forum/components/AbstractPost', AbstractPost);","import PostControls from '../utils/PostControls';\nimport AbstractPost from './AbstractPost';\n/**\n * The `Post` component displays a single post. The basic post template just\n * includes a controls dropdown; subclasses must implement `content` and `attrs`\n * methods.\n */\nexport default class Post extends AbstractPost {\n oninit(vnode) {\n super.oninit(vnode);\n }\n user() {\n return this.attrs.post.user();\n }\n controls() {\n return PostControls.controls(this.attrs.post, this).toArray();\n }\n freshness() {\n return this.attrs.post.freshness;\n }\n createdByStarter() {\n const user = this.attrs.post.user();\n const discussion = this.attrs.post.discussion();\n return user && user === discussion.user();\n }\n onbeforeupdate(vnode) {\n return super.onbeforeupdate(vnode);\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n }\n\n /**\n * Get attributes for the post element.\n */\n elementAttrs() {\n return super.elementAttrs();\n }\n header() {\n return super.header();\n }\n\n /**\n * Get the post's content.\n */\n content() {\n return super.content();\n }\n\n /**\n * Get the post's classes.\n */\n classes(existing) {\n let classes = super.classes(existing);\n const user = this.attrs.post.user();\n const discussion = this.attrs.post.discussion();\n if (user && user === discussion.user()) {\n classes.push('Post--by-start-user');\n }\n return classes;\n }\n\n /**\n * Build an item list for the post's actions.\n */\n actionItems() {\n return super.actionItems();\n }\n\n /**\n * Build an item list for the post's footer.\n */\n footerItems() {\n return super.footerItems();\n }\n sideItems() {\n return super.sideItems();\n }\n avatar() {\n return super.avatar();\n }\n}\nflarum.reg.add('core', 'forum/components/Post', Post);","import Component from '../../common/Component';\nimport app from '../app';\nimport Link from '../../common/components/Link';\nimport CommentPost from './CommentPost';\nexport default class PostListItem extends Component {\n view() {\n const post = this.attrs.post;\n return m(\"div\", {\n className: \"PostListItem\"\n }, m(\"div\", {\n className: \"PostListItem-discussion\"\n }, app.translator.trans('core.forum.post_list.in_discussion_text', {\n discussion: m(Link, {\n href: app.route.post(post)\n }, post.discussion().title())\n })), m(CommentPost, {\n post: post,\n params: this.attrs.params\n }));\n }\n}\nflarum.reg.add('core', 'forum/components/PostListItem', PostListItem);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport Button from '../../common/components/Button';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport Placeholder from '../../common/components/Placeholder';\nimport classList from '../../common/utils/classList';\nimport PostListItem from './PostListItem';\nexport default class PostList extends Component {\n view() {\n const state = this.attrs.state;\n const params = state.getParams();\n const isLoading = state.isInitialLoading() || state.isLoadingNext();\n let loading;\n if (isLoading) {\n loading = m(LoadingIndicator, null);\n } else if (state.hasNext()) {\n loading = m(Button, {\n className: \"Button\",\n onclick: state.loadNext.bind(state)\n }, app.translator.trans('core.forum.post_list.load_more_button'));\n }\n if (state.isEmpty()) {\n return m(\"div\", {\n className: \"PostList\"\n }, m(Placeholder, {\n text: app.translator.trans('core.forum.post_list.empty_text')\n }));\n }\n const pageSize = state.pageSize || 0;\n return m(\"div\", {\n className: classList('PostList', {\n 'PostList--searchResults': state.isSearchResults()\n })\n }, m(\"ul\", {\n role: \"feed\",\n \"aria-busy\": isLoading,\n className: \"PostList-discussions\"\n }, state.getPages().map((pg, pageNum) => {\n return pg.items.map((post, itemNum) => m(\"li\", {\n key: post.id(),\n \"data-id\": post.id(),\n role: \"article\",\n \"aria-setsize\": \"-1\",\n \"aria-posinset\": pageNum * pageSize + itemNum\n }, m(PostListItem, {\n post: post,\n params: params\n })));\n })), m(\"div\", {\n className: \"PostList-loadMore\"\n }, loading));\n }\n}\nflarum.reg.add('core', 'forum/components/PostList', PostList);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport humanTime from '../../common/helpers/humanTime';\nimport fullTime from '../../common/helpers/fullTime';\nimport Post from '../../common/models/Post';\nimport classList from '../../common/utils/classList';\n/**\n * The `PostMeta` component displays the time of a post, and when clicked, shows\n * a dropdown containing more information about the post (number, full time,\n * permalink).\n */\nexport default class PostMeta extends Component {\n view() {\n const post = this.attrs.post;\n const time = post.createdAt();\n const permalink = this.getPermalink(post);\n const touch = ('ontouchstart' in document.documentElement);\n\n // When the dropdown menu is shown, select the contents of the permalink\n // input so that the user can quickly copy the URL.\n const selectPermalink = function (e) {\n setTimeout(() => $(this).parent().find('.PostMeta-permalink').select());\n e.redraw = false;\n };\n return m(\"div\", {\n className: \"Dropdown PostMeta\"\n }, m(\"button\", {\n className: classList({\n 'Button Button--text': true,\n 'Dropdown-toggle Button--link': !!permalink\n }),\n onclick: permalink ? selectPermalink : undefined,\n \"data-toggle\": \"dropdown\"\n }, humanTime(time)), !!permalink && m(\"div\", {\n className: \"Dropdown-menu dropdown-menu\"\n }, m(\"span\", {\n className: \"PostMeta-number\"\n }, this.postIdentifier(post)), \" \", m(\"span\", {\n className: \"PostMeta-time\"\n }, fullTime(time)), ' ', m(\"span\", {\n className: \"PostMeta-ip\"\n }, post.data.attributes.ipAddress), touch ? m(\"a\", {\n className: \"Button PostMeta-permalink\",\n href: permalink\n }, permalink) : m(\"input\", {\n className: \"FormControl PostMeta-permalink\",\n value: permalink,\n onclick: e => e.stopPropagation()\n })));\n }\n\n /**\n * Get the permalink for the given post.\n */\n getPermalink(post) {\n var _this$attrs$permalink, _this$attrs;\n if (post instanceof Post) {\n return app.forum.attribute('baseOrigin') + app.route.post(post);\n }\n return ((_this$attrs$permalink = (_this$attrs = this.attrs).permalink) == null ? void 0 : _this$attrs$permalink.call(_this$attrs)) || null;\n }\n postIdentifier(post) {\n if (post instanceof Post) {\n return app.translator.trans('core.forum.post.number_tooltip', {\n number: post.number()\n }, true);\n }\n return null;\n }\n}\nflarum.reg.add('core', 'forum/components/PostMeta', PostMeta);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport Link from '../../common/components/Link';\nimport username from '../../common/helpers/username';\nimport userOnline from '../../common/helpers/userOnline';\nimport listItems from '../../common/helpers/listItems';\nimport Avatar from '../../common/components/Avatar';\n/**\n * The `PostUser` component shows the avatar and username of a post's author.\n */\nexport default class PostUser extends Component {\n view() {\n const post = this.attrs.post;\n const user = post.user();\n if (!user) {\n return m(\"div\", {\n className: \"PostUser\"\n }, m(\"h3\", {\n className: \"PostUser-name\"\n }, m(Avatar, {\n user: user,\n className: \"Post-avatar\"\n }), \" \", username(user)));\n }\n return m(\"div\", {\n className: \"PostUser\"\n }, m(\"h3\", {\n className: \"PostUser-name\"\n }, m(Link, {\n href: app.route.user(user)\n }, m(Avatar, {\n user: user,\n className: \"Post-avatar\"\n }), userOnline(user), username(user))), m(\"ul\", {\n className: \"PostUser-badges badges badges--packed\"\n }, listItems(user.badges().toArray())));\n }\n}\nflarum.reg.add('core', 'forum/components/PostUser', PostUser);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport Page from '../../common/components/Page';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\nimport WelcomeHero from './WelcomeHero';\nimport Dropdown from '../../common/components/Dropdown';\nimport Button from '../../common/components/Button';\nimport extractText from '../../common/utils/extractText';\nimport PageStructure from './PageStructure';\nimport IndexSidebar from './IndexSidebar';\nimport PostList from './PostList';\nimport PostListState from '../states/PostListState';\n/**\n * The `PostsPage` component displays the index page, including the welcome\n * hero, the sidebar, and the discussion list.\n */\nexport default class PostsPage extends Page {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"posts\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.posts = new PostListState({});\n this.posts.refreshParams(app.search.state.params(), m.route.param('page') && Number(m.route.param('page')) || 1);\n app.history.push('posts', extractText(app.translator.trans('core.forum.header.back_to_index_tooltip')));\n this.bodyClass = 'App--posts';\n this.scrollTopOnCreate = false;\n }\n view() {\n return m(PageStructure, {\n className: \"PostsPage\",\n hero: this.hero.bind(this),\n sidebar: this.sidebar.bind(this)\n }, m(\"div\", {\n className: \"IndexPage-toolbar PostsPage-toolbar\"\n }, m(\"ul\", {\n className: \"IndexPage-toolbar-view PostsPage-toolbar-view\"\n }, listItems(this.viewItems().toArray())), m(\"ul\", {\n className: \"IndexPage-toolbar-action PostsPage-toolbar-action\"\n }, listItems(this.actionItems().toArray()))), m(PostList, {\n state: this.posts\n }));\n }\n setTitle() {\n app.setTitle(extractText(app.translator.trans('core.forum.posts.meta_title_text')));\n app.setTitleCount(0);\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.setTitle();\n }\n onremove(vnode) {\n super.onremove(vnode);\n $('#app').css('min-height', '');\n }\n\n /**\n * Get the component to display as the hero.\n */\n hero() {\n return m(WelcomeHero, null);\n }\n sidebar() {\n return m(IndexSidebar, null);\n }\n\n /**\n * Build an item list for the part of the toolbar which is concerned with how\n * the results are displayed. By default this is just a select box to change\n * the way discussions are sorted.\n */\n viewItems() {\n const items = new ItemList();\n const sortMap = this.posts.sortMap();\n const sortOptions = Object.keys(sortMap).reduce((acc, sortId) => {\n acc[sortId] = app.translator.trans(\"core.forum.posts_sort.\".concat(sortId, \"_button\"));\n return acc;\n }, {});\n if (Object.keys(sortOptions).length > 1) {\n items.add('sort', m(Dropdown, {\n buttonClassName: \"Button\",\n label: sortOptions[app.search.state.params().sort] || Object.keys(sortMap).map(key => sortOptions[key])[0],\n accessibleToggleLabel: app.translator.trans('core.forum.posts_sort.toggle_dropdown_accessible_label')\n }, Object.keys(sortOptions).map(value => {\n const label = sortOptions[value];\n const active = (app.search.state.params().sort || Object.keys(sortMap)[0]) === value;\n return m(Button, {\n icon: active ? 'fas fa-check' : true,\n onclick: () => app.search.state.changeSort(value),\n active: active\n }, label);\n })));\n }\n return items;\n }\n\n /**\n * Build an item list for the part of the toolbar which is about taking action\n * on the results. By default this is just a \"mark all as read\" button.\n */\n actionItems() {\n const items = new ItemList();\n items.add('refresh', m(Button, {\n title: app.translator.trans('core.forum.posts.refresh_tooltip'),\n \"aria-label\": app.translator.trans('core.forum.posts.refresh_tooltip'),\n icon: \"fas fa-sync\",\n className: \"Button Button--icon\",\n onclick: () => {\n this.posts.refresh();\n if (app.session.user) {\n app.store.find('users', app.session.user.id());\n m.redraw();\n }\n }\n }));\n return items;\n }\n}\n_defineProperty(PostsPage, \"providesInitialSearch\", true);\nflarum.reg.add('core', 'forum/components/PostsPage', PostsPage);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport UserPage from './UserPage';\nimport PostListState from '../states/PostListState';\nimport PostList from './PostList';\n\n/**\n * The `PostsUserPage` component shows a user's activity feed inside of their\n * profile.\n */\nexport default class PostsUserPage extends UserPage {\n constructor() {\n super(...arguments);\n /**\n * The state of the Post models in the feed.\n */\n _defineProperty(this, \"posts\", void 0);\n /**\n * The number of activity items to load per request.\n */\n _defineProperty(this, \"loadLimit\", 20);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.posts = new PostListState({}, this.loadLimit);\n this.loadUser(m.route.param('username'));\n }\n content() {\n return m(\"div\", {\n className: \"PostsUserPage\"\n }, m(PostList, {\n state: this.posts\n }));\n }\n\n /**\n * Initialize the component with a user, and trigger the loading of their\n * activity feed.\n */\n show(user) {\n super.show(user);\n this.posts.refreshParams(this.params(user), 1);\n }\n params(user) {\n return {\n filter: {\n author: user.username()\n }\n };\n }\n}\nflarum.reg.add('core', 'forum/components/PostsUserPage', PostsUserPage);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport FormModal from '../../common/components/FormModal';\nimport Button from '../../common/components/Button';\nimport Stream from '../../common/utils/Stream';\nimport Form from '../../common/components/Form';\n/**\n * The 'RenameDiscussionModal' displays a modal dialog with an input to rename a discussion\n */\nexport default class RenameDiscussionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"discussion\", void 0);\n _defineProperty(this, \"currentTitle\", void 0);\n _defineProperty(this, \"newTitle\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.discussion = this.attrs.discussion;\n this.currentTitle = this.attrs.currentTitle;\n this.newTitle = Stream(this.currentTitle);\n }\n className() {\n return 'RenameDiscussionModal Modal--small';\n }\n title() {\n return app.translator.trans('core.forum.rename_discussion.title');\n }\n content() {\n return m(\"div\", {\n className: \"Modal-body\"\n }, m(Form, {\n className: \"Form--centered\"\n }, m(\"div\", {\n className: \"Form-group\"\n }, m(\"input\", {\n className: \"FormControl\",\n bidi: this.newTitle,\n type: \"text\"\n })), m(\"div\", {\n className: \"Form-group Form-controls\"\n }, m(Button, {\n className: \"Button Button--primary Button--block\",\n type: \"submit\",\n loading: this.loading\n }, app.translator.trans('core.forum.rename_discussion.submit_button')))));\n }\n onsubmit(e) {\n e.preventDefault();\n this.loading = true;\n const title = this.newTitle();\n const currentTitle = this.currentTitle;\n\n // If the title is different to what it was before, then save it. After the\n // save has completed, update the post stream as there will be a new post\n // indicating that the discussion was renamed.\n if (title && title !== currentTitle) {\n return this.discussion.save({\n title\n }).then(() => {\n if (app.viewingDiscussion(this.discussion)) {\n app.current.get('stream').update();\n }\n m.redraw();\n this.hide();\n }).catch(() => {\n this.loading = false;\n m.redraw();\n });\n } else {\n this.hide();\n }\n }\n}\nflarum.reg.add('core', 'forum/components/RenameDiscussionModal', RenameDiscussionModal);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport LinkButton from '../../common/components/LinkButton';\nimport extractText from '../../common/utils/extractText';\nimport MinimalDiscussionListItem from './MinimalDiscussionListItem';\n\n/**\n * The `PostsSearchSource` finds and displays post search results in\n * the search dropdown.\n */\nexport default class PostsSearchSource {\n constructor() {\n _defineProperty(this, \"results\", new Map());\n _defineProperty(this, \"resource\", 'posts');\n }\n title() {\n return extractText(app.translator.trans('core.lib.search_source.posts.heading'));\n }\n isCached(query) {\n return this.results.has(query.toLowerCase());\n }\n async search(query, limit) {\n query = query.toLowerCase();\n this.results.set(query, []);\n const params = {\n filter: {\n q: query\n },\n page: {\n limit\n },\n include: 'user,discussion.tags'\n };\n return app.store.find('posts', params).then(results => {\n this.results.set(query, results);\n m.redraw();\n });\n }\n view(query) {\n query = query.toLowerCase();\n return (this.results.get(query) || []).map(post => {\n return m(\"li\", {\n className: \"PostSearchResult\",\n \"data-index\": 'posts' + post.id(),\n \"data-id\": post.id()\n }, m(MinimalDiscussionListItem, {\n discussion: post.discussion(),\n post: post,\n params: {\n q: query\n },\n jumpTo: post.number(),\n author: post.user()\n }));\n });\n }\n customGrouping() {\n return false;\n }\n fullPage(query) {\n const filter = app.search.gambits.apply('posts', {\n q: query\n });\n const q = filter.q || null;\n delete filter.q;\n return m(\"li\", null, m(LinkButton, {\n icon: \"fas fa-search\",\n href: app.route('posts', {\n q,\n filter\n })\n }, app.translator.trans('core.lib.search_source.posts.all_button', {\n query\n })));\n }\n gotoItem(id) {\n const post = app.store.getById('posts', id);\n if (!post) return null;\n return app.route.post(post);\n }\n}\nflarum.reg.add('core', 'forum/components/PostsSearchSource', PostsSearchSource);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport Component from '../Component';\nimport Input from './Input';\n\n/**\n * The `SearchSource` interface defines a section of search results in the\n * search dropdown.\n *\n * Search sources should be registered with the `Search` component class\n * by extending the `sourceItems` method. When the user types a\n * query, each search source will be prompted to load search results via the\n * `search` method. When the dropdown is redrawn, it will be constructed by\n * putting together the output from the `view` method of each source.\n */\n\n/**\n * The `Search` component displays a primary search input at the top of the frontend (forum or admin).\n * When clicked, it opens an advanced search modal with results from various sources.\n *\n * Must be extended and the abstract methods implemented per-frontend.\n */\nexport default class AbstractSearch extends Component {\n constructor() {\n super(...arguments);\n /**\n * The instance of `SearchState` for this component.\n */\n _defineProperty(this, \"searchState\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.searchState = this.attrs.state;\n }\n view() {\n // Hide the search view if no sources were loaded\n if (this.sourceItems().isEmpty()) return m(\"div\", null);\n const openSearchModal = () => {\n this.$('input').blur() && app.modal.show(() => import(/* webpackChunkName: 'common/components/SearchModal', webpackMode: 'lazy-once' */ '../../common/components/SearchModal'), {\n searchState: this.searchState,\n sources: this.sourceItems().toArray()\n });\n };\n return m(\"div\", {\n role: \"search\",\n className: \"Search\",\n \"aria-label\": this.attrs.a11yRoleLabel\n }, m(Input, {\n type: \"search\",\n className: \"Search-input\",\n clearable: this.searchState.getValue(),\n clearLabel: app.translator.trans('core.lib.search.search_clear_button_accessible_label'),\n prefixIcon: \"fas fa-search\",\n \"aria-label\": this.attrs.label,\n readonly: true,\n placeholder: this.attrs.label,\n value: this.searchState.getValue(),\n onchange: value => {\n if (!value) this.searchState.clear();else this.searchState.setValue(value);\n },\n inputAttrs: {\n onclick: () => setTimeout(() => openSearchModal(), 150),\n // for keyboard navigation, click event would be triggered on keydown\n onkeydown: e => {\n if (e.key === 'Enter') {\n e.preventDefault();\n this.$('input').blur() && openSearchModal();\n }\n }\n }\n }));\n }\n\n /**\n * A list of search sources that can be used to query for search results.\n */\n}\nflarum.reg.add('core', 'common/components/AbstractSearch', AbstractSearch);flarum.reg.addChunkModule('485', '7085', 'core', 'common/components/SearchModal');","import app from '../../forum/app';\nimport ItemList from '../../common/utils/ItemList';\nimport DiscussionsSearchSource from './DiscussionsSearchSource';\nimport UsersSearchSource from './UsersSearchSource';\nimport PostsSearchSource from './PostsSearchSource';\nimport AbstractSearch from '../../common/components/AbstractSearch';\nexport default class Search extends AbstractSearch {\n static initAttrs(attrs) {\n attrs.label = app.translator.trans('core.forum.header.search_placeholder', {}, true);\n attrs.a11yRoleLabel = app.translator.trans('core.forum.header.search_role_label', {}, true);\n }\n sourceItems() {\n const items = new ItemList();\n if (app.forum.attribute('canViewForum')) {\n items.add('discussions', new DiscussionsSearchSource());\n items.add('posts', new PostsSearchSource());\n }\n if (app.forum.attribute('canSearchUsers')) {\n items.add('users', new UsersSearchSource());\n }\n return items;\n }\n}\nflarum.reg.add('core', 'forum/components/Search', Search);","import app from '../../forum/app';\nimport username from '../../common/helpers/username';\nimport Dropdown from '../../common/components/Dropdown';\nimport LinkButton from '../../common/components/LinkButton';\nimport Button from '../../common/components/Button';\nimport ItemList from '../../common/utils/ItemList';\nimport Separator from '../../common/components/Separator';\nimport extractText from '../../common/utils/extractText';\nimport Avatar from '../../common/components/Avatar';\n/**\n * The `SessionDropdown` component shows a button with the current user's\n * avatar/name, with a dropdown of session controls.\n */\nexport default class SessionDropdown extends Dropdown {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n attrs.className = 'SessionDropdown';\n attrs.buttonClassName = 'Button Button--user Button--flat';\n attrs.menuClassName = 'Dropdown-menu--right';\n attrs.accessibleToggleLabel = extractText(app.translator.trans('core.forum.header.session_dropdown_accessible_label'));\n }\n view(vnode) {\n return super.view({\n ...vnode,\n children: this.items().toArray()\n });\n }\n getButtonContent() {\n const user = app.session.user;\n return [m(Avatar, {\n user: user\n }), ' ', m(\"span\", {\n className: \"Button-label\"\n }, username(user))];\n }\n\n /**\n * Build an item list for the contents of the dropdown menu.\n */\n items() {\n const items = new ItemList();\n const user = app.session.user;\n items.add('profile', m(LinkButton, {\n icon: \"fas fa-user\",\n href: app.route.user(user)\n }, app.translator.trans('core.forum.header.profile_button')), 100);\n items.add('settings', m(LinkButton, {\n icon: \"fas fa-cog\",\n href: app.route('settings')\n }, app.translator.trans('core.forum.header.settings_button')), 50);\n if (app.forum.attribute('adminUrl')) {\n items.add('administration', m(LinkButton, {\n icon: \"fas fa-wrench\",\n href: app.forum.attribute('adminUrl'),\n target: \"_blank\"\n }, app.translator.trans('core.forum.header.admin_button')), 0);\n }\n items.add('separator', m(Separator, null), -90);\n items.add('logOut', m(Button, {\n icon: \"fas fa-sign-out-alt\",\n onclick: app.session.logout.bind(app.session)\n }, app.translator.trans('core.forum.header.log_out_button')), -100);\n return items;\n }\n}\nflarum.reg.add('core', 'forum/components/SessionDropdown', SessionDropdown);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport Page from '../../common/components/Page';\nimport ItemList from '../../common/utils/ItemList';\nimport UserCard from './UserCard';\nimport SelectDropdown from '../../common/components/SelectDropdown';\nimport LinkButton from '../../common/components/LinkButton';\nimport Separator from '../../common/components/Separator';\nimport listItems from '../../common/helpers/listItems';\nimport AffixedSidebar from './AffixedSidebar';\nimport PageStructure from './PageStructure';\n/**\n * The `UserPage` component shows a user's profile. It can be extended to show\n * content inside of the content area. See `ActivityPage` and `SettingsPage` for\n * examples.\n *\n * @abstract\n */\nexport default class UserPage extends Page {\n constructor() {\n super(...arguments);\n /**\n * The user this page is for.\n */\n _defineProperty(this, \"user\", null);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.bodyClass = 'App--user';\n }\n\n /**\n * Base view template for the user page.\n */\n view() {\n return m(PageStructure, {\n className: \"UserPage\",\n hero: this.hero.bind(this),\n sidebar: this.sidebar.bind(this),\n loading: !this.user\n }, this.user && this.content());\n }\n hero() {\n return m(UserCard, {\n user: this.user,\n className: \"Hero UserHero\",\n editable: this.user.canEdit() || this.user === app.session.user,\n controlsButtonClassName: \"Button\"\n });\n }\n sidebar() {\n return m(AffixedSidebar, null, m(\"nav\", {\n className: \"sideNav UserPage-nav\"\n }, m(\"ul\", null, listItems(this.sidebarItems().toArray()))));\n }\n\n /**\n * Get the content to display in the user page.\n */\n content() {}\n\n /**\n * Initialize the component with a user, and trigger the loading of their\n * activity feed.\n *\n * @protected\n */\n show(user) {\n this.user = user;\n app.current.set('user', user);\n app.setTitle(user.displayName());\n app.history.push(app.current.get('routeName'), user.displayName());\n m.redraw();\n }\n\n /**\n * Given a username, load the user's profile from the store, or make a request\n * if we don't have it yet. Then initialize the profile page with that user.\n */\n loadUser(username) {\n const lowercaseUsername = username.toLowerCase();\n\n // Load the preloaded user object, if any, into the global app store\n // We don't use the output of the method because it returns raw JSON\n // instead of the parsed models\n app.preloadedApiDocument();\n app.store.all('users').some(user => {\n if ((user.username().toLowerCase() === lowercaseUsername || user.id() === username) && user.joinTime()) {\n this.show(user);\n return true;\n }\n return false;\n });\n if (!this.user) {\n app.store.find('users', username, {\n bySlug: true\n }).then(this.show.bind(this));\n }\n }\n\n /**\n * Build an item list for the content of the sidebar.\n */\n sidebarItems() {\n const items = new ItemList();\n items.add('nav', m(SelectDropdown, {\n className: \"App-titleControl\",\n buttonClassName: \"Button\"\n }, this.navItems().toArray()));\n return items;\n }\n\n /**\n * Build an item list for the navigation in the sidebar.\n */\n navItems() {\n const items = new ItemList();\n const user = this.user;\n const isActor = app.session.user === user;\n items.add('posts', m(LinkButton, {\n href: app.route('user.posts', {\n username: user.slug()\n }),\n icon: \"far fa-comment\"\n }, app.translator.trans('core.forum.user.posts_link'), \" \", m(\"span\", {\n className: \"Button-badge\"\n }, user.commentCount())), 100);\n items.add('discussions', m(LinkButton, {\n href: app.route('user.discussions', {\n username: user.slug()\n }),\n icon: \"fas fa-bars\"\n }, app.translator.trans('core.forum.user.discussions_link'), \" \", m(\"span\", {\n className: \"Button-badge\"\n }, user.discussionCount())), 90);\n if (isActor) {\n items.add('separator', m(Separator, null), -90);\n items.add('settings', m(LinkButton, {\n href: app.route('settings'),\n icon: \"fas fa-cog\"\n }, app.translator.trans('core.forum.user.settings_link')), -100);\n }\n if (isActor || app.forum.attribute('canModerateAccessTokens')) {\n if (!isActor) {\n items.add('security-separator', m(Separator, null), -90);\n }\n items.add('security', m(LinkButton, {\n href: app.route('user.security', {\n username: user.slug()\n }),\n icon: \"fas fa-shield-alt\"\n }, app.translator.trans('core.forum.user.security_link')), -100);\n }\n return items;\n }\n}\nflarum.reg.add('core', 'forum/components/UserPage', UserPage);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport extractText from '../../common/utils/extractText';\nimport UserSearchResult from '../../common/components/UserSearchResult';\n\n/**\n * The `UsersSearchSource` finds and displays user search results in the search\n * dropdown.\n */\nexport default class UsersSearchSource {\n constructor() {\n _defineProperty(this, \"results\", new Map());\n _defineProperty(this, \"resource\", 'users');\n }\n title() {\n return extractText(app.translator.trans('core.lib.search_source.users.heading'));\n }\n isCached(query) {\n return this.results.has(query.toLowerCase());\n }\n async search(query, limit) {\n return app.store.find('users', {\n filter: {\n q: query\n },\n page: {\n limit\n }\n }).then(results => {\n this.results.set(query, results);\n m.redraw();\n });\n }\n view(query) {\n query = query.toLowerCase();\n const results = (this.results.get(query) || []).concat(app.store.all('users').filter(user => [user.username(), user.displayName()].some(value => value.toLowerCase().substr(0, query.length) === query))).filter((e, i, arr) => arr.lastIndexOf(e) === i).sort((a, b) => a.displayName().localeCompare(b.displayName()));\n if (!results.length) return [];\n return results.map(user => m(UserSearchResult, {\n user: user,\n query: query\n }));\n }\n customGrouping() {\n return false;\n }\n fullPage(query) {\n return null;\n }\n gotoItem(id) {\n const user = app.store.getById('users', id);\n if (!user) return null;\n return app.route.user(user);\n }\n}\nflarum.reg.add('core', 'forum/components/UsersSearchSource', UsersSearchSource);","import app from '../app';\nimport Component from '../../common/Component';\nimport Button from '../../common/components/Button';\nimport ItemList from '../../common/utils/ItemList';\nconst LOCAL_STORAGE_KEY = 'welcomeHidden';\n\n/**\n * The `WelcomeHero` component displays a hero that welcomes the user to the\n * forum.\n */\nexport default class WelcomeHero extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view(vnode) {\n if (this.isHidden()) return null;\n const slideUp = () => {\n this.$().slideUp(this.hide.bind(this));\n };\n return m(\"header\", {\n className: \"Hero WelcomeHero\"\n }, m(\"div\", {\n className: \"container\"\n }, m(Button, {\n icon: \"fas fa-times\",\n onclick: slideUp,\n className: \"Hero-close Button Button--icon Button--link\",\n \"aria-label\": app.translator.trans('core.forum.welcome_hero.hide')\n }), m(\"div\", {\n className: \"containerNarrow\"\n }, this.welcomeItems().toArray())));\n }\n\n /**\n * Hide the welcome hero.\n */\n hide() {\n localStorage.setItem(LOCAL_STORAGE_KEY, 'true');\n }\n\n /**\n * Determines whether the welcome hero should be hidden.\n *\n * @returns if the welcome hero is hidden.\n */\n isHidden() {\n var _app$forum$attribute;\n if (!((_app$forum$attribute = app.forum.attribute('welcomeTitle')) != null && _app$forum$attribute.trim())) return true;\n if (localStorage.getItem(LOCAL_STORAGE_KEY)) return true;\n return false;\n }\n welcomeItems() {\n const items = new ItemList();\n items.add('hero-title', m(\"h1\", {\n className: \"Hero-title\"\n }, app.forum.attribute('welcomeTitle')), 20);\n items.add('hero-subtitle', m(\"div\", {\n className: \"Hero-subtitle\"\n }, m.trust(app.forum.attribute('welcomeMessage'))), 10);\n return items;\n }\n}\nflarum.reg.add('core', 'forum/components/WelcomeHero', WelcomeHero);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport DefaultResolver from '../../common/resolvers/DefaultResolver';\nimport DiscussionPage from '../components/DiscussionPage';\n\n/**\n * A custom route resolver for DiscussionPage that generates the same key to all posts\n * on the same discussion. It triggers a scroll when going from one post to another\n * in the same discussion.\n */\nexport default class DiscussionPageResolver extends DefaultResolver {\n /**\n * Remove optional parts of a discussion's slug to keep the substring\n * that bijectively maps to a discussion object. By default this just\n * extracts the numerical ID from the slug. If a custom discussion\n * slugging driver is used, this may need to be overriden.\n * @param slug\n */\n canonicalizeDiscussionSlug(slug) {\n if (!slug) return;\n return slug.split('-')[0];\n }\n\n /**\n * @inheritdoc\n */\n makeKey() {\n const params = {\n ...m.route.param()\n };\n if ('near' in params) {\n delete params.near;\n }\n params.id = this.canonicalizeDiscussionSlug(params.id);\n return this.routeName.replace('.near', '') + JSON.stringify(params);\n }\n onmatch(args, requestedPath, route) {\n if (app.current.matches(DiscussionPage) && this.canonicalizeDiscussionSlug(args.id) === this.canonicalizeDiscussionSlug(m.route.param('id'))) {\n // By default, the first post number of any discussion is 1\n DiscussionPageResolver.scrollToPostNumber = args.near || 1;\n }\n return super.onmatch(args, requestedPath, route);\n }\n render(vnode) {\n if (DiscussionPageResolver.scrollToPostNumber !== null) {\n const number = DiscussionPageResolver.scrollToPostNumber;\n // Scroll after a timeout to avoid clashes with the render.\n setTimeout(() => app.current.get('stream').goToNumber(number));\n DiscussionPageResolver.scrollToPostNumber = null;\n }\n return super.render(vnode);\n }\n}\n_defineProperty(DiscussionPageResolver, \"scrollToPostNumber\", null);\nflarum.reg.add('core', 'forum/resolvers/DiscussionPageResolver', DiscussionPageResolver);","import IndexPage from './components/IndexPage';\nimport DiscussionPage from './components/DiscussionPage';\nimport PostsUserPage from './components/PostsUserPage';\nimport DiscussionPageResolver from './resolvers/DiscussionPageResolver';\n\n/**\n * Helper functions to generate URLs to form pages.\n */\n\n/**\n * The `routes` initializer defines the forum app's routes.\n */\nexport default function (app) {\n app.routes = {\n index: {\n path: '/all',\n component: IndexPage\n },\n posts: {\n path: '/posts',\n component: () => import(/* webpackChunkName: 'forum/components/PostsPage', webpackMode: 'lazy-once' */ './components/PostsPage')\n },\n discussion: {\n path: '/d/:id',\n component: DiscussionPage,\n resolverClass: DiscussionPageResolver\n },\n 'discussion.near': {\n path: '/d/:id/:near',\n component: DiscussionPage,\n resolverClass: DiscussionPageResolver\n },\n user: {\n path: '/u/:username',\n component: PostsUserPage\n },\n 'user.posts': {\n path: '/u/:username',\n component: PostsUserPage\n },\n 'user.discussions': {\n path: '/u/:username/discussions',\n component: () => import(/* webpackChunkName: 'forum/components/DiscussionsUserPage', webpackMode: 'lazy-once' */ './components/DiscussionsUserPage')\n },\n settings: {\n path: '/settings',\n component: () => import(/* webpackChunkName: 'forum/components/SettingsPage', webpackMode: 'lazy-once' */ './components/SettingsPage')\n },\n 'user.security': {\n path: '/u/:username/security',\n component: () => import(/* webpackChunkName: 'forum/components/UserSecurityPage', webpackMode: 'lazy-once' */ './components/UserSecurityPage')\n },\n notifications: {\n path: '/notifications',\n component: () => import(/* webpackChunkName: 'forum/components/NotificationsPage', webpackMode: 'lazy-once' */ './components/NotificationsPage')\n }\n };\n}\nexport function makeRouteHelpers(app) {\n return {\n /**\n * Generate a URL to a discussion.\n */\n discussion: (discussion, near) => {\n return app.route(near && near !== 1 ? 'discussion.near' : 'discussion', {\n id: discussion.slug(),\n near: near && near !== 1 ? near : undefined\n });\n },\n /**\n * Generate a URL to a post.\n */\n post: post => {\n return app.route.discussion(post.discussion(), post.number());\n },\n /**\n * Generate a URL to a user.\n */\n user: user => {\n return app.route('user', {\n username: user.slug()\n });\n }\n };\n}flarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostsPage');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/app');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/arrayFlatPolyfill');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/app');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/utils/History');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/setRouteWithForcedRefresh');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/utils/Pane');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionPage');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Page');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/Component');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/states/PageState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/subclassOf');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/ItemList');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/isObject');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionHero');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/listItems');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Separator');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionListPane');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionList');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionListItem');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Link');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/extract');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/highlight');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/string');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/humanTime');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/abbreviateNumber');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/extractText');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Dropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Tooltip');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Icon');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/TerminalPost');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/humanTime');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/SubtreeRetainer');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/utils/DiscussionControls');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/LoadingIndicator');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/RenameDiscussionModal');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/FormModal');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Modal');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Alert');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/Stream');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Form');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/utils/slidable');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/escapeRegExp');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Avatar');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Placeholder');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/SplitDropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/states/PostStreamState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/anchorScroll');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PageStructure');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/HeaderPrimary');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/HeaderSecondary');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/SessionDropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/username');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/LinkButton');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/SelectDropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/models/Discussion');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/Model');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/computed');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Badge');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/textContrastClass');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/isDark');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionsSearchSource');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/MinimalDiscussionListItem');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/UsersSearchSource');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/UserSearchResult');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Input');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionRenamedNotification');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/utils/PostControls');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostUser');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/userOnline');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostMeta');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/fullTime');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/models/Post');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostEdited');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/UserCard');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/utils/UserControls');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/UserPage');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/AffixedSidebar');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/AvatarEditor');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/ComposerPostPreview');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/DiscussionRenamedPost');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/EventPost');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/routes');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/IndexPage');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/WelcomeHero');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/IndexSidebar');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/states/PostListState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/states/PaginatedListState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/EventEmitter');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostsUserPage');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/resolvers/DiscussionPageResolver');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/resolvers/DefaultResolver');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/Application');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/ModalManager');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/focusTrap');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/AlertManager');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/RequestErrorModal');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/Translator');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/Store');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/Session');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/Drawer');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/mapRoutes');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/RequestError');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/ScrollListener');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/liveHumanTimes');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extend');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/models/Forum');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/models/User');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/stringToColor');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/GroupBadge');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/models/Group');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/models/Notification');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/states/ModalManagerState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/states/AlertManagerState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/fireApplicationError');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/models/AccessToken');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/ThemeMode');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Navigation');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/states/NotificationListState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/states/GlobalSearchState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/states/SearchState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/states/DiscussionListState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/states/ComposerState');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/IGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/AutocompleteReader');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/GambitsAutocomplete');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/insertText');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/formatNumber');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/withAttr');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/KeyboardNavigatable');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Switch');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Checkbox');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/InfoTile');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/FieldSet');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/TextEditor');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/BasicEditorDriver');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/LoadingPost');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/LogInButtons');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/index');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/index');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/registry');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/patchMithril');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/common');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/forum');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/ExportRegistry');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/LogInButton');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostPreview');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/index');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/mixin');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/styleSelectedText');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/throttleDebounce');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/UserSelectionModal');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/formatAmount');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/generateElementId');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/FormGroup');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/DetailedDropdownItem');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Select');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/MultiSelect');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/ColorPreviewInput');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/TextEditorButton');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/AutocompleteDropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/GambitsAutocompleteDropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/UploadImageButton');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/punctuateSeries');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/Fragment');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/bidi');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/Model');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/PostTypes');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/Routes');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/Store');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/Search');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/Notification');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/ThemeMode');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/extenders/Admin');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Pill');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/SearchManager');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/GambitManager');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/discussions/AuthorGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/discussions/CreatedGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/discussions/HiddenGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/discussions/UnreadGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/users/EmailGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/users/GroupGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/query/discussions/DiscussionGambit');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/ForumApplication');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/utils/isSafariMobile');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/Notices');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/Footer');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/NotificationList');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/HeaderList');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/HeaderListGroup');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/NotificationType');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/Search');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostsSearchSource');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/AbstractSearch');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/Notification');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/HeaderListItem');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/Post');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/AbstractPost');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/NotificationsDropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/HeaderDropdown');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/CommentPost');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/Comment');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/utils/classList');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/components/Button');\nflarum.reg.addChunkModule('170', '8510', 'core', 'common/helpers/fireDebugWarning');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostList');\nflarum.reg.addChunkModule('170', '8510', 'core', 'forum/components/PostListItem');\nflarum.reg.addChunkModule('879', '9101', 'core', 'forum/components/DiscussionsUserPage');\nflarum.reg.addChunkModule('298', '1612', 'core', 'forum/components/SettingsPage');\nflarum.reg.addChunkModule('298', '1612', 'core', 'forum/components/NotificationGrid');\nflarum.reg.addChunkModule('298', '1612', 'core', 'forum/components/ChangePasswordModal');\nflarum.reg.addChunkModule('298', '1612', 'core', 'forum/components/ChangeEmailModal');\nflarum.reg.addChunkModule('698', '1053', 'core', 'forum/components/UserSecurityPage');\nflarum.reg.addChunkModule('698', '1053', 'core', 'forum/components/AccessTokensList');\nflarum.reg.addChunkModule('698', '1053', 'core', 'forum/components/NewAccessTokenModal');\nflarum.reg.addChunkModule('698', '1053', 'core', 'forum/states/UserSecurityPageState');\nflarum.reg.addChunkModule('698', '1053', 'core', 'common/components/LabelValue');\nflarum.reg.addChunkModule('173', '8427', 'core', 'forum/components/NotificationsPage');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport subclassOf from '../../common/utils/subclassOf';\nimport Stream from '../../common/utils/Stream';\nimport Component from '../../common/Component';\nclass ComposerState {\n constructor() {\n /**\n * The composer's current position.\n */\n _defineProperty(this, \"position\", ComposerState.Position.HIDDEN);\n /**\n * The composer's intended height, which can be modified by the user\n * (by dragging the composer handle).\n */\n _defineProperty(this, \"height\", null);\n /**\n * The dynamic component being shown inside the composer.\n */\n _defineProperty(this, \"body\", {\n attrs: {}\n });\n /**\n * A reference to the text editor that allows text manipulation.\n */\n _defineProperty(this, \"editor\", null);\n /**\n * If the composer was loaded and mounted.\n */\n _defineProperty(this, \"mounted\", false);\n _defineProperty(this, \"onExit\", null);\n /**\n * Fields of the composer.\n */\n _defineProperty(this, \"fields\", void 0);\n this.clear();\n }\n\n /**\n * Load a content component into the composer.\n *\n */\n async load(componentClass, attrs) {\n if (!(componentClass.prototype instanceof Component)) {\n componentClass = (await componentClass()).default;\n }\n const body = {\n componentClass,\n attrs\n };\n if (this.preventExit()) return;\n\n // If we load a similar component into the composer, then Mithril will be\n // able to diff the old/new contents and some DOM-related state from the\n // old composer will remain. To prevent this from happening, we clear the\n // component and force a redraw, so that the new component will be working\n // on a blank slate.\n if (this.isVisible()) {\n this.clear();\n m.redraw.sync();\n }\n this.body = body;\n return componentClass;\n }\n\n /**\n * Clear the composer's content component.\n */\n clear() {\n this.position = ComposerState.Position.HIDDEN;\n this.body = {\n attrs: {}\n };\n this.onExit = null;\n this.fields = {\n content: Stream('')\n };\n if (this.editor) {\n this.editor.destroy();\n }\n this.editor = null;\n }\n\n /**\n * Show the composer.\n */\n async show() {\n if (!this.mounted) {\n const Composer = (await import(/* webpackChunkName: 'forum/components/Composer', webpackMode: 'lazy-once' */ '../components/Composer')).default;\n m.mount(document.getElementById('composer'), {\n view: () => m(Composer, {\n state: this\n })\n });\n this.mounted = true;\n }\n if (this.position === ComposerState.Position.NORMAL || this.position === ComposerState.Position.FULLSCREEN) return;\n this.position = ComposerState.Position.NORMAL;\n m.redraw.sync();\n\n // Sleep for a short time to allow the composer to render before subsequent actions.\n await new Promise(resolve => setTimeout(resolve, 80));\n }\n\n /**\n * Close the composer.\n */\n hide() {\n this.clear();\n m.redraw();\n }\n\n /**\n * Confirm with the user so they don't lose their content, then close the\n * composer.\n */\n close() {\n if (this.preventExit()) return;\n this.hide();\n }\n\n /**\n * Minimize the composer. Has no effect if the composer is hidden.\n */\n minimize() {\n if (!this.isVisible()) return;\n this.position = ComposerState.Position.MINIMIZED;\n m.redraw();\n }\n\n /**\n * Take the composer into fullscreen mode. Has no effect if the composer is\n * hidden.\n */\n fullScreen() {\n if (!this.isVisible()) return;\n this.position = ComposerState.Position.FULLSCREEN;\n m.redraw();\n }\n\n /**\n * Exit fullscreen mode.\n */\n exitFullScreen() {\n if (this.position !== ComposerState.Position.FULLSCREEN) return;\n this.position = ComposerState.Position.NORMAL;\n m.redraw();\n }\n\n /**\n * Determine whether the body matches the given component class and data.\n *\n * @param type The component class to check against. Subclasses are accepted as well.\n * @param data\n */\n bodyMatches(type, data) {\n if (data === void 0) {\n data = {};\n }\n // Fail early when the body is of a different type\n if (!subclassOf(this.body.componentClass, type)) return false;\n\n // Now that the type is known to be correct, we loop through the provided\n // data to see whether it matches the data in the attributes for the body.\n return Object.keys(data).every(key => this.body.attrs[key] === data[key]);\n }\n\n /**\n * Determine whether or not the Composer is visible.\n *\n * True when the composer is displayed on the screen and has a body component.\n * It could be open in \"normal\" or full-screen mode, or even minimized.\n *\n * @returns {boolean}\n */\n isVisible() {\n return this.position !== ComposerState.Position.HIDDEN;\n }\n\n /**\n * Determine whether or not the Composer is covering the screen.\n *\n * This will be true if the Composer is in full-screen mode on desktop,\n * or if we are on a mobile device, where we always consider the composer as full-screen..\n *\n * @return {boolean}\n */\n isFullScreen() {\n return this.position === ComposerState.Position.FULLSCREEN || app.screen() === 'phone';\n }\n\n /**\n * Check whether or not the user is currently composing a reply to a\n * discussion.\n *\n * @param {import('../../common/models/Discussion').default} discussion\n * @return {boolean}\n */\n composingReplyTo(discussion) {\n const ReplyComposer = flarum.reg.checkModule('core', 'forum/components/ReplyComposer');\n if (!ReplyComposer) return false;\n return this.isVisible() && this.bodyMatches(ReplyComposer, {\n discussion\n });\n }\n\n /**\n * Confirm with the user that they want to close the composer and lose their\n * content.\n *\n * @return Whether or not the exit was cancelled.\n */\n preventExit() {\n if (!this.isVisible()) return;\n if (!this.onExit) return;\n if (this.onExit.callback()) {\n return !confirm(this.onExit.message);\n }\n }\n\n /**\n * Configure when / what to ask the user before closing the composer.\n *\n * The provided callback will be used to determine whether asking for\n * confirmation is necessary. If the callback returns true at the time of\n * closing, the provided text will be shown in a standard confirmation dialog.\n */\n preventClosingWhen(callback, message) {\n this.onExit = {\n callback,\n message\n };\n }\n\n /**\n * Minimum height of the Composer.\n * @returns {number}\n */\n minimumHeight() {\n return 200;\n }\n\n /**\n * Maximum height of the Composer.\n */\n maximumHeight() {\n return $(window).height() - $('#header').outerHeight();\n }\n\n /**\n * Computed the composer's current height, based on the intended height, and\n * the composer's current state. This will be applied to the composer\n * content's DOM element.\n */\n computedHeight() {\n // If the composer is minimized, then we don't want to set a height; we'll\n // let the CSS decide how high it is. If it's fullscreen, then we need to\n // make it as high as the window.\n if (this.position === ComposerState.Position.MINIMIZED) {\n return '';\n } else if (this.position === ComposerState.Position.FULLSCREEN) {\n return $(window).height();\n }\n\n // Otherwise, if it's normal or hidden, then we use the intended height.\n // We don't let the composer get too small or too big, though.\n return Math.max(this.minimumHeight(), Math.min(this.height || 0, this.maximumHeight()));\n }\n}\n_defineProperty(ComposerState, \"Position\", {\n HIDDEN: 'hidden',\n NORMAL: 'normal',\n MINIMIZED: 'minimized',\n FULLSCREEN: 'fullScreen'\n});\nexport default ComposerState;\nflarum.reg.add('core', 'forum/states/ComposerState', ComposerState);flarum.reg.addChunkModule('366', '8139', 'core', 'forum/components/Composer');\nflarum.reg.addChunkModule('366', '8139', 'core', 'forum/components/ComposerButton');","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport PaginatedListState from '../../common/states/PaginatedListState';\nimport EventEmitter from '../../common/utils/EventEmitter';\nconst globalEventEmitter = new EventEmitter();\nexport default class DiscussionListState extends PaginatedListState {\n constructor(params, page) {\n if (page === void 0) {\n page = 1;\n }\n super(params, page, null);\n _defineProperty(this, \"extraDiscussions\", []);\n _defineProperty(this, \"eventEmitter\", void 0);\n this.eventEmitter = globalEventEmitter.on('discussion.deleted', this.deleteDiscussion.bind(this));\n }\n get type() {\n return 'discussions';\n }\n requestParams() {\n const params = {\n include: ['user', 'lastPostedUser'],\n filter: this.params.filter || {},\n sort: this.currentSort()\n };\n if (this.params.q) {\n params.filter.q = this.params.q;\n params.include.push('mostRelevantPost', 'mostRelevantPost.user');\n }\n return params;\n }\n loadPage(page) {\n if (page === void 0) {\n page = 1;\n }\n const preloadedDiscussions = app.preloadedApiDocument();\n if (preloadedDiscussions) {\n var _preloadedDiscussions;\n this.initialLoading = false;\n this.pageSize = ((_preloadedDiscussions = preloadedDiscussions.payload.meta) == null ? void 0 : _preloadedDiscussions.perPage) || DiscussionListState.DEFAULT_PAGE_SIZE;\n return Promise.resolve(preloadedDiscussions);\n }\n return super.loadPage(page);\n }\n clear() {\n super.clear();\n this.extraDiscussions = [];\n }\n\n /**\n * Get a map of sort keys (which appear in the URL, and are used for\n * translation) to the API sort value that they represent.\n */\n sortMap() {\n const map = {};\n if (this.params.q) {\n map.relevance = '';\n }\n map.latest = '-lastPostedAt';\n map.top = '-commentCount';\n map.newest = '-createdAt';\n map.oldest = 'createdAt';\n return map;\n }\n removeDiscussion(discussion) {\n this.eventEmitter.emit('discussion.deleted', discussion);\n }\n deleteDiscussion(discussion) {\n for (const page of this.pages) {\n const index = page.items.indexOf(discussion);\n if (index !== -1) {\n page.items.splice(index, 1);\n break;\n }\n }\n const index = this.extraDiscussions.indexOf(discussion);\n if (index !== -1) {\n this.extraDiscussions.splice(index);\n }\n m.redraw();\n }\n\n /**\n * Add a discussion to the top of the list.\n */\n addDiscussion(discussion) {\n this.removeDiscussion(discussion);\n this.extraDiscussions.unshift(discussion);\n m.redraw();\n }\n getAllItems() {\n return this.extraDiscussions.concat(super.getAllItems());\n }\n getPages() {\n const pages = super.getPages();\n if (this.extraDiscussions.length) {\n return [{\n number: -1,\n items: this.extraDiscussions\n }, ...pages];\n }\n return pages;\n }\n}\nflarum.reg.add('core', 'forum/states/DiscussionListState', DiscussionListState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport setRouteWithForcedRefresh from '../../common/utils/setRouteWithForcedRefresh';\nimport SearchState from '../../common/states/SearchState';\nexport default class GlobalSearchState extends SearchState {\n constructor(cachedSearches) {\n if (cachedSearches === void 0) {\n cachedSearches = [];\n }\n super(cachedSearches);\n _defineProperty(this, \"initialValueSet\", false);\n }\n getValue() {\n // If we are on a search results page, we should initialize the value\n // from the current search, if one is present.\n // We can't do this in the constructor, as this class is instantiated\n // before pages are rendered, and we need app.current.\n if (!this.initialValueSet && this.currPageProvidesSearch()) {\n this.intializeValue();\n }\n return super.getValue();\n }\n intializeValue() {\n this.setValue(this.getInitialSearch());\n this.initialValueSet = true;\n }\n currPageProvidesSearch() {\n return app.current.type && 'providesInitialSearch' in app.current.type && app.current.type.providesInitialSearch;\n }\n\n /**\n * @inheritdoc\n */\n getInitialSearch() {\n return this.currPageProvidesSearch() ? this.searchToQuery() : '';\n }\n searchToQuery() {\n const q = this.params().q || '';\n const filter = this.params().filter || {};\n return app.search.gambits.from('users', app.search.gambits.from('discussions', q, filter), filter).trim();\n }\n\n /**\n * Clear the search input and the current controller's active search.\n */\n clear() {\n super.clear();\n if (this.getInitialSearch()) {\n this.clearInitialSearch();\n } else {\n m.redraw();\n }\n }\n\n /**\n * Redirect to the index page without a search filter. This is called when the\n * 'x' is clicked in the search box in the header.\n */\n clearInitialSearch() {\n const {\n q,\n filter,\n ...params\n } = this.params();\n setRouteWithForcedRefresh(app.route(app.current.get('routeName'), params));\n }\n\n /**\n * Get URL parameters that stick between filter changes.\n *\n * This can be used to generate a link that clears filters.\n */\n stickyParams() {\n return {\n sort: m.route.param('sort'),\n q: m.route.param('q'),\n // Objects must be copied, otherwise they are passed by reference.\n // Which could end up undesirably modifying the mithril route params.\n filter: Object.assign({}, m.route.param('filter'))\n };\n }\n\n /**\n * Get parameters to be used in the current page.\n */\n params() {\n const params = this.stickyParams();\n return params;\n }\n\n /**\n * Redirect to the index page using the given sort parameter.\n */\n changeSort(sort) {\n const params = this.params();\n if (sort === Object.keys(app.discussions.sortMap())[0]) {\n delete params.sort;\n } else {\n params.sort = sort;\n }\n setRouteWithForcedRefresh(app.route(app.current.get('routeName'), params));\n }\n}\nflarum.reg.add('core', 'forum/states/GlobalSearchState', GlobalSearchState);","import app from '../../forum/app';\nimport PaginatedListState from '../../common/states/PaginatedListState';\nexport default class NotificationListState extends PaginatedListState {\n constructor() {\n super({}, 1, null);\n }\n get type() {\n return 'notifications';\n }\n\n /**\n * Load the next page of notification results.\n */\n load() {\n var _app$session$user, _app$session$user2;\n if ((_app$session$user = app.session.user) != null && _app$session$user.newNotificationCount()) {\n this.pages = [];\n this.location = {\n page: 1\n };\n }\n if (this.pages.length > 0) {\n return Promise.resolve();\n }\n (_app$session$user2 = app.session.user) == null || _app$session$user2.pushAttributes({\n newNotificationCount: 0\n });\n return super.loadNext();\n }\n\n /**\n * Mark all of the notifications as read.\n */\n markAllAsRead() {\n var _app$session$user3;\n if (this.pages.length === 0) return;\n (_app$session$user3 = app.session.user) == null || _app$session$user3.pushAttributes({\n unreadNotificationCount: 0\n });\n this.pages.forEach(page => {\n page.items.forEach(notification => notification.pushAttributes({\n isRead: true\n }));\n });\n return app.request({\n url: app.forum.attribute('apiUrl') + '/notifications/read',\n method: 'POST'\n });\n }\n\n /**\n * Delete all of the notifications for this user.\n */\n deleteAll() {\n var _app$session$user4;\n if (this.pages.length === 0) return;\n (_app$session$user4 = app.session.user) == null || _app$session$user4.pushAttributes({\n unreadNotificationCount: 0\n });\n this.pages = [];\n return app.request({\n url: app.forum.attribute('apiUrl') + '/notifications',\n method: 'DELETE'\n });\n }\n}\nflarum.reg.add('core', 'forum/states/NotificationListState', NotificationListState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport PaginatedListState from '../../common/states/PaginatedListState';\nimport EventEmitter from '../../common/utils/EventEmitter';\nconst globalEventEmitter = new EventEmitter();\nexport default class PostListState extends PaginatedListState {\n constructor(params, page, pageSize) {\n if (page === void 0) {\n page = 1;\n }\n if (pageSize === void 0) {\n pageSize = null;\n }\n super(params, page, pageSize);\n _defineProperty(this, \"extraPosts\", []);\n _defineProperty(this, \"eventEmitter\", void 0);\n this.eventEmitter = globalEventEmitter;\n }\n get type() {\n return 'posts';\n }\n requestParams() {\n var _this$params$sort;\n const params = {\n include: ['user', 'discussion'],\n filter: {\n type: 'comment',\n ...(this.params.filter || {})\n },\n sort: this.sortMap()[(_this$params$sort = this.params.sort) != null ? _this$params$sort : ''] || '-createdAt'\n };\n if (this.params.q) {\n params.filter.q = this.params.q;\n }\n return params;\n }\n loadPage(page) {\n if (page === void 0) {\n page = 1;\n }\n const preloadedPosts = app.preloadedApiDocument();\n if (preloadedPosts) {\n var _preloadedPosts$paylo;\n this.initialLoading = false;\n this.pageSize = ((_preloadedPosts$paylo = preloadedPosts.payload.meta) == null ? void 0 : _preloadedPosts$paylo.perPage) || PostListState.DEFAULT_PAGE_SIZE;\n return Promise.resolve(preloadedPosts);\n }\n return super.loadPage(page);\n }\n clear() {\n super.clear();\n this.extraPosts = [];\n }\n\n /**\n * Get a map of sort keys (which appear in the URL, and are used for\n * translation) to the API sort value that they represent.\n */\n sortMap() {\n const map = {};\n if (this.params.q) {\n map.relevance = '';\n }\n map.newest = '-createdAt';\n map.oldest = 'createdAt';\n return map;\n }\n getAllItems() {\n return this.extraPosts.concat(super.getAllItems());\n }\n getPages() {\n const pages = super.getPages();\n if (this.extraPosts.length) {\n return [{\n number: -1,\n items: this.extraPosts\n }, ...pages];\n }\n return pages;\n }\n}\nflarum.reg.add('core', 'forum/states/PostListState', PostListState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../../forum/app';\nimport { throttle } from 'throttle-debounce';\nimport anchorScroll from '../../common/utils/anchorScroll';\nexport default class PostStreamState {\n constructor(discussion, includedPosts) {\n if (includedPosts === void 0) {\n includedPosts = [];\n }\n /**\n * The discussion to display the post stream for.\n */\n _defineProperty(this, \"discussion\", void 0);\n /**\n * Whether or not the infinite-scrolling auto-load functionality is\n * disabled.\n */\n _defineProperty(this, \"paused\", false);\n _defineProperty(this, \"loadPageTimeouts\", {});\n _defineProperty(this, \"pagesLoading\", 0);\n _defineProperty(this, \"index\", 0);\n _defineProperty(this, \"number\", 1);\n /**\n * The number of posts that are currently visible in the viewport.\n */\n _defineProperty(this, \"visible\", 1);\n _defineProperty(this, \"visibleStart\", 0);\n _defineProperty(this, \"visibleEnd\", 0);\n _defineProperty(this, \"animateScroll\", false);\n _defineProperty(this, \"needsScroll\", false);\n _defineProperty(this, \"targetPost\", null);\n /**\n * The description to render on the scrubber.\n */\n _defineProperty(this, \"description\", '');\n /**\n * When the page is scrolled, goToIndex is called, or the page is loaded,\n * various listeners result in the scrubber being updated with a new\n * position and values. However, if goToNumber is called, the scrubber\n * will not be updated. Accordingly, we add logic to the scrubber's\n * onupdate to update itself, but only when needed, as indicated by this\n * property.\n *\n */\n _defineProperty(this, \"forceUpdateScrubber\", false);\n _defineProperty(this, \"loadPromise\", null);\n _defineProperty(this, \"loadNext\", void 0);\n _defineProperty(this, \"loadPrevious\", void 0);\n this.discussion = discussion;\n this.loadNext = throttle(300, this._loadNext);\n this.loadPrevious = throttle(300, this._loadPrevious);\n this.show(includedPosts);\n }\n\n /**\n * Update the stream so that it loads and includes the latest posts in the\n * discussion, if the end is being viewed.\n */\n update() {\n if (!this.viewingEnd()) return Promise.resolve();\n this.visibleEnd = this.count();\n return this.loadRange(this.visibleStart, this.visibleEnd);\n }\n\n /**\n * Load and scroll up to the first post in the discussion.\n */\n goToFirst() {\n return this.goToIndex(0);\n }\n\n /**\n * Load and scroll down to the last post in the discussion.\n */\n goToLast() {\n return this.goToIndex(this.count() - 1, true);\n }\n\n /**\n * Load and scroll to a post with a certain number.\n *\n * @param number The post number to go to. If 'reply', go to the last post and scroll the reply preview into view.\n */\n goToNumber(number, noAnimation) {\n if (noAnimation === void 0) {\n noAnimation = false;\n }\n // If we want to go to the reply preview, then we will go to the end of the\n // discussion and then scroll to the very bottom of the page.\n if (number === 'reply') {\n const resultPromise = this.goToLast();\n this.targetPost = {\n ...this.targetPost,\n reply: true\n };\n return resultPromise;\n }\n this.paused = true;\n this.loadPromise = this.loadNearNumber(number);\n this.needsScroll = true;\n this.targetPost = {\n number\n };\n this.animateScroll = !noAnimation;\n this.number = number;\n\n // In this case, the redraw is only called after the response has been loaded\n // because we need to know the indices of the post range before we can\n // start scrolling to items. Calling redraw early causes issues.\n // Since this is only used for external navigation to the post stream, the delay\n // before the stream is moved is not an issue.\n return this.loadPromise.then(() => m.redraw());\n }\n\n /**\n * Load and scroll to a certain index within the discussion.\n */\n goToIndex(index, noAnimation) {\n if (noAnimation === void 0) {\n noAnimation = false;\n }\n this.paused = true;\n this.loadPromise = this.loadNearIndex(index);\n this.needsScroll = true;\n this.targetPost = {\n index\n };\n this.animateScroll = !noAnimation;\n this.index = index;\n m.redraw();\n return this.loadPromise;\n }\n\n /**\n * Clear the stream and load posts near a certain number. Returns a promise.\n * If the post with the given number is already loaded, the promise will be\n * resolved immediately.\n */\n loadNearNumber(number) {\n if (this.posts().some(post => post && Number(post.number()) === Number(number))) {\n return Promise.resolve();\n }\n this.reset();\n return app.store.find('posts', {\n filter: {\n discussion: this.discussion.id()\n },\n page: {\n near: number\n }\n }).then(this.show.bind(this));\n }\n\n /**\n * Clear the stream and load posts near a certain index. A page of posts\n * surrounding the given index will be loaded. Returns a promise. If the given\n * index is already loaded, the promise will be resolved immediately.\n */\n loadNearIndex(index) {\n if (index >= this.visibleStart && index < this.visibleEnd) {\n return Promise.resolve();\n }\n const start = this.sanitizeIndex(index - PostStreamState.loadCount / 2);\n const end = start + PostStreamState.loadCount;\n this.reset(start, end);\n return this.loadRange(start, end).then(this.show.bind(this));\n }\n\n /**\n * Load the next page of posts.\n */\n _loadNext() {\n const start = this.visibleEnd;\n const end = this.visibleEnd = this.sanitizeIndex(this.visibleEnd + PostStreamState.loadCount);\n\n // Unload the posts which are two pages back from the page we're currently\n // loading.\n const twoPagesAway = start - PostStreamState.loadCount * 2;\n if (twoPagesAway > this.visibleStart && twoPagesAway >= 0) {\n this.visibleStart = twoPagesAway + PostStreamState.loadCount + 1;\n if (this.loadPageTimeouts[twoPagesAway]) {\n clearTimeout(this.loadPageTimeouts[twoPagesAway]);\n delete this.loadPageTimeouts[twoPagesAway];\n this.pagesLoading--;\n }\n }\n this.loadPage(start, end);\n }\n\n /**\n * Load the previous page of posts.\n */\n _loadPrevious() {\n const end = this.visibleStart;\n const start = this.visibleStart = this.sanitizeIndex(this.visibleStart - PostStreamState.loadCount);\n\n // Unload the posts which are two pages back from the page we're currently\n // loading.\n const twoPagesAway = start + PostStreamState.loadCount * 2;\n if (twoPagesAway < this.visibleEnd && twoPagesAway <= this.count()) {\n this.visibleEnd = twoPagesAway;\n if (this.loadPageTimeouts[twoPagesAway]) {\n clearTimeout(this.loadPageTimeouts[twoPagesAway]);\n delete this.loadPageTimeouts[twoPagesAway];\n this.pagesLoading--;\n }\n }\n this.loadPage(start, end, true);\n }\n\n /**\n * Load a page of posts into the stream and redraw.\n */\n loadPage(start, end, backwards) {\n if (backwards === void 0) {\n backwards = false;\n }\n this.pagesLoading++;\n const redraw = () => {\n if (start < this.visibleStart || end > this.visibleEnd) return;\n const anchorIndex = backwards ? this.visibleEnd - 1 : this.visibleStart;\n anchorScroll(\".PostStream-item[data-index=\\\"\".concat(anchorIndex, \"\\\"]\"), m.redraw.sync);\n };\n redraw();\n this.loadPageTimeouts[start] = setTimeout(() => {\n this.loadRange(start, end).then(() => {\n redraw();\n this.pagesLoading--;\n });\n delete this.loadPageTimeouts[start];\n }, this.pagesLoading - 1 ? 1000 : 0);\n }\n\n /**\n * Load and inject the specified range of posts into the stream, without\n * clearing it.\n */\n loadRange(start, end) {\n const loadIds = [];\n const loaded = [];\n this.discussion.postIds().slice(start, end).forEach(id => {\n const post = app.store.getById('posts', id);\n if (post && post.discussion() && typeof post.canEdit() !== 'undefined') {\n loaded.push(post);\n } else {\n loadIds.push(id);\n }\n });\n if (loadIds.length) {\n return app.store.find('posts', loadIds).then(newPosts => {\n return loaded.concat(newPosts).sort((a, b) => a.number() - b.number());\n });\n }\n return Promise.resolve(loaded);\n }\n\n /**\n * Set up the stream with the given array of posts.\n */\n show(posts) {\n var _posts$0$id;\n this.visibleStart = posts.length ? this.discussion.postIds().indexOf((_posts$0$id = posts[0].id()) != null ? _posts$0$id : '0') : 0;\n this.visibleEnd = this.sanitizeIndex(this.visibleStart + posts.length);\n }\n\n /**\n * Reset the stream so that a specific range of posts is displayed. If a range\n * is not specified, the first page of posts will be displayed.\n */\n reset(start, end) {\n this.visibleStart = start || 0;\n this.visibleEnd = this.sanitizeIndex(end || PostStreamState.loadCount);\n }\n\n /**\n * Get the visible page of posts.\n */\n posts() {\n return this.discussion.postIds().slice(this.visibleStart, this.visibleEnd).map(id => {\n const post = app.store.getById('posts', id);\n return post && post.discussion() && typeof post.canEdit() !== 'undefined' ? post : null;\n });\n }\n\n /**\n * Get the total number of posts in the discussion.\n */\n count() {\n return this.discussion.postIds().length;\n }\n\n /**\n * Check whether or not the scrubber should be disabled, i.e. if all of the\n * posts are visible in the viewport.\n */\n disabled() {\n return this.visible >= this.count();\n }\n\n /**\n * Are we currently viewing the end of the discussion?\n */\n viewingEnd() {\n // In some cases, such as if we've stickied a post, an event post\n // may have been added / removed. This means that `this.visibleEnd`\n // and`this.count()` will be out of sync by 1 post, but we are still\n // \"viewing the end\" of the post stream, so we should still reload\n // all posts up until the last one.\n return Math.abs(this.count() - this.visibleEnd) <= 1;\n }\n\n /**\n * Make sure that the given index is not outside of the possible range of\n * indexes in the discussion.\n */\n sanitizeIndex(index) {\n return Math.max(0, Math.min(this.count(), Math.floor(index)));\n }\n}\n/**\n * The number of posts to load per page.\n */\n_defineProperty(PostStreamState, \"loadCount\", 20);\nflarum.reg.add('core', 'forum/states/PostStreamState', PostStreamState);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport setRouteWithForcedRefresh from '../../common/utils/setRouteWithForcedRefresh';\n/**\n * The `History` class keeps track and manages a stack of routes that the user\n * has navigated to in their session.\n *\n * An item can be pushed to the top of the stack using the `push` method. An\n * item in the stack has a name and a URL. The name need not be unique; if it is\n * the same as the item before it, that will be overwritten with the new URL. In\n * this way, if a user visits a discussion, and then visits another discussion,\n * popping the history stack will still take them back to the discussion list\n * rather than the previous discussion.\n */\nexport default class History {\n constructor() {\n /**\n * The stack of routes that have been navigated to.\n */\n _defineProperty(this, \"stack\", []);\n }\n /**\n * Get the item on the top of the stack.\n */\n getCurrent() {\n return this.stack[this.stack.length - 1];\n }\n\n /**\n * Get the previous item on the stack.\n */\n getPrevious() {\n return this.stack[this.stack.length - 2];\n }\n\n /**\n * Push an item to the top of the stack.\n *\n * @param {string} name The name of the route.\n * @param {string} title The title of the route.\n * @param {string} [url] The URL of the route. The current URL will be used if\n * not provided.\n */\n push(name, title, url) {\n if (url === void 0) {\n url = m.route.get();\n }\n // If we're pushing an item with the same name as second-to-top item in the\n // stack, we will assume that the user has clicked the 'back' button in\n // their browser. In this case, we don't want to push a new item, so we will\n // pop off the top item, and then the second-to-top item will be overwritten\n // below.\n const secondTop = this.stack[this.stack.length - 2];\n if (secondTop && secondTop.name === name) {\n this.stack.pop();\n }\n\n // If we're pushing an item with the same name as the top item in the stack,\n // then we'll overwrite it with the new URL.\n const top = this.getCurrent();\n if (top && top.name === name) {\n Object.assign(top, {\n url,\n title\n });\n } else {\n this.stack.push({\n name,\n url,\n title\n });\n }\n }\n\n /**\n * Check whether or not the history stack is able to be popped.\n */\n canGoBack() {\n return this.stack.length > 1;\n }\n\n /**\n * Go back to the previous route in the history stack.\n */\n back() {\n if (!this.canGoBack()) {\n return this.home();\n }\n this.stack.pop();\n m.route.set(this.getCurrent().url);\n }\n\n /**\n * Get the URL of the previous page.\n */\n backUrl() {\n const secondTop = this.stack[this.stack.length - 2];\n return secondTop.url;\n }\n\n /**\n * Go to the first route in the history stack.\n */\n home() {\n this.stack.splice(0);\n setRouteWithForcedRefresh('/');\n }\n}\nflarum.reg.add('core', 'forum/utils/History', History);","/**\n * Replaces rich tags with elements, as per a provided handler.\n * No spaces allowed in tag name, syntax MUST be <TAG_NAME>SOME_CONTENTS</TAG_NAME>.\n * Currently does not support tags with attributes.\n * Currently does not support self closing tags.\n *\n * @param {String[]|any[]} message\n * @param {Object} values\n * @param {Function} handler\n * @param {Number[]} [dontUnescapeIndices]\n * @return {String[]|any[]}\n */\nexport function replaceRichTags(message, values, handler, dontUnescapeIndices = []) {\n\tconst result = [];\n\n\tconst onTagClose = (\n\t\tsegment,\n\t\tcurrTagIsClosing,\n\t\tcurrTag,\n\t\ti,\n\t\tj,\n\t\tcurrTagStart\n\t) => {\n\t\tif (currTagIsClosing) {\n\t\t\treturn {\n\t\t\t\tbreak: true\n\t\t\t};\n\t\t}\n\n\t\tconst endingLocation = findClosingTag(message, currTag, i, j);\n\n\t\tif (!endingLocation) {\n\t\t return result;\n\t\t}\n\n\t\tconst entireTagInSegment = endingLocation.segmentIndex === i;\n\t\tconst segmentContainingClosingTag = message[endingLocation.segmentIndex];\n\n\t\tconst tagContents = [];\n\n\t\tif (entireTagInSegment) {\n\t\t\ttagContents.push(segment.slice(j + 1, endingLocation.segmentStart));\n\t\t}\n\t\telse {\n\t\t\ttagContents.push(segment.slice(j + 1));\n\n\t\t\tfor (let k = i + 1; k < endingLocation.segmentIndex; k++) {\n\t\t\t\ttagContents.push(message[k]);\n\t\t\t}\n\t\t\ttagContents.push(\n\t\t\t\tsegmentContainingClosingTag.slice(0, endingLocation.segmentStart)\n\t\t\t);\n\t\t}\n\n\t\tresult.push(segment.slice(0, currTagStart));\n\n\t\tresult.push(\n\t\t\thandler(\n\t\t\t\tcurrTag,\n\t\t\t\tvalues,\n\t\t\t\treplaceRichTags(\n\t\t\t\t\ttagContents.filter((s) => s !== ''),\n\t\t\t\t\tvalues,\n\t\t\t\t\thandler\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\n\t\tmessage.splice(\n\t\t\tendingLocation.segmentIndex + 1,\n\t\t\t0,\n\t\t\tsegmentContainingClosingTag.slice(endingLocation.segmentEnd + 1)\n\t\t);\n\n\t\treturn {\n\t\t\tprocessedSegment: true,\n\t\t\tnewSegmentIndex: endingLocation.segmentIndex,\n\t\t\tbreak: true\n\t\t};\n\t};\n\n\ttraverseMessageTags(message, 0, 0, result, onTagClose);\n\n\treturn result.filter((s) => s !== '').map((s, i) => dontUnescapeIndices.includes(i) ? s : unEscapeHtml(s));\n}\n\n/**\n * Finds the index of the matching closing tag, including through strings that\n * could have nested tags.\n *\n * @param {String[]|any[]} message\n * @param {String} tag\n * @param {Number} startIndex\n * @param {Number} startSegmentIndex\n * @return {Boolean}\n */\nfunction findClosingTag(message, tag, startIndex, startSegmentIndex) {\n\tlet position; // set in callback\n\tlet depth = 1;\n\n\tconst onTagClose = (\n\t\tsegment,\n\t\tcurrTagIsClosing,\n\t\tcurrTag,\n\t\ti,\n\t\tj,\n\t\tcurrTagStart\n\t) => {\n\t\tif (currTag === tag) {\n\t\t\tif (currTagIsClosing) {\n\t\t\t\tdepth--;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdepth++;\n\t\t\t}\n\n\t\t\tif (depth === 0) {\n\t\t\t\tposition = {\n\t\t\t\t\tsegmentIndex: i,\n\t\t\t\t\tsegmentStart: currTagStart,\n\t\t\t\t\tsegmentEnd: j\n\t\t\t\t};\n\n\t\t\t\treturn { exit: true };\n\t\t\t}\n\t\t}\n\n\t\treturn { exit: false };\n\t};\n\n\ttraverseMessageTags(message, startIndex, startSegmentIndex, [], onTagClose);\n\n\treturn position;\n}\n\nfunction traverseMessageTags(message, startI, startJ, result, onTagClose) {\n\tconst isHtmlTagChar = (ch) => /[a-zA-Z-_]/.test(ch);\n\tfor (let i = startI; i < message.length; i++) {\n\t\tconst segment = message[i];\n\n\t\tif (typeof segment !== 'string') {\n\t\t\tresult.push(segment);\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet currTagIsClosing = false;\n\t\tlet currTagStart = null;\n\t\tlet inTag = false;\n\n\t\tlet processedSegment = false;\n\t\tfor (let j = i === startI ? startJ : 0; j < segment.length; j++) {\n\t\t\t// Start of tag\n\t\t\tif (!inTag && segment[j] === '<') {\n\t\t\t\tcurrTagStart = j;\n\t\t\t\tinTag = true;\n\n\t\t\t\tif (segment[j + 1] === '/') {\n\t\t\t\t\tcurrTagIsClosing = true;\n\t\t\t\t\tj++;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Tag ended\n\t\t\telse if (inTag && segment[j] === '>') {\n\t\t\t\tconst currTag = segment.slice(currTagStart + 1 + currTagIsClosing, j);\n\n\t\t\t\tconst instructions = onTagClose(\n\t\t\t\t\tsegment,\n\t\t\t\t\tcurrTagIsClosing,\n\t\t\t\t\tcurrTag,\n\t\t\t\t\ti,\n\t\t\t\t\tj,\n\t\t\t\t\tcurrTagStart\n\t\t\t\t);\n\n\t\t\t\tif (instructions.exit) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (instructions.newSegmentIndex) {\n\t\t\t\t\ti = instructions.newSegmentIndex;\n\t\t\t\t}\n\t\t\t\tif (instructions.processedSegment) {\n\t\t\t\t\tprocessedSegment = true;\n\t\t\t\t}\n\t\t\t\tif (instructions.break) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcurrTagIsClosing = false;\n\t\t\t\tcurrTagStart = null;\n\t\t\t\tinTag = false;\n\t\t\t}\n\n\t\t\t// Not a valid tag, reset state.\n\t\t\telse if (inTag && !isHtmlTagChar(segment[j])) {\n\t\t\t\tcurrTagIsClosing = false;\n\t\t\t\tcurrTagStart = null;\n\t\t\t\tinTag = false;\n\t\t\t}\n\t\t}\n\n\t\tif (!processedSegment) {\n\t\t\tresult.push(segment);\n\t\t}\n\t}\n}\n\n/**\n * Escapes HTML markup in string and nested array arguments.\n *\n * @param {Object} values\n * @return {Object}\n */\nexport function sanitizeValues(values) {\n\treturn Object.keys(values).reduce((acc, key) => {\n\t\tacc[key] = recSanitizeArr(values[key]);\n\n\t\treturn acc;\n\t}, {});\n}\n\n/**\n * De-sanitizes HTML markup.\n *\n * @param {any} str\n * @return {string}\n */\nexport function unEscapeHtml(str) {\n\tif (typeof str !== 'string') {\n\t\treturn str;\n\t}\n\n\treturn str\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/"/g, '\"')\n\t\t.replace(/'/g, \"'\")\n\t\t.replace(/&/g, '&');\n}\n\n/**\n * Recursively escape HTML in string or string array.\n *\n * @param {string[]|string} input\n * @return {string[]|string}\n */\nexport function recSanitizeArr(input) {\n\tif (typeof input === 'string' || input instanceof String) {\n\t\treturn input\n\t\t\t.replace(/&/g, '&')\n\t\t\t.replace(/</g, '<')\n\t\t\t.replace(/>/g, '>')\n\t\t\t.replace(/\"/g, '"')\n\t\t\t.replace(/'/g, ''');\n\t}\n\telse if (Array.isArray(input)) {\n\t\treturn input.map(recSanitizeArr);\n\t}\n\n\treturn input;\n}\n","import { unEscapeHtml } from './utilities';\n\nexport default function defaultRichHandler(tag, values, contents) {\n\treturn `<${tag}>${unEscapeHtml(contents)}</${tag}>`;\n}\n","import { MessageFormatter } from '@ultraq/icu-message-formatter';\nimport { flatten } from '@ultraq/array-utils';\n\nimport defaultRichHandler from './defaultRichHandler';\nimport { replaceRichTags, sanitizeValues } from './utilities';\n\nexport default class RichMessageFormatter extends MessageFormatter {\n\tconstructor(locale, typeHandlers = {}, richHandler = null) {\n\t\tsuper(locale, typeHandlers);\n\t\tthis.richHandler = richHandler ? richHandler : defaultRichHandler;\n\t}\n\n\trich(message, values = {}) {\n\t\tconst cleanedValues = sanitizeValues(values);\n\n\t\tconst formatted = flatten(this.process(message, cleanedValues));\n\n\t\t// TODO\n\t\t// Should be a symbol but isn't because of conversion issues.\n\t\t// We use a random string instead. \n\t\tlet sym = Math.random().toString(36) + Math.random().toString(36) + Math.random().toString(36);\n\t\tconst fakeValues = Object.fromEntries(Object.entries(values).map(([key, _value]) => [key, sym]));\n\t\tconst formattedFake = flatten(this.process(message, fakeValues));\n\t\tconst replaceFake = replaceRichTags(formattedFake, fakeValues, () => sym);\n\t\tconst originalTemplateSegmentIndices = replaceFake.map((v, i) => v === sym ? null: i).filter(i => i !== null);\n\n\t\treturn replaceRichTags(formatted, cleanedValues, this.richHandler, originalTemplateSegmentIndices);\n\t}\n}\n","import { unEscapeHtml } from './utilities';\n\nexport default function mithrilRichHandler(tag, values, contents) {\n\tconst vnode = values[tag] || m(tag);\n\tlet children = unEscapeHtml(m.fragment(contents).children);\n\treturn { ...vnode, children };\n}\n","/* \n * Copyright 2017, Emanuel Rabina (http://www.ultraq.net.nz/)\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Flattens an array of arrays of infinite depth into a single-dimension array.\n * \n * > This is now natively in JavaScript as the `flat` method on an Array\n * > instance. [Check MDN for which browsers have access to this feature](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/flat).\n * > If you can't use `flat`, then this method will do the job 🙂\n * \n * @param {Array} array\n * @return {Array} Flattened array.\n */\nexport function flatten(array) {\n\n\treturn array.reduce((accumulator, value) => {\n\t\treturn accumulator.concat(Array.isArray(value) ? flatten(value) : value);\n\t}, []);\n}\n\n/**\n * Creates an array of numbers from the starting value (inclusive) to the end\n * (exclusive), with an optional step (the gap between values).\n * \n * @param {Number} start\n * The value to start at, the first item in the returned array.\n * @param {Number} end\n * The value to end with, the last item in the returned array.\n * @param {Number} [step=1]\n * The increment/gap between values, defaults to 1.\n * @return {Array} An array encompassing the given range.\n */\nexport function range(start, end, step = 1) {\n\n\treturn Array.apply(0, Array(Math.ceil((end - start) / step))).map((empty, index) => index * step + start);\n}\n\n/**\n * Remove and return the first item from `array` that matches the predicate\n * function.\n * \n * @param {Array} array\n * @param {Function} predicate\n * Invoked with the array item.\n * @return {Object} The matching item, or `null` if no match was found.\n */\nexport function remove(array, predicate) {\n\n\treturn array.find((item, index) => {\n\t\tif (predicate(item)) {\n\t\t\tarray.splice(index, 1);\n\t\t\treturn item;\n\t\t}\n\t});\n}\n","/**\n * A higher-order function to apply [memoization](https://en.wikipedia.org/wiki/Memoization).\n * \n * If memoizing a recursive function, then memoize and define the function at\n * the same time so you can make a call to the memoized function, eg:\n * \n * ```javascript\n * const myFunction = memoize(() => myFunction());\n * ```\n * \n * @param {Function} func\n * @return {Function} \n */\nexport function memoize(func) {\n\tconst cache = {};\n\treturn function(...args) {\n\t\tlet key = args.length ? args\n\t\t\t.map(arg =>\n\t\t\t\targ === null ? 'null' :\n\t\t\t\targ === undefined ? 'undefined' :\n\t\t\t\ttypeof arg === 'function' ? arg.toString() :\n\t\t\t\targ instanceof Date ? arg.toISOString() :\n\t\t\t\tJSON.stringify(arg)\n\t\t\t)\n\t\t\t.join('|') :\n\t\t\t'_(no-args)_';\n\t\tif (Object.prototype.hasOwnProperty.call(cache, key)) {\n\t\t\treturn cache[key];\n\t\t}\n\t\tlet result = func(...args);\n\t\tcache[key] = result;\n\t\treturn result;\n\t};\n}\n","/* \n * Copyright 2019, Emanuel Rabina (http://www.ultraq.net.nz/)\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {parseCases} from './utilities.js';\n\nlet pluralFormatter;\n\nlet keyCounter = 0;\n\n// All the special keywords that can be used in `plural` blocks for the various branches\nconst ONE = 'one';\nconst OTHER = 'other';\n\n/**\n * @private\n * @param {String} caseBody\n * @param {Number} value\n * @return {Object} {caseBody: string, numberValues: object}\n */\nfunction replaceNumberSign(caseBody, value) {\n\tlet i = 0;\n\tlet output = '';\n\tlet numBraces = 0;\n\tconst numberValues = {};\n\n\twhile (i < caseBody.length) {\n\t\tif (caseBody[i] === '#' && !numBraces) {\n\t\t\tlet keyParam = `__hashToken${keyCounter++}`;\n\t\t\toutput += `{${keyParam}, number}`;\n\t\t\tnumberValues[keyParam] = value;\n\t\t}\n\t\telse {\n\t\t\toutput += caseBody[i];\n\t\t}\n\n\t\tif (caseBody[i] === '{') {\n\t\t\tnumBraces++;\n\t\t}\n\t\telse if (caseBody[i] === '}') {\n\t\t\tnumBraces--;\n\t\t}\n\n\t\ti++;\n\t}\n\n\treturn {\n\t\tcaseBody: output,\n\t\tnumberValues\n\t};\n}\n\n/**\n * Handler for `plural` statements within ICU message syntax strings. Returns\n * a formatted string for the branch that closely matches the current value.\n * \n * See https://formatjs.io/docs/core-concepts/icu-syntax#plural-format for more\n * details on how the `plural` statement works.\n * \n * @param {String} value\n * @param {String} matches\n * @param {String} locale\n * @param {String} values\n * @param {Function} format\n * @return {String}\n */\nexport default function pluralTypeHandler(value, matches = '', locale, values, format) {\n\tconst { args, cases } = parseCases(matches);\n\n\tlet intValue = parseInt(value);\n\n\targs.forEach((arg) => {\n\t\tif (arg.startsWith('offset:')) {\n\t\t\tintValue -= parseInt(arg.slice('offset:'.length));\n\t\t}\n\t});\n\n\tconst keywordPossibilities = [];\n\n\tif ('PluralRules' in Intl) {\n\t\t// Effectively memoize because instantiation of `Int.*` objects is expensive.\n\t\tif (pluralFormatter === undefined || pluralFormatter.resolvedOptions().locale !== locale) {\n\t\t\tpluralFormatter = new Intl.PluralRules(locale);\n\t\t}\n\n\t\tconst pluralKeyword = pluralFormatter.select(intValue);\n\n\t\t// Other is always added last with least priority, so we don't want to add it here.\n\t\tif (pluralKeyword !== OTHER) {\n\t\t\tkeywordPossibilities.push(pluralKeyword);\n\t\t}\n\t}\n\tif (intValue === 1) {\n\t\tkeywordPossibilities.push(ONE);\n\t}\n\tkeywordPossibilities.push(`=${intValue}`, OTHER);\n\n\tfor (let i = 0; i < keywordPossibilities.length; i++) {\n\t\tconst keyword = keywordPossibilities[i];\n\t\tif (keyword in cases) {\n\t\t\tconst { caseBody, numberValues } = replaceNumberSign(cases[keyword], intValue);\n\t\t\treturn format(caseBody, {\n\t\t\t\t...values,\n\t\t\t\t...numberValues\n\t\t\t});\n\t\t}\n\t}\n\n\treturn value;\n}\n","/* \n * Copyright 2019, Emanuel Rabina (http://www.ultraq.net.nz/)\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {findClosingBracket, splitFormattedArgument} from './utilities.js';\n\nimport {flatten} from '@ultraq/array-utils';\nimport {memoize} from '@ultraq/function-utils';\n\n/**\n * The main class for formatting messages.\n * \n * @author Emanuel Rabina\n */\nexport default class MessageFormatter {\n\n\t/**\n\t * Creates a new formatter that can work using any of the custom type handlers\n\t * you register.\n\t * \n\t * @param {String} locale\n\t * @param {Object} [typeHandlers={}]\n\t * Optional object where the keys are the names of the types to register,\n\t * their values being the functions that will return a nicely formatted\n\t * string for the data and locale they are given.\n\t */\n\tconstructor(locale, typeHandlers = {}) {\n\n\t\tthis.locale = locale;\n\t\tthis.typeHandlers = typeHandlers;\n\t}\n\n\t/**\n\t * Formats an ICU message syntax string using `values` for placeholder data\n\t * and any currently-registered type handlers.\n\t * \n\t * @param {String} message\n\t * @param {Object} [values={}]\n\t * @return {String}\n\t */\n\tformat = memoize((message, values = {}) => {\n\n\t\treturn flatten(this.process(message, values)).join('');\n\t})\n\n\t/**\n\t * Process an ICU message syntax string using `values` for placeholder data\n\t * and any currently-registered type handlers. The result of this method is\n\t * an array of the component parts after they have been processed in turn by\n\t * their own type handlers. This raw output is useful for other renderers,\n\t * eg: React where components can be used instead of being forced to return\n\t * raw strings.\n\t * \n\t * This method is used by {@link MessageFormatter#format} where it acts as a\n\t * string renderer.\n\t * \n\t * @param {String} message\n\t * @param {Object} [values={}]\n\t * @return {Array}\n\t */\n\tprocess(message, values = {}) {\n\n\t\tif (!message) {\n\t\t\treturn [];\n\t\t}\n\n\t\tlet blockStartIndex = message.indexOf('{');\n\t\tif (blockStartIndex !== -1) {\n\t\t\tlet blockEndIndex = findClosingBracket(message, blockStartIndex);\n\t\t\tif (blockEndIndex !== -1) {\n\t\t\t\tlet block = message.substring(blockStartIndex, blockEndIndex + 1);\n\t\t\t\tif (block) {\n\t\t\t\t\tlet result = [];\n\t\t\t\t\tlet head = message.substring(0, blockStartIndex);\n\t\t\t\t\tif (head) {\n\t\t\t\t\t\tresult.push(head);\n\t\t\t\t\t}\n\t\t\t\t\tlet [key, type, format] = splitFormattedArgument(block);\n\t\t\t\t\tlet body = values[key];\n\t\t\t\t\tif (body === null || body === undefined) {\n\t\t\t\t\t\tbody = '';\n\t\t\t\t\t}\n\t\t\t\t\tlet typeHandler = type && this.typeHandlers[type];\n\t\t\t\t\tresult.push(typeHandler ?\n\t\t\t\t\t\ttypeHandler(body, format, this.locale, values, this.process.bind(this)) :\n\t\t\t\t\t\tbody);\n\t\t\t\t\tlet tail = message.substring(blockEndIndex + 1);\n\t\t\t\t\tif (tail) {\n\t\t\t\t\t\tresult.push(this.process(tail, values));\n\t\t\t\t\t}\n\t\t\t\t\treturn result;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthrow new Error(`Unbalanced curly braces in string: \"${message}\"`);\n\t\t\t}\n\t\t}\n\t\treturn [message];\n\t}\n}\n","/* \n * Copyright 2019, Emanuel Rabina (http://www.ultraq.net.nz/)\n * \n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * \n * http://www.apache.org/licenses/LICENSE-2.0\n * \n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {parseCases} from './utilities.js';\n\nconst OTHER = 'other';\n\n/**\n * Handler for `select` statements within ICU message syntax strings. Returns\n * a formatted string for the branch that closely matches the current value.\n * \n * See https://formatjs.io/docs/core-concepts/icu-syntax#select-format for more\n * details on how the `select` statement works.\n * \n * @param {String} value\n * @param {String} matches\n * @param {String} locale\n * @param {String} values\n * @param {Function} format\n * @return {String}\n */\nexport default function selectTypeHandler(value, matches = '', locale, values, format) {\n\tconst { cases } = parseCases(matches);\n\n\tif (value in cases) {\n\t\treturn format(cases[value], values);\n\t}\n\telse if (OTHER in cases) {\n\t\treturn format(cases[OTHER], values);\n\t}\n\n\treturn value;\n}\n","function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n// Older browsers don't support event options, feature detect it.\n\n// Adopted and modified solution from Bohdan Didukh (2017)\n// https://stackoverflow.com/questions/41594997/ios-10-safari-prevent-scrolling-behind-a-fixed-overlay-and-maintain-scroll-posi\n\nvar hasPassiveEvents = false;\nif (typeof window !== 'undefined') {\n var passiveTestOptions = {\n get passive() {\n hasPassiveEvents = true;\n return undefined;\n }\n };\n window.addEventListener('testPassive', null, passiveTestOptions);\n window.removeEventListener('testPassive', null, passiveTestOptions);\n}\n\nvar isIosDevice = typeof window !== 'undefined' && window.navigator && window.navigator.platform && (/iP(ad|hone|od)/.test(window.navigator.platform) || window.navigator.platform === 'MacIntel' && window.navigator.maxTouchPoints > 1);\n\n\nvar locks = [];\nvar documentListenerAdded = false;\nvar initialClientY = -1;\nvar previousBodyOverflowSetting = void 0;\nvar previousBodyPosition = void 0;\nvar previousBodyPaddingRight = void 0;\n\n// returns true if `el` should be allowed to receive touchmove events.\nvar allowTouchMove = function allowTouchMove(el) {\n return locks.some(function (lock) {\n if (lock.options.allowTouchMove && lock.options.allowTouchMove(el)) {\n return true;\n }\n\n return false;\n });\n};\n\nvar preventDefault = function preventDefault(rawEvent) {\n var e = rawEvent || window.event;\n\n // For the case whereby consumers adds a touchmove event listener to document.\n // Recall that we do document.addEventListener('touchmove', preventDefault, { passive: false })\n // in disableBodyScroll - so if we provide this opportunity to allowTouchMove, then\n // the touchmove event on document will break.\n if (allowTouchMove(e.target)) {\n return true;\n }\n\n // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).\n if (e.touches.length > 1) return true;\n\n if (e.preventDefault) e.preventDefault();\n\n return false;\n};\n\nvar setOverflowHidden = function setOverflowHidden(options) {\n // If previousBodyPaddingRight is already set, don't set it again.\n if (previousBodyPaddingRight === undefined) {\n var _reserveScrollBarGap = !!options && options.reserveScrollBarGap === true;\n var scrollBarGap = window.innerWidth - document.documentElement.clientWidth;\n\n if (_reserveScrollBarGap && scrollBarGap > 0) {\n var computedBodyPaddingRight = parseInt(window.getComputedStyle(document.body).getPropertyValue('padding-right'), 10);\n previousBodyPaddingRight = document.body.style.paddingRight;\n document.body.style.paddingRight = computedBodyPaddingRight + scrollBarGap + 'px';\n }\n }\n\n // If previousBodyOverflowSetting is already set, don't set it again.\n if (previousBodyOverflowSetting === undefined) {\n previousBodyOverflowSetting = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n }\n};\n\nvar restoreOverflowSetting = function restoreOverflowSetting() {\n if (previousBodyPaddingRight !== undefined) {\n document.body.style.paddingRight = previousBodyPaddingRight;\n\n // Restore previousBodyPaddingRight to undefined so setOverflowHidden knows it\n // can be set again.\n previousBodyPaddingRight = undefined;\n }\n\n if (previousBodyOverflowSetting !== undefined) {\n document.body.style.overflow = previousBodyOverflowSetting;\n\n // Restore previousBodyOverflowSetting to undefined\n // so setOverflowHidden knows it can be set again.\n previousBodyOverflowSetting = undefined;\n }\n};\n\nvar setPositionFixed = function setPositionFixed() {\n return window.requestAnimationFrame(function () {\n // If previousBodyPosition is already set, don't set it again.\n if (previousBodyPosition === undefined) {\n previousBodyPosition = {\n position: document.body.style.position,\n top: document.body.style.top,\n left: document.body.style.left\n };\n\n // Update the dom inside an animation frame \n var _window = window,\n scrollY = _window.scrollY,\n scrollX = _window.scrollX,\n innerHeight = _window.innerHeight;\n\n document.body.style.position = 'fixed';\n document.body.style.top = -scrollY;\n document.body.style.left = -scrollX;\n\n setTimeout(function () {\n return window.requestAnimationFrame(function () {\n // Attempt to check if the bottom bar appeared due to the position change\n var bottomBarHeight = innerHeight - window.innerHeight;\n if (bottomBarHeight && scrollY >= innerHeight) {\n // Move the content further up so that the bottom bar doesn't hide it\n document.body.style.top = -(scrollY + bottomBarHeight);\n }\n });\n }, 300);\n }\n });\n};\n\nvar restorePositionSetting = function restorePositionSetting() {\n if (previousBodyPosition !== undefined) {\n // Convert the position from \"px\" to Int\n var y = -parseInt(document.body.style.top, 10);\n var x = -parseInt(document.body.style.left, 10);\n\n // Restore styles\n document.body.style.position = previousBodyPosition.position;\n document.body.style.top = previousBodyPosition.top;\n document.body.style.left = previousBodyPosition.left;\n\n // Restore scroll\n window.scrollTo(x, y);\n\n previousBodyPosition = undefined;\n }\n};\n\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#Problems_and_solutions\nvar isTargetElementTotallyScrolled = function isTargetElementTotallyScrolled(targetElement) {\n return targetElement ? targetElement.scrollHeight - targetElement.scrollTop <= targetElement.clientHeight : false;\n};\n\nvar handleScroll = function handleScroll(event, targetElement) {\n var clientY = event.targetTouches[0].clientY - initialClientY;\n\n if (allowTouchMove(event.target)) {\n return false;\n }\n\n if (targetElement && targetElement.scrollTop === 0 && clientY > 0) {\n // element is at the top of its scroll.\n return preventDefault(event);\n }\n\n if (isTargetElementTotallyScrolled(targetElement) && clientY < 0) {\n // element is at the bottom of its scroll.\n return preventDefault(event);\n }\n\n event.stopPropagation();\n return true;\n};\n\nexport var disableBodyScroll = function disableBodyScroll(targetElement, options) {\n // targetElement must be provided\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error('disableBodyScroll unsuccessful - targetElement must be provided when calling disableBodyScroll on IOS devices.');\n return;\n }\n\n // disableBodyScroll must not have been called on this targetElement before\n if (locks.some(function (lock) {\n return lock.targetElement === targetElement;\n })) {\n return;\n }\n\n var lock = {\n targetElement: targetElement,\n options: options || {}\n };\n\n locks = [].concat(_toConsumableArray(locks), [lock]);\n\n if (isIosDevice) {\n setPositionFixed();\n } else {\n setOverflowHidden(options);\n }\n\n if (isIosDevice) {\n targetElement.ontouchstart = function (event) {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n initialClientY = event.targetTouches[0].clientY;\n }\n };\n targetElement.ontouchmove = function (event) {\n if (event.targetTouches.length === 1) {\n // detect single touch.\n handleScroll(event, targetElement);\n }\n };\n\n if (!documentListenerAdded) {\n document.addEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = true;\n }\n }\n};\n\nexport var clearAllBodyScrollLocks = function clearAllBodyScrollLocks() {\n if (isIosDevice) {\n // Clear all locks ontouchstart/ontouchmove handlers, and the references.\n locks.forEach(function (lock) {\n lock.targetElement.ontouchstart = null;\n lock.targetElement.ontouchmove = null;\n });\n\n if (documentListenerAdded) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = false;\n }\n\n // Reset initial clientY.\n initialClientY = -1;\n }\n\n if (isIosDevice) {\n restorePositionSetting();\n } else {\n restoreOverflowSetting();\n }\n\n locks = [];\n};\n\nexport var enableBodyScroll = function enableBodyScroll(targetElement) {\n if (!targetElement) {\n // eslint-disable-next-line no-console\n console.error('enableBodyScroll unsuccessful - targetElement must be provided when calling enableBodyScroll on IOS devices.');\n return;\n }\n\n locks = locks.filter(function (lock) {\n return lock.targetElement !== targetElement;\n });\n\n if (isIosDevice) {\n targetElement.ontouchstart = null;\n targetElement.ontouchmove = null;\n\n if (documentListenerAdded && locks.length === 0) {\n document.removeEventListener('touchmove', preventDefault, hasPassiveEvents ? { passive: false } : undefined);\n documentListenerAdded = false;\n }\n }\n\n if (isIosDevice) {\n restorePositionSetting();\n } else {\n restoreOverflowSetting();\n }\n};\n\n","/* ========================================================================\n * Bootstrap: affix.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#affix\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // AFFIX CLASS DEFINITION\n // ======================\n\n var Affix = function (element, options) {\n this.options = $.extend({}, Affix.DEFAULTS, options)\n\n var target = this.options.target === Affix.DEFAULTS.target ? $(this.options.target) : $(document).find(this.options.target)\n\n this.$target = target\n .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this))\n\n this.$element = $(element)\n this.affixed = null\n this.unpin = null\n this.pinnedOffset = null\n\n this.checkPosition()\n }\n\n Affix.VERSION = '3.4.1'\n\n Affix.RESET = 'affix affix-top affix-bottom'\n\n Affix.DEFAULTS = {\n offset: 0,\n target: window\n }\n\n Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n var scrollTop = this.$target.scrollTop()\n var position = this.$element.offset()\n var targetHeight = this.$target.height()\n\n if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n if (this.affixed == 'bottom') {\n if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n }\n\n var initializing = this.affixed == null\n var colliderTop = initializing ? scrollTop : position.top\n var colliderHeight = initializing ? targetHeight : height\n\n if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n return false\n }\n\n Affix.prototype.getPinnedOffset = function () {\n if (this.pinnedOffset) return this.pinnedOffset\n this.$element.removeClass(Affix.RESET).addClass('affix')\n var scrollTop = this.$target.scrollTop()\n var position = this.$element.offset()\n return (this.pinnedOffset = position.top - scrollTop)\n }\n\n Affix.prototype.checkPositionWithEventLoop = function () {\n setTimeout($.proxy(this.checkPosition, this), 1)\n }\n\n Affix.prototype.checkPosition = function () {\n if (!this.$element.is(':visible')) return\n\n var height = this.$element.height()\n var offset = this.options.offset\n var offsetTop = offset.top\n var offsetBottom = offset.bottom\n var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n if (typeof offset != 'object') offsetBottom = offsetTop = offset\n if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element)\n if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n if (this.affixed != affix) {\n if (this.unpin != null) this.$element.css('top', '')\n\n var affixType = 'affix' + (affix ? '-' + affix : '')\n var e = $.Event(affixType + '.bs.affix')\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n this.affixed = affix\n this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n this.$element\n .removeClass(Affix.RESET)\n .addClass(affixType)\n .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n }\n\n if (affix == 'bottom') {\n this.$element.offset({\n top: scrollHeight - height - offsetBottom\n })\n }\n }\n\n\n // AFFIX PLUGIN DEFINITION\n // =======================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.affix')\n var options = typeof option == 'object' && option\n\n if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.affix\n\n $.fn.affix = Plugin\n $.fn.affix.Constructor = Affix\n\n\n // AFFIX NO CONFLICT\n // =================\n\n $.fn.affix.noConflict = function () {\n $.fn.affix = old\n return this\n }\n\n\n // AFFIX DATA-API\n // ==============\n\n $(window).on('load', function () {\n $('[data-spy=\"affix\"]').each(function () {\n var $spy = $(this)\n var data = $spy.data()\n\n data.offset = data.offset || {}\n\n if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n if (data.offsetTop != null) data.offset.top = data.offsetTop\n\n Plugin.call($spy, data)\n })\n })\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: dropdown.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // DROPDOWN CLASS DEFINITION\n // =========================\n\n var backdrop = '.dropdown-backdrop'\n var toggle = '[data-toggle=\"dropdown\"]'\n var Dropdown = function (element) {\n $(element).on('click.bs.dropdown', this.toggle)\n }\n\n Dropdown.VERSION = '3.4.1'\n\n function getParent($this) {\n var selector = $this.attr('data-target')\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n }\n\n var $parent = selector !== '#' ? $(document).find(selector) : null\n\n return $parent && $parent.length ? $parent : $this.parent()\n }\n\n function clearMenus(e) {\n if (e && e.which === 3) return\n $(backdrop).remove()\n $(toggle).each(function () {\n var $this = $(this)\n var $parent = getParent($this)\n var relatedTarget = { relatedTarget: this }\n\n if (!$parent.hasClass('open')) return\n\n if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n if (e.isDefaultPrevented()) return\n\n $this.attr('aria-expanded', 'false')\n $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n })\n }\n\n Dropdown.prototype.toggle = function (e) {\n var $this = $(this)\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n clearMenus()\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n // if mobile we use a backdrop because click events don't delegate\n $(document.createElement('div'))\n .addClass('dropdown-backdrop')\n .insertAfter($(this))\n .on('click', clearMenus)\n }\n\n var relatedTarget = { relatedTarget: this }\n $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n if (e.isDefaultPrevented()) return\n\n $this\n .trigger('focus')\n .attr('aria-expanded', 'true')\n\n $parent\n .toggleClass('open')\n .trigger($.Event('shown.bs.dropdown', relatedTarget))\n }\n\n return false\n }\n\n Dropdown.prototype.keydown = function (e) {\n if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n var $this = $(this)\n\n e.preventDefault()\n e.stopPropagation()\n\n if ($this.is('.disabled, :disabled')) return\n\n var $parent = getParent($this)\n var isActive = $parent.hasClass('open')\n\n if (!isActive && e.which != 27 || isActive && e.which == 27) {\n if (e.which == 27) $parent.find(toggle).trigger('focus')\n return $this.trigger('click')\n }\n\n var desc = ' li:not(.disabled):visible a'\n var $items = $parent.find('.dropdown-menu' + desc)\n\n if (!$items.length) return\n\n var index = $items.index(e.target)\n\n if (e.which == 38 && index > 0) index-- // up\n if (e.which == 40 && index < $items.length - 1) index++ // down\n if (!~index) index = 0\n\n $items.eq(index).trigger('focus')\n }\n\n\n // DROPDOWN PLUGIN DEFINITION\n // ==========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.dropdown')\n\n if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n if (typeof option == 'string') data[option].call($this)\n })\n }\n\n var old = $.fn.dropdown\n\n $.fn.dropdown = Plugin\n $.fn.dropdown.Constructor = Dropdown\n\n\n // DROPDOWN NO CONFLICT\n // ====================\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old\n return this\n }\n\n\n // APPLY TO STANDARD DROPDOWN ELEMENTS\n // ===================================\n\n $(document)\n .on('click.bs.dropdown.data-api', clearMenus)\n .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: tooltip.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n+function ($) {\n 'use strict';\n\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn']\n\n var uriAttrs = [\n 'background',\n 'cite',\n 'href',\n 'itemtype',\n 'longdesc',\n 'poster',\n 'src',\n 'xlink:href'\n ]\n\n var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i\n\n var DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n }\n\n /**\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi\n\n /**\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\n *\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n */\n var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i\n\n function allowedAttribute(attr, allowedAttributeList) {\n var attrName = attr.nodeName.toLowerCase()\n\n if ($.inArray(attrName, allowedAttributeList) !== -1) {\n if ($.inArray(attrName, uriAttrs) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN))\n }\n\n return true\n }\n\n var regExp = $(allowedAttributeList).filter(function (index, value) {\n return value instanceof RegExp\n })\n\n // Check if a regular expression validates the attribute.\n for (var i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true\n }\n }\n\n return false\n }\n\n function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n if (unsafeHtml.length === 0) {\n return unsafeHtml\n }\n\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeHtml)\n }\n\n // IE 8 and below don't support createHTMLDocument\n if (!document.implementation || !document.implementation.createHTMLDocument) {\n return unsafeHtml\n }\n\n var createdDocument = document.implementation.createHTMLDocument('sanitization')\n createdDocument.body.innerHTML = unsafeHtml\n\n var whitelistKeys = $.map(whiteList, function (el, i) { return i })\n var elements = $(createdDocument.body).find('*')\n\n for (var i = 0, len = elements.length; i < len; i++) {\n var el = elements[i]\n var elName = el.nodeName.toLowerCase()\n\n if ($.inArray(elName, whitelistKeys) === -1) {\n el.parentNode.removeChild(el)\n\n continue\n }\n\n var attributeList = $.map(el.attributes, function (el) { return el })\n var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || [])\n\n for (var j = 0, len2 = attributeList.length; j < len2; j++) {\n if (!allowedAttribute(attributeList[j], whitelistedAttributes)) {\n el.removeAttribute(attributeList[j].nodeName)\n }\n }\n }\n\n return createdDocument.body.innerHTML\n }\n\n // TOOLTIP PUBLIC CLASS DEFINITION\n // ===============================\n\n var Tooltip = function (element, options) {\n this.type = null\n this.options = null\n this.enabled = null\n this.timeout = null\n this.hoverState = null\n this.$element = null\n this.inState = null\n\n this.init('tooltip', element, options)\n }\n\n Tooltip.VERSION = '3.4.1'\n\n Tooltip.TRANSITION_DURATION = 150\n\n Tooltip.DEFAULTS = {\n animation: true,\n placement: 'top',\n selector: false,\n template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n trigger: 'hover focus',\n title: '',\n delay: 0,\n html: false,\n container: false,\n viewport: {\n selector: 'body',\n padding: 0\n },\n sanitize : true,\n sanitizeFn : null,\n whiteList : DefaultWhitelist\n }\n\n Tooltip.prototype.init = function (type, element, options) {\n this.enabled = true\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.$viewport = this.options.viewport && $(document).find($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n this.inState = { click: false, hover: false, focus: false }\n\n if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n }\n\n var triggers = this.options.trigger.split(' ')\n\n for (var i = triggers.length; i--;) {\n var trigger = triggers[i]\n\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin'\n var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n Tooltip.prototype.getDefaults = function () {\n return Tooltip.DEFAULTS\n }\n\n Tooltip.prototype.getOptions = function (options) {\n var dataAttributes = this.$element.data()\n\n for (var dataAttr in dataAttributes) {\n if (dataAttributes.hasOwnProperty(dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n delete dataAttributes[dataAttr]\n }\n }\n\n options = $.extend({}, this.getDefaults(), dataAttributes, options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay,\n hide: options.delay\n }\n }\n\n if (options.sanitize) {\n options.template = sanitizeHtml(options.template, options.whiteList, options.sanitizeFn)\n }\n\n return options\n }\n\n Tooltip.prototype.getDelegateOptions = function () {\n var options = {}\n var defaults = this.getDefaults()\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n })\n\n return options\n }\n\n Tooltip.prototype.enter = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n }\n\n if (self.tip().hasClass('in') || self.hoverState == 'in') {\n self.hoverState = 'in'\n return\n }\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'in'\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n Tooltip.prototype.isInStateTrue = function () {\n for (var key in this.inState) {\n if (this.inState[key]) return true\n }\n\n return false\n }\n\n Tooltip.prototype.leave = function (obj) {\n var self = obj instanceof this.constructor ?\n obj : $(obj.currentTarget).data('bs.' + this.type)\n\n if (!self) {\n self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n $(obj.currentTarget).data('bs.' + this.type, self)\n }\n\n if (obj instanceof $.Event) {\n self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n }\n\n if (self.isInStateTrue()) return\n\n clearTimeout(self.timeout)\n\n self.hoverState = 'out'\n\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.timeout = setTimeout(function () {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n Tooltip.prototype.show = function () {\n var e = $.Event('show.bs.' + this.type)\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n\n var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n if (e.isDefaultPrevented() || !inDom) return\n var that = this\n\n var $tip = this.tip()\n\n var tipId = this.getUID(this.type)\n\n this.setContent()\n $tip.attr('id', tipId)\n this.$element.attr('aria-describedby', tipId)\n\n if (this.options.animation) $tip.addClass('fade')\n\n var placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n var autoToken = /\\s?auto?\\s?/i\n var autoPlace = autoToken.test(placement)\n if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n .addClass(placement)\n .data('bs.' + this.type, this)\n\n this.options.container ? $tip.appendTo($(document).find(this.options.container)) : $tip.insertAfter(this.$element)\n this.$element.trigger('inserted.bs.' + this.type)\n\n var pos = this.getPosition()\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (autoPlace) {\n var orgPlacement = placement\n var viewportDim = this.getPosition(this.$viewport)\n\n placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' :\n placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' :\n placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' :\n placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' :\n placement\n\n $tip\n .removeClass(orgPlacement)\n .addClass(placement)\n }\n\n var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n this.applyPlacement(calculatedOffset, placement)\n\n var complete = function () {\n var prevHoverState = that.hoverState\n that.$element.trigger('shown.bs.' + that.type)\n that.hoverState = null\n\n if (prevHoverState == 'out') that.leave(that)\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n }\n }\n\n Tooltip.prototype.applyPlacement = function (offset, placement) {\n var $tip = this.tip()\n var width = $tip[0].offsetWidth\n var height = $tip[0].offsetHeight\n\n // manually read margins because getBoundingClientRect includes difference\n var marginTop = parseInt($tip.css('margin-top'), 10)\n var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n // we must check for NaN for ie 8/9\n if (isNaN(marginTop)) marginTop = 0\n if (isNaN(marginLeft)) marginLeft = 0\n\n offset.top += marginTop\n offset.left += marginLeft\n\n // $.fn.offset doesn't round pixel values\n // so we use setOffset directly with our own function B-0\n $.offset.setOffset($tip[0], $.extend({\n using: function (props) {\n $tip.css({\n top: Math.round(props.top),\n left: Math.round(props.left)\n })\n }\n }, offset), 0)\n\n $tip.addClass('in')\n\n // check to see if placing tip in new offset caused the tip to resize itself\n var actualWidth = $tip[0].offsetWidth\n var actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n }\n\n var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n if (delta.left) offset.left += delta.left\n else offset.top += delta.top\n\n var isVertical = /top|bottom/.test(placement)\n var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n $tip.offset(offset)\n this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n }\n\n Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n this.arrow()\n .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n .css(isVertical ? 'top' : 'left', '')\n }\n\n Tooltip.prototype.setContent = function () {\n var $tip = this.tip()\n var title = this.getTitle()\n\n if (this.options.html) {\n if (this.options.sanitize) {\n title = sanitizeHtml(title, this.options.whiteList, this.options.sanitizeFn)\n }\n\n $tip.find('.tooltip-inner').html(title)\n } else {\n $tip.find('.tooltip-inner').text(title)\n }\n\n $tip.removeClass('fade in top bottom left right')\n }\n\n Tooltip.prototype.hide = function (callback) {\n var that = this\n var $tip = $(this.$tip)\n var e = $.Event('hide.bs.' + this.type)\n\n function complete() {\n if (that.hoverState != 'in') $tip.detach()\n if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n that.$element\n .removeAttr('aria-describedby')\n .trigger('hidden.bs.' + that.type)\n }\n callback && callback()\n }\n\n this.$element.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n $.support.transition && $tip.hasClass('fade') ?\n $tip\n .one('bsTransitionEnd', complete)\n .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n complete()\n\n this.hoverState = null\n\n return this\n }\n\n Tooltip.prototype.fixTitle = function () {\n var $e = this.$element\n if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n Tooltip.prototype.hasContent = function () {\n return this.getTitle()\n }\n\n Tooltip.prototype.getPosition = function ($element) {\n $element = $element || this.$element\n\n var el = $element[0]\n var isBody = el.tagName == 'BODY'\n\n var elRect = el.getBoundingClientRect()\n if (elRect.width == null) {\n // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n }\n var isSvg = window.SVGElement && el instanceof window.SVGElement\n // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n // See https://github.com/twbs/bootstrap/issues/20280\n var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n return $.extend({}, elRect, scroll, outerDims, elOffset)\n }\n\n Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n }\n\n Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n var delta = { top: 0, left: 0 }\n if (!this.$viewport) return delta\n\n var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n var viewportDimensions = this.getPosition(this.$viewport)\n\n if (/right|left/.test(placement)) {\n var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll\n var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n if (topEdgeOffset < viewportDimensions.top) { // top overflow\n delta.top = viewportDimensions.top - topEdgeOffset\n } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n }\n } else {\n var leftEdgeOffset = pos.left - viewportPadding\n var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n delta.left = viewportDimensions.left - leftEdgeOffset\n } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n }\n }\n\n return delta\n }\n\n Tooltip.prototype.getTitle = function () {\n var title\n var $e = this.$element\n var o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n Tooltip.prototype.getUID = function (prefix) {\n do prefix += ~~(Math.random() * 1000000)\n while (document.getElementById(prefix))\n return prefix\n }\n\n Tooltip.prototype.tip = function () {\n if (!this.$tip) {\n this.$tip = $(this.options.template)\n if (this.$tip.length != 1) {\n throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n }\n }\n return this.$tip\n }\n\n Tooltip.prototype.arrow = function () {\n return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n }\n\n Tooltip.prototype.enable = function () {\n this.enabled = true\n }\n\n Tooltip.prototype.disable = function () {\n this.enabled = false\n }\n\n Tooltip.prototype.toggleEnabled = function () {\n this.enabled = !this.enabled\n }\n\n Tooltip.prototype.toggle = function (e) {\n var self = this\n if (e) {\n self = $(e.currentTarget).data('bs.' + this.type)\n if (!self) {\n self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n $(e.currentTarget).data('bs.' + this.type, self)\n }\n }\n\n if (e) {\n self.inState.click = !self.inState.click\n if (self.isInStateTrue()) self.enter(self)\n else self.leave(self)\n } else {\n self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n }\n }\n\n Tooltip.prototype.destroy = function () {\n var that = this\n clearTimeout(this.timeout)\n this.hide(function () {\n that.$element.off('.' + that.type).removeData('bs.' + that.type)\n if (that.$tip) {\n that.$tip.detach()\n }\n that.$tip = null\n that.$arrow = null\n that.$viewport = null\n that.$element = null\n })\n }\n\n Tooltip.prototype.sanitizeHtml = function (unsafeHtml) {\n return sanitizeHtml(unsafeHtml, this.options.whiteList, this.options.sanitizeFn)\n }\n\n // TOOLTIP PLUGIN DEFINITION\n // =========================\n\n function Plugin(option) {\n return this.each(function () {\n var $this = $(this)\n var data = $this.data('bs.tooltip')\n var options = typeof option == 'object' && option\n\n if (!data && /destroy|hide/.test(option)) return\n if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = Plugin\n $.fn.tooltip.Constructor = Tooltip\n\n\n // TOOLTIP NO CONFLICT\n // ===================\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n}(jQuery);\n","/* ========================================================================\n * Bootstrap: transition.js v3.4.1\n * https://getbootstrap.com/docs/3.4/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n 'use strict';\n\n // CSS TRANSITION SUPPORT (Shoutout: https://modernizr.com/)\n // ============================================================\n\n function transitionEnd() {\n var el = document.createElement('bootstrap')\n\n var transEndEventNames = {\n WebkitTransition : 'webkitTransitionEnd',\n MozTransition : 'transitionend',\n OTransition : 'oTransitionEnd otransitionend',\n transition : 'transitionend'\n }\n\n for (var name in transEndEventNames) {\n if (el.style[name] !== undefined) {\n return { end: transEndEventNames[name] }\n }\n }\n\n return false // explicit for ie8 ( ._.)\n }\n\n // https://blog.alexmaccaw.com/css-transitions\n $.fn.emulateTransitionEnd = function (duration) {\n var called = false\n var $el = this\n $(this).one('bsTransitionEnd', function () { called = true })\n var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n setTimeout(callback, duration)\n return this\n }\n\n $(function () {\n $.support.transition = transitionEnd()\n\n if (!$.support.transition) return\n\n $.event.special.bsTransitionEnd = {\n bindType: $.support.transition.end,\n delegateType: $.support.transition.end,\n handle: function (e) {\n if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n }\n }\n })\n\n}(jQuery);\n","/*!\r\n * Color Thief v2.0\r\n * by Lokesh Dhakar - http://www.lokeshdhakar.com\r\n *\r\n * Thanks\r\n * ------\r\n * Nick Rabinowitz - For creating quantize.js.\r\n * John Schulz - For clean up and optimization. @JFSIII\r\n * Nathan Spady - For adding drag and drop support to the demo page.\r\n *\r\n * License\r\n * -------\r\n * Copyright 2011, 2015 Lokesh Dhakar\r\n * Released under the MIT license\r\n * https://raw.githubusercontent.com/lokesh/color-thief/master/LICENSE\r\n *\r\n */\r\nvar CanvasImage=function(a){this.canvas=document.createElement(\"canvas\"),this.context=this.canvas.getContext(\"2d\"),document.body.appendChild(this.canvas),this.width=this.canvas.width=a.width,this.height=this.canvas.height=a.height,this.context.drawImage(a,0,0,this.width,this.height)};CanvasImage.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},CanvasImage.prototype.update=function(a){this.context.putImageData(a,0,0)},CanvasImage.prototype.getPixelCount=function(){return this.width*this.height},CanvasImage.prototype.getImageData=function(){return this.context.getImageData(0,0,this.width,this.height)},CanvasImage.prototype.removeCanvas=function(){this.canvas.parentNode.removeChild(this.canvas)};var ColorThief=function(){};/*!\r\n * quantize.js Copyright 2008 Nick Rabinowitz.\r\n * Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php\r\n */\r\n/*!\r\n * Block below copied from Protovis: http://mbostock.github.com/protovis/\r\n * Copyright 2010 Stanford Visualization Group\r\n * Licensed under the BSD License: http://www.opensource.org/licenses/bsd-license.php\r\n */\r\nif(ColorThief.prototype.getColor=function(a,b){var c=this.getPalette(a,5,b),d=c[0];return d},ColorThief.prototype.getPalette=function(a,b,c){\"undefined\"==typeof b&&(b=10),(\"undefined\"==typeof c||1>c)&&(c=10);for(var d,e,f,g,h,i=new CanvasImage(a),j=i.getImageData(),k=j.data,l=i.getPixelCount(),m=[],n=0;l>n;n+=c)d=4*n,e=k[d+0],f=k[d+1],g=k[d+2],h=k[d+3],h>=125&&(e>250&&f>250&&g>250||m.push([e,f,g]));var o=MMCQ.quantize(m,b),p=o?o.palette():null;return i.removeCanvas(),p},!pv)var pv={map:function(a,b){var c={};return b?a.map(function(a,d){return c.index=d,b.call(c,a)}):a.slice()},naturalOrder:function(a,b){return b>a?-1:a>b?1:0},sum:function(a,b){var c={};return a.reduce(b?function(a,d,e){return c.index=e,a+b.call(c,d)}:function(a,b){return a+b},0)},max:function(a,b){return Math.max.apply(null,b?pv.map(a,b):a)}};var MMCQ=function(){function a(a,b,c){return(a<<2*i)+(b<<i)+c}function b(a){function b(){c.sort(a),d=!0}var c=[],d=!1;return{push:function(a){c.push(a),d=!1},peek:function(a){return d||b(),void 0===a&&(a=c.length-1),c[a]},pop:function(){return d||b(),c.pop()},size:function(){return c.length},map:function(a){return c.map(a)},debug:function(){return d||b(),c}}}function c(a,b,c,d,e,f,g){var h=this;h.r1=a,h.r2=b,h.g1=c,h.g2=d,h.b1=e,h.b2=f,h.histo=g}function d(){this.vboxes=new b(function(a,b){return pv.naturalOrder(a.vbox.count()*a.vbox.volume(),b.vbox.count()*b.vbox.volume())})}function e(b){var c,d,e,f,g=1<<3*i,h=new Array(g);return b.forEach(function(b){d=b[0]>>j,e=b[1]>>j,f=b[2]>>j,c=a(d,e,f),h[c]=(h[c]||0)+1}),h}function f(a,b){var d,e,f,g=1e6,h=0,i=1e6,k=0,l=1e6,m=0;return a.forEach(function(a){d=a[0]>>j,e=a[1]>>j,f=a[2]>>j,g>d?g=d:d>h&&(h=d),i>e?i=e:e>k&&(k=e),l>f?l=f:f>m&&(m=f)}),new c(g,h,i,k,l,m,b)}function g(b,c){function d(a){var b,d,e,f,g,h=a+\"1\",j=a+\"2\",k=0;for(i=c[h];i<=c[j];i++)if(o[i]>n/2){for(e=c.copy(),f=c.copy(),b=i-c[h],d=c[j]-i,g=d>=b?Math.min(c[j]-1,~~(i+d/2)):Math.max(c[h],~~(i-1-b/2));!o[g];)g++;for(k=p[g];!k&&o[g-1];)k=p[--g];return e[j]=g,f[h]=e[j]+1,[e,f]}}if(c.count()){var e=c.r2-c.r1+1,f=c.g2-c.g1+1,g=c.b2-c.b1+1,h=pv.max([e,f,g]);if(1==c.count())return[c.copy()];var i,j,k,l,m,n=0,o=[],p=[];if(h==e)for(i=c.r1;i<=c.r2;i++){for(l=0,j=c.g1;j<=c.g2;j++)for(k=c.b1;k<=c.b2;k++)m=a(i,j,k),l+=b[m]||0;n+=l,o[i]=n}else if(h==f)for(i=c.g1;i<=c.g2;i++){for(l=0,j=c.r1;j<=c.r2;j++)for(k=c.b1;k<=c.b2;k++)m=a(j,i,k),l+=b[m]||0;n+=l,o[i]=n}else for(i=c.b1;i<=c.b2;i++){for(l=0,j=c.r1;j<=c.r2;j++)for(k=c.g1;k<=c.g2;k++)m=a(j,k,i),l+=b[m]||0;n+=l,o[i]=n}return o.forEach(function(a,b){p[b]=n-a}),d(h==e?\"r\":h==f?\"g\":\"b\")}}function h(a,c){function h(a,b){for(var c,d=1,e=0;k>e;)if(c=a.pop(),c.count()){var f=g(i,c),h=f[0],j=f[1];if(!h)return;if(a.push(h),j&&(a.push(j),d++),d>=b)return;if(e++>k)return}else a.push(c),e++}if(!a.length||2>c||c>256)return!1;var i=e(a),j=0;i.forEach(function(){j++});var m=f(a,i),n=new b(function(a,b){return pv.naturalOrder(a.count(),b.count())});n.push(m),h(n,l*c);for(var o=new b(function(a,b){return pv.naturalOrder(a.count()*a.volume(),b.count()*b.volume())});n.size();)o.push(n.pop());h(o,c-o.size());for(var p=new d;o.size();)p.push(o.pop());return p}var i=5,j=8-i,k=1e3,l=.75;return c.prototype={volume:function(a){var b=this;return(!b._volume||a)&&(b._volume=(b.r2-b.r1+1)*(b.g2-b.g1+1)*(b.b2-b.b1+1)),b._volume},count:function(b){var c=this,d=c.histo;if(!c._count_set||b){var e,f,g,h=0;for(e=c.r1;e<=c.r2;e++)for(f=c.g1;f<=c.g2;f++)for(g=c.b1;g<=c.b2;g++)index=a(e,f,g),h+=d[index]||0;c._count=h,c._count_set=!0}return c._count},copy:function(){var a=this;return new c(a.r1,a.r2,a.g1,a.g2,a.b1,a.b2,a.histo)},avg:function(b){var c=this,d=c.histo;if(!c._avg||b){var e,f,g,h,j,k=0,l=1<<8-i,m=0,n=0,o=0;for(f=c.r1;f<=c.r2;f++)for(g=c.g1;g<=c.g2;g++)for(h=c.b1;h<=c.b2;h++)j=a(f,g,h),e=d[j]||0,k+=e,m+=e*(f+.5)*l,n+=e*(g+.5)*l,o+=e*(h+.5)*l;k?c._avg=[~~(m/k),~~(n/k),~~(o/k)]:c._avg=[~~(l*(c.r1+c.r2+1)/2),~~(l*(c.g1+c.g2+1)/2),~~(l*(c.b1+c.b2+1)/2)]}return c._avg},contains:function(a){var b=this,c=a[0]>>j;return gval=a[1]>>j,bval=a[2]>>j,c>=b.r1&&c<=b.r2&&gval>=b.g1&&gval<=b.g2&&bval>=b.b1&&bval<=b.b2}},d.prototype={push:function(a){this.vboxes.push({vbox:a,color:a.avg()})},palette:function(){return this.vboxes.map(function(a){return a.color})},size:function(){return this.vboxes.size()},map:function(a){for(var b=this.vboxes,c=0;c<b.size();c++)if(b.peek(c).vbox.contains(a))return b.peek(c).color;return this.nearest(a)},nearest:function(a){for(var b,c,d,e=this.vboxes,f=0;f<e.size();f++)c=Math.sqrt(Math.pow(a[0]-e.peek(f).color[0],2)+Math.pow(a[1]-e.peek(f).color[1],2)+Math.pow(a[2]-e.peek(f).color[2],2)),(b>c||void 0===b)&&(b=c,d=e.peek(f).color);return d},forcebw:function(){var a=this.vboxes;a.sort(function(a,b){return pv.naturalOrder(pv.sum(a.color),pv.sum(b.color))});var b=a[0].color;b[0]<5&&b[1]<5&&b[2]<5&&(a[0].color=[0,0,0]);var c=a.length-1,d=a[c].color;d[0]>251&&d[1]>251&&d[2]>251&&(a[c].color=[255,255,255])}},{quantize:h}}();\r\nmodule.exports = ColorThief;\r\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","!function(e,t){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define(t):(e=\"undefined\"!=typeof globalThis?globalThis:e||self).dayjs_plugin_localizedFormat=t()}(this,(function(){\"use strict\";var e={LTS:\"h:mm:ss A\",LT:\"h:mm A\",L:\"MM/DD/YYYY\",LL:\"MMMM D, YYYY\",LLL:\"MMMM D, YYYY h:mm A\",LLLL:\"dddd, MMMM D, YYYY h:mm A\"};return function(t,o,n){var r=o.prototype,i=r.format;n.en.formats=e,r.format=function(t){void 0===t&&(t=\"YYYY-MM-DDTHH:mm:ssZ\");var o=this.$locale().formats,n=function(t,o){return t.replace(/(\\[[^\\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var i=r&&r.toUpperCase();return n||o[r]||e[r]||o[i].replace(/(\\[[^\\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,o){return t||o.slice(1)}))}))}(t,void 0===o?{}:o);return i.call(this,n)}}}));","!function(r,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(r=\"undefined\"!=typeof globalThis?globalThis:r||self).dayjs_plugin_relativeTime=e()}(this,(function(){\"use strict\";return function(r,e,t){r=r||{};var n=e.prototype,o={future:\"in %s\",past:\"%s ago\",s:\"a few seconds\",m:\"a minute\",mm:\"%d minutes\",h:\"an hour\",hh:\"%d hours\",d:\"a day\",dd:\"%d days\",M:\"a month\",MM:\"%d months\",y:\"a year\",yy:\"%d years\"};function i(r,e,t,o){return n.fromToBase(r,e,t,o)}t.en.relativeTime=o,n.fromToBase=function(e,n,i,d,u){for(var f,a,s,l=i.$locale().relativeTime||o,h=r.thresholds||[{l:\"s\",r:44,d:\"second\"},{l:\"m\",r:89},{l:\"mm\",r:44,d:\"minute\"},{l:\"h\",r:89},{l:\"hh\",r:21,d:\"hour\"},{l:\"d\",r:35},{l:\"dd\",r:25,d:\"day\"},{l:\"M\",r:45},{l:\"MM\",r:10,d:\"month\"},{l:\"y\",r:17},{l:\"yy\",d:\"year\"}],m=h.length,c=0;c<m;c+=1){var y=h[c];y.d&&(f=d?t(e).diff(i,y.d,!0):i.diff(e,y.d,!0));var p=(r.rounding||Math.round)(Math.abs(f));if(s=f>0,p<=y.r||!y.r){p<=1&&c>0&&(y=h[c-1]);var v=l[y.l];u&&(p=u(\"\"+p)),a=\"string\"==typeof v?v.replace(\"%d\",p):v(p,n,y.l,s);break}}if(n)return a;var M=s?l.future:l.past;return\"function\"==typeof M?M(a):M.replace(\"%s\",a)},n.to=function(r,e){return i(r,e,this,!0)},n.from=function(r,e){return i(r,e,this)};var d=function(r){return r.$u?t.utc():t()};n.toNow=function(r){return this.to(d(this),r)},n.fromNow=function(r){return this.from(d(this),r)}}}));","\"use strict\";\n\n// eslint-disable-next-line func-names\nmodule.exports = function () {\n if (typeof globalThis === \"object\") {\n return globalThis;\n }\n\n var g;\n\n try {\n // This works if eval is allowed (see CSP)\n // eslint-disable-next-line no-new-func\n g = this || new Function(\"return this\")();\n } catch (e) {\n // This works if the window reference is available\n if (typeof window === \"object\") {\n return window;\n } // This works if the self reference is available\n\n\n if (typeof self === \"object\") {\n return self;\n } // This works if the global reference is available\n\n\n if (typeof global !== \"undefined\") {\n return global;\n }\n }\n\n return g;\n}();","import { tabbable, focusable, isFocusable, isTabbable } from 'tabbable';\n\nconst activeFocusTraps = (function () {\n const trapQueue = [];\n return {\n activateTrap(trap) {\n if (trapQueue.length > 0) {\n const activeTrap = trapQueue[trapQueue.length - 1];\n if (activeTrap !== trap) {\n activeTrap.pause();\n }\n }\n\n const trapIndex = trapQueue.indexOf(trap);\n if (trapIndex === -1) {\n trapQueue.push(trap);\n } else {\n // move this existing trap to the front of the queue\n trapQueue.splice(trapIndex, 1);\n trapQueue.push(trap);\n }\n },\n\n deactivateTrap(trap) {\n const trapIndex = trapQueue.indexOf(trap);\n if (trapIndex !== -1) {\n trapQueue.splice(trapIndex, 1);\n }\n\n if (trapQueue.length > 0) {\n trapQueue[trapQueue.length - 1].unpause();\n }\n },\n };\n})();\n\nconst isSelectableInput = function (node) {\n return (\n node.tagName &&\n node.tagName.toLowerCase() === 'input' &&\n typeof node.select === 'function'\n );\n};\n\nconst isEscapeEvent = function (e) {\n return e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27;\n};\n\nconst isTabEvent = function (e) {\n return e.key === 'Tab' || e.keyCode === 9;\n};\n\nconst delay = function (fn) {\n return setTimeout(fn, 0);\n};\n\n// Array.find/findIndex() are not supported on IE; this replicates enough\n// of Array.findIndex() for our needs\nconst findIndex = function (arr, fn) {\n let idx = -1;\n\n arr.every(function (value, i) {\n if (fn(value)) {\n idx = i;\n return false; // break\n }\n\n return true; // next\n });\n\n return idx;\n};\n\n/**\n * Get an option's value when it could be a plain value, or a handler that provides\n * the value.\n * @param {*} value Option's value to check.\n * @param {...*} [params] Any parameters to pass to the handler, if `value` is a function.\n * @returns {*} The `value`, or the handler's returned value.\n */\nconst valueOrHandler = function (value, ...params) {\n return typeof value === 'function' ? value(...params) : value;\n};\n\nconst getActualTarget = function (event) {\n // NOTE: If the trap is _inside_ a shadow DOM, event.target will always be the\n // shadow host. However, event.target.composedPath() will be an array of\n // nodes \"clicked\" from inner-most (the actual element inside the shadow) to\n // outer-most (the host HTML document). If we have access to composedPath(),\n // then use its first element; otherwise, fall back to event.target (and\n // this only works for an _open_ shadow DOM; otherwise,\n // composedPath()[0] === event.target always).\n return event.target.shadowRoot && typeof event.composedPath === 'function'\n ? event.composedPath()[0]\n : event.target;\n};\n\nconst createFocusTrap = function (elements, userOptions) {\n // SSR: a live trap shouldn't be created in this type of environment so this\n // should be safe code to execute if the `document` option isn't specified\n const doc = userOptions?.document || document;\n\n const config = {\n returnFocusOnDeactivate: true,\n escapeDeactivates: true,\n delayInitialFocus: true,\n ...userOptions,\n };\n\n const state = {\n // containers given to createFocusTrap()\n // @type {Array<HTMLElement>}\n containers: [],\n\n // list of objects identifying tabbable nodes in `containers` in the trap\n // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n // is active, but the trap should never get to a state where there isn't at least one group\n // with at least one tabbable node in it (that would lead to an error condition that would\n // result in an error being thrown)\n // @type {Array<{\n // container: HTMLElement,\n // tabbableNodes: Array<HTMLElement>, // empty if none\n // focusableNodes: Array<HTMLElement>, // empty if none\n // firstTabbableNode: HTMLElement|null,\n // lastTabbableNode: HTMLElement|null,\n // nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined\n // }>}\n containerGroups: [], // same order/length as `containers` list\n\n // references to objects in `containerGroups`, but only those that actually have\n // tabbable nodes in them\n // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__\n // the same length\n tabbableGroups: [],\n\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: false,\n paused: false,\n\n // timer ID for when delayInitialFocus is true and initial focus in this trap\n // has been delayed during activation\n delayInitialFocusTimer: undefined,\n };\n\n let trap; // eslint-disable-line prefer-const -- some private functions reference it, and its methods reference private functions, so we must declare here and define later\n\n /**\n * Gets a configuration option value.\n * @param {Object|undefined} configOverrideOptions If true, and option is defined in this set,\n * value will be taken from this object. Otherwise, value will be taken from base configuration.\n * @param {string} optionName Name of the option whose value is sought.\n * @param {string|undefined} [configOptionName] Name of option to use __instead of__ `optionName`\n * IIF `configOverrideOptions` is not defined. Otherwise, `optionName` is used.\n */\n const getOption = (configOverrideOptions, optionName, configOptionName) => {\n return configOverrideOptions &&\n configOverrideOptions[optionName] !== undefined\n ? configOverrideOptions[optionName]\n : config[configOptionName || optionName];\n };\n\n /**\n * Finds the index of the container that contains the element.\n * @param {HTMLElement} element\n * @returns {number} Index of the container in either `state.containers` or\n * `state.containerGroups` (the order/length of these lists are the same); -1\n * if the element isn't found.\n */\n const findContainerIndex = function (element) {\n // NOTE: search `containerGroups` because it's possible a group contains no tabbable\n // nodes, but still contains focusable nodes (e.g. if they all have `tabindex=-1`)\n // and we still need to find the element in there\n return state.containerGroups.findIndex(\n ({ container, tabbableNodes }) =>\n container.contains(element) ||\n // fall back to explicit tabbable search which will take into consideration any\n // web components if the `tabbableOptions.getShadowRoot` option was used for\n // the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't\n // look inside web components even if open)\n tabbableNodes.find((node) => node === element)\n );\n };\n\n /**\n * Gets the node for the given option, which is expected to be an option that\n * can be either a DOM node, a string that is a selector to get a node, `false`\n * (if a node is explicitly NOT given), or a function that returns any of these\n * values.\n * @param {string} optionName\n * @returns {undefined | false | HTMLElement | SVGElement} Returns\n * `undefined` if the option is not specified; `false` if the option\n * resolved to `false` (node explicitly not given); otherwise, the resolved\n * DOM node.\n * @throws {Error} If the option is set, not `false`, and is not, or does not\n * resolve to a node.\n */\n const getNodeForOption = function (optionName, ...params) {\n let optionValue = config[optionName];\n\n if (typeof optionValue === 'function') {\n optionValue = optionValue(...params);\n }\n\n if (optionValue === true) {\n optionValue = undefined; // use default value\n }\n\n if (!optionValue) {\n if (optionValue === undefined || optionValue === false) {\n return optionValue;\n }\n // else, empty string (invalid), null (invalid), 0 (invalid)\n\n throw new Error(\n `\\`${optionName}\\` was specified but was not a node, or did not return a node`\n );\n }\n\n let node = optionValue; // could be HTMLElement, SVGElement, or non-empty string at this point\n\n if (typeof optionValue === 'string') {\n node = doc.querySelector(optionValue); // resolve to node, or null if fails\n if (!node) {\n throw new Error(\n `\\`${optionName}\\` as selector refers to no known node`\n );\n }\n }\n\n return node;\n };\n\n const getInitialFocusNode = function () {\n let node = getNodeForOption('initialFocus');\n\n // false explicitly indicates we want no initialFocus at all\n if (node === false) {\n return false;\n }\n\n if (node === undefined) {\n // option not specified: use fallback options\n if (findContainerIndex(doc.activeElement) >= 0) {\n node = doc.activeElement;\n } else {\n const firstTabbableGroup = state.tabbableGroups[0];\n const firstTabbableNode =\n firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n\n // NOTE: `fallbackFocus` option function cannot return `false` (not supported)\n node = firstTabbableNode || getNodeForOption('fallbackFocus');\n }\n }\n\n if (!node) {\n throw new Error(\n 'Your focus-trap needs to have at least one focusable element'\n );\n }\n\n return node;\n };\n\n const updateTabbableNodes = function () {\n state.containerGroups = state.containers.map((container) => {\n const tabbableNodes = tabbable(container, config.tabbableOptions);\n\n // NOTE: if we have tabbable nodes, we must have focusable nodes; focusable nodes\n // are a superset of tabbable nodes\n const focusableNodes = focusable(container, config.tabbableOptions);\n\n return {\n container,\n tabbableNodes,\n focusableNodes,\n firstTabbableNode: tabbableNodes.length > 0 ? tabbableNodes[0] : null,\n lastTabbableNode:\n tabbableNodes.length > 0\n ? tabbableNodes[tabbableNodes.length - 1]\n : null,\n\n /**\n * Finds the __tabbable__ node that follows the given node in the specified direction,\n * in this container, if any.\n * @param {HTMLElement} node\n * @param {boolean} [forward] True if going in forward tab order; false if going\n * in reverse.\n * @returns {HTMLElement|undefined} The next tabbable node, if any.\n */\n nextTabbableNode(node, forward = true) {\n // NOTE: If tabindex is positive (in order to manipulate the tab order separate\n // from the DOM order), this __will not work__ because the list of focusableNodes,\n // while it contains tabbable nodes, does not sort its nodes in any order other\n // than DOM order, because it can't: Where would you place focusable (but not\n // tabbable) nodes in that order? They have no order, because they aren't tabbale...\n // Support for positive tabindex is already broken and hard to manage (possibly\n // not supportable, TBD), so this isn't going to make things worse than they\n // already are, and at least makes things better for the majority of cases where\n // tabindex is either 0/unset or negative.\n // FYI, positive tabindex issue: https://github.com/focus-trap/focus-trap/issues/375\n const nodeIdx = focusableNodes.findIndex((n) => n === node);\n if (nodeIdx < 0) {\n return undefined;\n }\n\n if (forward) {\n return focusableNodes\n .slice(nodeIdx + 1)\n .find((n) => isTabbable(n, config.tabbableOptions));\n }\n\n return focusableNodes\n .slice(0, nodeIdx)\n .reverse()\n .find((n) => isTabbable(n, config.tabbableOptions));\n },\n };\n });\n\n state.tabbableGroups = state.containerGroups.filter(\n (group) => group.tabbableNodes.length > 0\n );\n\n // throw if no groups have tabbable nodes and we don't have a fallback focus node either\n if (\n state.tabbableGroups.length <= 0 &&\n !getNodeForOption('fallbackFocus') // returning false not supported for this option\n ) {\n throw new Error(\n 'Your focus-trap must have at least one container with at least one tabbable node in it at all times'\n );\n }\n };\n\n const tryFocus = function (node) {\n if (node === false) {\n return;\n }\n\n if (node === doc.activeElement) {\n return;\n }\n\n if (!node || !node.focus) {\n tryFocus(getInitialFocusNode());\n return;\n }\n\n node.focus({ preventScroll: !!config.preventScroll });\n state.mostRecentlyFocusedNode = node;\n\n if (isSelectableInput(node)) {\n node.select();\n }\n };\n\n const getReturnFocusNode = function (previousActiveElement) {\n const node = getNodeForOption('setReturnFocus', previousActiveElement);\n return node ? node : node === false ? false : previousActiveElement;\n };\n\n // This needs to be done on mousedown and touchstart instead of click\n // so that it precedes the focus event.\n const checkPointerDown = function (e) {\n const target = getActualTarget(e);\n\n if (findContainerIndex(target) >= 0) {\n // allow the click since it ocurred inside the trap\n return;\n }\n\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n // immediately deactivate the trap\n trap.deactivate({\n // if, on deactivation, we should return focus to the node originally-focused\n // when the trap was activated (or the configured `setReturnFocus` node),\n // then assume it's also OK to return focus to the outside node that was\n // just clicked, causing deactivation, as long as that node is focusable;\n // if it isn't focusable, then return focus to the original node focused\n // on activation (or the configured `setReturnFocus` node)\n // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n // which will result in the outside click setting focus to the node\n // that was clicked, whether it's focusable or not; by setting\n // `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n // on activation (or the configured `setReturnFocus` node)\n returnFocus:\n config.returnFocusOnDeactivate &&\n !isFocusable(target, config.tabbableOptions),\n });\n return;\n }\n\n // This is needed for mobile devices.\n // (If we'll only let `click` events through,\n // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n if (valueOrHandler(config.allowOutsideClick, e)) {\n // allow the click outside the trap to take place\n return;\n }\n\n // otherwise, prevent the click\n e.preventDefault();\n };\n\n // In case focus escapes the trap for some strange reason, pull it back in.\n const checkFocusIn = function (e) {\n const target = getActualTarget(e);\n const targetContained = findContainerIndex(target) >= 0;\n\n // In Firefox when you Tab out of an iframe the Document is briefly focused.\n if (targetContained || target instanceof Document) {\n if (targetContained) {\n state.mostRecentlyFocusedNode = target;\n }\n } else {\n // escaped! pull it back in to where it just left\n e.stopImmediatePropagation();\n tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n }\n };\n\n // Hijack Tab events on the first and last focusable nodes of the trap,\n // in order to prevent focus from escaping. If it escapes for even a\n // moment it can end up scrolling the page and causing confusion so we\n // kind of need to capture the action at the keydown phase.\n const checkTab = function (e) {\n const target = getActualTarget(e);\n updateTabbableNodes();\n\n let destinationNode = null;\n\n if (state.tabbableGroups.length > 0) {\n // make sure the target is actually contained in a group\n // NOTE: the target may also be the container itself if it's focusable\n // with tabIndex='-1' and was given initial focus\n const containerIndex = findContainerIndex(target);\n const containerGroup =\n containerIndex >= 0 ? state.containerGroups[containerIndex] : undefined;\n\n if (containerIndex < 0) {\n // target not found in any group: quite possible focus has escaped the trap,\n // so bring it back in to...\n if (e.shiftKey) {\n // ...the last node in the last group\n destinationNode =\n state.tabbableGroups[state.tabbableGroups.length - 1]\n .lastTabbableNode;\n } else {\n // ...the first node in the first group\n destinationNode = state.tabbableGroups[0].firstTabbableNode;\n }\n } else if (e.shiftKey) {\n // REVERSE\n\n // is the target the first tabbable node in a group?\n let startOfGroupIndex = findIndex(\n state.tabbableGroups,\n ({ firstTabbableNode }) => target === firstTabbableNode\n );\n\n if (\n startOfGroupIndex < 0 &&\n (containerGroup.container === target ||\n (isFocusable(target, config.tabbableOptions) &&\n !isTabbable(target, config.tabbableOptions) &&\n !containerGroup.nextTabbableNode(target, false)))\n ) {\n // an exception case where the target is either the container itself, or\n // a non-tabbable node that was given focus (i.e. tabindex is negative\n // and user clicked on it or node was programmatically given focus)\n // and is not followed by any other tabbable node, in which\n // case, we should handle shift+tab as if focus were on the container's\n // first tabbable node, and go to the last tabbable node of the LAST group\n startOfGroupIndex = containerIndex;\n }\n\n if (startOfGroupIndex >= 0) {\n // YES: then shift+tab should go to the last tabbable node in the\n // previous group (and wrap around to the last tabbable node of\n // the LAST group if it's the first tabbable node of the FIRST group)\n const destinationGroupIndex =\n startOfGroupIndex === 0\n ? state.tabbableGroups.length - 1\n : startOfGroupIndex - 1;\n\n const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n destinationNode = destinationGroup.lastTabbableNode;\n }\n } else {\n // FORWARD\n\n // is the target the last tabbable node in a group?\n let lastOfGroupIndex = findIndex(\n state.tabbableGroups,\n ({ lastTabbableNode }) => target === lastTabbableNode\n );\n\n if (\n lastOfGroupIndex < 0 &&\n (containerGroup.container === target ||\n (isFocusable(target, config.tabbableOptions) &&\n !isTabbable(target, config.tabbableOptions) &&\n !containerGroup.nextTabbableNode(target)))\n ) {\n // an exception case where the target is the container itself, or\n // a non-tabbable node that was given focus (i.e. tabindex is negative\n // and user clicked on it or node was programmatically given focus)\n // and is not followed by any other tabbable node, in which\n // case, we should handle tab as if focus were on the container's\n // last tabbable node, and go to the first tabbable node of the FIRST group\n lastOfGroupIndex = containerIndex;\n }\n\n if (lastOfGroupIndex >= 0) {\n // YES: then tab should go to the first tabbable node in the next\n // group (and wrap around to the first tabbable node of the FIRST\n // group if it's the last tabbable node of the LAST group)\n const destinationGroupIndex =\n lastOfGroupIndex === state.tabbableGroups.length - 1\n ? 0\n : lastOfGroupIndex + 1;\n\n const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n destinationNode = destinationGroup.firstTabbableNode;\n }\n }\n } else {\n // NOTE: the fallbackFocus option does not support returning false to opt-out\n destinationNode = getNodeForOption('fallbackFocus');\n }\n\n if (destinationNode) {\n e.preventDefault();\n tryFocus(destinationNode);\n }\n // else, let the browser take care of [shift+]tab and move the focus\n };\n\n const checkKey = function (e) {\n if (\n isEscapeEvent(e) &&\n valueOrHandler(config.escapeDeactivates, e) !== false\n ) {\n e.preventDefault();\n trap.deactivate();\n return;\n }\n\n if (isTabEvent(e)) {\n checkTab(e);\n return;\n }\n };\n\n const checkClick = function (e) {\n const target = getActualTarget(e);\n\n if (findContainerIndex(target) >= 0) {\n return;\n }\n\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n return;\n }\n\n if (valueOrHandler(config.allowOutsideClick, e)) {\n return;\n }\n\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n\n //\n // EVENT LISTENERS\n //\n\n const addListeners = function () {\n if (!state.active) {\n return;\n }\n\n // There can be only one listening focus trap at a time\n activeFocusTraps.activateTrap(trap);\n\n // Delay ensures that the focused element doesn't capture the event\n // that caused the focus trap activation.\n state.delayInitialFocusTimer = config.delayInitialFocus\n ? delay(function () {\n tryFocus(getInitialFocusNode());\n })\n : tryFocus(getInitialFocusNode());\n\n doc.addEventListener('focusin', checkFocusIn, true);\n doc.addEventListener('mousedown', checkPointerDown, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('touchstart', checkPointerDown, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('click', checkClick, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('keydown', checkKey, {\n capture: true,\n passive: false,\n });\n\n return trap;\n };\n\n const removeListeners = function () {\n if (!state.active) {\n return;\n }\n\n doc.removeEventListener('focusin', checkFocusIn, true);\n doc.removeEventListener('mousedown', checkPointerDown, true);\n doc.removeEventListener('touchstart', checkPointerDown, true);\n doc.removeEventListener('click', checkClick, true);\n doc.removeEventListener('keydown', checkKey, true);\n\n return trap;\n };\n\n //\n // TRAP DEFINITION\n //\n\n trap = {\n get active() {\n return state.active;\n },\n\n get paused() {\n return state.paused;\n },\n\n activate(activateOptions) {\n if (state.active) {\n return this;\n }\n\n const onActivate = getOption(activateOptions, 'onActivate');\n const onPostActivate = getOption(activateOptions, 'onPostActivate');\n const checkCanFocusTrap = getOption(activateOptions, 'checkCanFocusTrap');\n\n if (!checkCanFocusTrap) {\n updateTabbableNodes();\n }\n\n state.active = true;\n state.paused = false;\n state.nodeFocusedBeforeActivation = doc.activeElement;\n\n if (onActivate) {\n onActivate();\n }\n\n const finishActivation = () => {\n if (checkCanFocusTrap) {\n updateTabbableNodes();\n }\n addListeners();\n if (onPostActivate) {\n onPostActivate();\n }\n };\n\n if (checkCanFocusTrap) {\n checkCanFocusTrap(state.containers.concat()).then(\n finishActivation,\n finishActivation\n );\n return this;\n }\n\n finishActivation();\n return this;\n },\n\n deactivate(deactivateOptions) {\n if (!state.active) {\n return this;\n }\n\n const options = {\n onDeactivate: config.onDeactivate,\n onPostDeactivate: config.onPostDeactivate,\n checkCanReturnFocus: config.checkCanReturnFocus,\n ...deactivateOptions,\n };\n\n clearTimeout(state.delayInitialFocusTimer); // noop if undefined\n state.delayInitialFocusTimer = undefined;\n\n removeListeners();\n state.active = false;\n state.paused = false;\n\n activeFocusTraps.deactivateTrap(trap);\n\n const onDeactivate = getOption(options, 'onDeactivate');\n const onPostDeactivate = getOption(options, 'onPostDeactivate');\n const checkCanReturnFocus = getOption(options, 'checkCanReturnFocus');\n const returnFocus = getOption(\n options,\n 'returnFocus',\n 'returnFocusOnDeactivate'\n );\n\n if (onDeactivate) {\n onDeactivate();\n }\n\n const finishDeactivation = () => {\n delay(() => {\n if (returnFocus) {\n tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n }\n if (onPostDeactivate) {\n onPostDeactivate();\n }\n });\n };\n\n if (returnFocus && checkCanReturnFocus) {\n checkCanReturnFocus(\n getReturnFocusNode(state.nodeFocusedBeforeActivation)\n ).then(finishDeactivation, finishDeactivation);\n return this;\n }\n\n finishDeactivation();\n return this;\n },\n\n pause() {\n if (state.paused || !state.active) {\n return this;\n }\n\n state.paused = true;\n removeListeners();\n\n return this;\n },\n\n unpause() {\n if (!state.paused || !state.active) {\n return this;\n }\n\n state.paused = false;\n updateTabbableNodes();\n addListeners();\n\n return this;\n },\n\n updateContainerElements(containerElements) {\n const elementsAsArray = [].concat(containerElements).filter(Boolean);\n\n state.containers = elementsAsArray.map((element) =>\n typeof element === 'string' ? doc.querySelector(element) : element\n );\n\n if (state.active) {\n updateTabbableNodes();\n }\n\n return this;\n },\n };\n\n // initialize container elements\n trap.updateContainerElements(elements);\n\n return trap;\n};\n\nexport { createFocusTrap };\n","/*jslint browser: true*/\r\n/*jslint jquery: true*/\r\n\r\n/*\r\n * jQuery Hotkeys Plugin\r\n * Copyright 2010, John Resig\r\n * Dual licensed under the MIT or GPL Version 2 licenses.\r\n *\r\n * Based upon the plugin by Tzury Bar Yochay:\r\n * https://github.com/tzuryby/jquery.hotkeys\r\n *\r\n * Original idea by:\r\n * Binny V A, http://www.openjs.com/scripts/events/keyboard_shortcuts/\r\n */\r\n\r\n/*\r\n * One small change is: now keys are passed by object { keys: '...' }\r\n * Might be useful, when you want to pass some other data to your handler\r\n */\r\n\r\n(function(jQuery) {\r\n\r\n jQuery.hotkeys = {\r\n version: \"0.2.0\",\r\n\r\n specialKeys: {\r\n 8: \"backspace\",\r\n 9: \"tab\",\r\n 10: \"return\",\r\n 13: \"return\",\r\n 16: \"shift\",\r\n 17: \"ctrl\",\r\n 18: \"alt\",\r\n 19: \"pause\",\r\n 20: \"capslock\",\r\n 27: \"esc\",\r\n 32: \"space\",\r\n 33: \"pageup\",\r\n 34: \"pagedown\",\r\n 35: \"end\",\r\n 36: \"home\",\r\n 37: \"left\",\r\n 38: \"up\",\r\n 39: \"right\",\r\n 40: \"down\",\r\n 45: \"insert\",\r\n 46: \"del\",\r\n 59: \";\",\r\n 61: \"=\",\r\n 96: \"0\",\r\n 97: \"1\",\r\n 98: \"2\",\r\n 99: \"3\",\r\n 100: \"4\",\r\n 101: \"5\",\r\n 102: \"6\",\r\n 103: \"7\",\r\n 104: \"8\",\r\n 105: \"9\",\r\n 106: \"*\",\r\n 107: \"+\",\r\n 109: \"-\",\r\n 110: \".\",\r\n 111: \"/\",\r\n 112: \"f1\",\r\n 113: \"f2\",\r\n 114: \"f3\",\r\n 115: \"f4\",\r\n 116: \"f5\",\r\n 117: \"f6\",\r\n 118: \"f7\",\r\n 119: \"f8\",\r\n 120: \"f9\",\r\n 121: \"f10\",\r\n 122: \"f11\",\r\n 123: \"f12\",\r\n 144: \"numlock\",\r\n 145: \"scroll\",\r\n 173: \"-\",\r\n 186: \";\",\r\n 187: \"=\",\r\n 188: \",\",\r\n 189: \"-\",\r\n 190: \".\",\r\n 191: \"/\",\r\n 192: \"`\",\r\n 219: \"[\",\r\n 220: \"\\\\\",\r\n 221: \"]\",\r\n 222: \"'\"\r\n },\r\n\r\n shiftNums: {\r\n \"`\": \"~\",\r\n \"1\": \"!\",\r\n \"2\": \"@\",\r\n \"3\": \"#\",\r\n \"4\": \"$\",\r\n \"5\": \"%\",\r\n \"6\": \"^\",\r\n \"7\": \"&\",\r\n \"8\": \"*\",\r\n \"9\": \"(\",\r\n \"0\": \")\",\r\n \"-\": \"_\",\r\n \"=\": \"+\",\r\n \";\": \": \",\r\n \"'\": \"\\\"\",\r\n \",\": \"<\",\r\n \".\": \">\",\r\n \"/\": \"?\",\r\n \"\\\\\": \"|\"\r\n },\r\n\r\n // excludes: button, checkbox, file, hidden, image, password, radio, reset, search, submit, url\r\n textAcceptingInputTypes: [\r\n \"text\", \"password\", \"number\", \"email\", \"url\", \"range\", \"date\", \"month\", \"week\", \"time\", \"datetime\",\r\n \"datetime-local\", \"search\", \"color\", \"tel\"],\r\n\r\n // default input types not to bind to unless bound directly\r\n textInputTypes: /textarea|input|select/i,\r\n\r\n options: {\r\n filterInputAcceptingElements: true,\r\n filterTextInputs: true,\r\n filterContentEditable: true\r\n }\r\n };\r\n\r\n function keyHandler(handleObj) {\r\n if (typeof handleObj.data === \"string\") {\r\n handleObj.data = {\r\n keys: handleObj.data\r\n };\r\n }\r\n\r\n // Only care when a possible input has been specified\r\n if (!handleObj.data || !handleObj.data.keys || typeof handleObj.data.keys !== \"string\") {\r\n return;\r\n }\r\n\r\n var origHandler = handleObj.handler,\r\n keys = handleObj.data.keys.toLowerCase().split(\" \");\r\n\r\n handleObj.handler = function(event) {\r\n // Don't fire in text-accepting inputs that we didn't directly bind to\r\n if (this !== event.target &&\r\n (jQuery.hotkeys.options.filterInputAcceptingElements &&\r\n jQuery.hotkeys.textInputTypes.test(event.target.nodeName) ||\r\n (jQuery.hotkeys.options.filterContentEditable && jQuery(event.target).attr('contenteditable')) ||\r\n (jQuery.hotkeys.options.filterTextInputs &&\r\n jQuery.inArray(event.target.type, jQuery.hotkeys.textAcceptingInputTypes) > -1))) {\r\n return;\r\n }\r\n\r\n var special = event.type !== \"keypress\" && jQuery.hotkeys.specialKeys[event.which],\r\n character = String.fromCharCode(event.which).toLowerCase(),\r\n modif = \"\",\r\n possible = {};\r\n\r\n jQuery.each([\"alt\", \"ctrl\", \"shift\"], function(index, specialKey) {\r\n\r\n if (event[specialKey + 'Key'] && special !== specialKey) {\r\n modif += specialKey + '+';\r\n }\r\n });\r\n\r\n // metaKey is triggered off ctrlKey erronously\r\n if (event.metaKey && !event.ctrlKey && special !== \"meta\") {\r\n modif += \"meta+\";\r\n }\r\n\r\n if (event.metaKey && special !== \"meta\" && modif.indexOf(\"alt+ctrl+shift+\") > -1) {\r\n modif = modif.replace(\"alt+ctrl+shift+\", \"hyper+\");\r\n }\r\n\r\n if (special) {\r\n possible[modif + special] = true;\r\n }\r\n else {\r\n possible[modif + character] = true;\r\n possible[modif + jQuery.hotkeys.shiftNums[character]] = true;\r\n\r\n // \"$\" can be triggered as \"Shift+4\" or \"Shift+$\" or just \"$\"\r\n if (modif === \"shift+\") {\r\n possible[jQuery.hotkeys.shiftNums[character]] = true;\r\n }\r\n }\r\n\r\n for (var i = 0, l = keys.length; i < l; i++) {\r\n if (possible[keys[i]]) {\r\n return origHandler.apply(this, arguments);\r\n }\r\n }\r\n };\r\n }\r\n\r\n jQuery.each([\"keydown\", \"keyup\", \"keypress\"], function() {\r\n jQuery.event.special[this] = {\r\n add: keyHandler\r\n };\r\n });\r\n\r\n})(jQuery || this.jQuery || window.jQuery);\r\n","/*!\n * jQuery JavaScript Library v3.7.1\n * https://jquery.com/\n *\n * Copyright OpenJS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2023-08-28T13:37Z\n */\n( function( global, factory ) {\n\n\t\"use strict\";\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket trac-14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n} )( typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n// enough that all such attempts are guarded in a try block.\n\"use strict\";\n\nvar arr = [];\n\nvar getProto = Object.getPrototypeOf;\n\nvar slice = arr.slice;\n\nvar flat = arr.flat ? function( array ) {\n\treturn arr.flat.call( array );\n} : function( array ) {\n\treturn arr.concat.apply( [], array );\n};\n\n\nvar push = arr.push;\n\nvar indexOf = arr.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar fnToString = hasOwn.toString;\n\nvar ObjectFunctionString = fnToString.call( Object );\n\nvar support = {};\n\nvar isFunction = function isFunction( obj ) {\n\n\t\t// Support: Chrome <=57, Firefox <=52\n\t\t// In some browsers, typeof returns \"function\" for HTML <object> elements\n\t\t// (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n\t\t// We don't want to classify *any* DOM node as a function.\n\t\t// Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5\n\t\t// Plus for old WebKit, typeof returns \"function\" for HTML collections\n\t\t// (e.g., `typeof document.getElementsByTagName(\"div\") === \"function\"`). (gh-4756)\n\t\treturn typeof obj === \"function\" && typeof obj.nodeType !== \"number\" &&\n\t\t\ttypeof obj.item !== \"function\";\n\t};\n\n\nvar isWindow = function isWindow( obj ) {\n\t\treturn obj != null && obj === obj.window;\n\t};\n\n\nvar document = window.document;\n\n\n\n\tvar preservedScriptAttributes = {\n\t\ttype: true,\n\t\tsrc: true,\n\t\tnonce: true,\n\t\tnoModule: true\n\t};\n\n\tfunction DOMEval( code, node, doc ) {\n\t\tdoc = doc || document;\n\n\t\tvar i, val,\n\t\t\tscript = doc.createElement( \"script\" );\n\n\t\tscript.text = code;\n\t\tif ( node ) {\n\t\t\tfor ( i in preservedScriptAttributes ) {\n\n\t\t\t\t// Support: Firefox 64+, Edge 18+\n\t\t\t\t// Some browsers don't support the \"nonce\" property on scripts.\n\t\t\t\t// On the other hand, just using `getAttribute` is not enough as\n\t\t\t\t// the `nonce` attribute is reset to an empty string whenever it\n\t\t\t\t// becomes browsing-context connected.\n\t\t\t\t// See https://github.com/whatwg/html/issues/2369\n\t\t\t\t// See https://html.spec.whatwg.org/#nonce-attributes\n\t\t\t\t// The `node.getAttribute` check was added for the sake of\n\t\t\t\t// `jQuery.globalEval` so that it can fake a nonce-containing node\n\t\t\t\t// via an object.\n\t\t\t\tval = node[ i ] || node.getAttribute && node.getAttribute( i );\n\t\t\t\tif ( val ) {\n\t\t\t\t\tscript.setAttribute( i, val );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tdoc.head.appendChild( script ).parentNode.removeChild( script );\n\t}\n\n\nfunction toType( obj ) {\n\tif ( obj == null ) {\n\t\treturn obj + \"\";\n\t}\n\n\t// Support: Android <=2.3 only (functionish RegExp)\n\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\ttypeof obj;\n}\n/* global Symbol */\n// Defining this global in .eslintrc.json would create a danger of using the global\n// unguarded in another place, it seems safer to define global only for this module\n\n\n\nvar version = \"3.7.1\",\n\n\trhtmlSuffix = /HTML$/i,\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\n\t\t// Return all the elements in a clean array\n\t\tif ( num == null ) {\n\t\t\treturn slice.call( this );\n\t\t}\n\n\t\t// Return just the one element from the set\n\t\treturn num < 0 ? this[ num + this.length ] : this[ num ];\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teven: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn ( i + 1 ) % 2;\n\t\t} ) );\n\t},\n\n\todd: function() {\n\t\treturn this.pushStack( jQuery.grep( this, function( _elem, i ) {\n\t\t\treturn i % 2;\n\t\t} ) );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: arr.sort,\n\tsplice: arr.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar options, name, src, copy, copyIsArray, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// Skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// Extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent Object.prototype pollution\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( name === \"__proto__\" || target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = Array.isArray( copy ) ) ) ) {\n\t\t\t\t\tsrc = target[ name ];\n\n\t\t\t\t\t// Ensure proper type for the source value\n\t\t\t\t\tif ( copyIsArray && !Array.isArray( src ) ) {\n\t\t\t\t\t\tclone = [];\n\t\t\t\t\t} else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) {\n\t\t\t\t\t\tclone = {};\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src;\n\t\t\t\t\t}\n\t\t\t\t\tcopyIsArray = false;\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\tisPlainObject: function( obj ) {\n\t\tvar proto, Ctor;\n\n\t\t// Detect obvious negatives\n\t\t// Use toString instead of jQuery.type to catch host objects\n\t\tif ( !obj || toString.call( obj ) !== \"[object Object]\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tproto = getProto( obj );\n\n\t\t// Objects with no prototype (e.g., `Object.create( null )`) are plain\n\t\tif ( !proto ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// Objects with prototype are plain iff they were constructed by a global Object function\n\t\tCtor = hasOwn.call( proto, \"constructor\" ) && proto.constructor;\n\t\treturn typeof Ctor === \"function\" && fnToString.call( Ctor ) === ObjectFunctionString;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\t// Evaluates a script in a provided context; falls back to the global one\n\t// if not specified.\n\tglobalEval: function( code, options, doc ) {\n\t\tDOMEval( code, { nonce: options && options.nonce }, doc );\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\n\t// Retrieve the text value of an array of DOM nodes\n\ttext: function( elem ) {\n\t\tvar node,\n\t\t\tret = \"\",\n\t\t\ti = 0,\n\t\t\tnodeType = elem.nodeType;\n\n\t\tif ( !nodeType ) {\n\n\t\t\t// If no nodeType, this is expected to be an array\n\t\t\twhile ( ( node = elem[ i++ ] ) ) {\n\n\t\t\t\t// Do not traverse comment nodes\n\t\t\t\tret += jQuery.text( node );\n\t\t\t}\n\t\t}\n\t\tif ( nodeType === 1 || nodeType === 11 ) {\n\t\t\treturn elem.textContent;\n\t\t}\n\t\tif ( nodeType === 9 ) {\n\t\t\treturn elem.documentElement.textContent;\n\t\t}\n\t\tif ( nodeType === 3 || nodeType === 4 ) {\n\t\t\treturn elem.nodeValue;\n\t\t}\n\n\t\t// Do not include comment or processing instruction nodes\n\n\t\treturn ret;\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\treturn arr == null ? -1 : indexOf.call( arr, elem, i );\n\t},\n\n\tisXMLDoc: function( elem ) {\n\t\tvar namespace = elem && elem.namespaceURI,\n\t\t\tdocElem = elem && ( elem.ownerDocument || elem ).documentElement;\n\n\t\t// Assume HTML when documentElement doesn't yet exist, such as inside\n\t\t// document fragments.\n\t\treturn !rhtmlSuffix.test( namespace || docElem && docElem.nodeName || \"HTML\" );\n\t},\n\n\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t// push.apply(_, arraylike) throws on ancient WebKit\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\tfor ( ; j < len; j++ ) {\n\t\t\tfirst[ i++ ] = second[ j ];\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn flat( ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\n\tfunction( _i, name ) {\n\t\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n\t} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: real iOS 8.2 only (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = toType( obj );\n\n\tif ( isFunction( obj ) || isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\n\n\nfunction nodeName( elem, name ) {\n\n\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\n}\nvar pop = arr.pop;\n\n\nvar sort = arr.sort;\n\n\nvar splice = arr.splice;\n\n\nvar whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\";\n\n\nvar rtrimCSS = new RegExp(\n\t\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\",\n\t\"g\"\n);\n\n\n\n\n// Note: an element does not contain itself\njQuery.contains = function( a, b ) {\n\tvar bup = b && b.parentNode;\n\n\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE doesn't have `contains` on SVG.\n\t\ta.contains ?\n\t\t\ta.contains( bup ) :\n\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t) );\n};\n\n\n\n\n// CSS string/identifier serialization\n// https://drafts.csswg.org/cssom/#common-serializing-idioms\nvar rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\x80-\\uFFFF\\w-]/g;\n\nfunction fcssescape( ch, asCodePoint ) {\n\tif ( asCodePoint ) {\n\n\t\t// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n\t\tif ( ch === \"\\0\" ) {\n\t\t\treturn \"\\uFFFD\";\n\t\t}\n\n\t\t// Control characters and (dependent upon position) numbers get escaped as code points\n\t\treturn ch.slice( 0, -1 ) + \"\\\\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + \" \";\n\t}\n\n\t// Other potentially-special ASCII characters get backslash-escaped\n\treturn \"\\\\\" + ch;\n}\n\njQuery.escapeSelector = function( sel ) {\n\treturn ( sel + \"\" ).replace( rcssescape, fcssescape );\n};\n\n\n\n\nvar preferredDoc = document,\n\tpushNative = push;\n\n( function() {\n\nvar i,\n\tExpr,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\tpush = pushNative,\n\n\t// Local document vars\n\tdocument,\n\tdocumentElement,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\tmatches,\n\n\t// Instance-specific data\n\texpando = jQuery.expando,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tnonnativeSelectorCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|\" +\n\t\t\"loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// https://www.w3.org/TR/css-syntax-3/#ident-token-diagram\n\tidentifier = \"(?:\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",\n\n\t// Attribute selectors: https://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" +\n\t\twhitespace + \"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trleadingCombinator = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" +\n\t\twhitespace + \"*\" ),\n\trdescend = new RegExp( whitespace + \"|>\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\tID: new RegExp( \"^#(\" + identifier + \")\" ),\n\t\tCLASS: new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\tTAG: new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\tATTR: new RegExp( \"^\" + attributes ),\n\t\tPSEUDO: new RegExp( \"^\" + pseudos ),\n\t\tCHILD: new RegExp(\n\t\t\t\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" +\n\t\t\t\twhitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" +\n\t\t\t\twhitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\tbool: new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\tneedsContext: new RegExp( \"^\" + whitespace +\n\t\t\t\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace +\n\t\t\t\"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\n\t// CSS escapes\n\t// https://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\[\\\\da-fA-F]{1,6}\" + whitespace +\n\t\t\"?|\\\\\\\\([^\\\\r\\\\n\\\\f])\", \"g\" ),\n\tfunescape = function( escape, nonHex ) {\n\t\tvar high = \"0x\" + escape.slice( 1 ) - 0x10000;\n\n\t\tif ( nonHex ) {\n\n\t\t\t// Strip the backslash prefix from a non-hex escape sequence\n\t\t\treturn nonHex;\n\t\t}\n\n\t\t// Replace a hexadecimal escape sequence with the encoded Unicode code point\n\t\t// Support: IE <=11+\n\t\t// For values outside the Basic Multilingual Plane (BMP), manually construct a\n\t\t// surrogate pair\n\t\treturn high < 0 ?\n\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes; see `setDocument`.\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE/Edge.\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t},\n\n\tinDisabledFieldset = addCombinator(\n\t\tfunction( elem ) {\n\t\t\treturn elem.disabled === true && nodeName( elem, \"fieldset\" );\n\t\t},\n\t\t{ dir: \"parentNode\", next: \"legend\" }\n\t);\n\n// Support: IE <=9 only\n// Accessing document.activeElement can throw unexpectedly\n// https://bugs.jquery.com/ticket/13393\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t( arr = slice.call( preferredDoc.childNodes ) ),\n\t\tpreferredDoc.childNodes\n\t);\n\n\t// Support: Android <=4.0\n\t// Detect silently failing push.apply\n\t// eslint-disable-next-line no-unused-expressions\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = {\n\t\tapply: function( target, els ) {\n\t\t\tpushNative.apply( target, slice.call( els ) );\n\t\t},\n\t\tcall: function( target ) {\n\t\t\tpushNative.apply( target, slice.call( arguments, 1 ) );\n\t\t}\n\t};\n}\n\nfunction find( selector, context, results, seed ) {\n\tvar m, i, elem, nid, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\t\tsetDocument( context );\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( ( m = match[ 1 ] ) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( ( elem = context.getElementById( m ) ) ) {\n\n\t\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE 9 only\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && ( elem = newContext.getElementById( m ) ) &&\n\t\t\t\t\t\t\tfind.contains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[ 2 ] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( ( m = match[ 3 ] ) && context.getElementsByClassName ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( !nonnativeSelectorCache[ selector + \" \" ] &&\n\t\t\t\t( !rbuggyQSA || !rbuggyQSA.test( selector ) ) ) {\n\n\t\t\t\tnewSelector = selector;\n\t\t\t\tnewContext = context;\n\n\t\t\t\t// qSA considers elements outside a scoping root when evaluating child or\n\t\t\t\t// descendant combinators, which is not what we want.\n\t\t\t\t// In such cases, we work around the behavior by prefixing every selector in the\n\t\t\t\t// list with an ID selector referencing the scope context.\n\t\t\t\t// The technique has to be used as well when a leading combinator is used\n\t\t\t\t// as such selectors are not recognized by querySelectorAll.\n\t\t\t\t// Thanks to Andrew Dupont for this technique.\n\t\t\t\tif ( nodeType === 1 &&\n\t\t\t\t\t( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) {\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\n\t\t\t\t\t// We can use :scope instead of the ID hack if the browser\n\t\t\t\t\t// supports it & if we're not changing the context.\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when\n\t\t\t\t\t// strict-comparing two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( newContext != context || !support.scope ) {\n\n\t\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\t\tif ( ( nid = context.getAttribute( \"id\" ) ) ) {\n\t\t\t\t\t\t\tnid = jQuery.escapeSelector( nid );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcontext.setAttribute( \"id\", ( nid = expando ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[ i ] = ( nid ? \"#\" + nid : \":scope\" ) + \" \" +\n\t\t\t\t\t\t\ttoSelector( groups[ i ] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t);\n\t\t\t\t\treturn results;\n\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\tnonnativeSelectorCache( selector, true );\n\t\t\t\t} finally {\n\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// All others\n\treturn select( selector.replace( rtrimCSS, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\n\t\t// Use (key + \" \") to avoid collision with native prototype properties\n\t\t// (see https://github.com/jquery/sizzle/issues/157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn ( cache[ key + \" \" ] = value );\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by jQuery selector module\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created element and returns a boolean result\n */\nfunction assert( fn ) {\n\tvar el = document.createElement( \"fieldset\" );\n\n\ttry {\n\t\treturn !!fn( el );\n\t} catch ( e ) {\n\t\treturn false;\n\t} finally {\n\n\t\t// Remove from its parent by default\n\t\tif ( el.parentNode ) {\n\t\t\tel.parentNode.removeChild( el );\n\t\t}\n\n\t\t// release memory in IE\n\t\tel = null;\n\t}\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn nodeName( elem, \"input\" ) && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\treturn ( nodeName( elem, \"input\" ) || nodeName( elem, \"button\" ) ) &&\n\t\t\telem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for :enabled/:disabled\n * @param {Boolean} disabled true for :disabled; false for :enabled\n */\nfunction createDisabledPseudo( disabled ) {\n\n\t// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n\treturn function( elem ) {\n\n\t\t// Only certain elements can match :enabled or :disabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n\t\t// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n\t\tif ( \"form\" in elem ) {\n\n\t\t\t// Check for inherited disabledness on relevant non-disabled elements:\n\t\t\t// * listed form-associated elements in a disabled fieldset\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#category-listed\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n\t\t\t// * option elements in a disabled optgroup\n\t\t\t// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n\t\t\t// All such elements have a \"form\" property.\n\t\t\tif ( elem.parentNode && elem.disabled === false ) {\n\n\t\t\t\t// Option elements defer to a parent optgroup if present\n\t\t\t\tif ( \"label\" in elem ) {\n\t\t\t\t\tif ( \"label\" in elem.parentNode ) {\n\t\t\t\t\t\treturn elem.parentNode.disabled === disabled;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn elem.disabled === disabled;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Support: IE 6 - 11+\n\t\t\t\t// Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\t\t\t\treturn elem.isDisabled === disabled ||\n\n\t\t\t\t\t// Where there is no isDisabled, check manually\n\t\t\t\t\telem.isDisabled !== !disabled &&\n\t\t\t\t\t\tinDisabledFieldset( elem ) === disabled;\n\t\t\t}\n\n\t\t\treturn elem.disabled === disabled;\n\n\t\t// Try to winnow out elements that can't be disabled before trusting the disabled property.\n\t\t// Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n\t\t// even exist on them, let alone have a boolean value.\n\t\t} else if ( \"label\" in elem ) {\n\t\t\treturn elem.disabled === disabled;\n\t\t}\n\n\t\t// Remaining elements are neither :enabled nor :disabled\n\t\treturn false;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction( function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction( function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ ( j = matchIndexes[ i ] ) ] ) {\n\t\t\t\t\tseed[ j ] = !( matches[ j ] = seed[ j ] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t} );\n}\n\n/**\n * Checks a node for validity as a jQuery selector context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [node] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nfunction setDocument( node ) {\n\tvar subWindow,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocumentElement = document.documentElement;\n\tdocumentIsHTML = !jQuery.isXMLDoc( document );\n\n\t// Support: iOS 7 only, IE 9 - 11+\n\t// Older browsers didn't support unprefixed `matches`.\n\tmatches = documentElement.matches ||\n\t\tdocumentElement.webkitMatchesSelector ||\n\t\tdocumentElement.msMatchesSelector;\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// Accessing iframe documents after unload throws \"permission denied\" errors\n\t// (see trac-13936).\n\t// Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`,\n\t// all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well.\n\tif ( documentElement.msMatchesSelector &&\n\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tpreferredDoc != document &&\n\t\t( subWindow = document.defaultView ) && subWindow.top !== subWindow ) {\n\n\t\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t\tsubWindow.addEventListener( \"unload\", unloadHandler );\n\t}\n\n\t// Support: IE <10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programmatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert( function( el ) {\n\t\tdocumentElement.appendChild( el ).id = jQuery.expando;\n\t\treturn !document.getElementsByName ||\n\t\t\t!document.getElementsByName( jQuery.expando ).length;\n\t} );\n\n\t// Support: IE 9 only\n\t// Check to see if it's possible to do matchesSelector\n\t// on a disconnected node.\n\tsupport.disconnectedMatch = assert( function( el ) {\n\t\treturn matches.call( el, \"*\" );\n\t} );\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+\n\t// IE/Edge don't support the :scope pseudo-class.\n\tsupport.scope = assert( function() {\n\t\treturn document.querySelectorAll( \":scope\" );\n\t} );\n\n\t// Support: Chrome 105 - 111 only, Safari 15.4 - 16.3 only\n\t// Make sure the `:has()` argument is parsed unforgivingly.\n\t// We include `*` in the test to detect buggy implementations that are\n\t// _selectively_ forgiving (specifically when the list includes at least\n\t// one valid selector).\n\t// Note that we treat complete lack of support for `:has()` as if it were\n\t// spec-compliant support, which is fine because use of `:has()` in such\n\t// environments will fail in the qSA path and fall back to jQuery traversal\n\t// anyway.\n\tsupport.cssHas = assert( function() {\n\t\ttry {\n\t\t\tdocument.querySelector( \":has(*,:jqfake)\" );\n\t\t\treturn false;\n\t\t} catch ( e ) {\n\t\t\treturn true;\n\t\t}\n\t} );\n\n\t// ID filter and find\n\tif ( support.getById ) {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"id\" ) === attrId;\n\t\t\t};\n\t\t};\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar elem = context.getElementById( id );\n\t\t\t\treturn elem ? [ elem ] : [];\n\t\t\t}\n\t\t};\n\t} else {\n\t\tExpr.filter.ID = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode( \"id\" );\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\n\t\t// Support: IE 6 - 7 only\n\t\t// getElementById is not reliable as a find shortcut\n\t\tExpr.find.ID = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar node, i, elems,\n\t\t\t\t\telem = context.getElementById( id );\n\n\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t// Verify the id attribute\n\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Fall back on getElementsByName\n\t\t\t\t\telems = context.getElementsByName( id );\n\t\t\t\t\ti = 0;\n\t\t\t\t\twhile ( ( elem = elems[ i++ ] ) ) {\n\t\t\t\t\t\tnode = elem.getAttributeNode( \"id\" );\n\t\t\t\t\t\tif ( node && node.value === id ) {\n\t\t\t\t\t\t\treturn [ elem ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\t\t\t}\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find.TAG = function( tag, context ) {\n\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t// DocumentFragment nodes don't have gEBTN\n\t\t} else {\n\t\t\treturn context.querySelectorAll( tag );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find.CLASS = function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\trbuggyQSA = [];\n\n\t// Build QSA regex\n\t// Regex strategy adopted from Diego Perini\n\tassert( function( el ) {\n\n\t\tvar input;\n\n\t\tdocumentElement.appendChild( el ).innerHTML =\n\t\t\t\"<a id='\" + expando + \"' href='' disabled='disabled'></a>\" +\n\t\t\t\"<select id='\" + expando + \"-\\r\\\\' disabled='disabled'>\" +\n\t\t\t\"<option selected=''></option></select>\";\n\n\t\t// Support: iOS <=7 - 8 only\n\t\t// Boolean attributes and \"value\" are not treated correctly in some XML documents\n\t\tif ( !el.querySelectorAll( \"[selected]\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t}\n\n\t\t// Support: iOS <=7 - 8 only\n\t\tif ( !el.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\trbuggyQSA.push( \"~=\" );\n\t\t}\n\n\t\t// Support: iOS 8 only\n\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t// In-page `selector#id sibling-combinator selector` fails\n\t\tif ( !el.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\trbuggyQSA.push( \".#.+[+~]\" );\n\t\t}\n\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tif ( !el.querySelectorAll( \":checked\" ).length ) {\n\t\t\trbuggyQSA.push( \":checked\" );\n\t\t}\n\n\t\t// Support: Windows 8 Native Apps\n\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\tel.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t// Support: IE 9 - 11+\n\t\t// IE's :disabled selector does not pick up the children of disabled fieldsets\n\t\t// Support: Chrome <=105+, Firefox <=104+, Safari <=15.4+\n\t\t// In some of the document kinds, these selectors wouldn't work natively.\n\t\t// This is probably OK but for backwards compatibility we want to maintain\n\t\t// handling them through jQuery traversal in jQuery 3.x.\n\t\tdocumentElement.appendChild( el ).disabled = true;\n\t\tif ( el.querySelectorAll( \":disabled\" ).length !== 2 ) {\n\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t}\n\n\t\t// Support: IE 11+, Edge 15 - 18+\n\t\t// IE 11/Edge don't find elements on a `[name='']` query in some cases.\n\t\t// Adding a temporary attribute to the document before the selection works\n\t\t// around the issue.\n\t\t// Interestingly, IE 10 & older don't seem to have the issue.\n\t\tinput = document.createElement( \"input\" );\n\t\tinput.setAttribute( \"name\", \"\" );\n\t\tel.appendChild( input );\n\t\tif ( !el.querySelectorAll( \"[name='']\" ).length ) {\n\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*name\" + whitespace + \"*=\" +\n\t\t\t\twhitespace + \"*(?:''|\\\"\\\")\" );\n\t\t}\n\t} );\n\n\tif ( !support.cssHas ) {\n\n\t\t// Support: Chrome 105 - 110+, Safari 15.4 - 16.3+\n\t\t// Our regular `try-catch` mechanism fails to detect natively-unsupported\n\t\t// pseudo-classes inside `:has()` (such as `:has(:contains(\"Foo\"))`)\n\t\t// in browsers that parse the `:has()` argument as a forgiving selector list.\n\t\t// https://drafts.csswg.org/selectors/#relational now requires the argument\n\t\t// to be parsed unforgivingly, but browsers have not yet fully adjusted.\n\t\trbuggyQSA.push( \":has\" );\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( \"|\" ) );\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = function( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t// two documents; shallow comparisons work.\n\t\t// eslint-disable-next-line eqeqeq\n\t\tcompare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( a === document || a.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, a ) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( b === document || b.ownerDocument == preferredDoc &&\n\t\t\t\tfind.contains( preferredDoc, b ) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t};\n\n\treturn document;\n}\n\nfind.matches = function( expr, elements ) {\n\treturn find( expr, null, null, elements );\n};\n\nfind.matchesSelector = function( elem, expr ) {\n\tsetDocument( elem );\n\n\tif ( documentIsHTML &&\n\t\t!nonnativeSelectorCache[ expr + \" \" ] &&\n\t\t( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\tnonnativeSelectorCache( expr, true );\n\t\t}\n\t}\n\n\treturn find( expr, document, null, [ elem ] ).length > 0;\n};\n\nfind.contains = function( context, elem ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( context.ownerDocument || context ) != document ) {\n\t\tsetDocument( context );\n\t}\n\treturn jQuery.contains( context, elem );\n};\n\n\nfind.attr = function( elem, name ) {\n\n\t// Set document vars if needed\n\t// Support: IE 11+, Edge 17 - 18+\n\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t// two documents; shallow comparisons work.\n\t// eslint-disable-next-line eqeqeq\n\tif ( ( elem.ownerDocument || elem ) != document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\n\t\t// Don't get fooled by Object.prototype properties (see trac-13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\tif ( val !== undefined ) {\n\t\treturn val;\n\t}\n\n\treturn elem.getAttribute( name );\n};\n\nfind.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\njQuery.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\t//\n\t// Support: Android <=4.0+\n\t// Testing for detecting duplicates is unpredictable so instead assume we can't\n\t// depend on duplicate detection in all browsers without a stable sort.\n\thasDuplicate = !support.sortStable;\n\tsortInput = !support.sortStable && slice.call( results, 0 );\n\tsort.call( results, sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( ( elem = results[ i++ ] ) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tsplice.call( results, duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\njQuery.fn.uniqueSort = function() {\n\treturn this.pushStack( jQuery.uniqueSort( slice.apply( this ) ) );\n};\n\nExpr = jQuery.expr = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\tATTR: function( match ) {\n\t\t\tmatch[ 1 ] = match[ 1 ].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[ 3 ] = ( match[ 3 ] || match[ 4 ] || match[ 5 ] || \"\" )\n\t\t\t\t.replace( runescape, funescape );\n\n\t\t\tif ( match[ 2 ] === \"~=\" ) {\n\t\t\t\tmatch[ 3 ] = \" \" + match[ 3 ] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\tCHILD: function( match ) {\n\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[ 1 ] = match[ 1 ].toLowerCase();\n\n\t\t\tif ( match[ 1 ].slice( 0, 3 ) === \"nth\" ) {\n\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[ 3 ] ) {\n\t\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[ 4 ] = +( match[ 4 ] ?\n\t\t\t\t\tmatch[ 5 ] + ( match[ 6 ] || 1 ) :\n\t\t\t\t\t2 * ( match[ 3 ] === \"even\" || match[ 3 ] === \"odd\" )\n\t\t\t\t);\n\t\t\t\tmatch[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[ 3 ] ) {\n\t\t\t\tfind.error( match[ 0 ] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\tPSEUDO: function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[ 6 ] && match[ 2 ];\n\n\t\t\tif ( matchExpr.CHILD.test( match[ 0 ] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[ 3 ] ) {\n\t\t\t\tmatch[ 2 ] = match[ 4 ] || match[ 5 ] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t( excess = tokenize( unquoted, true ) ) &&\n\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t( excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length ) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[ 0 ] = match[ 0 ].slice( 0, excess );\n\t\t\t\tmatch[ 2 ] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\tTAG: function( nodeNameSelector ) {\n\t\t\tvar expectedNodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() {\n\t\t\t\t\treturn true;\n\t\t\t\t} :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn nodeName( elem, expectedNodeName );\n\t\t\t\t};\n\t\t},\n\n\t\tCLASS: function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t( pattern = new RegExp( \"(^|\" + whitespace + \")\" + className +\n\t\t\t\t\t\"(\" + whitespace + \"|$)\" ) ) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test(\n\t\t\t\t\t\ttypeof elem.className === \"string\" && elem.className ||\n\t\t\t\t\t\t\ttypeof elem.getAttribute !== \"undefined\" &&\n\t\t\t\t\t\t\t\telem.getAttribute( \"class\" ) ||\n\t\t\t\t\t\t\t\"\"\n\t\t\t\t\t);\n\t\t\t\t} );\n\t\t},\n\n\t\tATTR: function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = find.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\tif ( operator === \"=\" ) {\n\t\t\t\t\treturn result === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"!=\" ) {\n\t\t\t\t\treturn result !== check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"^=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) === 0;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"*=\" ) {\n\t\t\t\t\treturn check && result.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"$=\" ) {\n\t\t\t\t\treturn check && result.slice( -check.length ) === check;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"~=\" ) {\n\t\t\t\t\treturn ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" )\n\t\t\t\t\t\t.indexOf( check ) > -1;\n\t\t\t\t}\n\t\t\t\tif ( operator === \"|=\" ) {\n\t\t\t\t\treturn result === check || result.slice( 0, check.length + 1 ) === check + \"-\";\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t};\n\t\t},\n\n\t\tCHILD: function( type, what, _argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tvar cache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( ( node = node[ dir ] ) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\t\t\t\t\t\t\touterCache = parent[ expando ] || ( parent[ expando ] = {} );\n\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\t\t\t\t\t\t\t\tcache = outerCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( ( node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t( diff = nodeIndex = 0 ) || start.pop() ) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnodeName( node, name ) :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t( node[ expando ] = {} );\n\t\t\t\t\t\t\t\t\t\t\touterCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\tPSEUDO: function( pseudo, argument ) {\n\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// https://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tfind.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as jQuery does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction( function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf.call( seed, matched[ i ] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} ) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\n\t\t// Potentially complex pseudos\n\t\tnot: markFunction( function( selector ) {\n\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrimCSS, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction( function( seed, matches, _context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\t\t\t\t\tseed[ i ] = !( matches[ i ] = elem );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} ) :\n\t\t\t\tfunction( elem, _context, xml ) {\n\t\t\t\t\tinput[ 0 ] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\n\t\t\t\t\t// Don't keep the element\n\t\t\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\t\t\tinput[ 0 ] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t} ),\n\n\t\thas: markFunction( function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn find( selector, elem ).length > 0;\n\t\t\t};\n\t\t} ),\n\n\t\tcontains: markFunction( function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || jQuery.text( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t} ),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// https://www.w3.org/TR/selectors/#lang-pseudo\n\t\tlang: markFunction( function( lang ) {\n\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test( lang || \"\" ) ) {\n\t\t\t\tfind.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( ( elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute( \"xml:lang\" ) || elem.getAttribute( \"lang\" ) ) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( ( elem = elem.parentNode ) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t} ),\n\n\t\t// Miscellaneous\n\t\ttarget: function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\troot: function( elem ) {\n\t\t\treturn elem === documentElement;\n\t\t},\n\n\t\tfocus: function( elem ) {\n\t\t\treturn elem === safeActiveElement() &&\n\t\t\t\tdocument.hasFocus() &&\n\t\t\t\t!!( elem.type || elem.href || ~elem.tabIndex );\n\t\t},\n\n\t\t// Boolean properties\n\t\tenabled: createDisabledPseudo( false ),\n\t\tdisabled: createDisabledPseudo( true ),\n\n\t\tchecked: function( elem ) {\n\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// https://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\treturn ( nodeName( elem, \"input\" ) && !!elem.checked ) ||\n\t\t\t\t( nodeName( elem, \"option\" ) && !!elem.selected );\n\t\t},\n\n\t\tselected: function( elem ) {\n\n\t\t\t// Support: IE <=11+\n\t\t\t// Accessing the selectedIndex property\n\t\t\t// forces the browser to treat the default option as\n\t\t\t// selected when in an optgroup.\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\t// eslint-disable-next-line no-unused-expressions\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\tempty: function( elem ) {\n\n\t\t\t// https://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t// but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\tparent: function( elem ) {\n\t\t\treturn !Expr.pseudos.empty( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\theader: function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\tinput: function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\tbutton: function( elem ) {\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"button\" ||\n\t\t\t\tnodeName( elem, \"button\" );\n\t\t},\n\n\t\ttext: function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn nodeName( elem, \"input\" ) && elem.type === \"text\" &&\n\n\t\t\t\t// Support: IE <10 only\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear\n\t\t\t\t// with elem.type === \"text\"\n\t\t\t\t( ( attr = elem.getAttribute( \"type\" ) ) == null ||\n\t\t\t\t\tattr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\tfirst: createPositionalPseudo( function() {\n\t\t\treturn [ 0 ];\n\t\t} ),\n\n\t\tlast: createPositionalPseudo( function( _matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t} ),\n\n\t\teq: createPositionalPseudo( function( _matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t} ),\n\n\t\teven: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\todd: createPositionalPseudo( function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tlt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i;\n\n\t\t\tif ( argument < 0 ) {\n\t\t\t\ti = argument + length;\n\t\t\t} else if ( argument > length ) {\n\t\t\t\ti = length;\n\t\t\t} else {\n\t\t\t\ti = argument;\n\t\t\t}\n\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} ),\n\n\t\tgt: createPositionalPseudo( function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t} )\n\t}\n};\n\nExpr.pseudos.nth = Expr.pseudos.eq;\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\nfunction tokenize( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || ( match = rcomma.exec( soFar ) ) ) {\n\t\t\tif ( match ) {\n\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[ 0 ].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( ( tokens = [] ) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( ( match = rleadingCombinator.exec( soFar ) ) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push( {\n\t\t\t\tvalue: matched,\n\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[ 0 ].replace( rtrimCSS, \" \" )\n\t\t\t} );\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] ||\n\t\t\t\t( match = preFilters[ type ]( match ) ) ) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push( {\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t} );\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\tif ( parseOnly ) {\n\t\treturn soFar.length;\n\t}\n\n\treturn soFar ?\n\t\tfind.error( selector ) :\n\n\t\t// Cache the tokens\n\t\ttokenCache( selector, groups ).slice( 0 );\n}\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[ i ].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tskip = combinator.next,\n\t\tkey = skip || dir,\n\t\tcheckNonElements = base && key === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( ( elem = elem[ dir ] ) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || ( elem[ expando ] = {} );\n\n\t\t\t\t\t\tif ( skip && nodeName( elem, skip ) ) {\n\t\t\t\t\t\t\telem = elem[ dir ] || elem;\n\t\t\t\t\t\t} else if ( ( oldCache = outerCache[ key ] ) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn ( newCache[ 2 ] = oldCache[ 2 ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\touterCache[ key ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[ i ]( elem, context, xml ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t} :\n\t\tmatchers[ 0 ];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tfind( selector, contexts[ i ], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( elem = unmatched[ i ] ) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction( function( seed, results, context, xml ) {\n\t\tvar temp, i, elem, matcherOut,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed ||\n\t\t\t\tmultipleContexts( selector || \"*\",\n\t\t\t\t\tcontext.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems;\n\n\t\tif ( matcher ) {\n\n\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter\n\t\t\t// or preexisting results,\n\t\t\tmatcherOut = postFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t[] :\n\n\t\t\t\t// ...otherwise use results directly\n\t\t\t\tresults;\n\n\t\t\t// Find primary matches\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t} else {\n\t\t\tmatcherOut = matcherIn;\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( ( elem = temp[ i ] ) ) {\n\t\t\t\t\tmatcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) ) {\n\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( ( matcherIn[ i ] = elem ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, ( matcherOut = [] ), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( ( elem = matcherOut[ i ] ) &&\n\t\t\t\t\t\t( temp = postFinder ? indexOf.call( seed, elem ) : preMap[ i ] ) > -1 ) {\n\n\t\t\t\t\t\tseed[ temp ] = !( results[ temp ] = elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[ 0 ].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[ \" \" ],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\n\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t// two documents; shallow comparisons work.\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tvar ret = ( !leadingRelative && ( xml || context != outermostContext ) ) || (\n\t\t\t\t( checkContext = context ).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\n\t\t\t// Avoid hanging onto element\n\t\t\t// (see https://github.com/jquery/sizzle/issues/299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) {\n\t\t\tmatchers = [ addCombinator( elementMatcher( matchers ), matcher ) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[ j ].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 )\n\t\t\t\t\t\t\t.concat( { value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" } )\n\t\t\t\t\t).replace( rtrimCSS, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find.TAG( \"*\", outermost ),\n\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\n\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\toutermostContext = context == document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: iOS <=7 - 9 only\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching\n\t\t\t// elements by id. (see trac-14142)\n\t\t\tfor ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\n\t\t\t\t\t// Support: IE 11+, Edge 17 - 18+\n\t\t\t\t\t// IE/Edge sometimes throw a \"Permission denied\" error when strict-comparing\n\t\t\t\t\t// two documents; shallow comparisons work.\n\t\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\t\tif ( !context && elem.ownerDocument != document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( ( matcher = elementMatchers[ j++ ] ) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml ) ) {\n\t\t\t\t\t\t\tpush.call( results, elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( ( elem = !matcher && elem ) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( ( matcher = setMatchers[ j++ ] ) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !( unmatched[ i ] || setMatched[ i ] ) ) {\n\t\t\t\t\t\t\t\tsetMatched[ i ] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tjQuery.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\nfunction compile( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[ i ] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector,\n\t\t\tmatcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n}\n\n/**\n * A low-level selection function that works with jQuery's compiled\n * selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n * selector function built with jQuery selector compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nfunction select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( ( selector = compiled.selector || selector ) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[ 0 ] = match[ 0 ].slice( 0 );\n\t\tif ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === \"ID\" &&\n\t\t\t\tcontext.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) {\n\n\t\t\tcontext = ( Expr.find.ID(\n\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\tcontext\n\t\t\t) || [] )[ 0 ];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr.needsContext.test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[ i ];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ ( type = token.type ) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( ( find = Expr.find[ type ] ) ) {\n\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( ( seed = find(\n\t\t\t\t\ttoken.matches[ 0 ].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[ 0 ].type ) &&\n\t\t\t\t\t\ttestContext( context.parentNode ) || context\n\t\t\t\t) ) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n}\n\n// One-time assignments\n\n// Support: Android <=4.0 - 4.1+\n// Sort stability\nsupport.sortStable = expando.split( \"\" ).sort( sortOrder ).join( \"\" ) === expando;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Android <=4.0 - 4.1+\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert( function( el ) {\n\n\t// Should return 1, but returns 4 (following)\n\treturn el.compareDocumentPosition( document.createElement( \"fieldset\" ) ) & 1;\n} );\n\njQuery.find = find;\n\n// Deprecated\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.unique = jQuery.uniqueSort;\n\n// These have always been private, but they used to be documented as part of\n// Sizzle so let's maintain them for now for backwards compatibility purposes.\nfind.compile = compile;\nfind.select = select;\nfind.setDocument = setDocument;\nfind.tokenize = tokenize;\n\nfind.escape = jQuery.escapeSelector;\nfind.getText = jQuery.text;\nfind.isXML = jQuery.isXMLDoc;\nfind.selectors = jQuery.expr;\nfind.support = jQuery.support;\nfind.uniqueSort = jQuery.uniqueSort;\n\n\t/* eslint-enable */\n\n} )();\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i );\n\n\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\t}\n\n\t// Single element\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\t}\n\n\t// Arraylike of elements (jQuery, arguments, Array)\n\tif ( typeof qualifier !== \"string\" ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( indexOf.call( qualifier, elem ) > -1 ) !== not;\n\t\t} );\n\t}\n\n\t// Filtered directly for both simple and complex selectors\n\treturn jQuery.filter( qualifier, elements, not );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\tif ( elems.length === 1 && elem.nodeType === 1 ) {\n\t\treturn jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [];\n\t}\n\n\treturn jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\treturn elem.nodeType === 1;\n\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i, ret,\n\t\t\tlen = this.length,\n\t\t\tself = this;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tret = this.pushStack( [] );\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\treturn len > 1 ? jQuery.uniqueSort( ret ) : ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (trac-9521)\n\t// Strict HTML recognition (trac-11290: must start with <)\n\t// Shortcut simple #id case for speed\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// Option to run scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\tif ( elem ) {\n\n\t\t\t\t\t\t// Inject the element directly into the jQuery object\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( isFunction( selector ) ) {\n\t\t\treturn root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// Methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar targets = jQuery( target, this ),\n\t\t\tl = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\ttargets = typeof selectors !== \"string\" && jQuery( selectors );\n\n\t\t// Positional selectors never match, since there's no _selection_ context\n\t\tif ( !rneedsContext.test( selectors ) ) {\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t\t// Always skip document fragments\n\t\t\t\t\tif ( cur.nodeType < 11 && ( targets ?\n\t\t\t\t\t\ttargets.index( cur ) > -1 :\n\n\t\t\t\t\t\t// Don't pass non-elements to jQuery#find\n\t\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within the set\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// Index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn indexOf.call( jQuery( elem ), this[ 0 ] );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn indexOf.call( this,\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem\n\t\t);\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\twhile ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, _i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\tif ( elem.contentDocument != null &&\n\n\t\t\t// Support: IE 11+\n\t\t\t// <object> elements with no `data` attribute has an object\n\t\t\t// `contentDocument` with a `null` prototype.\n\t\t\tgetProto( elem.contentDocument ) ) {\n\n\t\t\treturn elem.contentDocument;\n\t\t}\n\n\t\t// Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n\t\t// Treat the template element as a regular one in browsers that\n\t\t// don't support it.\n\t\tif ( nodeName( elem, \"template\" ) ) {\n\t\t\telem = elem.content || elem;\n\t\t}\n\n\t\treturn jQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar matched = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tmatched = jQuery.filter( selector, matched );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( matched );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tmatched.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched );\n\t};\n} );\nvar rnothtmlwhite = ( /[^\\x20\\t\\r\\n\\f]+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = locked || options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && toType( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory && !firing ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\nfunction Identity( v ) {\n\treturn v;\n}\nfunction Thrower( ex ) {\n\tthrow ex;\n}\n\nfunction adoptValue( value, resolve, reject, noValue ) {\n\tvar method;\n\n\ttry {\n\n\t\t// Check for promise aspect first to privilege synchronous behavior\n\t\tif ( value && isFunction( ( method = value.promise ) ) ) {\n\t\t\tmethod.call( value ).done( resolve ).fail( reject );\n\n\t\t// Other thenables\n\t\t} else if ( value && isFunction( ( method = value.then ) ) ) {\n\t\t\tmethod.call( value, resolve, reject );\n\n\t\t// Other non-thenables\n\t\t} else {\n\n\t\t\t// Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n\t\t\t// * false: [ value ].slice( 0 ) => resolve( value )\n\t\t\t// * true: [ value ].slice( 1 ) => resolve()\n\t\t\tresolve.apply( undefined, [ value ].slice( noValue ) );\n\t\t}\n\n\t// For Promises/A+, convert exceptions into rejections\n\t// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n\t// Deferred#then to conditionally suppress rejection.\n\t} catch ( value ) {\n\n\t\t// Support: Android 4.0 only\n\t\t// Strict mode functions invoked without .call/.apply get global-object context\n\t\treject.apply( undefined, [ value ] );\n\t}\n}\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, callbacks,\n\t\t\t\t// ... .then handlers, argument index, [final state]\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"memory\" ), 2 ],\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 0, \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ),\n\t\t\t\t\tjQuery.Callbacks( \"once memory\" ), 1, \"rejected\" ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\t\"catch\": function( fn ) {\n\t\t\t\t\treturn promise.then( null, fn );\n\t\t\t\t},\n\n\t\t\t\t// Keep pipe for back-compat\n\t\t\t\tpipe: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( _i, tuple ) {\n\n\t\t\t\t\t\t\t// Map tuples (progress, done, fail) to arguments (done, fail, progress)\n\t\t\t\t\t\t\tvar fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];\n\n\t\t\t\t\t\t\t// deferred.progress(function() { bind to newDefer or newDefer.notify })\n\t\t\t\t\t\t\t// deferred.done(function() { bind to newDefer or newDefer.resolve })\n\t\t\t\t\t\t\t// deferred.fail(function() { bind to newDefer or newDefer.reject })\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\t\t\t\tthen: function( onFulfilled, onRejected, onProgress ) {\n\t\t\t\t\tvar maxDepth = 0;\n\t\t\t\t\tfunction resolve( depth, deferred, handler, special ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\tvar that = this,\n\t\t\t\t\t\t\t\targs = arguments,\n\t\t\t\t\t\t\t\tmightThrow = function() {\n\t\t\t\t\t\t\t\t\tvar returned, then;\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.3\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-59\n\t\t\t\t\t\t\t\t\t// Ignore double-resolution attempts\n\t\t\t\t\t\t\t\t\tif ( depth < maxDepth ) {\n\t\t\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturned = handler.apply( that, args );\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.1\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-48\n\t\t\t\t\t\t\t\t\tif ( returned === deferred.promise() ) {\n\t\t\t\t\t\t\t\t\t\tthrow new TypeError( \"Thenable self-resolution\" );\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Support: Promises/A+ sections 2.3.3.1, 3.5\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-54\n\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-75\n\t\t\t\t\t\t\t\t\t// Retrieve `then` only once\n\t\t\t\t\t\t\t\t\tthen = returned &&\n\n\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.4\n\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-64\n\t\t\t\t\t\t\t\t\t\t// Only check objects and functions for thenability\n\t\t\t\t\t\t\t\t\t\t( typeof returned === \"object\" ||\n\t\t\t\t\t\t\t\t\t\t\ttypeof returned === \"function\" ) &&\n\t\t\t\t\t\t\t\t\t\treturned.then;\n\n\t\t\t\t\t\t\t\t\t// Handle a returned thenable\n\t\t\t\t\t\t\t\t\tif ( isFunction( then ) ) {\n\n\t\t\t\t\t\t\t\t\t\t// Special processors (notify) just wait for resolution\n\t\t\t\t\t\t\t\t\t\tif ( special ) {\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special )\n\t\t\t\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\t\t\t// Normal processors (resolve) also hook into progress\n\t\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t\t// ...and disregard older resolution values\n\t\t\t\t\t\t\t\t\t\t\tmaxDepth++;\n\n\t\t\t\t\t\t\t\t\t\t\tthen.call(\n\t\t\t\t\t\t\t\t\t\t\t\treturned,\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Thrower, special ),\n\t\t\t\t\t\t\t\t\t\t\t\tresolve( maxDepth, deferred, Identity,\n\t\t\t\t\t\t\t\t\t\t\t\t\tdeferred.notifyWith )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Handle all other returned values\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\tif ( handler !== Identity ) {\n\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\targs = [ returned ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Process the value(s)\n\t\t\t\t\t\t\t\t\t\t// Default process is resolve\n\t\t\t\t\t\t\t\t\t\t( special || deferred.resolveWith )( that, args );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t},\n\n\t\t\t\t\t\t\t\t// Only normal processors (resolve) catch and reject exceptions\n\t\t\t\t\t\t\t\tprocess = special ?\n\t\t\t\t\t\t\t\t\tmightThrow :\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\t\tmightThrow();\n\t\t\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t\t\tif ( jQuery.Deferred.exceptionHook ) {\n\t\t\t\t\t\t\t\t\t\t\t\tjQuery.Deferred.exceptionHook( e,\n\t\t\t\t\t\t\t\t\t\t\t\t\tprocess.error );\n\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.4.1\n\t\t\t\t\t\t\t\t\t\t\t// https://promisesaplus.com/#point-61\n\t\t\t\t\t\t\t\t\t\t\t// Ignore post-resolution exceptions\n\t\t\t\t\t\t\t\t\t\t\tif ( depth + 1 >= maxDepth ) {\n\n\t\t\t\t\t\t\t\t\t\t\t\t// Only substitute handlers pass on context\n\t\t\t\t\t\t\t\t\t\t\t\t// and multiple values (non-spec behavior)\n\t\t\t\t\t\t\t\t\t\t\t\tif ( handler !== Thrower ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tthat = undefined;\n\t\t\t\t\t\t\t\t\t\t\t\t\targs = [ e ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t\t\tdeferred.rejectWith( that, args );\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t// Support: Promises/A+ section 2.3.3.3.1\n\t\t\t\t\t\t\t// https://promisesaplus.com/#point-57\n\t\t\t\t\t\t\t// Re-resolve promises immediately to dodge false rejection from\n\t\t\t\t\t\t\t// subsequent errors\n\t\t\t\t\t\t\tif ( depth ) {\n\t\t\t\t\t\t\t\tprocess();\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// Call an optional hook to record the error, in case of exception\n\t\t\t\t\t\t\t\t// since it's otherwise lost when execution goes async\n\t\t\t\t\t\t\t\tif ( jQuery.Deferred.getErrorHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getErrorHook();\n\n\t\t\t\t\t\t\t\t// The deprecated alias of the above. While the name suggests\n\t\t\t\t\t\t\t\t// returning the stack, not an error instance, jQuery just passes\n\t\t\t\t\t\t\t\t// it directly to `console.warn` so both will work; an instance\n\t\t\t\t\t\t\t\t// just better cooperates with source maps.\n\t\t\t\t\t\t\t\t} else if ( jQuery.Deferred.getStackHook ) {\n\t\t\t\t\t\t\t\t\tprocess.error = jQuery.Deferred.getStackHook();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\twindow.setTimeout( process );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\n\t\t\t\t\t\t// progress_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 0 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onProgress ) ?\n\t\t\t\t\t\t\t\t\tonProgress :\n\t\t\t\t\t\t\t\t\tIdentity,\n\t\t\t\t\t\t\t\tnewDefer.notifyWith\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// fulfilled_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 1 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onFulfilled ) ?\n\t\t\t\t\t\t\t\t\tonFulfilled :\n\t\t\t\t\t\t\t\t\tIdentity\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\t// rejected_handlers.add( ... )\n\t\t\t\t\t\ttuples[ 2 ][ 3 ].add(\n\t\t\t\t\t\t\tresolve(\n\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\tnewDefer,\n\t\t\t\t\t\t\t\tisFunction( onRejected ) ?\n\t\t\t\t\t\t\t\t\tonRejected :\n\t\t\t\t\t\t\t\t\tThrower\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t);\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 5 ];\n\n\t\t\t// promise.progress = list.add\n\t\t\t// promise.done = list.add\n\t\t\t// promise.fail = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add(\n\t\t\t\t\tfunction() {\n\n\t\t\t\t\t\t// state = \"resolved\" (i.e., fulfilled)\n\t\t\t\t\t\t// state = \"rejected\"\n\t\t\t\t\t\tstate = stateString;\n\t\t\t\t\t},\n\n\t\t\t\t\t// rejected_callbacks.disable\n\t\t\t\t\t// fulfilled_callbacks.disable\n\t\t\t\t\ttuples[ 3 - i ][ 2 ].disable,\n\n\t\t\t\t\t// rejected_handlers.disable\n\t\t\t\t\t// fulfilled_handlers.disable\n\t\t\t\t\ttuples[ 3 - i ][ 3 ].disable,\n\n\t\t\t\t\t// progress_callbacks.lock\n\t\t\t\t\ttuples[ 0 ][ 2 ].lock,\n\n\t\t\t\t\t// progress_handlers.lock\n\t\t\t\t\ttuples[ 0 ][ 3 ].lock\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// progress_handlers.fire\n\t\t\t// fulfilled_handlers.fire\n\t\t\t// rejected_handlers.fire\n\t\t\tlist.add( tuple[ 3 ].fire );\n\n\t\t\t// deferred.notify = function() { deferred.notifyWith(...) }\n\t\t\t// deferred.resolve = function() { deferred.resolveWith(...) }\n\t\t\t// deferred.reject = function() { deferred.rejectWith(...) }\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? undefined : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\n\t\t\t// deferred.notifyWith = list.fireWith\n\t\t\t// deferred.resolveWith = list.fireWith\n\t\t\t// deferred.rejectWith = list.fireWith\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( singleValue ) {\n\t\tvar\n\n\t\t\t// count of uncompleted subordinates\n\t\t\tremaining = arguments.length,\n\n\t\t\t// count of unprocessed arguments\n\t\t\ti = remaining,\n\n\t\t\t// subordinate fulfillment data\n\t\t\tresolveContexts = Array( i ),\n\t\t\tresolveValues = slice.call( arguments ),\n\n\t\t\t// the primary Deferred\n\t\t\tprimary = jQuery.Deferred(),\n\n\t\t\t// subordinate callback factory\n\t\t\tupdateFunc = function( i ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tresolveContexts[ i ] = this;\n\t\t\t\t\tresolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( !( --remaining ) ) {\n\t\t\t\t\t\tprimary.resolveWith( resolveContexts, resolveValues );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t};\n\n\t\t// Single- and empty arguments are adopted like Promise.resolve\n\t\tif ( remaining <= 1 ) {\n\t\t\tadoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject,\n\t\t\t\t!remaining );\n\n\t\t\t// Use .then() to unwrap secondary thenables (cf. gh-3000)\n\t\t\tif ( primary.state() === \"pending\" ||\n\t\t\t\tisFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {\n\n\t\t\t\treturn primary.then();\n\t\t\t}\n\t\t}\n\n\t\t// Multiple arguments are aggregated like Promise.all array elements\n\t\twhile ( i-- ) {\n\t\t\tadoptValue( resolveValues[ i ], updateFunc( i ), primary.reject );\n\t\t}\n\n\t\treturn primary.promise();\n\t}\n} );\n\n\n// These usually indicate a programmer mistake during development,\n// warn about them ASAP rather than swallowing them by default.\nvar rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n// If `jQuery.Deferred.getErrorHook` is defined, `asyncError` is an error\n// captured before the async barrier to get the original error cause\n// which may otherwise be hidden.\njQuery.Deferred.exceptionHook = function( error, asyncError ) {\n\n\t// Support: IE 8 - 9 only\n\t// Console exists when dev tools are open, which can happen at any time\n\tif ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {\n\t\twindow.console.warn( \"jQuery.Deferred exception: \" + error.message,\n\t\t\terror.stack, asyncError );\n\t}\n};\n\n\n\n\njQuery.readyException = function( error ) {\n\twindow.setTimeout( function() {\n\t\tthrow error;\n\t} );\n};\n\n\n\n\n// The deferred used on DOM ready\nvar readyList = jQuery.Deferred();\n\njQuery.fn.ready = function( fn ) {\n\n\treadyList\n\t\t.then( fn )\n\n\t\t// Wrap jQuery.readyException in a function so that the lookup\n\t\t// happens at the time of error handling instead of callback\n\t\t// registration.\n\t\t.catch( function( error ) {\n\t\t\tjQuery.readyException( error );\n\t\t} );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See trac-6781\n\treadyWait: 1,\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\t}\n} );\n\njQuery.ready.then = readyList.then;\n\n// The ready event handler and self cleanup method\nfunction completed() {\n\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\twindow.removeEventListener( \"load\", completed );\n\tjQuery.ready();\n}\n\n// Catch cases where $(document).ready() is called\n// after the browser event has already occurred.\n// Support: IE <=9 - 10 only\n// Older IE sometimes signals \"interactive\" too soon\nif ( document.readyState === \"complete\" ||\n\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\twindow.setTimeout( jQuery.ready );\n\n} else {\n\n\t// Use the handy event callback\n\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t// A fallback to window.onload, that will always work\n\twindow.addEventListener( \"load\", completed );\n}\n\n\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlen = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( toType( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, _key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\t\tvalue :\n\t\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( chainable ) {\n\t\treturn elems;\n\t}\n\n\t// Gets\n\tif ( bulk ) {\n\t\treturn fn.call( elems );\n\t}\n\n\treturn len ? fn( elems[ 0 ], key ) : emptyGet;\n};\n\n\n// Matches dashed string for camelizing\nvar rmsPrefix = /^-ms-/,\n\trdashAlpha = /-([a-z])/g;\n\n// Used by camelCase as callback to replace()\nfunction fcamelCase( _all, letter ) {\n\treturn letter.toUpperCase();\n}\n\n// Convert dashed to camelCase; used by the css and data modules\n// Support: IE <=9 - 11, Edge 12 - 15\n// Microsoft forgot to hump their vendor prefix (trac-9572)\nfunction camelCase( string ) {\n\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n}\nvar acceptData = function( owner ) {\n\n\t// Accepts only:\n\t// - Node\n\t// - Node.ELEMENT_NODE\n\t// - Node.DOCUMENT_NODE\n\t// - Object\n\t// - Any\n\treturn owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );\n};\n\n\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tcache: function( owner ) {\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see trac-8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\n\n\t\t// Handle: [ owner, key, value ] args\n\t\t// Always use camelCase key (gh-2257)\n\t\tif ( typeof data === \"string\" ) {\n\t\t\tcache[ camelCase( data ) ] = value;\n\n\t\t// Handle: [ owner, { properties } ] args\n\t\t} else {\n\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ camelCase( prop ) ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\n\t\t\t// Always use camelCase key (gh-2257)\n\t\t\towner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ];\n\t},\n\taccess: function( owner, key, value ) {\n\n\t\t// In cases where either:\n\t\t//\n\t\t// 1. No key was specified\n\t\t// 2. A string key was specified, but no value provided\n\t\t//\n\t\t// Take the \"read\" path and allow the get method to determine\n\t\t// which value to return, respectively either:\n\t\t//\n\t\t// 1. The entire cache object\n\t\t// 2. The data stored at the key\n\t\t//\n\t\tif ( key === undefined ||\n\t\t\t\t( ( key && typeof key === \"string\" ) && value === undefined ) ) {\n\n\t\t\treturn this.get( owner, key );\n\t\t}\n\n\t\t// When the key is not a string, or both a key and value\n\t\t// are specified, set or extend (existing objects) with either:\n\t\t//\n\t\t// 1. An object of properties\n\t\t// 2. A key and value\n\t\t//\n\t\tthis.set( owner, key, value );\n\n\t\t// Since the \"set\" path can have two possible entry points\n\t\t// return the expected data based on which path was taken[*]\n\t\treturn value !== undefined ? value : key;\n\t},\n\tremove: function( owner, key ) {\n\t\tvar i,\n\t\t\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key !== undefined ) {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( Array.isArray( key ) ) {\n\n\t\t\t\t// If key is an array of keys...\n\t\t\t\t// We always set camelCase keys, so remove that.\n\t\t\t\tkey = key.map( camelCase );\n\t\t\t} else {\n\t\t\t\tkey = camelCase( key );\n\n\t\t\t\t// If a key with the spaces exists, use it.\n\t\t\t\t// Otherwise, create an array by matching non-whitespace\n\t\t\t\tkey = key in cache ?\n\t\t\t\t\t[ key ] :\n\t\t\t\t\t( key.match( rnothtmlwhite ) || [] );\n\t\t\t}\n\n\t\t\ti = key.length;\n\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ key[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <=35 - 45\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = new Data();\n\n\n\n//\tImplementation Summary\n//\n//\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n//\t2. Improve the module's maintainability by reducing the storage\n//\t\tpaths to a single mechanism.\n//\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n//\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n//\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n//\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /[A-Z]/g;\n\nfunction getData( data ) {\n\tif ( data === \"true\" ) {\n\t\treturn true;\n\t}\n\n\tif ( data === \"false\" ) {\n\t\treturn false;\n\t}\n\n\tif ( data === \"null\" ) {\n\t\treturn null;\n\t}\n\n\t// Only convert to a number if it doesn't change the string\n\tif ( data === +data + \"\" ) {\n\t\treturn +data;\n\t}\n\n\tif ( rbrace.test( data ) ) {\n\t\treturn JSON.parse( data );\n\t}\n\n\treturn data;\n}\n\nfunction dataAttr( elem, key, data ) {\n\tvar name;\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\t\tname = \"data-\" + key.replace( rmultiDash, \"-$&\" ).toLowerCase();\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = getData( data );\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tdataUser.set( elem, key, data );\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\treturn data;\n}\n\njQuery.extend( {\n\thasData: function( elem ) {\n\t\treturn dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.remove( elem, name );\n\t},\n\n\t// TODO: Now that all calls to _data and _removeData have been replaced\n\t// with direct calls to dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.remove( elem, name );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.get( elem, \"hasDataAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE 11 only\n\t\t\t\t\t\t// The attrs elements can be null (trac-14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdataPriv.set( elem, \"hasDataAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data;\n\n\t\t\t// The calling jQuery object (element matches) is not empty\n\t\t\t// (and therefore has an element appears at this[ 0 ]) and the\n\t\t\t// `value` parameter was not undefined. An empty jQuery object\n\t\t\t// will result in `undefined` for elem = this[ 0 ] which will\n\t\t\t// throw an exception if an attempt to read a data cache is made.\n\t\t\tif ( elem && value === undefined ) {\n\n\t\t\t\t// Attempt to get data from the cache\n\t\t\t\t// The key will always be camelCased in Data\n\t\t\t\tdata = dataUser.get( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// Attempt to \"discover\" the data in\n\t\t\t\t// HTML5 custom data-* attrs\n\t\t\t\tdata = dataAttr( elem, key );\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\t// We tried really hard, but the data doesn't exist.\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Set the data...\n\t\t\tthis.each( function() {\n\n\t\t\t\t// We always store the camelCased key\n\t\t\t\tdataUser.set( this, key, value );\n\t\t\t} );\n\t\t}, null, value, arguments.length > 1, null, true );\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tdataUser.remove( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = dataPriv.get( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || Array.isArray( data ) ) {\n\t\t\t\t\tqueue = dataPriv.access( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// Clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// Not public - generate a queueHooks object, or return the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.remove( elem, [ type + \"queue\", key ] );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// Ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = dataPriv.get( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar documentElement = document.documentElement;\n\n\n\n\tvar isAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem );\n\t\t},\n\t\tcomposed = { composed: true };\n\n\t// Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n\t// Check attachment across shadow DOM boundaries when possible (gh-3504)\n\t// Support: iOS 10.0-10.2 only\n\t// Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n\t// leading to errors. We need to check for `getRootNode`.\n\tif ( documentElement.getRootNode ) {\n\t\tisAttached = function( elem ) {\n\t\t\treturn jQuery.contains( elem.ownerDocument, elem ) ||\n\t\t\t\telem.getRootNode( composed ) === elem.ownerDocument;\n\t\t};\n\t}\nvar isHiddenWithinTree = function( elem, el ) {\n\n\t\t// isHiddenWithinTree might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\n\t\t// Inline style trumps all\n\t\treturn elem.style.display === \"none\" ||\n\t\t\telem.style.display === \"\" &&\n\n\t\t\t// Otherwise, check computed style\n\t\t\t// Support: Firefox <=43 - 45\n\t\t\t// Disconnected elements can have computed display: none, so first confirm that elem is\n\t\t\t// in the document.\n\t\t\tisAttached( elem ) &&\n\n\t\t\tjQuery.css( elem, \"display\" ) === \"none\";\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted, scale,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() {\n\t\t\t\treturn tween.cur();\n\t\t\t} :\n\t\t\tfunction() {\n\t\t\t\treturn jQuery.css( elem, prop, \"\" );\n\t\t\t},\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = elem.nodeType &&\n\t\t\t( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Support: Firefox <=54\n\t\t// Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n\t\tinitial = initial / 2;\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\twhile ( maxIterations-- ) {\n\n\t\t\t// Evaluate and update our best guess (doubling guesses that zero out).\n\t\t\t// Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\t\t\tif ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) {\n\t\t\t\tmaxIterations = 0;\n\t\t\t}\n\t\t\tinitialInUnit = initialInUnit / scale;\n\n\t\t}\n\n\t\tinitialInUnit = initialInUnit * 2;\n\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\nvar defaultDisplayMap = {};\n\nfunction getDefaultDisplay( elem ) {\n\tvar temp,\n\t\tdoc = elem.ownerDocument,\n\t\tnodeName = elem.nodeName,\n\t\tdisplay = defaultDisplayMap[ nodeName ];\n\n\tif ( display ) {\n\t\treturn display;\n\t}\n\n\ttemp = doc.body.appendChild( doc.createElement( nodeName ) );\n\tdisplay = jQuery.css( temp, \"display\" );\n\n\ttemp.parentNode.removeChild( temp );\n\n\tif ( display === \"none\" ) {\n\t\tdisplay = \"block\";\n\t}\n\tdefaultDisplayMap[ nodeName ] = display;\n\n\treturn display;\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\t// Determine new display value for elements that need to change\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n\t\t\t// check is required in this first loop unless we have a nonempty display value (either\n\t\t\t// inline or about-to-be-restored)\n\t\t\tif ( display === \"none\" ) {\n\t\t\t\tvalues[ index ] = dataPriv.get( elem, \"display\" ) || null;\n\t\t\t\tif ( !values[ index ] ) {\n\t\t\t\t\telem.style.display = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( elem.style.display === \"\" && isHiddenWithinTree( elem ) ) {\n\t\t\t\tvalues[ index ] = getDefaultDisplay( elem );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( display !== \"none\" ) {\n\t\t\t\tvalues[ index ] = \"none\";\n\n\t\t\t\t// Remember what we're overwriting\n\t\t\t\tdataPriv.set( elem, \"display\", display );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of the elements in a second loop to avoid constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\tif ( values[ index ] != null ) {\n\t\t\telements[ index ].style.display = values[ index ];\n\t\t}\n\t}\n\n\treturn elements;\n}\n\njQuery.fn.extend( {\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHiddenWithinTree( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i );\n\nvar rscriptType = ( /^$|^module$|\\/(?:java|ecma)script/i );\n\n\n\n( function() {\n\tvar fragment = document.createDocumentFragment(),\n\t\tdiv = fragment.appendChild( document.createElement( \"div\" ) ),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Support: Android 4.0 - 4.3 only\n\t// Check state lost if the name is set (trac-11217)\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (trac-14901)\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Android <=4.1 only\n\t// Older WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE <=11 only\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// Support: IE <=9 only\n\t// IE <=9 replaces <option> tags with their contents when inserted outside of\n\t// the select element.\n\tdiv.innerHTML = \"<option></option>\";\n\tsupport.option = !!div.lastChild;\n} )();\n\n\n// We have to close these tags to support XHTML (trac-13200)\nvar wrapMap = {\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n// Support: IE <=9 only\nif ( !support.option ) {\n\twrapMap.optgroup = wrapMap.option = [ 1, \"<select multiple='multiple'>\", \"</select>\" ];\n}\n\n\nfunction getAll( context, tag ) {\n\n\t// Support: IE <=9 - 11 only\n\t// Use typeof to avoid zero-argument method invocation on host objects (trac-15151)\n\tvar ret;\n\n\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\tret = context.getElementsByTagName( tag || \"*\" );\n\n\t} else if ( typeof context.querySelectorAll !== \"undefined\" ) {\n\t\tret = context.querySelectorAll( tag || \"*\" );\n\n\t} else {\n\t\tret = [];\n\t}\n\n\tif ( tag === undefined || tag && nodeName( context, tag ) ) {\n\t\treturn jQuery.merge( [ context ], ret );\n\t}\n\n\treturn ret;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar i = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, attached, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( toType( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (trac-12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tattached = isAttached( elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( attached ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\n}\n\n\nvar rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\n\t\tvar handleObjIn, eventHandle, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.get( elem );\n\n\t\t// Only attach events to objects that accept data\n\t\tif ( !acceptData( elem ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Ensure that invalid selectors throw exceptions at attach time\n\t\t// Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\t\tif ( selector ) {\n\t\t\tjQuery.find.matchesSelector( documentElement, selector );\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = Object.create( null );\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ?\n\t\t\t\t\tjQuery.event.dispatch.apply( elem, arguments ) : undefined;\n\t\t\t};\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\n\t\tvar j, origCount, tmp,\n\t\t\tevents, t, handleObj,\n\t\t\tspecial, handlers, type, namespaces, origType,\n\t\t\telemData = dataPriv.hasData( elem ) && dataPriv.get( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnothtmlwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\n\t},\n\n\tdispatch: function( nativeEvent ) {\n\n\t\tvar i, j, ret, matched, handleObj, handlerQueue,\n\t\t\targs = new Array( arguments.length ),\n\n\t\t\t// Make a writable jQuery.Event from the native event object\n\t\t\tevent = jQuery.event.fix( nativeEvent ),\n\n\t\t\thandlers = (\n\t\t\t\tdataPriv.get( this, \"events\" ) || Object.create( null )\n\t\t\t)[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\n\t\tfor ( i = 1; i < arguments.length; i++ ) {\n\t\t\targs[ i ] = arguments[ i ];\n\t\t}\n\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// If the event is namespaced, then each handler is only invoked if it is\n\t\t\t\t// specially universal or its namespaces are a superset of the event's.\n\t\t\t\tif ( !event.rnamespace || handleObj.namespace === false ||\n\t\t\t\t\tevent.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, handleObj, sel, matchedHandlers, matchedSelectors,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Find delegate handlers\n\t\tif ( delegateCount &&\n\n\t\t\t// Support: IE <=9\n\t\t\t// Black-hole SVG <use> instance trees (trac-13180)\n\t\t\tcur.nodeType &&\n\n\t\t\t// Support: Firefox <=42\n\t\t\t// Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n\t\t\t// https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n\t\t\t// Support: IE 11 only\n\t\t\t// ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n\t\t\t!( event.type === \"click\" && event.button >= 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (trac-13208)\n\t\t\t\t// Don't process clicks on disabled elements (trac-6911, trac-8165, trac-11382, trac-11764)\n\t\t\t\tif ( cur.nodeType === 1 && !( event.type === \"click\" && cur.disabled === true ) ) {\n\t\t\t\t\tmatchedHandlers = [];\n\t\t\t\t\tmatchedSelectors = {};\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (trac-13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatchedSelectors[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matchedSelectors[ sel ] ) {\n\t\t\t\t\t\t\tmatchedHandlers.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matchedHandlers.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matchedHandlers } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tcur = this;\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\taddProp: function( name, hook ) {\n\t\tObject.defineProperty( jQuery.Event.prototype, name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\n\t\t\tget: isFunction( hook ) ?\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn hook( this.originalEvent );\n\t\t\t\t\t}\n\t\t\t\t} :\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( this.originalEvent ) {\n\t\t\t\t\t\treturn this.originalEvent[ name ];\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\tset: function( value ) {\n\t\t\t\tObject.defineProperty( this, name, {\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t\tvalue: value\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\t},\n\n\tfix: function( originalEvent ) {\n\t\treturn originalEvent[ jQuery.expando ] ?\n\t\t\toriginalEvent :\n\t\t\tnew jQuery.Event( originalEvent );\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tclick: {\n\n\t\t\t// Utilize native event to ensure correct state for checkable inputs\n\t\t\tsetup: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Claim the first handler\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\t// dataPriv.set( el, \"click\", ... )\n\t\t\t\t\tleverageNative( el, \"click\", true );\n\t\t\t\t}\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t},\n\t\t\ttrigger: function( data ) {\n\n\t\t\t\t// For mutual compressibility with _default, replace `this` access with a local var.\n\t\t\t\t// `|| data` is dead code meant only to preserve the variable through minification.\n\t\t\t\tvar el = this || data;\n\n\t\t\t\t// Force setup before triggering a click\n\t\t\t\tif ( rcheckableType.test( el.type ) &&\n\t\t\t\t\tel.click && nodeName( el, \"input\" ) ) {\n\n\t\t\t\t\tleverageNative( el, \"click\" );\n\t\t\t\t}\n\n\t\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, suppress native .click() on links\n\t\t\t// Also prevent it if we're currently inside a leveraged native-event stack\n\t\t\t_default: function( event ) {\n\t\t\t\tvar target = event.target;\n\t\t\t\treturn rcheckableType.test( target.type ) &&\n\t\t\t\t\ttarget.click && nodeName( target, \"input\" ) &&\n\t\t\t\t\tdataPriv.get( target, \"click\" ) ||\n\t\t\t\t\tnodeName( target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Ensure the presence of an event listener that handles manually-triggered\n// synthetic events by interrupting progress until reinvoked in response to\n// *native* events that it fires directly, ensuring that state changes have\n// already occurred before other listeners are invoked.\nfunction leverageNative( el, type, isSetup ) {\n\n\t// Missing `isSetup` indicates a trigger call, which must force setup through jQuery.event.add\n\tif ( !isSetup ) {\n\t\tif ( dataPriv.get( el, type ) === undefined ) {\n\t\t\tjQuery.event.add( el, type, returnTrue );\n\t\t}\n\t\treturn;\n\t}\n\n\t// Register the controller as a special universal handler for all event namespaces\n\tdataPriv.set( el, type, false );\n\tjQuery.event.add( el, type, {\n\t\tnamespace: false,\n\t\thandler: function( event ) {\n\t\t\tvar result,\n\t\t\t\tsaved = dataPriv.get( this, type );\n\n\t\t\tif ( ( event.isTrigger & 1 ) && this[ type ] ) {\n\n\t\t\t\t// Interrupt processing of the outer synthetic .trigger()ed event\n\t\t\t\tif ( !saved ) {\n\n\t\t\t\t\t// Store arguments for use when handling the inner native event\n\t\t\t\t\t// There will always be at least one argument (an event object), so this array\n\t\t\t\t\t// will not be confused with a leftover capture object.\n\t\t\t\t\tsaved = slice.call( arguments );\n\t\t\t\t\tdataPriv.set( this, type, saved );\n\n\t\t\t\t\t// Trigger the native event and capture its result\n\t\t\t\t\tthis[ type ]();\n\t\t\t\t\tresult = dataPriv.get( this, type );\n\t\t\t\t\tdataPriv.set( this, type, false );\n\n\t\t\t\t\tif ( saved !== result ) {\n\n\t\t\t\t\t\t// Cancel the outer synthetic event\n\t\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\treturn result;\n\t\t\t\t\t}\n\n\t\t\t\t// If this is an inner synthetic event for an event with a bubbling surrogate\n\t\t\t\t// (focus or blur), assume that the surrogate already propagated from triggering\n\t\t\t\t// the native event and prevent that from happening again here.\n\t\t\t\t// This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n\t\t\t\t// bubbling surrogate propagates *after* the non-bubbling base), but that seems\n\t\t\t\t// less bad than duplication.\n\t\t\t\t} else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) {\n\t\t\t\t\tevent.stopPropagation();\n\t\t\t\t}\n\n\t\t\t// If this is a native event triggered above, everything is now in order\n\t\t\t// Fire an inner synthetic event with the original arguments\n\t\t\t} else if ( saved ) {\n\n\t\t\t\t// ...and capture the result\n\t\t\t\tdataPriv.set( this, type, jQuery.event.trigger(\n\t\t\t\t\tsaved[ 0 ],\n\t\t\t\t\tsaved.slice( 1 ),\n\t\t\t\t\tthis\n\t\t\t\t) );\n\n\t\t\t\t// Abort handling of the native event by all jQuery handlers while allowing\n\t\t\t\t// native handlers on the same element to run. On target, this is achieved\n\t\t\t\t// by stopping immediate propagation just on the jQuery event. However,\n\t\t\t\t// the native event is re-wrapped by a jQuery one on each level of the\n\t\t\t\t// propagation so the only way to stop it for jQuery is to stop it for\n\t\t\t\t// everyone via native `stopPropagation()`. This is not a problem for\n\t\t\t\t// focus/blur which don't bubble, but it does also stop click on checkboxes\n\t\t\t\t// and radios. We accept this limitation.\n\t\t\t\tevent.stopPropagation();\n\t\t\t\tevent.isImmediatePropagationStopped = returnTrue;\n\t\t\t}\n\t\t}\n\t} );\n}\n\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: Android <=2.3 only\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t\t// Create target properties\n\t\t// Support: Safari <=6 - 7 only\n\t\t// Target should not be a text node (trac-504, trac-13143)\n\t\tthis.target = ( src.target && src.target.nodeType === 3 ) ?\n\t\t\tsrc.target.parentNode :\n\t\t\tsrc.target;\n\n\t\tthis.currentTarget = src.currentTarget;\n\t\tthis.relatedTarget = src.relatedTarget;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || Date.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\tisSimulated: false,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopPropagation();\n\t\t}\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && !this.isSimulated ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Includes all common event props including KeyEvent and MouseEvent specific props\njQuery.each( {\n\taltKey: true,\n\tbubbles: true,\n\tcancelable: true,\n\tchangedTouches: true,\n\tctrlKey: true,\n\tdetail: true,\n\teventPhase: true,\n\tmetaKey: true,\n\tpageX: true,\n\tpageY: true,\n\tshiftKey: true,\n\tview: true,\n\t\"char\": true,\n\tcode: true,\n\tcharCode: true,\n\tkey: true,\n\tkeyCode: true,\n\tbutton: true,\n\tbuttons: true,\n\tclientX: true,\n\tclientY: true,\n\toffsetX: true,\n\toffsetY: true,\n\tpointerId: true,\n\tpointerType: true,\n\tscreenX: true,\n\tscreenY: true,\n\ttargetTouches: true,\n\ttoElement: true,\n\ttouches: true,\n\twhich: true\n}, jQuery.event.addProp );\n\njQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( type, delegateType ) {\n\n\tfunction focusMappedHandler( nativeEvent ) {\n\t\tif ( document.documentMode ) {\n\n\t\t\t// Support: IE 11+\n\t\t\t// Attach a single focusin/focusout handler on the document while someone wants\n\t\t\t// focus/blur. This is because the former are synchronous in IE while the latter\n\t\t\t// are async. In other browsers, all those handlers are invoked synchronously.\n\n\t\t\t// `handle` from private data would already wrap the event, but we need\n\t\t\t// to change the `type` here.\n\t\t\tvar handle = dataPriv.get( this, \"handle\" ),\n\t\t\t\tevent = jQuery.event.fix( nativeEvent );\n\t\t\tevent.type = nativeEvent.type === \"focusin\" ? \"focus\" : \"blur\";\n\t\t\tevent.isSimulated = true;\n\n\t\t\t// First, handle focusin/focusout\n\t\t\thandle( nativeEvent );\n\n\t\t\t// ...then, handle focus/blur\n\t\t\t//\n\t\t\t// focus/blur don't bubble while focusin/focusout do; simulate the former by only\n\t\t\t// invoking the handler at the lower level.\n\t\t\tif ( event.target === event.currentTarget ) {\n\n\t\t\t\t// The setup part calls `leverageNative`, which, in turn, calls\n\t\t\t\t// `jQuery.event.add`, so event handle will already have been set\n\t\t\t\t// by this point.\n\t\t\t\thandle( event );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// For non-IE browsers, attach a single capturing handler on the document\n\t\t\t// while someone wants focusin/focusout.\n\t\t\tjQuery.event.simulate( delegateType, nativeEvent.target,\n\t\t\t\tjQuery.event.fix( nativeEvent ) );\n\t\t}\n\t}\n\n\tjQuery.event.special[ type ] = {\n\n\t\t// Utilize native event if possible so blur/focus sequence is correct\n\t\tsetup: function() {\n\n\t\t\tvar attaches;\n\n\t\t\t// Claim the first handler\n\t\t\t// dataPriv.set( this, \"focus\", ... )\n\t\t\t// dataPriv.set( this, \"blur\", ... )\n\t\t\tleverageNative( this, type, true );\n\n\t\t\tif ( document.documentMode ) {\n\n\t\t\t\t// Support: IE 9 - 11+\n\t\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\t\tattaches = dataPriv.get( this, delegateType );\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t}\n\t\t\t\tdataPriv.set( this, delegateType, ( attaches || 0 ) + 1 );\n\t\t\t} else {\n\n\t\t\t\t// Return false to allow normal processing in the caller\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\ttrigger: function() {\n\n\t\t\t// Force setup before trigger\n\t\t\tleverageNative( this, type );\n\n\t\t\t// Return non-false to allow normal event-path propagation\n\t\t\treturn true;\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tvar attaches;\n\n\t\t\tif ( document.documentMode ) {\n\t\t\t\tattaches = dataPriv.get( this, delegateType ) - 1;\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t\tdataPriv.remove( this, delegateType );\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.set( this, delegateType, attaches );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Return false to indicate standard teardown should be applied\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t// Suppress native focus or blur if we're currently inside\n\t\t// a leveraged native-event stack\n\t\t_default: function( event ) {\n\t\t\treturn dataPriv.get( event.target, type );\n\t\t},\n\n\t\tdelegateType: delegateType\n\t};\n\n\t// Support: Firefox <=44\n\t// Firefox doesn't have focus(in | out) events\n\t// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n\t//\n\t// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n\t// focus(in | out) events fire after focus & blur events,\n\t// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n\t// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\t//\n\t// Support: IE 9 - 11+\n\t// To preserve relative focusin/focus & focusout/blur event order guaranteed on the 3.x branch,\n\t// attach a single handler for both events in IE.\n\tjQuery.event.special[ delegateType ] = {\n\t\tsetup: function() {\n\n\t\t\t// Handle: regular nodes (via `this.ownerDocument`), window\n\t\t\t// (via `this.document`) & document (via `this`).\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType );\n\n\t\t\t// Support: IE 9 - 11+\n\t\t\t// We use the same native handler for focusin & focus (and focusout & blur)\n\t\t\t// so we need to coordinate setup & teardown parts between those events.\n\t\t\t// Use `delegateType` as the key as `type` is already used by `leverageNative`.\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.addEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.addEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t}\n\t\t\tdataPriv.set( dataHolder, delegateType, ( attaches || 0 ) + 1 );\n\t\t},\n\t\tteardown: function() {\n\t\t\tvar doc = this.ownerDocument || this.document || this,\n\t\t\t\tdataHolder = document.documentMode ? this : doc,\n\t\t\t\tattaches = dataPriv.get( dataHolder, delegateType ) - 1;\n\n\t\t\tif ( !attaches ) {\n\t\t\t\tif ( document.documentMode ) {\n\t\t\t\t\tthis.removeEventListener( delegateType, focusMappedHandler );\n\t\t\t\t} else {\n\t\t\t\t\tdoc.removeEventListener( type, focusMappedHandler, true );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( dataHolder, delegateType );\n\t\t\t} else {\n\t\t\t\tdataPriv.set( dataHolder, delegateType, attaches );\n\t\t\t}\n\t\t}\n\t};\n} );\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event ) dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t}\n} );\n\n\nvar\n\n\t// Support: IE <=10 - 11, Edge 12 - 13 only\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\n\trcleanScript = /^\\s*<!\\[CDATA\\[|\\]\\]>\\s*$/g;\n\n// Prefer a tbody over its parent table for containing new rows\nfunction manipulationTarget( elem, content ) {\n\tif ( nodeName( elem, \"table\" ) &&\n\t\tnodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ) {\n\n\t\treturn jQuery( elem ).children( \"tbody\" )[ 0 ] || elem;\n\t}\n\n\treturn elem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( elem.getAttribute( \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tif ( ( elem.type || \"\" ).slice( 0, 5 ) === \"true/\" ) {\n\t\telem.type = elem.type.slice( 5 );\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tvar i, l, type, pdataOld, udataOld, udataCur, events;\n\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\t// 1. Copy private data: events, handlers, etc.\n\tif ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.get( src );\n\t\tevents = pdataOld.events;\n\n\t\tif ( events ) {\n\t\t\tdataPriv.remove( dest, \"handle events\" );\n\n\t\t\tfor ( type in events ) {\n\t\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 2. Copy user data\n\tif ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\n}\n\n// Fix IE bugs, see support tests\nfunction fixInput( src, dest ) {\n\tvar nodeName = dest.nodeName.toLowerCase();\n\n\t// Fails to persist the checked state of a cloned checkbox or radio button.\n\tif ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\t\tdest.checked = src.checked;\n\n\t// Fails to return the selected option to the default selected state when cloning options\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = flat( args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tvalueIsFunction = isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( valueIsFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (trac-8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Re-enable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src && ( node.type || \"\" ).toLowerCase() !== \"module\" ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl && !node.noModule ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src, {\n\t\t\t\t\t\t\t\t\tnonce: node.nonce || node.getAttribute( \"nonce\" )\n\t\t\t\t\t\t\t\t}, doc );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Unwrap a CDATA section containing script contents. This shouldn't be\n\t\t\t\t\t\t\t// needed as in XML documents they're already not visible when\n\t\t\t\t\t\t\t// inspecting element contents and in HTML documents they have no\n\t\t\t\t\t\t\t// meaning but we're preserving that logic for backwards compatibility.\n\t\t\t\t\t\t\t// This will be removed completely in 4.0. See gh-4904.\n\t\t\t\t\t\t\tDOMEval( node.textContent.replace( rcleanScript, \"\" ), node, doc );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && isAttached( node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html;\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar i, l, srcElements, destElements,\n\t\t\tclone = elem.cloneNode( true ),\n\t\t\tinPage = isAttached( elem );\n\n\t\t// Fix IE cloning issues\n\t\tif ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&\n\t\t\t\t!jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew jQuery#find here for performance reasons:\n\t\t\t// https://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\tfixInput( srcElements[ i ], destElements[ i ] );\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0, l = srcElements.length; i < l; i++ ) {\n\t\t\t\t\tcloneCopyEvent( srcElements[ i ], destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\n\t\t\tspecial = jQuery.event.special,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {\n\t\t\tif ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <=35 - 45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().each( function() {\n\t\t\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\t\t\tthis.textContent = value;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\t\t\tif ( elem.nodeType === 1 ) {\n\n\t\t\t\t// Prevent memory leaks\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\n\t\t\t\t// Remove any remaining nodes\n\t\t\t\telem.textContent = \"\";\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined && elem.nodeType === 1 ) {\n\t\t\t\treturn elem.innerHTML;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\t\t\telem = this[ i ] || {};\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1,\n\t\t\ti = 0;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Support: Android <=4.0 only, PhantomJS 1 only\n\t\t\t// .get() because push.apply(_, arraylike) throws on ancient WebKit\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar rcustomProp = /^--/;\n\n\nvar getStyles = function( elem ) {\n\n\t\t// Support: IE <=11 only, Firefox <=30 (trac-15098, trac-14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar swap = function( elem, options, callback ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.call( elem );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar rboxStyle = new RegExp( cssExpand.join( \"|\" ), \"i\" );\n\n\n\n( function() {\n\n\t// Executing both pixelPosition & boxSizingReliable tests require only one layout\n\t// so they're executed at the same time to save the second computation.\n\tfunction computeStyleTests() {\n\n\t\t// This is a singleton, we need to execute it only once\n\t\tif ( !div ) {\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer.style.cssText = \"position:absolute;left:-11111px;width:60px;\" +\n\t\t\t\"margin-top:1px;padding:0;border:0\";\n\t\tdiv.style.cssText =\n\t\t\t\"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"width:60%;top:1%\";\n\t\tdocumentElement.appendChild( container ).appendChild( div );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\n\t\t// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\t\treliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12;\n\n\t\t// Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.right = \"60%\";\n\t\tpixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36;\n\n\t\t// Support: IE 9 - 11 only\n\t\t// Detect misreporting of content dimensions for box-sizing:border-box elements\n\t\tboxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36;\n\n\t\t// Support: IE 9 only\n\t\t// Detect overflow:scroll screwiness (gh-3699)\n\t\t// Support: Chrome <=64\n\t\t// Don't get tricked when zoom affects offsetWidth (gh-4029)\n\t\tdiv.style.position = \"absolute\";\n\t\tscrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12;\n\n\t\tdocumentElement.removeChild( container );\n\n\t\t// Nullify the div so it wouldn't be stored in the memory and\n\t\t// it will also be a sign that checks already performed\n\t\tdiv = null;\n\t}\n\n\tfunction roundPixelMeasures( measure ) {\n\t\treturn Math.round( parseFloat( measure ) );\n\t}\n\n\tvar pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal,\n\t\treliableTrDimensionsVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\t// Support: IE <=9 - 11 only\n\t// Style of cloned element affects source element cloned (trac-8908)\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tjQuery.extend( support, {\n\t\tboxSizingReliable: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelBoxStyles: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelBoxStylesVal;\n\t\t},\n\t\tpixelPosition: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\tscrollboxSize: function() {\n\t\t\tcomputeStyleTests();\n\t\t\treturn scrollboxSizeVal;\n\t\t},\n\n\t\t// Support: IE 9 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Behavior in IE 9 is more subtle than in newer versions & it passes\n\t\t// some versions of this test; make sure not to make it pass there!\n\t\t//\n\t\t// Support: Firefox 70+\n\t\t// Only Firefox includes border widths\n\t\t// in computed dimensions. (gh-4529)\n\t\treliableTrDimensions: function() {\n\t\t\tvar table, tr, trChild, trStyle;\n\t\t\tif ( reliableTrDimensionsVal == null ) {\n\t\t\t\ttable = document.createElement( \"table\" );\n\t\t\t\ttr = document.createElement( \"tr\" );\n\t\t\t\ttrChild = document.createElement( \"div\" );\n\n\t\t\t\ttable.style.cssText = \"position:absolute;left:-11111px;border-collapse:separate\";\n\t\t\t\ttr.style.cssText = \"box-sizing:content-box;border:1px solid\";\n\n\t\t\t\t// Support: Chrome 86+\n\t\t\t\t// Height set through cssText does not get applied.\n\t\t\t\t// Computed height then comes back as 0.\n\t\t\t\ttr.style.height = \"1px\";\n\t\t\t\ttrChild.style.height = \"9px\";\n\n\t\t\t\t// Support: Android 8 Chrome 86+\n\t\t\t\t// In our bodyBackground.html iframe,\n\t\t\t\t// display for all div elements is set to \"inline\",\n\t\t\t\t// which causes a problem only in Android 8 Chrome 86.\n\t\t\t\t// Ensuring the div is `display: block`\n\t\t\t\t// gets around this issue.\n\t\t\t\ttrChild.style.display = \"block\";\n\n\t\t\t\tdocumentElement\n\t\t\t\t\t.appendChild( table )\n\t\t\t\t\t.appendChild( tr )\n\t\t\t\t\t.appendChild( trChild );\n\n\t\t\t\ttrStyle = window.getComputedStyle( tr );\n\t\t\t\treliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderTopWidth, 10 ) +\n\t\t\t\t\tparseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight;\n\n\t\t\t\tdocumentElement.removeChild( table );\n\t\t\t}\n\t\t\treturn reliableTrDimensionsVal;\n\t\t}\n\t} );\n} )();\n\n\nfunction curCSS( elem, name, computed ) {\n\tvar width, minWidth, maxWidth, ret,\n\t\tisCustomProp = rcustomProp.test( name ),\n\n\t\t// Support: Firefox 51+\n\t\t// Retrieving style before computed somehow\n\t\t// fixes an issue with getting wrong values\n\t\t// on detached elements\n\t\tstyle = elem.style;\n\n\tcomputed = computed || getStyles( elem );\n\n\t// getPropertyValue is needed for:\n\t// .css('filter') (IE 9 only, trac-12537)\n\t// .css('--customProperty) (gh-3144)\n\tif ( computed ) {\n\n\t\t// Support: IE <=9 - 11+\n\t\t// IE only supports `\"float\"` in `getPropertyValue`; in computed styles\n\t\t// it's only available as `\"cssFloat\"`. We no longer modify properties\n\t\t// sent to `.css()` apart from camelCasing, so we need to check both.\n\t\t// Normally, this would create difference in behavior: if\n\t\t// `getPropertyValue` returns an empty string, the value returned\n\t\t// by `.css()` would be `undefined`. This is usually the case for\n\t\t// disconnected elements. However, in IE even disconnected elements\n\t\t// with no styles return `\"none\"` for `getPropertyValue( \"float\" )`\n\t\tret = computed.getPropertyValue( name ) || computed[ name ];\n\n\t\tif ( isCustomProp && ret ) {\n\n\t\t\t// Support: Firefox 105+, Chrome <=105+\n\t\t\t// Spec requires trimming whitespace for custom properties (gh-4926).\n\t\t\t// Firefox only trims leading whitespace. Chrome just collapses\n\t\t\t// both leading & trailing whitespace to a single space.\n\t\t\t//\n\t\t\t// Fall back to `undefined` if empty string returned.\n\t\t\t// This collapses a missing definition with property defined\n\t\t\t// and set to an empty string but there's no standard API\n\t\t\t// allowing us to differentiate them without a performance penalty\n\t\t\t// and returning `undefined` aligns with older jQuery.\n\t\t\t//\n\t\t\t// rtrimCSS treats U+000D CARRIAGE RETURN and U+000C FORM FEED\n\t\t\t// as whitespace while CSS does not, but this is not a problem\n\t\t\t// because CSS preprocessing replaces them with U+000A LINE FEED\n\t\t\t// (which *is* CSS whitespace)\n\t\t\t// https://www.w3.org/TR/css-syntax-3/#input-preprocessing\n\t\t\tret = ret.replace( rtrimCSS, \"$1\" ) || undefined;\n\t\t}\n\n\t\tif ( ret === \"\" && !isAttached( elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// https://drafts.csswg.org/cssom/#resolved-values\n\t\tif ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\twidth = style.width;\n\t\t\tminWidth = style.minWidth;\n\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\tret = computed.width;\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.width = width;\n\t\t\tstyle.minWidth = minWidth;\n\t\t\tstyle.maxWidth = maxWidth;\n\t\t}\n\t}\n\n\treturn ret !== undefined ?\n\n\t\t// Support: IE <=9 - 11 only\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar cssPrefixes = [ \"Webkit\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style,\n\tvendorProps = {};\n\n// Return a vendor-prefixed property or undefined\nfunction vendorPropName( name ) {\n\n\t// Check for vendor prefixed names\n\tvar capName = name[ 0 ].toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\n// Return a potentially-mapped jQuery.cssProps or vendor prefixed property\nfunction finalPropName( name ) {\n\tvar final = jQuery.cssProps[ name ] || vendorProps[ name ];\n\n\tif ( final ) {\n\t\treturn final;\n\t}\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\treturn vendorProps[ name ] = vendorPropName( name ) || name;\n}\n\n\nvar\n\n\t// Swappable if display is none or starts with table\n\t// except \"table\", \"table-cell\", or \"table-caption\"\n\t// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t};\n\nfunction setPositiveNumber( _elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) {\n\tvar i = dimension === \"width\" ? 1 : 0,\n\t\textra = 0,\n\t\tdelta = 0,\n\t\tmarginDelta = 0;\n\n\t// Adjustment may not be necessary\n\tif ( box === ( isBorderBox ? \"border\" : \"content\" ) ) {\n\t\treturn 0;\n\t}\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// Both box models exclude margin\n\t\t// Count margin delta separately to only add it after scroll gutter adjustment.\n\t\t// This is needed to make negative margins work with `outerHeight( true )` (gh-3982).\n\t\tif ( box === \"margin\" ) {\n\t\t\tmarginDelta += jQuery.css( elem, box + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\t// If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\t\tif ( !isBorderBox ) {\n\n\t\t\t// Add padding\n\t\t\tdelta += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// For \"border\" or \"margin\", add border\n\t\t\tif ( box !== \"padding\" ) {\n\t\t\t\tdelta += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\n\t\t\t// But still keep track of it otherwise\n\t\t\t} else {\n\t\t\t\textra += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\n\t\t// If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n\t\t// \"padding\" or \"margin\"\n\t\t} else {\n\n\t\t\t// For \"content\", subtract padding\n\t\t\tif ( box === \"content\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// For \"content\" or \"padding\", subtract border\n\t\t\tif ( box !== \"margin\" ) {\n\t\t\t\tdelta -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\t// Account for positive content-box scroll gutter when requested by providing computedVal\n\tif ( !isBorderBox && computedVal >= 0 ) {\n\n\t\t// offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n\t\t// Assuming integer scroll gutter, subtract the rest and round down\n\t\tdelta += Math.max( 0, Math.ceil(\n\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\tcomputedVal -\n\t\t\tdelta -\n\t\t\textra -\n\t\t\t0.5\n\n\t\t// If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n\t\t// Use an explicit zero to avoid NaN (gh-3964)\n\t\t) ) || 0;\n\t}\n\n\treturn delta + marginDelta;\n}\n\nfunction getWidthOrHeight( elem, dimension, extra ) {\n\n\t// Start with computed style\n\tvar styles = getStyles( elem ),\n\n\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n\t\t// Fake content-box until we know it's needed to know the true value.\n\t\tboxSizingNeeded = !support.boxSizingReliable() || extra,\n\t\tisBorderBox = boxSizingNeeded &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\tvalueIsBorderBox = isBorderBox,\n\n\t\tval = curCSS( elem, dimension, styles ),\n\t\toffsetProp = \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 );\n\n\t// Support: Firefox <=54\n\t// Return a confounding non-pixel value or feign ignorance, as appropriate.\n\tif ( rnumnonpx.test( val ) ) {\n\t\tif ( !extra ) {\n\t\t\treturn val;\n\t\t}\n\t\tval = \"auto\";\n\t}\n\n\n\t// Support: IE 9 - 11 only\n\t// Use offsetWidth/offsetHeight for when box sizing is unreliable.\n\t// In those cases, the computed value can be trusted to be border-box.\n\tif ( ( !support.boxSizingReliable() && isBorderBox ||\n\n\t\t// Support: IE 10 - 11+, Edge 15 - 18+\n\t\t// IE/Edge misreport `getComputedStyle` of table rows with width/height\n\t\t// set in CSS while `offset*` properties report correct values.\n\t\t// Interestingly, in some cases IE 9 doesn't suffer from this issue.\n\t\t!support.reliableTrDimensions() && nodeName( elem, \"tr\" ) ||\n\n\t\t// Fall back to offsetWidth/offsetHeight when value is \"auto\"\n\t\t// This happens for inline elements with no explicit setting (gh-3571)\n\t\tval === \"auto\" ||\n\n\t\t// Support: Android <=4.1 - 4.3 only\n\t\t// Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n\t\t!parseFloat( val ) && jQuery.css( elem, \"display\", false, styles ) === \"inline\" ) &&\n\n\t\t// Make sure the element is visible & connected\n\t\telem.getClientRects().length ) {\n\n\t\tisBorderBox = jQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t\t// Where available, offsetWidth/offsetHeight approximate border box dimensions.\n\t\t// Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n\t\t// retrieved value as a content box dimension.\n\t\tvalueIsBorderBox = offsetProp in elem;\n\t\tif ( valueIsBorderBox ) {\n\t\t\tval = elem[ offsetProp ];\n\t\t}\n\t}\n\n\t// Normalize \"\" and auto\n\tval = parseFloat( val ) || 0;\n\n\t// Adjust for the element's box model\n\treturn ( val +\n\t\tboxModelAdjustment(\n\t\t\telem,\n\t\t\tdimension,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles,\n\n\t\t\t// Provide the current computed size to request scroll gutter calculation (gh-3589)\n\t\t\tval\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\tanimationIterationCount: true,\n\t\taspectRatio: true,\n\t\tborderImageSlice: true,\n\t\tcolumnCount: true,\n\t\tflexGrow: true,\n\t\tflexShrink: true,\n\t\tfontWeight: true,\n\t\tgridArea: true,\n\t\tgridColumn: true,\n\t\tgridColumnEnd: true,\n\t\tgridColumnStart: true,\n\t\tgridRow: true,\n\t\tgridRowEnd: true,\n\t\tgridRowStart: true,\n\t\tlineHeight: true,\n\t\topacity: true,\n\t\torder: true,\n\t\torphans: true,\n\t\tscale: true,\n\t\twidows: true,\n\t\tzIndex: true,\n\t\tzoom: true,\n\n\t\t// SVG-related\n\t\tfillOpacity: true,\n\t\tfloodOpacity: true,\n\t\tstopOpacity: true,\n\t\tstrokeMiterlimit: true,\n\t\tstrokeOpacity: true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name ),\n\t\t\tstyle = elem.style;\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to query the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Gets hook for the prefixed version, then unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (trac-7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug trac-9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set (trac-7116)\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\t// The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n\t\t\t// \"px\" to a few hardcoded values.\n\t\t\tif ( type === \"number\" && !isCustomProp ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// background-* props affect original clone's values\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tif ( isCustomProp ) {\n\t\t\t\t\tstyle.setProperty( name, value );\n\t\t\t\t} else {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar val, num, hooks,\n\t\t\torigName = camelCase( name ),\n\t\t\tisCustomProp = rcustomProp.test( name );\n\n\t\t// Make sure that we're working with the right name. We don't\n\t\t// want to modify the value if it is a CSS custom property\n\t\t// since they are user-defined.\n\t\tif ( !isCustomProp ) {\n\t\t\tname = finalPropName( origName );\n\t\t}\n\n\t\t// Try prefixed name followed by the unprefixed name\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t// Convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Make numeric if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( _i, dimension ) {\n\tjQuery.cssHooks[ dimension ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// Certain elements can have dimension info if we invisibly show them\n\t\t\t\t// but it must have a current display style that would benefit\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\n\t\t\t\t\t// Support: Safari 8+\n\t\t\t\t\t// Table columns in Safari have non-zero offsetWidth & zero\n\t\t\t\t\t// getBoundingClientRect().width unless display is changed.\n\t\t\t\t\t// Support: IE <=11 only\n\t\t\t\t\t// Running getBoundingClientRect on a disconnected node\n\t\t\t\t\t// in IE throws an error.\n\t\t\t\t\t( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?\n\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\treturn getWidthOrHeight( elem, dimension, extra );\n\t\t\t\t\t} ) :\n\t\t\t\t\tgetWidthOrHeight( elem, dimension, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar matches,\n\t\t\t\tstyles = getStyles( elem ),\n\n\t\t\t\t// Only read styles.position if the test has a chance to fail\n\t\t\t\t// to avoid forcing a reflow.\n\t\t\t\tscrollboxSizeBuggy = !support.scrollboxSize() &&\n\t\t\t\t\tstyles.position === \"absolute\",\n\n\t\t\t\t// To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n\t\t\t\tboxSizingNeeded = scrollboxSizeBuggy || extra,\n\t\t\t\tisBorderBox = boxSizingNeeded &&\n\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\tsubtract = extra ?\n\t\t\t\t\tboxModelAdjustment(\n\t\t\t\t\t\telem,\n\t\t\t\t\t\tdimension,\n\t\t\t\t\t\textra,\n\t\t\t\t\t\tisBorderBox,\n\t\t\t\t\t\tstyles\n\t\t\t\t\t) :\n\t\t\t\t\t0;\n\n\t\t\t// Account for unreliable border-box dimensions by comparing offset* to computed and\n\t\t\t// faking a content-box to get border and padding (gh-3699)\n\t\t\tif ( isBorderBox && scrollboxSizeBuggy ) {\n\t\t\t\tsubtract -= Math.ceil(\n\t\t\t\t\telem[ \"offset\" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] -\n\t\t\t\t\tparseFloat( styles[ dimension ] ) -\n\t\t\t\t\tboxModelAdjustment( elem, dimension, \"border\", false, styles ) -\n\t\t\t\t\t0.5\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ dimension ] = value;\n\t\t\t\tvalue = jQuery.css( elem, dimension );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// Assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( prefix !== \"margin\" ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( Array.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// Passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails.\n\t\t\t// Simple values such as \"10px\" are parsed to Float;\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as-is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// Use step hook for back compat.\n\t\t\t// Use cssHook if its there.\n\t\t\t// Use .style if available and use plain properties where available.\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 && (\n\t\t\t\tjQuery.cssHooks[ tween.prop ] ||\n\t\t\t\t\ttween.elem.style[ finalPropName( tween.prop ) ] != null ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9 only\n// Panic based approach to setting things on disconnected nodes\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, inProgress,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\nfunction schedule() {\n\tif ( inProgress ) {\n\t\tif ( document.hidden === false && window.requestAnimationFrame ) {\n\t\t\twindow.requestAnimationFrame( schedule );\n\t\t} else {\n\t\t\twindow.setTimeout( schedule, jQuery.fx.interval );\n\t\t}\n\n\t\tjQuery.fx.tick();\n\t}\n}\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = Date.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\ti = 0,\n\t\tattrs = { height: type };\n\n\t// If we include width, step value is 1 to do all cssExpand values,\n\t// otherwise step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// We're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\tvar prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,\n\t\tisBox = \"width\" in props || \"height\" in props,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHiddenWithinTree( elem ),\n\t\tdataShow = dataPriv.get( elem, \"fxshow\" );\n\n\t// Queue-skipping animations hijack the fx hooks\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// Ensure the complete handler is called before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Detect show/hide animations\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.test( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// Pretend to be hidden if this is a \"show\" and\n\t\t\t\t// there is still data from a stopped show/hide\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\n\t\t\t\t// Ignore all other no-op show/hide data\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\t\t}\n\t}\n\n\t// Bail out if this is a no-op like .hide().hide()\n\tpropTween = !jQuery.isEmptyObject( props );\n\tif ( !propTween && jQuery.isEmptyObject( orig ) ) {\n\t\treturn;\n\t}\n\n\t// Restrict \"overflow\" and \"display\" styles during box animations\n\tif ( isBox && elem.nodeType === 1 ) {\n\n\t\t// Support: IE <=9 - 11, Edge 12 - 15\n\t\t// Record all 3 overflow attributes because IE does not infer the shorthand\n\t\t// from identically-valued overflowX and overflowY and Edge just mirrors\n\t\t// the overflowX value there.\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Identify a display type, preferring old show/hide data over the CSS cascade\n\t\trestoreDisplay = dataShow && dataShow.display;\n\t\tif ( restoreDisplay == null ) {\n\t\t\trestoreDisplay = dataPriv.get( elem, \"display\" );\n\t\t}\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\tif ( display === \"none\" ) {\n\t\t\tif ( restoreDisplay ) {\n\t\t\t\tdisplay = restoreDisplay;\n\t\t\t} else {\n\n\t\t\t\t// Get nonempty value(s) by temporarily forcing visibility\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t\trestoreDisplay = elem.style.display || restoreDisplay;\n\t\t\t\tdisplay = jQuery.css( elem, \"display\" );\n\t\t\t\tshowHide( [ elem ] );\n\t\t\t}\n\t\t}\n\n\t\t// Animate inline elements as inline-block\n\t\tif ( display === \"inline\" || display === \"inline-block\" && restoreDisplay != null ) {\n\t\t\tif ( jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t\t// Restore the original display value at the end of pure show/hide animations\n\t\t\t\tif ( !propTween ) {\n\t\t\t\t\tanim.done( function() {\n\t\t\t\t\t\tstyle.display = restoreDisplay;\n\t\t\t\t\t} );\n\t\t\t\t\tif ( restoreDisplay == null ) {\n\t\t\t\t\t\tdisplay = style.display;\n\t\t\t\t\t\trestoreDisplay = display === \"none\" ? \"\" : display;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tanim.always( function() {\n\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t} );\n\t}\n\n\t// Implement show/hide animations\n\tpropTween = false;\n\tfor ( prop in orig ) {\n\n\t\t// General show/hide setup for this element animation\n\t\tif ( !propTween ) {\n\t\t\tif ( dataShow ) {\n\t\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\t\thidden = dataShow.hidden;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdataShow = dataPriv.access( elem, \"fxshow\", { display: restoreDisplay } );\n\t\t\t}\n\n\t\t\t// Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\t\t\tif ( toggle ) {\n\t\t\t\tdataShow.hidden = !hidden;\n\t\t\t}\n\n\t\t\t// Show elements before animating them\n\t\t\tif ( hidden ) {\n\t\t\t\tshowHide( [ elem ], true );\n\t\t\t}\n\n\t\t\t/* eslint-disable no-loop-func */\n\n\t\t\tanim.done( function() {\n\n\t\t\t\t/* eslint-enable no-loop-func */\n\n\t\t\t\t// The final step of a \"hide\" animation is actually hiding the element\n\t\t\t\tif ( !hidden ) {\n\t\t\t\t\tshowHide( [ elem ] );\n\t\t\t\t}\n\t\t\t\tdataPriv.remove( elem, \"fxshow\" );\n\t\t\t\tfor ( prop in orig ) {\n\t\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\t// Per-property setup\n\t\tpropTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\t\tif ( !( prop in dataShow ) ) {\n\t\t\tdataShow[ prop ] = propTween.start;\n\t\t\tif ( hidden ) {\n\t\t\t\tpropTween.end = propTween.start;\n\t\t\t\tpropTween.start = 0;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( Array.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// Not quite $.extend, this won't overwrite existing keys.\n\t\t\t// Reusing 'index' because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// Don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3 only\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (trac-12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\t// If there's more to do, yield\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t}\n\n\t\t\t// If this was an empty animation, synthesize a final progress notification\n\t\t\tif ( !length ) {\n\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t}\n\n\t\t\t// Resolve the animation and report its conclusion\n\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\treturn false;\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// If we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// Resolve when we played the last frame; otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tresult.stop.bind( result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\t// Attach callbacks from options\n\tanimation\n\t\t.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\treturn animation;\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnothtmlwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tisFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !isFunction( easing ) && easing\n\t};\n\n\t// Go to the end state if fx are off\n\tif ( jQuery.fx.off ) {\n\t\topt.duration = 0;\n\n\t} else {\n\t\tif ( typeof opt.duration !== \"number\" ) {\n\t\t\tif ( opt.duration in jQuery.fx.speeds ) {\n\t\t\t\topt.duration = jQuery.fx.speeds[ opt.duration ];\n\n\t\t\t} else {\n\t\t\t\topt.duration = jQuery.fx.speeds._default;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// Show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHiddenWithinTree ).css( \"opacity\", 0 ).show()\n\n\t\t\t// Animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || dataPriv.get( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\n\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = dataPriv.get( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Start the next in the queue if the last step wasn't forced.\n\t\t\t// Timers currently will call their complete callbacks, which\n\t\t\t// will dequeue but only if they were gotoEnd.\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = dataPriv.get( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// Enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// Empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// Look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( _i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ti = 0,\n\t\ttimers = jQuery.timers;\n\n\tfxNow = Date.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Run the timer and safely remove it when done (allowing for external removal)\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tjQuery.fx.start();\n};\n\njQuery.fx.interval = 13;\njQuery.fx.start = function() {\n\tif ( inProgress ) {\n\t\treturn;\n\t}\n\n\tinProgress = true;\n\tschedule();\n};\n\njQuery.fx.stop = function() {\n\tinProgress = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar input = document.createElement( \"input\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\tinput.type = \"checkbox\";\n\n\t// Support: Android <=4.3 only\n\t// Default value for a checkbox should be \"on\"\n\tsupport.checkOn = input.value !== \"\";\n\n\t// Support: IE <=11 only\n\t// Must access selectedIndex to make default options select\n\tsupport.optSelected = opt.selected;\n\n\t// Support: IE <=11 only\n\t// An input loses its value after becoming a radio\n\tinput = document.createElement( \"input\" );\n\tinput.value = \"t\";\n\tinput.type = \"radio\";\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar boolHook,\n\tattrHandle = jQuery.expr.attrHandle;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// Attribute hooks are determined by the lowercase version\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\thooks = jQuery.attrHooks[ name.toLowerCase() ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tnodeName( elem, \"input\" ) ) {\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name,\n\t\t\ti = 0,\n\n\t\t\t// Attribute names can contain non-HTML whitespace characters\n\t\t\t// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n\t\t\tattrNames = value && value.match( rnothtmlwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\telem.removeAttribute( name );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else {\n\t\t\telem.setAttribute( name, name );\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( _i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\tvar ret, handle,\n\t\t\tlowercaseName = name.toLowerCase();\n\n\t\tif ( !isXML ) {\n\n\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\thandle = attrHandle[ lowercaseName ];\n\t\t\tattrHandle[ lowercaseName ] = ret;\n\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\tlowercaseName :\n\t\t\t\tnull;\n\t\t\tattrHandle[ lowercaseName ] = handle;\n\t\t}\n\t\treturn ret;\n\t};\n} );\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tdelete this[ jQuery.propFix[ name ] || name ];\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// Support: IE <=9 - 11 only\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// Use proper attribute retrieval (trac-12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\tif ( tabindex ) {\n\t\t\t\t\treturn parseInt( tabindex, 10 );\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\trclickable.test( elem.nodeName ) &&\n\t\t\t\t\telem.href\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Support: IE <=11 only\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\n// eslint rule \"no-unused-expressions\" is disabled for this code\n// since it considers such accessions noop\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent && parent.parentNode ) {\n\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\n\t\t\t/* eslint no-unused-expressions: \"off\" */\n\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n\n\n\n\t// Strip and collapse whitespace according to HTML spec\n\t// https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\tfunction stripAndCollapse( value ) {\n\t\tvar tokens = value.match( rnothtmlwhite ) || [];\n\t\treturn tokens.join( \" \" );\n\t}\n\n\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\nfunction classesToArray( value ) {\n\tif ( Array.isArray( value ) ) {\n\t\treturn value;\n\t}\n\tif ( typeof value === \"string\" ) {\n\t\treturn value.match( rnothtmlwhite ) || [];\n\t}\n\treturn [];\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + className + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += className + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classNames, cur, curValue, className, i, finalValue;\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\tif ( classNames.length ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tcurValue = getClass( this );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = this.nodeType === 1 && ( \" \" + stripAndCollapse( curValue ) + \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + className + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + className + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = stripAndCollapse( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tthis.setAttribute( \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar classNames, className, i, self,\n\t\t\ttype = typeof value,\n\t\t\tisValidValue = type === \"string\" || Array.isArray( value );\n\n\t\tif ( isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof stateVal === \"boolean\" && isValidValue ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tclassNames = classesToArray( value );\n\n\t\treturn this.each( function() {\n\t\t\tif ( isValidValue ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\tself = jQuery( this );\n\n\t\t\t\tfor ( i = 0; i < classNames.length; i++ ) {\n\t\t\t\t\tclassName = classNames[ i ];\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed `false`,\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + stripAndCollapse( getClass( elem ) ) + \" \" ).indexOf( className ) > -1 ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\nvar rreturn = /\\r/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, valueIsFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\t// Handle most common string cases\n\t\t\t\tif ( typeof ret === \"string\" ) {\n\t\t\t\t\treturn ret.replace( rreturn, \"\" );\n\t\t\t\t}\n\n\t\t\t\t// Handle cases where value is null/undef or number\n\t\t\t\treturn ret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tvalueIsFunction = isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( valueIsFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\n\t\t\t} else if ( Array.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE <=10 - 11 only\n\t\t\t\t\t// option.text throws exceptions (trac-14686, trac-14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tstripAndCollapse( jQuery.text( elem ) );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option, i,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\",\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length;\n\n\t\t\t\tif ( index < 0 ) {\n\t\t\t\t\ti = max;\n\n\t\t\t\t} else {\n\t\t\t\t\ti = one ? index : 0;\n\t\t\t\t}\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t// IE8-9 doesn't update selected after form reset (trac-2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t!option.disabled &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t/* eslint-disable no-cond-assign */\n\n\t\t\t\t\tif ( option.selected =\n\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\n\t\t\t\t\t\toptionSet = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* eslint-enable no-cond-assign */\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\t\t\t\treturn values;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( Array.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\nvar location = window.location;\n\nvar nonce = { guid: Date.now() };\n\nvar rquery = ( /\\?/ );\n\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, parserErrorElem;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE throws on parseFromString with invalid input.\n\ttry {\n\t\txml = ( new window.DOMParser() ).parseFromString( data, \"text/xml\" );\n\t} catch ( e ) {}\n\n\tparserErrorElem = xml && xml.getElementsByTagName( \"parsererror\" )[ 0 ];\n\tif ( !xml || parserErrorElem ) {\n\t\tjQuery.error( \"Invalid XML: \" + (\n\t\t\tparserErrorElem ?\n\t\t\t\tjQuery.map( parserErrorElem.childNodes, function( el ) {\n\t\t\t\t\treturn el.textContent;\n\t\t\t\t} ).join( \"\\n\" ) :\n\t\t\t\tdata\n\t\t) );\n\t}\n\treturn xml;\n};\n\n\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\tstopPropagationCallback = function( e ) {\n\t\te.stopPropagation();\n\t};\n\njQuery.extend( jQuery.event, {\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\n\t\tvar i, cur, tmp, bubbleType, ontype, handle, special, lastElement,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = lastElement = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (trac-9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (trac-9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tlastElement = cur;\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( dataPriv.get( cur, \"events\" ) || Object.create( null ) )[ event.type ] &&\n\t\t\t\tdataPriv.get( cur, \"handle\" );\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif ( ( !special._default ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( elem ) ) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name as the event.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (trac-6170)\n\t\t\t\tif ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.addEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\telem[ type ]();\n\n\t\t\t\t\tif ( event.isPropagationStopped() ) {\n\t\t\t\t\t\tlastElement.removeEventListener( type, stopPropagationCallback );\n\t\t\t\t\t}\n\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\t// Used only for `focus(in | out)` events\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\t}\n\n} );\n\njQuery.fn.extend( {\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( Array.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && toType( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, valueOrFunction ) {\n\n\t\t\t// If value is a function, invoke it and use its return value\n\t\t\tvar value = isFunction( valueOrFunction ) ?\n\t\t\t\tvalueOrFunction() :\n\t\t\t\tvalueOrFunction;\n\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" +\n\t\t\t\tencodeURIComponent( value == null ? \"\" : value );\n\t\t};\n\n\tif ( a == null ) {\n\t\treturn \"\";\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} ).filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is( \":disabled\" ) so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} ).map( function( _i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\tif ( val == null ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\treturn jQuery.map( val, function( val ) {\n\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\nvar\n\tr20 = /%20/g,\n\trhash = /#.*$/,\n\trantiCache = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n\n\t// trac-7653, trac-8125, trac-8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t * - BEFORE asking for a transport\n\t * - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (trac-10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\noriginAnchor.href = location.href;\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || [];\n\n\t\tif ( isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType[ 0 ] === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes trac-9887\nfunction ajaxExtend( target, src ) {\n\tvar key, deep,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\n\tvar ct, type, finalDataType, firstDataType,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s.throws ) {\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": JSON.parse,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar transport,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// Request state (becomes false upon send and true upon completion)\n\t\t\tcompleted,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// uncached part of the url\n\t\t\tuncached,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( completed ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() + \" \" ] =\n\t\t\t\t\t\t\t\t\t( responseHeaders[ match[ 1 ].toLowerCase() + \" \" ] || [] )\n\t\t\t\t\t\t\t\t\t\t.concat( match[ 2 ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() + \" \" ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match.join( \", \" );\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn completed ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\tname = requestHeadersNames[ name.toLowerCase() ] =\n\t\t\t\t\t\t\trequestHeadersNames[ name.toLowerCase() ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( completed == null ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( completed ) {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Lazy-add the new callbacks in a way that preserves old ones\n\t\t\t\t\t\t\tfor ( code in map ) {\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR );\n\n\t\t// Add protocol if not provided (prefilters might expect it)\n\t\t// Handle falsy url in the settings object (trac-10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || location.href ) + \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\n\n\t\t// Alias method option to type as per ticket trac-12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = ( s.dataType || \"*\" ).toLowerCase().match( rnothtmlwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE <=8 - 11, Edge 12 - 15\n\t\t\t// IE throws exception on accessing the href property if url is malformed,\n\t\t\t// e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE <=8 - 11 only\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\n\t\t\t}\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( completed ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (trac-15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\t// Remove hash to simplify url manipulation\n\t\tcacheURL = s.url.replace( rhash, \"\" );\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// Remember the hash so we can put it back\n\t\t\tuncached = s.url.slice( cacheURL.length );\n\n\t\t\t// If data is available and should be processed, append data to url\n\t\t\tif ( s.data && ( s.processData || typeof s.data === \"string\" ) ) {\n\t\t\t\tcacheURL += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data;\n\n\t\t\t\t// trac-9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add or update anti-cache param if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\tcacheURL = cacheURL.replace( rantiCache, \"$1\" );\n\t\t\t\tuncached = ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ( nonce.guid++ ) +\n\t\t\t\t\tuncached;\n\t\t\t}\n\n\t\t\t// Put hash and anti-cache on the URL that will be requested (gh-1732)\n\t\t\ts.url = cacheURL + uncached;\n\n\t\t// Change '%20' to '+' if this is encoded form body content (gh-2658)\n\t\t} else if ( s.data && s.processData &&\n\t\t\t( s.contentType || \"\" ).indexOf( \"application/x-www-form-urlencoded\" ) === 0 ) {\n\t\t\ts.data = s.data.replace( r20, \"+\" );\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// Aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tcompleteDeferred.add( s.complete );\n\t\tjqXHR.done( s.success );\n\t\tjqXHR.fail( s.error );\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( completed ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tcompleted = false;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Rethrow post-completion exceptions\n\t\t\t\tif ( completed ) {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\n\t\t\t\t// Propagate others as results\n\t\t\t\tdone( -1, e );\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Ignore repeat invocations\n\t\t\tif ( completed ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tcompleted = true;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Use a noop converter for missing script but not if jsonp\n\t\t\tif ( !isSuccess &&\n\t\t\t\tjQuery.inArray( \"script\", s.dataTypes ) > -1 &&\n\t\t\t\tjQuery.inArray( \"json\", s.dataTypes ) < 0 ) {\n\t\t\t\ts.converters[ \"text script\" ] = function() {};\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Extract error from statusText and normalize for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( _i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// Shift arguments if data argument was omitted\n\t\tif ( isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\njQuery.ajaxPrefilter( function( s ) {\n\tvar i;\n\tfor ( i in s.headers ) {\n\t\tif ( i.toLowerCase() === \"content-type\" ) {\n\t\t\ts.contentType = s.headers[ i ] || \"\";\n\t\t}\n\t}\n} );\n\n\njQuery._evalUrl = function( url, options, doc ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (trac-11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\n\t\t// Only evaluate the response if it is successful (gh-4126)\n\t\t// dataFilter is not invoked for failure responses, so using it instead\n\t\t// of the default converter is kludgy but it works.\n\t\tconverters: {\n\t\t\t\"text script\": function() {}\n\t\t},\n\t\tdataFilter: function( response ) {\n\t\t\tjQuery.globalEval( response, options, doc );\n\t\t}\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tvar wrap;\n\n\t\tif ( this[ 0 ] ) {\n\t\t\tif ( isFunction( html ) ) {\n\t\t\t\thtml = html.call( this[ 0 ] );\n\t\t\t}\n\n\t\t\t// The elements to wrap the target around\n\t\t\twrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstElementChild ) {\n\t\t\t\t\telem = elem.firstElementChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar htmlIsFunction = isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function( selector ) {\n\t\tthis.parent( selector ).not( \"body\" ).each( function() {\n\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t} );\n\t\treturn this;\n\t}\n} );\n\n\njQuery.expr.pseudos.hidden = function( elem ) {\n\treturn !jQuery.expr.pseudos.visible( elem );\n};\njQuery.expr.pseudos.visible = function( elem ) {\n\treturn !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );\n};\n\n\n\n\njQuery.ajaxSettings.xhr = function() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\n\t\t// Support: IE <=9 only\n\t\t// trac-1450: sometimes IE returns 1223 when it should be 204\n\t\t1223: 204\n\t},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\n\n\t// Cross domain only allowed if supported through XMLHttpRequest\n\tif ( support.cors || xhrSupported && !options.crossDomain ) {\n\t\treturn {\n\t\t\tsend: function( headers, complete ) {\n\t\t\t\tvar i,\n\t\t\t\t\txhr = options.xhr();\n\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\n\n\t\t\t\t// Apply custom fields if provided\n\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Override mime type if needed\n\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t}\n\n\t\t\t\t// X-Requested-With header\n\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t}\n\n\t\t\t\t// Set headers\n\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t}\n\n\t\t\t\t// Callback\n\t\t\t\tcallback = function( type ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.ontimeout =\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = null;\n\n\t\t\t\t\t\t\tif ( type === \"abort\" ) {\n\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t} else if ( type === \"error\" ) {\n\n\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\t\t\t\t\t\t\t\t\t// File: protocol always yields status 0; see trac-8605, trac-14207\n\t\t\t\t\t\t\t\t\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tcomplete(\n\t\t\t\t\t\t\t\t\txhrSuccessStatus[ xhr.status ] || xhr.status,\n\t\t\t\t\t\t\t\t\txhr.statusText,\n\n\t\t\t\t\t\t\t\t\t// Support: IE <=9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\" ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\n\t\t\t\t\t\t\t\t\txhr.getAllResponseHeaders()\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t};\n\n\t\t\t\t// Listen to events\n\t\t\t\txhr.onload = callback();\n\t\t\t\terrorCallback = xhr.onerror = xhr.ontimeout = callback( \"error\" );\n\n\t\t\t\t// Support: IE 9 only\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\t// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Do send the request (this may raise an exception)\n\t\t\t\t\txhr.send( options.hasContent && options.data || null );\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// trac-14683: Only rethrow if this hasn't been notified as an error yet\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\n// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\njQuery.ajaxPrefilter( function( s ) {\n\tif ( s.crossDomain ) {\n\t\ts.contents.script = false;\n\t}\n} );\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and crossDomain\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain or forced-by-attrs requests\n\tif ( s.crossDomain || s.scriptAttrs ) {\n\t\tvar script, callback;\n\t\treturn {\n\t\t\tsend: function( _, complete ) {\n\t\t\t\tscript = jQuery( \"<script>\" )\n\t\t\t\t\t.attr( s.scriptAttrs || {} )\n\t\t\t\t\t.prop( { charset: s.scriptCharset, src: s.url } )\n\t\t\t\t\t.on( \"load error\", callback = function( evt ) {\n\t\t\t\t\t\tscript.remove();\n\t\t\t\t\t\tcallback = null;\n\t\t\t\t\t\tif ( evt ) {\n\t\t\t\t\t\t\tcomplete( evt.type === \"error\" ? 404 : 200, evt.type );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\tdocument.head.appendChild( script[ 0 ] );\n\t\t\t},\n\t\t\tabort: function() {\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback();\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce.guid++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// Force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// Make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// Save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// Support: Safari 8 only\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( typeof data !== \"string\" ) {\n\t\treturn [];\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\n\tvar base, parsed, scripts;\n\n\tif ( !context ) {\n\n\t\t// Stop scripts or inline event handlers from being executed immediately\n\t\t// by using document.implementation\n\t\tif ( support.createHTMLDocument ) {\n\t\t\tcontext = document.implementation.createHTMLDocument( \"\" );\n\n\t\t\t// Set the base href for the created document\n\t\t\t// so any parsed elements with URLs\n\t\t\t// are based on the document's URL (gh-2965)\n\t\t\tbase = context.createElement( \"base\" );\n\t\t\tbase.href = document.location.href;\n\t\t\tcontext.head.appendChild( base );\n\t\t} else {\n\t\t\tcontext = document;\n\t\t}\n\t}\n\n\tparsed = rsingleTag.exec( data );\n\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = stripAndCollapse( url.slice( off ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\njQuery.expr.pseudos.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// Set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\t( curCSSTop + curCSSLeft ).indexOf( \"auto\" ) > -1;\n\n\t\t// Need to be able to calculate position if either\n\t\t// top or left is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\n\t// offset() relates an element's border box to the document origin\n\toffset: function( options ) {\n\n\t\t// Preserve chaining for setter\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar rect, win,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !elem ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n\t\t// Support: IE <=11 only\n\t\t// Running getBoundingClientRect on a\n\t\t// disconnected node in IE throws an error\n\t\tif ( !elem.getClientRects().length ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\t// Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\t\trect = elem.getBoundingClientRect();\n\t\twin = elem.ownerDocument.defaultView;\n\t\treturn {\n\t\t\ttop: rect.top + win.pageYOffset,\n\t\t\tleft: rect.left + win.pageXOffset\n\t\t};\n\t},\n\n\t// position() relates an element's margin box to its offset parent's padding box\n\t// This corresponds to the behavior of CSS absolute positioning\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset, doc,\n\t\t\telem = this[ 0 ],\n\t\t\tparentOffset = { top: 0, left: 0 };\n\n\t\t// position:fixed elements are offset from the viewport, which itself always has zero offset\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// Assume position:fixed implies availability of getBoundingClientRect\n\t\t\toffset = elem.getBoundingClientRect();\n\n\t\t} else {\n\t\t\toffset = this.offset();\n\n\t\t\t// Account for the *real* offset parent, which can be the document or its root element\n\t\t\t// when a statically positioned element is identified\n\t\t\tdoc = elem.ownerDocument;\n\t\t\toffsetParent = elem.offsetParent || doc.documentElement;\n\t\t\twhile ( offsetParent &&\n\t\t\t\t( offsetParent === doc.body || offsetParent === doc.documentElement ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\n\t\t\t\toffsetParent = offsetParent.parentNode;\n\t\t\t}\n\t\t\tif ( offsetParent && offsetParent !== elem && offsetParent.nodeType === 1 ) {\n\n\t\t\t\t// Incorporate borders into its offset, since they are outside its content origin\n\t\t\t\tparentOffset = jQuery( offsetParent ).offset();\n\t\t\t\tparentOffset.top += jQuery.css( offsetParent, \"borderTopWidth\", true );\n\t\t\t\tparentOffset.left += jQuery.css( offsetParent, \"borderLeftWidth\", true );\n\t\t\t}\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\treturn {\n\t\t\ttop: offset.top - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t// documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = \"pageYOffset\" === prop;\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\n\t\t\t// Coalesce documents and windows\n\t\t\tvar win;\n\t\t\tif ( isWindow( elem ) ) {\n\t\t\t\twin = elem;\n\t\t\t} else if ( elem.nodeType === 9 ) {\n\t\t\t\twin = elem.defaultView;\n\t\t\t}\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? win[ prop ] : elem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.pageYOffset\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length );\n\t};\n} );\n\n// Support: Safari <=7 - 9.1, Chrome <=37 - 49\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n// getComputedStyle returns percent when specified for top/left/bottom/right;\n// rather than make the css module depend on the offset module, just check for it here\njQuery.each( [ \"top\", \"left\" ], function( _i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// If curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( {\n\t\tpadding: \"inner\" + name,\n\t\tcontent: type,\n\t\t\"\": \"outer\" + name\n\t}, function( defaultExtra, funcName ) {\n\n\t\t// Margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( isWindow( elem ) ) {\n\n\t\t\t\t\t// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n\t\t\t\t\treturn funcName.indexOf( \"outer\" ) === 0 ?\n\t\t\t\t\t\telem[ \"inner\" + name ] :\n\t\t\t\t\t\telem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable );\n\t\t};\n\t} );\n} );\n\n\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( _i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\n\thover: function( fnOver, fnOut ) {\n\t\treturn this\n\t\t\t.on( \"mouseenter\", fnOver )\n\t\t\t.on( \"mouseleave\", fnOut || fnOver );\n\t}\n} );\n\njQuery.each(\n\t( \"blur focus focusin focusout resize scroll click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup contextmenu\" ).split( \" \" ),\n\tfunction( _i, name ) {\n\n\t\t// Handle event binding\n\t\tjQuery.fn[ name ] = function( data, fn ) {\n\t\t\treturn arguments.length > 0 ?\n\t\t\t\tthis.on( name, null, data, fn ) :\n\t\t\t\tthis.trigger( name );\n\t\t};\n\t}\n);\n\n\n\n\n// Support: Android <=4.0 only\n// Make sure we trim BOM and NBSP\n// Require that the \"whitespace run\" starts from a non-whitespace\n// to avoid O(N^2) behavior when the engine would try matching \"\\s+$\" at each space position.\nvar rtrim = /^[\\s\\uFEFF\\xA0]+|([^\\s\\uFEFF\\xA0])[\\s\\uFEFF\\xA0]+$/g;\n\n// Bind a function to a context, optionally partially applying any\n// arguments.\n// jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n// However, it is not slated for removal any time soon\njQuery.proxy = function( fn, context ) {\n\tvar tmp, args, proxy;\n\n\tif ( typeof context === \"string\" ) {\n\t\ttmp = fn[ context ];\n\t\tcontext = fn;\n\t\tfn = tmp;\n\t}\n\n\t// Quick check to determine if target is callable, in the spec\n\t// this throws a TypeError, but we will just return undefined.\n\tif ( !isFunction( fn ) ) {\n\t\treturn undefined;\n\t}\n\n\t// Simulated bind\n\targs = slice.call( arguments, 2 );\n\tproxy = function() {\n\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t};\n\n\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\treturn proxy;\n};\n\njQuery.holdReady = function( hold ) {\n\tif ( hold ) {\n\t\tjQuery.readyWait++;\n\t} else {\n\t\tjQuery.ready( true );\n\t}\n};\njQuery.isArray = Array.isArray;\njQuery.parseJSON = JSON.parse;\njQuery.nodeName = nodeName;\njQuery.isFunction = isFunction;\njQuery.isWindow = isWindow;\njQuery.camelCase = camelCase;\njQuery.type = toType;\n\njQuery.now = Date.now;\n\njQuery.isNumeric = function( obj ) {\n\n\t// As of jQuery 3.0, isNumeric is limited to\n\t// strings and numbers (primitives or objects)\n\t// that can be coerced to finite numbers (gh-2662)\n\tvar type = jQuery.type( obj );\n\treturn ( type === \"number\" || type === \"string\" ) &&\n\n\t\t// parseFloat NaNs numeric-cast false positives (\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t!isNaN( obj - parseFloat( obj ) );\n};\n\njQuery.trim = function( text ) {\n\treturn text == null ?\n\t\t\"\" :\n\t\t( text + \"\" ).replace( rtrim, \"$1\" );\n};\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in AMD\n// (trac-7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (trac-13566)\nif ( typeof noGlobal === \"undefined\" ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\n\n\n\nreturn jQuery;\n} );\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function(render, schedule, console) {\n\tvar subscriptions = []\n\tvar pending = false\n\tvar offset = -1\n\n\tfunction sync() {\n\t\tfor (offset = 0; offset < subscriptions.length; offset += 2) {\n\t\t\ttry { render(subscriptions[offset], Vnode(subscriptions[offset + 1]), redraw) }\n\t\t\tcatch (e) { console.error(e) }\n\t\t}\n\t\toffset = -1\n\t}\n\n\tfunction redraw() {\n\t\tif (!pending) {\n\t\t\tpending = true\n\t\t\tschedule(function() {\n\t\t\t\tpending = false\n\t\t\t\tsync()\n\t\t\t})\n\t\t}\n\t}\n\n\tredraw.sync = sync\n\n\tfunction mount(root, component) {\n\t\tif (component != null && component.view == null && typeof component !== \"function\") {\n\t\t\tthrow new TypeError(\"m.mount expects a component, not a vnode.\")\n\t\t}\n\n\t\tvar index = subscriptions.indexOf(root)\n\t\tif (index >= 0) {\n\t\t\tsubscriptions.splice(index, 2)\n\t\t\tif (index <= offset) offset -= 2\n\t\t\trender(root, [])\n\t\t}\n\n\t\tif (component != null) {\n\t\t\tsubscriptions.push(root, component)\n\t\t\trender(root, Vnode(component), redraw)\n\t\t}\n\t}\n\n\treturn {mount: mount, redraw: redraw}\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar m = require(\"../render/hyperscript\")\nvar Promise = require(\"../promise/promise\")\n\nvar buildPathname = require(\"../pathname/build\")\nvar parsePathname = require(\"../pathname/parse\")\nvar compileTemplate = require(\"../pathname/compileTemplate\")\nvar assign = require(\"../util/assign\")\nvar censor = require(\"../util/censor\")\n\nvar sentinel = {}\n\nfunction decodeURIComponentSave(component) {\n\ttry {\n\t\treturn decodeURIComponent(component)\n\t} catch(e) {\n\t\treturn component\n\t}\n}\n\nmodule.exports = function($window, mountRedraw) {\n\tvar callAsync = $window == null\n\t\t// In case Mithril.js' loaded globally without the DOM, let's not break\n\t\t? null\n\t\t: typeof $window.setImmediate === \"function\" ? $window.setImmediate : $window.setTimeout\n\tvar p = Promise.resolve()\n\n\tvar scheduled = false\n\n\t// state === 0: init\n\t// state === 1: scheduled\n\t// state === 2: done\n\tvar ready = false\n\tvar state = 0\n\n\tvar compiled, fallbackRoute\n\n\tvar currentResolver = sentinel, component, attrs, currentPath, lastUpdate\n\n\tvar RouterRoot = {\n\t\tonbeforeupdate: function() {\n\t\t\tstate = state ? 2 : 1\n\t\t\treturn !(!state || sentinel === currentResolver)\n\t\t},\n\t\tonremove: function() {\n\t\t\t$window.removeEventListener(\"popstate\", fireAsync, false)\n\t\t\t$window.removeEventListener(\"hashchange\", resolveRoute, false)\n\t\t},\n\t\tview: function() {\n\t\t\tif (!state || sentinel === currentResolver) return\n\t\t\t// Wrap in a fragment to preserve existing key semantics\n\t\t\tvar vnode = [Vnode(component, attrs.key, attrs)]\n\t\t\tif (currentResolver) vnode = currentResolver.render(vnode[0])\n\t\t\treturn vnode\n\t\t},\n\t}\n\n\tvar SKIP = route.SKIP = {}\n\n\tfunction resolveRoute() {\n\t\tscheduled = false\n\t\t// Consider the pathname holistically. The prefix might even be invalid,\n\t\t// but that's not our problem.\n\t\tvar prefix = $window.location.hash\n\t\tif (route.prefix[0] !== \"#\") {\n\t\t\tprefix = $window.location.search + prefix\n\t\t\tif (route.prefix[0] !== \"?\") {\n\t\t\t\tprefix = $window.location.pathname + prefix\n\t\t\t\tif (prefix[0] !== \"/\") prefix = \"/\" + prefix\n\t\t\t}\n\t\t}\n\t\t// This seemingly useless `.concat()` speeds up the tests quite a bit,\n\t\t// since the representation is consistently a relatively poorly\n\t\t// optimized cons string.\n\t\tvar path = prefix.concat()\n\t\t\t.replace(/(?:%[a-f89][a-f0-9])+/gim, decodeURIComponentSave)\n\t\t\t.slice(route.prefix.length)\n\t\tvar data = parsePathname(path)\n\n\t\tassign(data.params, $window.history.state)\n\n\t\tfunction reject(e) {\n\t\t\tconsole.error(e)\n\t\t\tsetPath(fallbackRoute, null, {replace: true})\n\t\t}\n\n\t\tloop(0)\n\t\tfunction loop(i) {\n\t\t\t// state === 0: init\n\t\t\t// state === 1: scheduled\n\t\t\t// state === 2: done\n\t\t\tfor (; i < compiled.length; i++) {\n\t\t\t\tif (compiled[i].check(data)) {\n\t\t\t\t\tvar payload = compiled[i].component\n\t\t\t\t\tvar matchedRoute = compiled[i].route\n\t\t\t\t\tvar localComp = payload\n\t\t\t\t\tvar update = lastUpdate = function(comp) {\n\t\t\t\t\t\tif (update !== lastUpdate) return\n\t\t\t\t\t\tif (comp === SKIP) return loop(i + 1)\n\t\t\t\t\t\tcomponent = comp != null && (typeof comp.view === \"function\" || typeof comp === \"function\")? comp : \"div\"\n\t\t\t\t\t\tattrs = data.params, currentPath = path, lastUpdate = null\n\t\t\t\t\t\tcurrentResolver = payload.render ? payload : null\n\t\t\t\t\t\tif (state === 2) mountRedraw.redraw()\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tstate = 2\n\t\t\t\t\t\t\tmountRedraw.redraw.sync()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t// There's no understating how much I *wish* I could\n\t\t\t\t\t// use `async`/`await` here...\n\t\t\t\t\tif (payload.view || typeof payload === \"function\") {\n\t\t\t\t\t\tpayload = {}\n\t\t\t\t\t\tupdate(localComp)\n\t\t\t\t\t}\n\t\t\t\t\telse if (payload.onmatch) {\n\t\t\t\t\t\tp.then(function () {\n\t\t\t\t\t\t\treturn payload.onmatch(data.params, path, matchedRoute)\n\t\t\t\t\t\t}).then(update, path === fallbackRoute ? null : reject)\n\t\t\t\t\t}\n\t\t\t\t\telse update(\"div\")\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (path === fallbackRoute) {\n\t\t\t\tthrow new Error(\"Could not resolve default route \" + fallbackRoute + \".\")\n\t\t\t}\n\t\t\tsetPath(fallbackRoute, null, {replace: true})\n\t\t}\n\t}\n\n\t// Set it unconditionally so `m.route.set` and `m.route.Link` both work,\n\t// even if neither `pushState` nor `hashchange` are supported. It's\n\t// cleared if `hashchange` is used, since that makes it automatically\n\t// async.\n\tfunction fireAsync() {\n\t\tif (!scheduled) {\n\t\t\tscheduled = true\n\t\t\t// TODO: just do `mountRedraw.redraw()` here and elide the timer\n\t\t\t// dependency. Note that this will muck with tests a *lot*, so it's\n\t\t\t// not as easy of a change as it sounds.\n\t\t\tcallAsync(resolveRoute)\n\t\t}\n\t}\n\n\tfunction setPath(path, data, options) {\n\t\tpath = buildPathname(path, data)\n\t\tif (ready) {\n\t\t\tfireAsync()\n\t\t\tvar state = options ? options.state : null\n\t\t\tvar title = options ? options.title : null\n\t\t\tif (options && options.replace) $window.history.replaceState(state, title, route.prefix + path)\n\t\t\telse $window.history.pushState(state, title, route.prefix + path)\n\t\t}\n\t\telse {\n\t\t\t$window.location.href = route.prefix + path\n\t\t}\n\t}\n\n\tfunction route(root, defaultRoute, routes) {\n\t\tif (!root) throw new TypeError(\"DOM element being rendered to does not exist.\")\n\n\t\tcompiled = Object.keys(routes).map(function(route) {\n\t\t\tif (route[0] !== \"/\") throw new SyntaxError(\"Routes must start with a '/'.\")\n\t\t\tif ((/:([^\\/\\.-]+)(\\.{3})?:/).test(route)) {\n\t\t\t\tthrow new SyntaxError(\"Route parameter names must be separated with either '/', '.', or '-'.\")\n\t\t\t}\n\t\t\treturn {\n\t\t\t\troute: route,\n\t\t\t\tcomponent: routes[route],\n\t\t\t\tcheck: compileTemplate(route),\n\t\t\t}\n\t\t})\n\t\tfallbackRoute = defaultRoute\n\t\tif (defaultRoute != null) {\n\t\t\tvar defaultData = parsePathname(defaultRoute)\n\n\t\t\tif (!compiled.some(function (i) { return i.check(defaultData) })) {\n\t\t\t\tthrow new ReferenceError(\"Default route doesn't match any known routes.\")\n\t\t\t}\n\t\t}\n\n\t\tif (typeof $window.history.pushState === \"function\") {\n\t\t\t$window.addEventListener(\"popstate\", fireAsync, false)\n\t\t} else if (route.prefix[0] === \"#\") {\n\t\t\t$window.addEventListener(\"hashchange\", resolveRoute, false)\n\t\t}\n\n\t\tready = true\n\t\tmountRedraw.mount(root, RouterRoot)\n\t\tresolveRoute()\n\t}\n\troute.set = function(path, data, options) {\n\t\tif (lastUpdate != null) {\n\t\t\toptions = options || {}\n\t\t\toptions.replace = true\n\t\t}\n\t\tlastUpdate = null\n\t\tsetPath(path, data, options)\n\t}\n\troute.get = function() {return currentPath}\n\troute.prefix = \"#!\"\n\troute.Link = {\n\t\tview: function(vnode) {\n\t\t\t// Omit the used parameters from the rendered element - they are\n\t\t\t// internal. Also, censor the various lifecycle methods.\n\t\t\t//\n\t\t\t// We don't strip the other parameters because for convenience we\n\t\t\t// let them be specified in the selector as well.\n\t\t\tvar child = m(\n\t\t\t\tvnode.attrs.selector || \"a\",\n\t\t\t\tcensor(vnode.attrs, [\"options\", \"params\", \"selector\", \"onclick\"]),\n\t\t\t\tvnode.children\n\t\t\t)\n\t\t\tvar options, onclick, href\n\n\t\t\t// Let's provide a *right* way to disable a route link, rather than\n\t\t\t// letting people screw up accessibility on accident.\n\t\t\t//\n\t\t\t// The attribute is coerced so users don't get surprised over\n\t\t\t// `disabled: 0` resulting in a button that's somehow routable\n\t\t\t// despite being visibly disabled.\n\t\t\tif (child.attrs.disabled = Boolean(child.attrs.disabled)) {\n\t\t\t\tchild.attrs.href = null\n\t\t\t\tchild.attrs[\"aria-disabled\"] = \"true\"\n\t\t\t\t// If you *really* do want add `onclick` on a disabled link, use\n\t\t\t\t// an `oncreate` hook to add it.\n\t\t\t} else {\n\t\t\t\toptions = vnode.attrs.options\n\t\t\t\tonclick = vnode.attrs.onclick\n\t\t\t\t// Easier to build it now to keep it isomorphic.\n\t\t\t\thref = buildPathname(child.attrs.href, vnode.attrs.params)\n\t\t\t\tchild.attrs.href = route.prefix + href\n\t\t\t\tchild.attrs.onclick = function(e) {\n\t\t\t\t\tvar result\n\t\t\t\t\tif (typeof onclick === \"function\") {\n\t\t\t\t\t\tresult = onclick.call(e.currentTarget, e)\n\t\t\t\t\t} else if (onclick == null || typeof onclick !== \"object\") {\n\t\t\t\t\t\t// do nothing\n\t\t\t\t\t} else if (typeof onclick.handleEvent === \"function\") {\n\t\t\t\t\t\tonclick.handleEvent(e)\n\t\t\t\t\t}\n\n\t\t\t\t\t// Adapted from React Router's implementation:\n\t\t\t\t\t// https://github.com/ReactTraining/react-router/blob/520a0acd48ae1b066eb0b07d6d4d1790a1d02482/packages/react-router-dom/modules/Link.js\n\t\t\t\t\t//\n\t\t\t\t\t// Try to be flexible and intuitive in how we handle links.\n\t\t\t\t\t// Fun fact: links aren't as obvious to get right as you\n\t\t\t\t\t// would expect. There's a lot more valid ways to click a\n\t\t\t\t\t// link than this, and one might want to not simply click a\n\t\t\t\t\t// link, but right click or command-click it to copy the\n\t\t\t\t\t// link target, etc. Nope, this isn't just for blind people.\n\t\t\t\t\tif (\n\t\t\t\t\t\t// Skip if `onclick` prevented default\n\t\t\t\t\t\tresult !== false && !e.defaultPrevented &&\n\t\t\t\t\t\t// Ignore everything but left clicks\n\t\t\t\t\t\t(e.button === 0 || e.which === 0 || e.which === 1) &&\n\t\t\t\t\t\t// Let the browser handle `target=_blank`, etc.\n\t\t\t\t\t\t(!e.currentTarget.target || e.currentTarget.target === \"_self\") &&\n\t\t\t\t\t\t// No modifier keys\n\t\t\t\t\t\t!e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey\n\t\t\t\t\t) {\n\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\te.redraw = false\n\t\t\t\t\t\troute.set(href, null, options)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn child\n\t\t},\n\t}\n\troute.param = function(key) {\n\t\treturn attrs && key != null ? attrs[key] : attrs\n\t}\n\n\treturn route\n}\n","\"use strict\"\n\nvar hyperscript = require(\"./render/hyperscript\")\n\nhyperscript.trust = require(\"./render/trust\")\nhyperscript.fragment = require(\"./render/fragment\")\n\nmodule.exports = hyperscript\n","\"use strict\"\n\nvar hyperscript = require(\"./hyperscript\")\nvar request = require(\"./request\")\nvar mountRedraw = require(\"./mount-redraw\")\n\nvar m = function m() { return hyperscript.apply(this, arguments) }\nm.m = hyperscript\nm.trust = hyperscript.trust\nm.fragment = hyperscript.fragment\nm.Fragment = \"[\"\nm.mount = mountRedraw.mount\nm.route = require(\"./route\")\nm.render = require(\"./render\")\nm.redraw = mountRedraw.redraw\nm.request = request.request\nm.jsonp = request.jsonp\nm.parseQueryString = require(\"./querystring/parse\")\nm.buildQueryString = require(\"./querystring/build\")\nm.parsePathname = require(\"./pathname/parse\")\nm.buildPathname = require(\"./pathname/build\")\nm.vnode = require(\"./render/vnode\")\nm.PromisePolyfill = require(\"./promise/polyfill\")\nm.censor = require(\"./util/censor\")\n\nmodule.exports = m\n","\"use strict\"\n\nvar render = require(\"./render\")\n\nmodule.exports = require(\"./api/mount-redraw\")(render, typeof requestAnimationFrame !== \"undefined\" ? requestAnimationFrame : null, typeof console !== \"undefined\" ? console : null)\n","\"use strict\"\n\nvar buildQueryString = require(\"../querystring/build\")\nvar assign = require(\"../util/assign\")\n\n// Returns `path` from `template` + `params`\nmodule.exports = function(template, params) {\n\tif ((/:([^\\/\\.-]+)(\\.{3})?:/).test(template)) {\n\t\tthrow new SyntaxError(\"Template parameter names must be separated by either a '/', '-', or '.'.\")\n\t}\n\tif (params == null) return template\n\tvar queryIndex = template.indexOf(\"?\")\n\tvar hashIndex = template.indexOf(\"#\")\n\tvar queryEnd = hashIndex < 0 ? template.length : hashIndex\n\tvar pathEnd = queryIndex < 0 ? queryEnd : queryIndex\n\tvar path = template.slice(0, pathEnd)\n\tvar query = {}\n\n\tassign(query, params)\n\n\tvar resolved = path.replace(/:([^\\/\\.-]+)(\\.{3})?/g, function(m, key, variadic) {\n\t\tdelete query[key]\n\t\t// If no such parameter exists, don't interpolate it.\n\t\tif (params[key] == null) return m\n\t\t// Escape normal parameters, but not variadic ones.\n\t\treturn variadic ? params[key] : encodeURIComponent(String(params[key]))\n\t})\n\n\t// In case the template substitution adds new query/hash parameters.\n\tvar newQueryIndex = resolved.indexOf(\"?\")\n\tvar newHashIndex = resolved.indexOf(\"#\")\n\tvar newQueryEnd = newHashIndex < 0 ? resolved.length : newHashIndex\n\tvar newPathEnd = newQueryIndex < 0 ? newQueryEnd : newQueryIndex\n\tvar result = resolved.slice(0, newPathEnd)\n\n\tif (queryIndex >= 0) result += template.slice(queryIndex, queryEnd)\n\tif (newQueryIndex >= 0) result += (queryIndex < 0 ? \"?\" : \"&\") + resolved.slice(newQueryIndex, newQueryEnd)\n\tvar querystring = buildQueryString(query)\n\tif (querystring) result += (queryIndex < 0 && newQueryIndex < 0 ? \"?\" : \"&\") + querystring\n\tif (hashIndex >= 0) result += template.slice(hashIndex)\n\tif (newHashIndex >= 0) result += (hashIndex < 0 ? \"\" : \"&\") + resolved.slice(newHashIndex)\n\treturn result\n}\n","\"use strict\"\n\nvar parsePathname = require(\"./parse\")\n\n// Compiles a template into a function that takes a resolved path (without query\n// strings) and returns an object containing the template parameters with their\n// parsed values. This expects the input of the compiled template to be the\n// output of `parsePathname`. Note that it does *not* remove query parameters\n// specified in the template.\nmodule.exports = function(template) {\n\tvar templateData = parsePathname(template)\n\tvar templateKeys = Object.keys(templateData.params)\n\tvar keys = []\n\tvar regexp = new RegExp(\"^\" + templateData.path.replace(\n\t\t// I escape literal text so people can use things like `:file.:ext` or\n\t\t// `:lang-:locale` in routes. This is all merged into one pass so I\n\t\t// don't also accidentally escape `-` and make it harder to detect it to\n\t\t// ban it from template parameters.\n\t\t/:([^\\/.-]+)(\\.{3}|\\.(?!\\.)|-)?|[\\\\^$*+.()|\\[\\]{}]/g,\n\t\tfunction(m, key, extra) {\n\t\t\tif (key == null) return \"\\\\\" + m\n\t\t\tkeys.push({k: key, r: extra === \"...\"})\n\t\t\tif (extra === \"...\") return \"(.*)\"\n\t\t\tif (extra === \".\") return \"([^/]+)\\\\.\"\n\t\t\treturn \"([^/]+)\" + (extra || \"\")\n\t\t}\n\t) + \"$\")\n\treturn function(data) {\n\t\t// First, check the params. Usually, there isn't any, and it's just\n\t\t// checking a static set.\n\t\tfor (var i = 0; i < templateKeys.length; i++) {\n\t\t\tif (templateData.params[templateKeys[i]] !== data.params[templateKeys[i]]) return false\n\t\t}\n\t\t// If no interpolations exist, let's skip all the ceremony\n\t\tif (!keys.length) return regexp.test(data.path)\n\t\tvar values = regexp.exec(data.path)\n\t\tif (values == null) return false\n\t\tfor (var i = 0; i < keys.length; i++) {\n\t\t\tdata.params[keys[i].k] = keys[i].r ? values[i + 1] : decodeURIComponent(values[i + 1])\n\t\t}\n\t\treturn true\n\t}\n}\n","\"use strict\"\n\nvar parseQueryString = require(\"../querystring/parse\")\n\n// Returns `{path, params}` from `url`\nmodule.exports = function(url) {\n\tvar queryIndex = url.indexOf(\"?\")\n\tvar hashIndex = url.indexOf(\"#\")\n\tvar queryEnd = hashIndex < 0 ? url.length : hashIndex\n\tvar pathEnd = queryIndex < 0 ? queryEnd : queryIndex\n\tvar path = url.slice(0, pathEnd).replace(/\\/{2,}/g, \"/\")\n\n\tif (!path) path = \"/\"\n\telse {\n\t\tif (path[0] !== \"/\") path = \"/\" + path\n\t\tif (path.length > 1 && path[path.length - 1] === \"/\") path = path.slice(0, -1)\n\t}\n\treturn {\n\t\tpath: path,\n\t\tparams: queryIndex < 0\n\t\t\t? {}\n\t\t\t: parseQueryString(url.slice(queryIndex + 1, queryEnd)),\n\t}\n}\n","\"use strict\"\n/** @constructor */\nvar PromisePolyfill = function(executor) {\n\tif (!(this instanceof PromisePolyfill)) throw new Error(\"Promise must be called with 'new'.\")\n\tif (typeof executor !== \"function\") throw new TypeError(\"executor must be a function.\")\n\n\tvar self = this, resolvers = [], rejectors = [], resolveCurrent = handler(resolvers, true), rejectCurrent = handler(rejectors, false)\n\tvar instance = self._instance = {resolvers: resolvers, rejectors: rejectors}\n\tvar callAsync = typeof setImmediate === \"function\" ? setImmediate : setTimeout\n\tfunction handler(list, shouldAbsorb) {\n\t\treturn function execute(value) {\n\t\t\tvar then\n\t\t\ttry {\n\t\t\t\tif (shouldAbsorb && value != null && (typeof value === \"object\" || typeof value === \"function\") && typeof (then = value.then) === \"function\") {\n\t\t\t\t\tif (value === self) throw new TypeError(\"Promise can't be resolved with itself.\")\n\t\t\t\t\texecuteOnce(then.bind(value))\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tcallAsync(function() {\n\t\t\t\t\t\tif (!shouldAbsorb && list.length === 0) console.error(\"Possible unhandled promise rejection:\", value)\n\t\t\t\t\t\tfor (var i = 0; i < list.length; i++) list[i](value)\n\t\t\t\t\t\tresolvers.length = 0, rejectors.length = 0\n\t\t\t\t\t\tinstance.state = shouldAbsorb\n\t\t\t\t\t\tinstance.retry = function() {execute(value)}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\trejectCurrent(e)\n\t\t\t}\n\t\t}\n\t}\n\tfunction executeOnce(then) {\n\t\tvar runs = 0\n\t\tfunction run(fn) {\n\t\t\treturn function(value) {\n\t\t\t\tif (runs++ > 0) return\n\t\t\t\tfn(value)\n\t\t\t}\n\t\t}\n\t\tvar onerror = run(rejectCurrent)\n\t\ttry {then(run(resolveCurrent), onerror)} catch (e) {onerror(e)}\n\t}\n\n\texecuteOnce(executor)\n}\nPromisePolyfill.prototype.then = function(onFulfilled, onRejection) {\n\tvar self = this, instance = self._instance\n\tfunction handle(callback, list, next, state) {\n\t\tlist.push(function(value) {\n\t\t\tif (typeof callback !== \"function\") next(value)\n\t\t\telse try {resolveNext(callback(value))} catch (e) {if (rejectNext) rejectNext(e)}\n\t\t})\n\t\tif (typeof instance.retry === \"function\" && state === instance.state) instance.retry()\n\t}\n\tvar resolveNext, rejectNext\n\tvar promise = new PromisePolyfill(function(resolve, reject) {resolveNext = resolve, rejectNext = reject})\n\thandle(onFulfilled, instance.resolvers, resolveNext, true), handle(onRejection, instance.rejectors, rejectNext, false)\n\treturn promise\n}\nPromisePolyfill.prototype.catch = function(onRejection) {\n\treturn this.then(null, onRejection)\n}\nPromisePolyfill.prototype.finally = function(callback) {\n\treturn this.then(\n\t\tfunction(value) {\n\t\t\treturn PromisePolyfill.resolve(callback()).then(function() {\n\t\t\t\treturn value\n\t\t\t})\n\t\t},\n\t\tfunction(reason) {\n\t\t\treturn PromisePolyfill.resolve(callback()).then(function() {\n\t\t\t\treturn PromisePolyfill.reject(reason);\n\t\t\t})\n\t\t}\n\t)\n}\nPromisePolyfill.resolve = function(value) {\n\tif (value instanceof PromisePolyfill) return value\n\treturn new PromisePolyfill(function(resolve) {resolve(value)})\n}\nPromisePolyfill.reject = function(value) {\n\treturn new PromisePolyfill(function(resolve, reject) {reject(value)})\n}\nPromisePolyfill.all = function(list) {\n\treturn new PromisePolyfill(function(resolve, reject) {\n\t\tvar total = list.length, count = 0, values = []\n\t\tif (list.length === 0) resolve([])\n\t\telse for (var i = 0; i < list.length; i++) {\n\t\t\t(function(i) {\n\t\t\t\tfunction consume(value) {\n\t\t\t\t\tcount++\n\t\t\t\t\tvalues[i] = value\n\t\t\t\t\tif (count === total) resolve(values)\n\t\t\t\t}\n\t\t\t\tif (list[i] != null && (typeof list[i] === \"object\" || typeof list[i] === \"function\") && typeof list[i].then === \"function\") {\n\t\t\t\t\tlist[i].then(consume, reject)\n\t\t\t\t}\n\t\t\t\telse consume(list[i])\n\t\t\t})(i)\n\t\t}\n\t})\n}\nPromisePolyfill.race = function(list) {\n\treturn new PromisePolyfill(function(resolve, reject) {\n\t\tfor (var i = 0; i < list.length; i++) {\n\t\t\tlist[i].then(resolve, reject)\n\t\t}\n\t})\n}\n\nmodule.exports = PromisePolyfill\n","/* global window */\n\"use strict\"\n\nvar PromisePolyfill = require(\"./polyfill\")\n\nif (typeof window !== \"undefined\") {\n\tif (typeof window.Promise === \"undefined\") {\n\t\twindow.Promise = PromisePolyfill\n\t} else if (!window.Promise.prototype.finally) {\n\t\twindow.Promise.prototype.finally = PromisePolyfill.prototype.finally\n\t}\n\tmodule.exports = window.Promise\n} else if (typeof global !== \"undefined\") {\n\tif (typeof global.Promise === \"undefined\") {\n\t\tglobal.Promise = PromisePolyfill\n\t} else if (!global.Promise.prototype.finally) {\n\t\tglobal.Promise.prototype.finally = PromisePolyfill.prototype.finally\n\t}\n\tmodule.exports = global.Promise\n} else {\n\tmodule.exports = PromisePolyfill\n}\n","\"use strict\"\n\nmodule.exports = function(object) {\n\tif (Object.prototype.toString.call(object) !== \"[object Object]\") return \"\"\n\n\tvar args = []\n\tfor (var key in object) {\n\t\tdestructure(key, object[key])\n\t}\n\n\treturn args.join(\"&\")\n\n\tfunction destructure(key, value) {\n\t\tif (Array.isArray(value)) {\n\t\t\tfor (var i = 0; i < value.length; i++) {\n\t\t\t\tdestructure(key + \"[\" + i + \"]\", value[i])\n\t\t\t}\n\t\t}\n\t\telse if (Object.prototype.toString.call(value) === \"[object Object]\") {\n\t\t\tfor (var i in value) {\n\t\t\t\tdestructure(key + \"[\" + i + \"]\", value[i])\n\t\t\t}\n\t\t}\n\t\telse args.push(encodeURIComponent(key) + (value != null && value !== \"\" ? \"=\" + encodeURIComponent(value) : \"\"))\n\t}\n}\n","\"use strict\"\n\nfunction decodeURIComponentSave(str) {\n\ttry {\n\t\treturn decodeURIComponent(str)\n\t} catch(err) {\n\t\treturn str\n\t}\n}\n\nmodule.exports = function(string) {\n\tif (string === \"\" || string == null) return {}\n\tif (string.charAt(0) === \"?\") string = string.slice(1)\n\n\tvar entries = string.split(\"&\"), counters = {}, data = {}\n\tfor (var i = 0; i < entries.length; i++) {\n\t\tvar entry = entries[i].split(\"=\")\n\t\tvar key = decodeURIComponentSave(entry[0])\n\t\tvar value = entry.length === 2 ? decodeURIComponentSave(entry[1]) : \"\"\n\n\t\tif (value === \"true\") value = true\n\t\telse if (value === \"false\") value = false\n\n\t\tvar levels = key.split(/\\]\\[?|\\[/)\n\t\tvar cursor = data\n\t\tif (key.indexOf(\"[\") > -1) levels.pop()\n\t\tfor (var j = 0; j < levels.length; j++) {\n\t\t\tvar level = levels[j], nextLevel = levels[j + 1]\n\t\t\tvar isNumber = nextLevel == \"\" || !isNaN(parseInt(nextLevel, 10))\n\t\t\tif (level === \"\") {\n\t\t\t\tvar key = levels.slice(0, j).join()\n\t\t\t\tif (counters[key] == null) {\n\t\t\t\t\tcounters[key] = Array.isArray(cursor) ? cursor.length : 0\n\t\t\t\t}\n\t\t\t\tlevel = counters[key]++\n\t\t\t}\n\t\t\t// Disallow direct prototype pollution\n\t\t\telse if (level === \"__proto__\") break\n\t\t\tif (j === levels.length - 1) cursor[level] = value\n\t\t\telse {\n\t\t\t\t// Read own properties exclusively to disallow indirect\n\t\t\t\t// prototype pollution\n\t\t\t\tvar desc = Object.getOwnPropertyDescriptor(cursor, level)\n\t\t\t\tif (desc != null) desc = desc.value\n\t\t\t\tif (desc == null) cursor[level] = desc = isNumber ? [] : {}\n\t\t\t\tcursor = desc\n\t\t\t}\n\t\t}\n\t}\n\treturn data\n}\n","\"use strict\"\n\nmodule.exports = require(\"./render/render\")(typeof window !== \"undefined\" ? window : null)\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar hyperscriptVnode = require(\"./hyperscriptVnode\")\n\nmodule.exports = function() {\n\tvar vnode = hyperscriptVnode.apply(0, arguments)\n\n\tvnode.tag = \"[\"\n\tvnode.children = Vnode.normalizeChildren(vnode.children)\n\treturn vnode\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\nvar hyperscriptVnode = require(\"./hyperscriptVnode\")\nvar hasOwn = require(\"../util/hasOwn\")\n\nvar selectorParser = /(?:(^|#|\\.)([^#\\.\\[\\]]+))|(\\[(.+?)(?:\\s*=\\s*(\"|'|)((?:\\\\[\"'\\]]|.)*?)\\5)?\\])/g\nvar selectorCache = {}\n\nfunction isEmpty(object) {\n\tfor (var key in object) if (hasOwn.call(object, key)) return false\n\treturn true\n}\n\nfunction compileSelector(selector) {\n\tvar match, tag = \"div\", classes = [], attrs = {}\n\twhile (match = selectorParser.exec(selector)) {\n\t\tvar type = match[1], value = match[2]\n\t\tif (type === \"\" && value !== \"\") tag = value\n\t\telse if (type === \"#\") attrs.id = value\n\t\telse if (type === \".\") classes.push(value)\n\t\telse if (match[3][0] === \"[\") {\n\t\t\tvar attrValue = match[6]\n\t\t\tif (attrValue) attrValue = attrValue.replace(/\\\\([\"'])/g, \"$1\").replace(/\\\\\\\\/g, \"\\\\\")\n\t\t\tif (match[4] === \"class\") classes.push(attrValue)\n\t\t\telse attrs[match[4]] = attrValue === \"\" ? attrValue : attrValue || true\n\t\t}\n\t}\n\tif (classes.length > 0) attrs.className = classes.join(\" \")\n\treturn selectorCache[selector] = {tag: tag, attrs: attrs}\n}\n\nfunction execSelector(state, vnode) {\n\tvar attrs = vnode.attrs\n\tvar hasClass = hasOwn.call(attrs, \"class\")\n\tvar className = hasClass ? attrs.class : attrs.className\n\n\tvnode.tag = state.tag\n\tvnode.attrs = {}\n\n\tif (!isEmpty(state.attrs) && !isEmpty(attrs)) {\n\t\tvar newAttrs = {}\n\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key)) newAttrs[key] = attrs[key]\n\t\t}\n\n\t\tattrs = newAttrs\n\t}\n\n\tfor (var key in state.attrs) {\n\t\tif (hasOwn.call(state.attrs, key) && key !== \"className\" && !hasOwn.call(attrs, key)){\n\t\t\tattrs[key] = state.attrs[key]\n\t\t}\n\t}\n\tif (className != null || state.attrs.className != null) attrs.className =\n\t\tclassName != null\n\t\t\t? state.attrs.className != null\n\t\t\t\t? String(state.attrs.className) + \" \" + String(className)\n\t\t\t\t: className\n\t\t\t: state.attrs.className != null\n\t\t\t\t? state.attrs.className\n\t\t\t\t: null\n\n\tif (hasClass) attrs.class = null\n\n\tfor (var key in attrs) {\n\t\tif (hasOwn.call(attrs, key) && key !== \"key\") {\n\t\t\tvnode.attrs = attrs\n\t\t\tbreak\n\t\t}\n\t}\n\n\treturn vnode\n}\n\nfunction hyperscript(selector) {\n\tif (selector == null || typeof selector !== \"string\" && typeof selector !== \"function\" && typeof selector.view !== \"function\") {\n\t\tthrow Error(\"The selector must be either a string or a component.\");\n\t}\n\n\tvar vnode = hyperscriptVnode.apply(1, arguments)\n\n\tif (typeof selector === \"string\") {\n\t\tvnode.children = Vnode.normalizeChildren(vnode.children)\n\t\tif (selector !== \"[\") return execSelector(selectorCache[selector] || compileSelector(selector), vnode)\n\t}\n\n\tvnode.tag = selector\n\treturn vnode\n}\n\nmodule.exports = hyperscript\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\n// Call via `hyperscriptVnode.apply(startOffset, arguments)`\n//\n// The reason I do it this way, forwarding the arguments and passing the start\n// offset in `this`, is so I don't have to create a temporary array in a\n// performance-critical path.\n//\n// In native ES6, I'd instead add a final `...args` parameter to the\n// `hyperscript` and `fragment` factories and define this as\n// `hyperscriptVnode(...args)`, since modern engines do optimize that away. But\n// ES5 (what Mithril.js requires thanks to IE support) doesn't give me that luxury,\n// and engines aren't nearly intelligent enough to do either of these:\n//\n// 1. Elide the allocation for `[].slice.call(arguments, 1)` when it's passed to\n// another function only to be indexed.\n// 2. Elide an `arguments` allocation when it's passed to any function other\n// than `Function.prototype.apply` or `Reflect.apply`.\n//\n// In ES6, it'd probably look closer to this (I'd need to profile it, though):\n// module.exports = function(attrs, ...children) {\n// if (attrs == null || typeof attrs === \"object\" && attrs.tag == null && !Array.isArray(attrs)) {\n// if (children.length === 1 && Array.isArray(children[0])) children = children[0]\n// } else {\n// children = children.length === 0 && Array.isArray(attrs) ? attrs : [attrs, ...children]\n// attrs = undefined\n// }\n//\n// if (attrs == null) attrs = {}\n// return Vnode(\"\", attrs.key, attrs, children)\n// }\nmodule.exports = function() {\n\tvar attrs = arguments[this], start = this + 1, children\n\n\tif (attrs == null) {\n\t\tattrs = {}\n\t} else if (typeof attrs !== \"object\" || attrs.tag != null || Array.isArray(attrs)) {\n\t\tattrs = {}\n\t\tstart = this\n\t}\n\n\tif (arguments.length === start + 1) {\n\t\tchildren = arguments[start]\n\t\tif (!Array.isArray(children)) children = [children]\n\t} else {\n\t\tchildren = []\n\t\twhile (start < arguments.length) children.push(arguments[start++])\n\t}\n\n\treturn Vnode(\"\", attrs.key, attrs, children)\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function($window) {\n\tvar $doc = $window && $window.document\n\tvar currentRedraw\n\n\tvar nameSpace = {\n\t\tsvg: \"http://www.w3.org/2000/svg\",\n\t\tmath: \"http://www.w3.org/1998/Math/MathML\"\n\t}\n\n\tfunction getNameSpace(vnode) {\n\t\treturn vnode.attrs && vnode.attrs.xmlns || nameSpace[vnode.tag]\n\t}\n\n\t//sanity check to discourage people from doing `vnode.state = ...`\n\tfunction checkState(vnode, original) {\n\t\tif (vnode.state !== original) throw new Error(\"'vnode.state' must not be modified.\")\n\t}\n\n\t//Note: the hook is passed as the `this` argument to allow proxying the\n\t//arguments without requiring a full array allocation to do so. It also\n\t//takes advantage of the fact the current `vnode` is the first argument in\n\t//all lifecycle methods.\n\tfunction callHook(vnode) {\n\t\tvar original = vnode.state\n\t\ttry {\n\t\t\treturn this.apply(original, arguments)\n\t\t} finally {\n\t\t\tcheckState(vnode, original)\n\t\t}\n\t}\n\n\t// IE11 (at least) throws an UnspecifiedError when accessing document.activeElement when\n\t// inside an iframe. Catch and swallow this error, and heavy-handidly return null.\n\tfunction activeElement() {\n\t\ttry {\n\t\t\treturn $doc.activeElement\n\t\t} catch (e) {\n\t\t\treturn null\n\t\t}\n\t}\n\t//create\n\tfunction createNodes(parent, vnodes, start, end, hooks, nextSibling, ns) {\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tvar vnode = vnodes[i]\n\t\t\tif (vnode != null) {\n\t\t\t\tcreateNode(parent, vnode, hooks, ns, nextSibling)\n\t\t\t}\n\t\t}\n\t}\n\tfunction createNode(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar tag = vnode.tag\n\t\tif (typeof tag === \"string\") {\n\t\t\tvnode.state = {}\n\t\t\tif (vnode.attrs != null) initLifecycle(vnode.attrs, vnode, hooks)\n\t\t\tswitch (tag) {\n\t\t\t\tcase \"#\": createText(parent, vnode, nextSibling); break\n\t\t\t\tcase \"<\": createHTML(parent, vnode, ns, nextSibling); break\n\t\t\t\tcase \"[\": createFragment(parent, vnode, hooks, ns, nextSibling); break\n\t\t\t\tdefault: createElement(parent, vnode, hooks, ns, nextSibling)\n\t\t\t}\n\t\t}\n\t\telse createComponent(parent, vnode, hooks, ns, nextSibling)\n\t}\n\tfunction createText(parent, vnode, nextSibling) {\n\t\tvnode.dom = $doc.createTextNode(vnode.children)\n\t\tinsertNode(parent, vnode.dom, nextSibling)\n\t}\n\tvar possibleParents = {caption: \"table\", thead: \"table\", tbody: \"table\", tfoot: \"table\", tr: \"tbody\", th: \"tr\", td: \"tr\", colgroup: \"table\", col: \"colgroup\"}\n\tfunction createHTML(parent, vnode, ns, nextSibling) {\n\t\tvar match = vnode.children.match(/^\\s*?<(\\w+)/im) || []\n\t\t// not using the proper parent makes the child element(s) vanish.\n\t\t// var div = document.createElement(\"div\")\n\t\t// div.innerHTML = \"<td>i</td><td>j</td>\"\n\t\t// console.log(div.innerHTML)\n\t\t// --> \"ij\", no <td> in sight.\n\t\tvar temp = $doc.createElement(possibleParents[match[1]] || \"div\")\n\t\tif (ns === \"http://www.w3.org/2000/svg\") {\n\t\t\ttemp.innerHTML = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\">\" + vnode.children + \"</svg>\"\n\t\t\ttemp = temp.firstChild\n\t\t} else {\n\t\t\ttemp.innerHTML = vnode.children\n\t\t}\n\t\tvnode.dom = temp.firstChild\n\t\tvnode.domSize = temp.childNodes.length\n\t\t// Capture nodes to remove, so we don't confuse them.\n\t\tvnode.instance = []\n\t\tvar fragment = $doc.createDocumentFragment()\n\t\tvar child\n\t\twhile (child = temp.firstChild) {\n\t\t\tvnode.instance.push(child)\n\t\t\tfragment.appendChild(child)\n\t\t}\n\t\tinsertNode(parent, fragment, nextSibling)\n\t}\n\tfunction createFragment(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar fragment = $doc.createDocumentFragment()\n\t\tif (vnode.children != null) {\n\t\t\tvar children = vnode.children\n\t\t\tcreateNodes(fragment, children, 0, children.length, hooks, null, ns)\n\t\t}\n\t\tvnode.dom = fragment.firstChild\n\t\tvnode.domSize = fragment.childNodes.length\n\t\tinsertNode(parent, fragment, nextSibling)\n\t}\n\tfunction createElement(parent, vnode, hooks, ns, nextSibling) {\n\t\tvar tag = vnode.tag\n\t\tvar attrs = vnode.attrs\n\t\tvar is = attrs && attrs.is\n\n\t\tns = getNameSpace(vnode) || ns\n\n\t\tvar element = ns ?\n\t\t\tis ? $doc.createElementNS(ns, tag, {is: is}) : $doc.createElementNS(ns, tag) :\n\t\t\tis ? $doc.createElement(tag, {is: is}) : $doc.createElement(tag)\n\t\tvnode.dom = element\n\n\t\tif (attrs != null) {\n\t\t\tsetAttrs(vnode, attrs, ns)\n\t\t}\n\n\t\tinsertNode(parent, element, nextSibling)\n\n\t\tif (!maybeSetContentEditable(vnode)) {\n\t\t\tif (vnode.children != null) {\n\t\t\t\tvar children = vnode.children\n\t\t\t\tcreateNodes(element, children, 0, children.length, hooks, null, ns)\n\t\t\t\tif (vnode.tag === \"select\" && attrs != null) setLateSelectAttrs(vnode, attrs)\n\t\t\t}\n\t\t}\n\t}\n\tfunction initComponent(vnode, hooks) {\n\t\tvar sentinel\n\t\tif (typeof vnode.tag.view === \"function\") {\n\t\t\tvnode.state = Object.create(vnode.tag)\n\t\t\tsentinel = vnode.state.view\n\t\t\tif (sentinel.$$reentrantLock$$ != null) return\n\t\t\tsentinel.$$reentrantLock$$ = true\n\t\t} else {\n\t\t\tvnode.state = void 0\n\t\t\tsentinel = vnode.tag\n\t\t\tif (sentinel.$$reentrantLock$$ != null) return\n\t\t\tsentinel.$$reentrantLock$$ = true\n\t\t\tvnode.state = (vnode.tag.prototype != null && typeof vnode.tag.prototype.view === \"function\") ? new vnode.tag(vnode) : vnode.tag(vnode)\n\t\t}\n\t\tinitLifecycle(vnode.state, vnode, hooks)\n\t\tif (vnode.attrs != null) initLifecycle(vnode.attrs, vnode, hooks)\n\t\tvnode.instance = Vnode.normalize(callHook.call(vnode.state.view, vnode))\n\t\tif (vnode.instance === vnode) throw Error(\"A view cannot return the vnode it received as argument\")\n\t\tsentinel.$$reentrantLock$$ = null\n\t}\n\tfunction createComponent(parent, vnode, hooks, ns, nextSibling) {\n\t\tinitComponent(vnode, hooks)\n\t\tif (vnode.instance != null) {\n\t\t\tcreateNode(parent, vnode.instance, hooks, ns, nextSibling)\n\t\t\tvnode.dom = vnode.instance.dom\n\t\t\tvnode.domSize = vnode.dom != null ? vnode.instance.domSize : 0\n\t\t}\n\t\telse {\n\t\t\tvnode.domSize = 0\n\t\t}\n\t}\n\n\t//update\n\t/**\n\t * @param {Element|Fragment} parent - the parent element\n\t * @param {Vnode[] | null} old - the list of vnodes of the last `render()` call for\n\t * this part of the tree\n\t * @param {Vnode[] | null} vnodes - as above, but for the current `render()` call.\n\t * @param {Function[]} hooks - an accumulator of post-render hooks (oncreate/onupdate)\n\t * @param {Element | null} nextSibling - the next DOM node if we're dealing with a\n\t * fragment that is not the last item in its\n\t * parent\n\t * @param {'svg' | 'math' | String | null} ns) - the current XML namespace, if any\n\t * @returns void\n\t */\n\t// This function diffs and patches lists of vnodes, both keyed and unkeyed.\n\t//\n\t// We will:\n\t//\n\t// 1. describe its general structure\n\t// 2. focus on the diff algorithm optimizations\n\t// 3. discuss DOM node operations.\n\n\t// ## Overview:\n\t//\n\t// The updateNodes() function:\n\t// - deals with trivial cases\n\t// - determines whether the lists are keyed or unkeyed based on the first non-null node\n\t// of each list.\n\t// - diffs them and patches the DOM if needed (that's the brunt of the code)\n\t// - manages the leftovers: after diffing, are there:\n\t// - old nodes left to remove?\n\t// \t - new nodes to insert?\n\t// \t deal with them!\n\t//\n\t// The lists are only iterated over once, with an exception for the nodes in `old` that\n\t// are visited in the fourth part of the diff and in the `removeNodes` loop.\n\n\t// ## Diffing\n\t//\n\t// Reading https://github.com/localvoid/ivi/blob/ddc09d06abaef45248e6133f7040d00d3c6be853/packages/ivi/src/vdom/implementation.ts#L617-L837\n\t// may be good for context on longest increasing subsequence-based logic for moving nodes.\n\t//\n\t// In order to diff keyed lists, one has to\n\t//\n\t// 1) match nodes in both lists, per key, and update them accordingly\n\t// 2) create the nodes present in the new list, but absent in the old one\n\t// 3) remove the nodes present in the old list, but absent in the new one\n\t// 4) figure out what nodes in 1) to move in order to minimize the DOM operations.\n\t//\n\t// To achieve 1) one can create a dictionary of keys => index (for the old list), then iterate\n\t// over the new list and for each new vnode, find the corresponding vnode in the old list using\n\t// the map.\n\t// 2) is achieved in the same step: if a new node has no corresponding entry in the map, it is new\n\t// and must be created.\n\t// For the removals, we actually remove the nodes that have been updated from the old list.\n\t// The nodes that remain in that list after 1) and 2) have been performed can be safely removed.\n\t// The fourth step is a bit more complex and relies on the longest increasing subsequence (LIS)\n\t// algorithm.\n\t//\n\t// the longest increasing subsequence is the list of nodes that can remain in place. Imagine going\n\t// from `1,2,3,4,5` to `4,5,1,2,3` where the numbers are not necessarily the keys, but the indices\n\t// corresponding to the keyed nodes in the old list (keyed nodes `e,d,c,b,a` => `b,a,e,d,c` would\n\t// match the above lists, for example).\n\t//\n\t// In there are two increasing subsequences: `4,5` and `1,2,3`, the latter being the longest. We\n\t// can update those nodes without moving them, and only call `insertNode` on `4` and `5`.\n\t//\n\t// @localvoid adapted the algo to also support node deletions and insertions (the `lis` is actually\n\t// the longest increasing subsequence *of old nodes still present in the new list*).\n\t//\n\t// It is a general algorithm that is fireproof in all circumstances, but it requires the allocation\n\t// and the construction of a `key => oldIndex` map, and three arrays (one with `newIndex => oldIndex`,\n\t// the `LIS` and a temporary one to create the LIS).\n\t//\n\t// So we cheat where we can: if the tails of the lists are identical, they are guaranteed to be part of\n\t// the LIS and can be updated without moving them.\n\t//\n\t// If two nodes are swapped, they are guaranteed not to be part of the LIS, and must be moved (with\n\t// the exception of the last node if the list is fully reversed).\n\t//\n\t// ## Finding the next sibling.\n\t//\n\t// `updateNode()` and `createNode()` expect a nextSibling parameter to perform DOM operations.\n\t// When the list is being traversed top-down, at any index, the DOM nodes up to the previous\n\t// vnode reflect the content of the new list, whereas the rest of the DOM nodes reflect the old\n\t// list. The next sibling must be looked for in the old list using `getNextSibling(... oldStart + 1 ...)`.\n\t//\n\t// In the other scenarios (swaps, upwards traversal, map-based diff),\n\t// the new vnodes list is traversed upwards. The DOM nodes at the bottom of the list reflect the\n\t// bottom part of the new vnodes list, and we can use the `v.dom` value of the previous node\n\t// as the next sibling (cached in the `nextSibling` variable).\n\n\n\t// ## DOM node moves\n\t//\n\t// In most scenarios `updateNode()` and `createNode()` perform the DOM operations. However,\n\t// this is not the case if the node moved (second and fourth part of the diff algo). We move\n\t// the old DOM nodes before updateNode runs because it enables us to use the cached `nextSibling`\n\t// variable rather than fetching it using `getNextSibling()`.\n\t//\n\t// The fourth part of the diff currently inserts nodes unconditionally, leading to issues\n\t// like #1791 and #1999. We need to be smarter about those situations where adjascent old\n\t// nodes remain together in the new list in a way that isn't covered by parts one and\n\t// three of the diff algo.\n\n\tfunction updateNodes(parent, old, vnodes, hooks, nextSibling, ns) {\n\t\tif (old === vnodes || old == null && vnodes == null) return\n\t\telse if (old == null || old.length === 0) createNodes(parent, vnodes, 0, vnodes.length, hooks, nextSibling, ns)\n\t\telse if (vnodes == null || vnodes.length === 0) removeNodes(parent, old, 0, old.length)\n\t\telse {\n\t\t\tvar isOldKeyed = old[0] != null && old[0].key != null\n\t\t\tvar isKeyed = vnodes[0] != null && vnodes[0].key != null\n\t\t\tvar start = 0, oldStart = 0\n\t\t\tif (!isOldKeyed) while (oldStart < old.length && old[oldStart] == null) oldStart++\n\t\t\tif (!isKeyed) while (start < vnodes.length && vnodes[start] == null) start++\n\t\t\tif (isOldKeyed !== isKeyed) {\n\t\t\t\tremoveNodes(parent, old, oldStart, old.length)\n\t\t\t\tcreateNodes(parent, vnodes, start, vnodes.length, hooks, nextSibling, ns)\n\t\t\t} else if (!isKeyed) {\n\t\t\t\t// Don't index past the end of either list (causes deopts).\n\t\t\t\tvar commonLength = old.length < vnodes.length ? old.length : vnodes.length\n\t\t\t\t// Rewind if necessary to the first non-null index on either side.\n\t\t\t\t// We could alternatively either explicitly create or remove nodes when `start !== oldStart`\n\t\t\t\t// but that would be optimizing for sparse lists which are more rare than dense ones.\n\t\t\t\tstart = start < oldStart ? start : oldStart\n\t\t\t\tfor (; start < commonLength; start++) {\n\t\t\t\t\to = old[start]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t\tif (o === v || o == null && v == null) continue\n\t\t\t\t\telse if (o == null) createNode(parent, v, hooks, ns, getNextSibling(old, start + 1, nextSibling))\n\t\t\t\t\telse if (v == null) removeNode(parent, o)\n\t\t\t\t\telse updateNode(parent, o, v, hooks, getNextSibling(old, start + 1, nextSibling), ns)\n\t\t\t\t}\n\t\t\t\tif (old.length > commonLength) removeNodes(parent, old, start, old.length)\n\t\t\t\tif (vnodes.length > commonLength) createNodes(parent, vnodes, start, vnodes.length, hooks, nextSibling, ns)\n\t\t\t} else {\n\t\t\t\t// keyed diff\n\t\t\t\tvar oldEnd = old.length - 1, end = vnodes.length - 1, map, o, v, oe, ve, topSibling\n\n\t\t\t\t// bottom-up\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t\tif (oe.key !== ve.key) break\n\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldEnd--, end--\n\t\t\t\t}\n\t\t\t\t// top-down\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\to = old[oldStart]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t\tif (o.key !== v.key) break\n\t\t\t\t\toldStart++, start++\n\t\t\t\t\tif (o !== v) updateNode(parent, o, v, hooks, getNextSibling(old, oldStart, nextSibling), ns)\n\t\t\t\t}\n\t\t\t\t// swaps and list reversals\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\tif (start === end) break\n\t\t\t\t\tif (o.key !== ve.key || oe.key !== v.key) break\n\t\t\t\t\ttopSibling = getNextSibling(old, oldStart, nextSibling)\n\t\t\t\t\tmoveNodes(parent, oe, topSibling)\n\t\t\t\t\tif (oe !== v) updateNode(parent, oe, v, hooks, topSibling, ns)\n\t\t\t\t\tif (++start <= --end) moveNodes(parent, o, nextSibling)\n\t\t\t\t\tif (o !== ve) updateNode(parent, o, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldStart++; oldEnd--\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t\to = old[oldStart]\n\t\t\t\t\tv = vnodes[start]\n\t\t\t\t}\n\t\t\t\t// bottom up once again\n\t\t\t\twhile (oldEnd >= oldStart && end >= start) {\n\t\t\t\t\tif (oe.key !== ve.key) break\n\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\toldEnd--, end--\n\t\t\t\t\toe = old[oldEnd]\n\t\t\t\t\tve = vnodes[end]\n\t\t\t\t}\n\t\t\t\tif (start > end) removeNodes(parent, old, oldStart, oldEnd + 1)\n\t\t\t\telse if (oldStart > oldEnd) createNodes(parent, vnodes, start, end + 1, hooks, nextSibling, ns)\n\t\t\t\telse {\n\t\t\t\t\t// inspired by ivi https://github.com/ivijs/ivi/ by Boris Kaul\n\t\t\t\t\tvar originalNextSibling = nextSibling, vnodesLength = end - start + 1, oldIndices = new Array(vnodesLength), li=0, i=0, pos = 2147483647, matched = 0, map, lisIndices\n\t\t\t\t\tfor (i = 0; i < vnodesLength; i++) oldIndices[i] = -1\n\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\tif (map == null) map = getKeyMap(old, oldStart, oldEnd + 1)\n\t\t\t\t\t\tve = vnodes[i]\n\t\t\t\t\t\tvar oldIndex = map[ve.key]\n\t\t\t\t\t\tif (oldIndex != null) {\n\t\t\t\t\t\t\tpos = (oldIndex < pos) ? oldIndex : -1 // becomes -1 if nodes were re-ordered\n\t\t\t\t\t\t\toldIndices[i-start] = oldIndex\n\t\t\t\t\t\t\toe = old[oldIndex]\n\t\t\t\t\t\t\told[oldIndex] = null\n\t\t\t\t\t\t\tif (oe !== ve) updateNode(parent, oe, ve, hooks, nextSibling, ns)\n\t\t\t\t\t\t\tif (ve.dom != null) nextSibling = ve.dom\n\t\t\t\t\t\t\tmatched++\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tnextSibling = originalNextSibling\n\t\t\t\t\tif (matched !== oldEnd - oldStart + 1) removeNodes(parent, old, oldStart, oldEnd + 1)\n\t\t\t\t\tif (matched === 0) createNodes(parent, vnodes, start, end + 1, hooks, nextSibling, ns)\n\t\t\t\t\telse {\n\t\t\t\t\t\tif (pos === -1) {\n\t\t\t\t\t\t\t// the indices of the indices of the items that are part of the\n\t\t\t\t\t\t\t// longest increasing subsequence in the oldIndices list\n\t\t\t\t\t\t\tlisIndices = makeLisIndices(oldIndices)\n\t\t\t\t\t\t\tli = lisIndices.length - 1\n\t\t\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\t\t\tv = vnodes[i]\n\t\t\t\t\t\t\t\tif (oldIndices[i-start] === -1) createNode(parent, v, hooks, ns, nextSibling)\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tif (lisIndices[li] === i - start) li--\n\t\t\t\t\t\t\t\t\telse moveNodes(parent, v, nextSibling)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (v.dom != null) nextSibling = vnodes[i].dom\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tfor (i = end; i >= start; i--) {\n\t\t\t\t\t\t\t\tv = vnodes[i]\n\t\t\t\t\t\t\t\tif (oldIndices[i-start] === -1) createNode(parent, v, hooks, ns, nextSibling)\n\t\t\t\t\t\t\t\tif (v.dom != null) nextSibling = vnodes[i].dom\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfunction updateNode(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tvar oldTag = old.tag, tag = vnode.tag\n\t\tif (oldTag === tag) {\n\t\t\tvnode.state = old.state\n\t\t\tvnode.events = old.events\n\t\t\tif (shouldNotUpdate(vnode, old)) return\n\t\t\tif (typeof oldTag === \"string\") {\n\t\t\t\tif (vnode.attrs != null) {\n\t\t\t\t\tupdateLifecycle(vnode.attrs, vnode, hooks)\n\t\t\t\t}\n\t\t\t\tswitch (oldTag) {\n\t\t\t\t\tcase \"#\": updateText(old, vnode); break\n\t\t\t\t\tcase \"<\": updateHTML(parent, old, vnode, ns, nextSibling); break\n\t\t\t\t\tcase \"[\": updateFragment(parent, old, vnode, hooks, nextSibling, ns); break\n\t\t\t\t\tdefault: updateElement(old, vnode, hooks, ns)\n\t\t\t\t}\n\t\t\t}\n\t\t\telse updateComponent(parent, old, vnode, hooks, nextSibling, ns)\n\t\t}\n\t\telse {\n\t\t\tremoveNode(parent, old)\n\t\t\tcreateNode(parent, vnode, hooks, ns, nextSibling)\n\t\t}\n\t}\n\tfunction updateText(old, vnode) {\n\t\tif (old.children.toString() !== vnode.children.toString()) {\n\t\t\told.dom.nodeValue = vnode.children\n\t\t}\n\t\tvnode.dom = old.dom\n\t}\n\tfunction updateHTML(parent, old, vnode, ns, nextSibling) {\n\t\tif (old.children !== vnode.children) {\n\t\t\tremoveHTML(parent, old)\n\t\t\tcreateHTML(parent, vnode, ns, nextSibling)\n\t\t}\n\t\telse {\n\t\t\tvnode.dom = old.dom\n\t\t\tvnode.domSize = old.domSize\n\t\t\tvnode.instance = old.instance\n\t\t}\n\t}\n\tfunction updateFragment(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tupdateNodes(parent, old.children, vnode.children, hooks, nextSibling, ns)\n\t\tvar domSize = 0, children = vnode.children\n\t\tvnode.dom = null\n\t\tif (children != null) {\n\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\tvar child = children[i]\n\t\t\t\tif (child != null && child.dom != null) {\n\t\t\t\t\tif (vnode.dom == null) vnode.dom = child.dom\n\t\t\t\t\tdomSize += child.domSize || 1\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (domSize !== 1) vnode.domSize = domSize\n\t\t}\n\t}\n\tfunction updateElement(old, vnode, hooks, ns) {\n\t\tvar element = vnode.dom = old.dom\n\t\tns = getNameSpace(vnode) || ns\n\n\t\tif (vnode.tag === \"textarea\") {\n\t\t\tif (vnode.attrs == null) vnode.attrs = {}\n\t\t}\n\t\tupdateAttrs(vnode, old.attrs, vnode.attrs, ns)\n\t\tif (!maybeSetContentEditable(vnode)) {\n\t\t\tupdateNodes(element, old.children, vnode.children, hooks, null, ns)\n\t\t}\n\t}\n\tfunction updateComponent(parent, old, vnode, hooks, nextSibling, ns) {\n\t\tvnode.instance = Vnode.normalize(callHook.call(vnode.state.view, vnode))\n\t\tif (vnode.instance === vnode) throw Error(\"A view cannot return the vnode it received as argument\")\n\t\tupdateLifecycle(vnode.state, vnode, hooks)\n\t\tif (vnode.attrs != null) updateLifecycle(vnode.attrs, vnode, hooks)\n\t\tif (vnode.instance != null) {\n\t\t\tif (old.instance == null) createNode(parent, vnode.instance, hooks, ns, nextSibling)\n\t\t\telse updateNode(parent, old.instance, vnode.instance, hooks, nextSibling, ns)\n\t\t\tvnode.dom = vnode.instance.dom\n\t\t\tvnode.domSize = vnode.instance.domSize\n\t\t}\n\t\telse if (old.instance != null) {\n\t\t\tremoveNode(parent, old.instance)\n\t\t\tvnode.dom = undefined\n\t\t\tvnode.domSize = 0\n\t\t}\n\t\telse {\n\t\t\tvnode.dom = old.dom\n\t\t\tvnode.domSize = old.domSize\n\t\t}\n\t}\n\tfunction getKeyMap(vnodes, start, end) {\n\t\tvar map = Object.create(null)\n\t\tfor (; start < end; start++) {\n\t\t\tvar vnode = vnodes[start]\n\t\t\tif (vnode != null) {\n\t\t\t\tvar key = vnode.key\n\t\t\t\tif (key != null) map[key] = start\n\t\t\t}\n\t\t}\n\t\treturn map\n\t}\n\t// Lifted from ivi https://github.com/ivijs/ivi/\n\t// takes a list of unique numbers (-1 is special and can\n\t// occur multiple times) and returns an array with the indices\n\t// of the items that are part of the longest increasing\n\t// subsequence\n\tvar lisTemp = []\n\tfunction makeLisIndices(a) {\n\t\tvar result = [0]\n\t\tvar u = 0, v = 0, i = 0\n\t\tvar il = lisTemp.length = a.length\n\t\tfor (var i = 0; i < il; i++) lisTemp[i] = a[i]\n\t\tfor (var i = 0; i < il; ++i) {\n\t\t\tif (a[i] === -1) continue\n\t\t\tvar j = result[result.length - 1]\n\t\t\tif (a[j] < a[i]) {\n\t\t\t\tlisTemp[i] = j\n\t\t\t\tresult.push(i)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tu = 0\n\t\t\tv = result.length - 1\n\t\t\twhile (u < v) {\n\t\t\t\t// Fast integer average without overflow.\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tvar c = (u >>> 1) + (v >>> 1) + (u & v & 1)\n\t\t\t\tif (a[result[c]] < a[i]) {\n\t\t\t\t\tu = c + 1\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tv = c\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (a[i] < a[result[u]]) {\n\t\t\t\tif (u > 0) lisTemp[i] = result[u - 1]\n\t\t\t\tresult[u] = i\n\t\t\t}\n\t\t}\n\t\tu = result.length\n\t\tv = result[u - 1]\n\t\twhile (u-- > 0) {\n\t\t\tresult[u] = v\n\t\t\tv = lisTemp[v]\n\t\t}\n\t\tlisTemp.length = 0\n\t\treturn result\n\t}\n\n\tfunction getNextSibling(vnodes, i, nextSibling) {\n\t\tfor (; i < vnodes.length; i++) {\n\t\t\tif (vnodes[i] != null && vnodes[i].dom != null) return vnodes[i].dom\n\t\t}\n\t\treturn nextSibling\n\t}\n\n\t// This covers a really specific edge case:\n\t// - Parent node is keyed and contains child\n\t// - Child is removed, returns unresolved promise in `onbeforeremove`\n\t// - Parent node is moved in keyed diff\n\t// - Remaining children still need moved appropriately\n\t//\n\t// Ideally, I'd track removed nodes as well, but that introduces a lot more\n\t// complexity and I'm not exactly interested in doing that.\n\tfunction moveNodes(parent, vnode, nextSibling) {\n\t\tvar frag = $doc.createDocumentFragment()\n\t\tmoveChildToFrag(parent, frag, vnode)\n\t\tinsertNode(parent, frag, nextSibling)\n\t}\n\tfunction moveChildToFrag(parent, frag, vnode) {\n\t\t// Dodge the recursion overhead in a few of the most common cases.\n\t\twhile (vnode.dom != null && vnode.dom.parentNode === parent) {\n\t\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\t\tvnode = vnode.instance\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else if (vnode.tag === \"<\") {\n\t\t\t\tfor (var i = 0; i < vnode.instance.length; i++) {\n\t\t\t\t\tfrag.appendChild(vnode.instance[i])\n\t\t\t\t}\n\t\t\t} else if (vnode.tag !== \"[\") {\n\t\t\t\t// Don't recurse for text nodes *or* elements, just fragments\n\t\t\t\tfrag.appendChild(vnode.dom)\n\t\t\t} else if (vnode.children.length === 1) {\n\t\t\t\tvnode = vnode.children[0]\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else {\n\t\t\t\tfor (var i = 0; i < vnode.children.length; i++) {\n\t\t\t\t\tvar child = vnode.children[i]\n\t\t\t\t\tif (child != null) moveChildToFrag(parent, frag, child)\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\n\tfunction insertNode(parent, dom, nextSibling) {\n\t\tif (nextSibling != null) parent.insertBefore(dom, nextSibling)\n\t\telse parent.appendChild(dom)\n\t}\n\n\tfunction maybeSetContentEditable(vnode) {\n\t\tif (vnode.attrs == null || (\n\t\t\tvnode.attrs.contenteditable == null && // attribute\n\t\t\tvnode.attrs.contentEditable == null // property\n\t\t)) return false\n\t\tvar children = vnode.children\n\t\tif (children != null && children.length === 1 && children[0].tag === \"<\") {\n\t\t\tvar content = children[0].children\n\t\t\tif (vnode.dom.innerHTML !== content) vnode.dom.innerHTML = content\n\t\t}\n\t\telse if (children != null && children.length !== 0) throw new Error(\"Child node of a contenteditable must be trusted.\")\n\t\treturn true\n\t}\n\n\t//remove\n\tfunction removeNodes(parent, vnodes, start, end) {\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tvar vnode = vnodes[i]\n\t\t\tif (vnode != null) removeNode(parent, vnode)\n\t\t}\n\t}\n\tfunction removeNode(parent, vnode) {\n\t\tvar mask = 0\n\t\tvar original = vnode.state\n\t\tvar stateResult, attrsResult\n\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onbeforeremove === \"function\") {\n\t\t\tvar result = callHook.call(vnode.state.onbeforeremove, vnode)\n\t\t\tif (result != null && typeof result.then === \"function\") {\n\t\t\t\tmask = 1\n\t\t\t\tstateResult = result\n\t\t\t}\n\t\t}\n\t\tif (vnode.attrs && typeof vnode.attrs.onbeforeremove === \"function\") {\n\t\t\tvar result = callHook.call(vnode.attrs.onbeforeremove, vnode)\n\t\t\tif (result != null && typeof result.then === \"function\") {\n\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\tmask |= 2\n\t\t\t\tattrsResult = result\n\t\t\t}\n\t\t}\n\t\tcheckState(vnode, original)\n\n\t\t// If we can, try to fast-path it and avoid all the overhead of awaiting\n\t\tif (!mask) {\n\t\t\tonremove(vnode)\n\t\t\tremoveChild(parent, vnode)\n\t\t} else {\n\t\t\tif (stateResult != null) {\n\t\t\t\tvar next = function () {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (mask & 1) { mask &= 2; if (!mask) reallyRemove() }\n\t\t\t\t}\n\t\t\t\tstateResult.then(next, next)\n\t\t\t}\n\t\t\tif (attrsResult != null) {\n\t\t\t\tvar next = function () {\n\t\t\t\t\t// eslint-disable-next-line no-bitwise\n\t\t\t\t\tif (mask & 2) { mask &= 1; if (!mask) reallyRemove() }\n\t\t\t\t}\n\t\t\t\tattrsResult.then(next, next)\n\t\t\t}\n\t\t}\n\n\t\tfunction reallyRemove() {\n\t\t\tcheckState(vnode, original)\n\t\t\tonremove(vnode)\n\t\t\tremoveChild(parent, vnode)\n\t\t}\n\t}\n\tfunction removeHTML(parent, vnode) {\n\t\tfor (var i = 0; i < vnode.instance.length; i++) {\n\t\t\tparent.removeChild(vnode.instance[i])\n\t\t}\n\t}\n\tfunction removeChild(parent, vnode) {\n\t\t// Dodge the recursion overhead in a few of the most common cases.\n\t\twhile (vnode.dom != null && vnode.dom.parentNode === parent) {\n\t\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\t\tvnode = vnode.instance\n\t\t\t\tif (vnode != null) continue\n\t\t\t} else if (vnode.tag === \"<\") {\n\t\t\t\tremoveHTML(parent, vnode)\n\t\t\t} else {\n\t\t\t\tif (vnode.tag !== \"[\") {\n\t\t\t\t\tparent.removeChild(vnode.dom)\n\t\t\t\t\tif (!Array.isArray(vnode.children)) break\n\t\t\t\t}\n\t\t\t\tif (vnode.children.length === 1) {\n\t\t\t\t\tvnode = vnode.children[0]\n\t\t\t\t\tif (vnode != null) continue\n\t\t\t\t} else {\n\t\t\t\t\tfor (var i = 0; i < vnode.children.length; i++) {\n\t\t\t\t\t\tvar child = vnode.children[i]\n\t\t\t\t\t\tif (child != null) removeChild(parent, child)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak\n\t\t}\n\t}\n\tfunction onremove(vnode) {\n\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onremove === \"function\") callHook.call(vnode.state.onremove, vnode)\n\t\tif (vnode.attrs && typeof vnode.attrs.onremove === \"function\") callHook.call(vnode.attrs.onremove, vnode)\n\t\tif (typeof vnode.tag !== \"string\") {\n\t\t\tif (vnode.instance != null) onremove(vnode.instance)\n\t\t} else {\n\t\t\tvar children = vnode.children\n\t\t\tif (Array.isArray(children)) {\n\t\t\t\tfor (var i = 0; i < children.length; i++) {\n\t\t\t\t\tvar child = children[i]\n\t\t\t\t\tif (child != null) onremove(child)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t//attrs\n\tfunction setAttrs(vnode, attrs, ns) {\n\t\t// If you assign an input type that is not supported by IE 11 with an assignment expression, an error will occur.\n\t\t//\n\t\t// Also, the DOM does things to inputs based on the value, so it needs set first.\n\t\t// See: https://github.com/MithrilJS/mithril.js/issues/2622\n\t\tif (vnode.tag === \"input\" && attrs.type != null) vnode.dom.setAttribute(\"type\", attrs.type)\n\t\tvar isFileInput = attrs != null && vnode.tag === \"input\" && attrs.type === \"file\"\n\t\tfor (var key in attrs) {\n\t\t\tsetAttr(vnode, key, null, attrs[key], ns, isFileInput)\n\t\t}\n\t}\n\tfunction setAttr(vnode, key, old, value, ns, isFileInput) {\n\t\tif (key === \"key\" || key === \"is\" || value == null || isLifecycleMethod(key) || (old === value && !isFormAttribute(vnode, key)) && typeof value !== \"object\" || key === \"type\" && vnode.tag === \"input\") return\n\t\tif (key[0] === \"o\" && key[1] === \"n\") return updateEvent(vnode, key, value)\n\t\tif (key.slice(0, 6) === \"xlink:\") vnode.dom.setAttributeNS(\"http://www.w3.org/1999/xlink\", key.slice(6), value)\n\t\telse if (key === \"style\") updateStyle(vnode.dom, old, value)\n\t\telse if (hasPropertyKey(vnode, key, ns)) {\n\t\t\tif (key === \"value\") {\n\t\t\t\t// Only do the coercion if we're actually going to check the value.\n\t\t\t\t/* eslint-disable no-implicit-coercion */\n\t\t\t\t//setting input[value] to same value by typing on focused element moves cursor to end in Chrome\n\t\t\t\t//setting input[type=file][value] to same value causes an error to be generated if it's non-empty\n\t\t\t\tif ((vnode.tag === \"input\" || vnode.tag === \"textarea\") && vnode.dom.value === \"\" + value && (isFileInput || vnode.dom === activeElement())) return\n\t\t\t\t//setting select[value] to same value while having select open blinks select dropdown in Chrome\n\t\t\t\tif (vnode.tag === \"select\" && old !== null && vnode.dom.value === \"\" + value) return\n\t\t\t\t//setting option[value] to same value while having select open blinks select dropdown in Chrome\n\t\t\t\tif (vnode.tag === \"option\" && old !== null && vnode.dom.value === \"\" + value) return\n\t\t\t\t//setting input[type=file][value] to different value is an error if it's non-empty\n\t\t\t\t// Not ideal, but it at least works around the most common source of uncaught exceptions for now.\n\t\t\t\tif (isFileInput && \"\" + value !== \"\") { console.error(\"`value` is read-only on file inputs!\"); return }\n\t\t\t\t/* eslint-enable no-implicit-coercion */\n\t\t\t}\n\t\t\tvnode.dom[key] = value\n\t\t} else {\n\t\t\tif (typeof value === \"boolean\") {\n\t\t\t\tif (value) vnode.dom.setAttribute(key, \"\")\n\t\t\t\telse vnode.dom.removeAttribute(key)\n\t\t\t}\n\t\t\telse vnode.dom.setAttribute(key === \"className\" ? \"class\" : key, value)\n\t\t}\n\t}\n\tfunction removeAttr(vnode, key, old, ns) {\n\t\tif (key === \"key\" || key === \"is\" || old == null || isLifecycleMethod(key)) return\n\t\tif (key[0] === \"o\" && key[1] === \"n\") updateEvent(vnode, key, undefined)\n\t\telse if (key === \"style\") updateStyle(vnode.dom, old, null)\n\t\telse if (\n\t\t\thasPropertyKey(vnode, key, ns)\n\t\t\t&& key !== \"className\"\n\t\t\t&& key !== \"title\" // creates \"null\" as title\n\t\t\t&& !(key === \"value\" && (\n\t\t\t\tvnode.tag === \"option\"\n\t\t\t\t|| vnode.tag === \"select\" && vnode.dom.selectedIndex === -1 && vnode.dom === activeElement()\n\t\t\t))\n\t\t\t&& !(vnode.tag === \"input\" && key === \"type\")\n\t\t) {\n\t\t\tvnode.dom[key] = null\n\t\t} else {\n\t\t\tvar nsLastIndex = key.indexOf(\":\")\n\t\t\tif (nsLastIndex !== -1) key = key.slice(nsLastIndex + 1)\n\t\t\tif (old !== false) vnode.dom.removeAttribute(key === \"className\" ? \"class\" : key)\n\t\t}\n\t}\n\tfunction setLateSelectAttrs(vnode, attrs) {\n\t\tif (\"value\" in attrs) {\n\t\t\tif(attrs.value === null) {\n\t\t\t\tif (vnode.dom.selectedIndex !== -1) vnode.dom.value = null\n\t\t\t} else {\n\t\t\t\tvar normalized = \"\" + attrs.value // eslint-disable-line no-implicit-coercion\n\t\t\t\tif (vnode.dom.value !== normalized || vnode.dom.selectedIndex === -1) {\n\t\t\t\t\tvnode.dom.value = normalized\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (\"selectedIndex\" in attrs) setAttr(vnode, \"selectedIndex\", null, attrs.selectedIndex, undefined)\n\t}\n\tfunction updateAttrs(vnode, old, attrs, ns) {\n\t\tif (old && old === attrs) {\n\t\t\tconsole.warn(\"Don't reuse attrs object, use new object for every redraw, this will throw in next major\")\n\t\t}\n\t\tif (attrs != null) {\n\t\t\t// If you assign an input type that is not supported by IE 11 with an assignment expression, an error will occur.\n\t\t\t//\n\t\t\t// Also, the DOM does things to inputs based on the value, so it needs set first.\n\t\t\t// See: https://github.com/MithrilJS/mithril.js/issues/2622\n\t\t\tif (vnode.tag === \"input\" && attrs.type != null) vnode.dom.setAttribute(\"type\", attrs.type)\n\t\t\tvar isFileInput = vnode.tag === \"input\" && attrs.type === \"file\"\n\t\t\tfor (var key in attrs) {\n\t\t\t\tsetAttr(vnode, key, old && old[key], attrs[key], ns, isFileInput)\n\t\t\t}\n\t\t}\n\t\tvar val\n\t\tif (old != null) {\n\t\t\tfor (var key in old) {\n\t\t\t\tif (((val = old[key]) != null) && (attrs == null || attrs[key] == null)) {\n\t\t\t\t\tremoveAttr(vnode, key, val, ns)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tfunction isFormAttribute(vnode, attr) {\n\t\treturn attr === \"value\" || attr === \"checked\" || attr === \"selectedIndex\" || attr === \"selected\" && vnode.dom === activeElement() || vnode.tag === \"option\" && vnode.dom.parentNode === $doc.activeElement\n\t}\n\tfunction isLifecycleMethod(attr) {\n\t\treturn attr === \"oninit\" || attr === \"oncreate\" || attr === \"onupdate\" || attr === \"onremove\" || attr === \"onbeforeremove\" || attr === \"onbeforeupdate\"\n\t}\n\tfunction hasPropertyKey(vnode, key, ns) {\n\t\t// Filter out namespaced keys\n\t\treturn ns === undefined && (\n\t\t\t// If it's a custom element, just keep it.\n\t\t\tvnode.tag.indexOf(\"-\") > -1 || vnode.attrs != null && vnode.attrs.is ||\n\t\t\t// If it's a normal element, let's try to avoid a few browser bugs.\n\t\t\tkey !== \"href\" && key !== \"list\" && key !== \"form\" && key !== \"width\" && key !== \"height\"// && key !== \"type\"\n\t\t\t// Defer the property check until *after* we check everything.\n\t\t) && key in vnode.dom\n\t}\n\n\t//style\n\tvar uppercaseRegex = /[A-Z]/g\n\tfunction toLowerCase(capital) { return \"-\" + capital.toLowerCase() }\n\tfunction normalizeKey(key) {\n\t\treturn key[0] === \"-\" && key[1] === \"-\" ? key :\n\t\t\tkey === \"cssFloat\" ? \"float\" :\n\t\t\t\tkey.replace(uppercaseRegex, toLowerCase)\n\t}\n\tfunction updateStyle(element, old, style) {\n\t\tif (old === style) {\n\t\t\t// Styles are equivalent, do nothing.\n\t\t} else if (style == null) {\n\t\t\t// New style is missing, just clear it.\n\t\t\telement.style.cssText = \"\"\n\t\t} else if (typeof style !== \"object\") {\n\t\t\t// New style is a string, let engine deal with patching.\n\t\t\telement.style.cssText = style\n\t\t} else if (old == null || typeof old !== \"object\") {\n\t\t\t// `old` is missing or a string, `style` is an object.\n\t\t\telement.style.cssText = \"\"\n\t\t\t// Add new style properties\n\t\t\tfor (var key in style) {\n\t\t\t\tvar value = style[key]\n\t\t\t\tif (value != null) element.style.setProperty(normalizeKey(key), String(value))\n\t\t\t}\n\t\t} else {\n\t\t\t// Both old & new are (different) objects.\n\t\t\t// Update style properties that have changed\n\t\t\tfor (var key in style) {\n\t\t\t\tvar value = style[key]\n\t\t\t\tif (value != null && (value = String(value)) !== String(old[key])) {\n\t\t\t\t\telement.style.setProperty(normalizeKey(key), value)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Remove style properties that no longer exist\n\t\t\tfor (var key in old) {\n\t\t\t\tif (old[key] != null && style[key] == null) {\n\t\t\t\t\telement.style.removeProperty(normalizeKey(key))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Here's an explanation of how this works:\n\t// 1. The event names are always (by design) prefixed by `on`.\n\t// 2. The EventListener interface accepts either a function or an object\n\t// with a `handleEvent` method.\n\t// 3. The object does not inherit from `Object.prototype`, to avoid\n\t// any potential interference with that (e.g. setters).\n\t// 4. The event name is remapped to the handler before calling it.\n\t// 5. In function-based event handlers, `ev.target === this`. We replicate\n\t// that below.\n\t// 6. In function-based event handlers, `return false` prevents the default\n\t// action and stops event propagation. We replicate that below.\n\tfunction EventDict() {\n\t\t// Save this, so the current redraw is correctly tracked.\n\t\tthis._ = currentRedraw\n\t}\n\tEventDict.prototype = Object.create(null)\n\tEventDict.prototype.handleEvent = function (ev) {\n\t\tvar handler = this[\"on\" + ev.type]\n\t\tvar result\n\t\tif (typeof handler === \"function\") result = handler.call(ev.currentTarget, ev)\n\t\telse if (typeof handler.handleEvent === \"function\") handler.handleEvent(ev)\n\t\tif (this._ && ev.redraw !== false) (0, this._)()\n\t\tif (result === false) {\n\t\t\tev.preventDefault()\n\t\t\tev.stopPropagation()\n\t\t}\n\t}\n\n\t//event\n\tfunction updateEvent(vnode, key, value) {\n\t\tif (vnode.events != null) {\n\t\t\tvnode.events._ = currentRedraw\n\t\t\tif (vnode.events[key] === value) return\n\t\t\tif (value != null && (typeof value === \"function\" || typeof value === \"object\")) {\n\t\t\t\tif (vnode.events[key] == null) vnode.dom.addEventListener(key.slice(2), vnode.events, false)\n\t\t\t\tvnode.events[key] = value\n\t\t\t} else {\n\t\t\t\tif (vnode.events[key] != null) vnode.dom.removeEventListener(key.slice(2), vnode.events, false)\n\t\t\t\tvnode.events[key] = undefined\n\t\t\t}\n\t\t} else if (value != null && (typeof value === \"function\" || typeof value === \"object\")) {\n\t\t\tvnode.events = new EventDict()\n\t\t\tvnode.dom.addEventListener(key.slice(2), vnode.events, false)\n\t\t\tvnode.events[key] = value\n\t\t}\n\t}\n\n\t//lifecycle\n\tfunction initLifecycle(source, vnode, hooks) {\n\t\tif (typeof source.oninit === \"function\") callHook.call(source.oninit, vnode)\n\t\tif (typeof source.oncreate === \"function\") hooks.push(callHook.bind(source.oncreate, vnode))\n\t}\n\tfunction updateLifecycle(source, vnode, hooks) {\n\t\tif (typeof source.onupdate === \"function\") hooks.push(callHook.bind(source.onupdate, vnode))\n\t}\n\tfunction shouldNotUpdate(vnode, old) {\n\t\tdo {\n\t\t\tif (vnode.attrs != null && typeof vnode.attrs.onbeforeupdate === \"function\") {\n\t\t\t\tvar force = callHook.call(vnode.attrs.onbeforeupdate, vnode, old)\n\t\t\t\tif (force !== undefined && !force) break\n\t\t\t}\n\t\t\tif (typeof vnode.tag !== \"string\" && typeof vnode.state.onbeforeupdate === \"function\") {\n\t\t\t\tvar force = callHook.call(vnode.state.onbeforeupdate, vnode, old)\n\t\t\t\tif (force !== undefined && !force) break\n\t\t\t}\n\t\t\treturn false\n\t\t} while (false); // eslint-disable-line no-constant-condition\n\t\tvnode.dom = old.dom\n\t\tvnode.domSize = old.domSize\n\t\tvnode.instance = old.instance\n\t\t// One would think having the actual latest attributes would be ideal,\n\t\t// but it doesn't let us properly diff based on our current internal\n\t\t// representation. We have to save not only the old DOM info, but also\n\t\t// the attributes used to create it, as we diff *that*, not against the\n\t\t// DOM directly (with a few exceptions in `setAttr`). And, of course, we\n\t\t// need to save the children and text as they are conceptually not\n\t\t// unlike special \"attributes\" internally.\n\t\tvnode.attrs = old.attrs\n\t\tvnode.children = old.children\n\t\tvnode.text = old.text\n\t\treturn true\n\t}\n\n\tvar currentDOM\n\n\treturn function(dom, vnodes, redraw) {\n\t\tif (!dom) throw new TypeError(\"DOM element being rendered to does not exist.\")\n\t\tif (currentDOM != null && dom.contains(currentDOM)) {\n\t\t\tthrow new TypeError(\"Node is currently being rendered to and thus is locked.\")\n\t\t}\n\t\tvar prevRedraw = currentRedraw\n\t\tvar prevDOM = currentDOM\n\t\tvar hooks = []\n\t\tvar active = activeElement()\n\t\tvar namespace = dom.namespaceURI\n\n\t\tcurrentDOM = dom\n\t\tcurrentRedraw = typeof redraw === \"function\" ? redraw : undefined\n\t\ttry {\n\t\t\t// First time rendering into a node clears it out\n\t\t\tif (dom.vnodes == null) dom.textContent = \"\"\n\t\t\tvnodes = Vnode.normalizeChildren(Array.isArray(vnodes) ? vnodes : [vnodes])\n\t\t\tupdateNodes(dom, dom.vnodes, vnodes, hooks, null, namespace === \"http://www.w3.org/1999/xhtml\" ? undefined : namespace)\n\t\t\tdom.vnodes = vnodes\n\t\t\t// `document.activeElement` can return null: https://html.spec.whatwg.org/multipage/interaction.html#dom-document-activeelement\n\t\t\tif (active != null && activeElement() !== active && typeof active.focus === \"function\") active.focus()\n\t\t\tfor (var i = 0; i < hooks.length; i++) hooks[i]()\n\t\t} finally {\n\t\t\tcurrentRedraw = prevRedraw\n\t\t\tcurrentDOM = prevDOM\n\t\t}\n\t}\n}\n","\"use strict\"\n\nvar Vnode = require(\"../render/vnode\")\n\nmodule.exports = function(html) {\n\tif (html == null) html = \"\"\n\treturn Vnode(\"<\", undefined, undefined, html, undefined, undefined)\n}\n","\"use strict\"\n\nfunction Vnode(tag, key, attrs, children, text, dom) {\n\treturn {tag: tag, key: key, attrs: attrs, children: children, text: text, dom: dom, domSize: undefined, state: undefined, events: undefined, instance: undefined}\n}\nVnode.normalize = function(node) {\n\tif (Array.isArray(node)) return Vnode(\"[\", undefined, undefined, Vnode.normalizeChildren(node), undefined, undefined)\n\tif (node == null || typeof node === \"boolean\") return null\n\tif (typeof node === \"object\") return node\n\treturn Vnode(\"#\", undefined, undefined, String(node), undefined, undefined)\n}\nVnode.normalizeChildren = function(input) {\n\tvar children = []\n\tif (input.length) {\n\t\tvar isKeyed = input[0] != null && input[0].key != null\n\t\t// Note: this is a *very* perf-sensitive check.\n\t\t// Fun fact: merging the loop like this is somehow faster than splitting\n\t\t// it, noticeably so.\n\t\tfor (var i = 1; i < input.length; i++) {\n\t\t\tif ((input[i] != null && input[i].key != null) !== isKeyed) {\n\t\t\t\tthrow new TypeError(\n\t\t\t\t\tisKeyed && (input[i] != null || typeof input[i] === \"boolean\")\n\t\t\t\t\t\t? \"In fragments, vnodes must either all have keys or none have keys. You may wish to consider using an explicit keyed empty fragment, m.fragment({key: ...}), instead of a hole.\"\n\t\t\t\t\t\t: \"In fragments, vnodes must either all have keys or none have keys.\"\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < input.length; i++) {\n\t\t\tchildren[i] = Vnode.normalize(input[i])\n\t\t}\n\t}\n\treturn children\n}\n\nmodule.exports = Vnode\n","\"use strict\"\n\nvar PromisePolyfill = require(\"./promise/promise\")\nvar mountRedraw = require(\"./mount-redraw\")\n\nmodule.exports = require(\"./request/request\")(typeof window !== \"undefined\" ? window : null, PromisePolyfill, mountRedraw.redraw)\n","\"use strict\"\n\nvar buildPathname = require(\"../pathname/build\")\nvar hasOwn = require(\"../util/hasOwn\")\n\nmodule.exports = function($window, Promise, oncompletion) {\n\tvar callbackCount = 0\n\n\tfunction PromiseProxy(executor) {\n\t\treturn new Promise(executor)\n\t}\n\n\t// In case the global Promise is some userland library's where they rely on\n\t// `foo instanceof this.constructor`, `this.constructor.resolve(value)`, or\n\t// similar. Let's *not* break them.\n\tPromiseProxy.prototype = Promise.prototype\n\tPromiseProxy.__proto__ = Promise // eslint-disable-line no-proto\n\n\tfunction makeRequest(factory) {\n\t\treturn function(url, args) {\n\t\t\tif (typeof url !== \"string\") { args = url; url = url.url }\n\t\t\telse if (args == null) args = {}\n\t\t\tvar promise = new Promise(function(resolve, reject) {\n\t\t\t\tfactory(buildPathname(url, args.params), args, function (data) {\n\t\t\t\t\tif (typeof args.type === \"function\") {\n\t\t\t\t\t\tif (Array.isArray(data)) {\n\t\t\t\t\t\t\tfor (var i = 0; i < data.length; i++) {\n\t\t\t\t\t\t\t\tdata[i] = new args.type(data[i])\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse data = new args.type(data)\n\t\t\t\t\t}\n\t\t\t\t\tresolve(data)\n\t\t\t\t}, reject)\n\t\t\t})\n\t\t\tif (args.background === true) return promise\n\t\t\tvar count = 0\n\t\t\tfunction complete() {\n\t\t\t\tif (--count === 0 && typeof oncompletion === \"function\") oncompletion()\n\t\t\t}\n\n\t\t\treturn wrap(promise)\n\n\t\t\tfunction wrap(promise) {\n\t\t\t\tvar then = promise.then\n\t\t\t\t// Set the constructor, so engines know to not await or resolve\n\t\t\t\t// this as a native promise. At the time of writing, this is\n\t\t\t\t// only necessary for V8, but their behavior is the correct\n\t\t\t\t// behavior per spec. See this spec issue for more details:\n\t\t\t\t// https://github.com/tc39/ecma262/issues/1577. Also, see the\n\t\t\t\t// corresponding comment in `request/tests/test-request.js` for\n\t\t\t\t// a bit more background on the issue at hand.\n\t\t\t\tpromise.constructor = PromiseProxy\n\t\t\t\tpromise.then = function() {\n\t\t\t\t\tcount++\n\t\t\t\t\tvar next = then.apply(promise, arguments)\n\t\t\t\t\tnext.then(complete, function(e) {\n\t\t\t\t\t\tcomplete()\n\t\t\t\t\t\tif (count === 0) throw e\n\t\t\t\t\t})\n\t\t\t\t\treturn wrap(next)\n\t\t\t\t}\n\t\t\t\treturn promise\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction hasHeader(args, name) {\n\t\tfor (var key in args.headers) {\n\t\t\tif (hasOwn.call(args.headers, key) && key.toLowerCase() === name) return true\n\t\t}\n\t\treturn false\n\t}\n\n\treturn {\n\t\trequest: makeRequest(function(url, args, resolve, reject) {\n\t\t\tvar method = args.method != null ? args.method.toUpperCase() : \"GET\"\n\t\t\tvar body = args.body\n\t\t\tvar assumeJSON = (args.serialize == null || args.serialize === JSON.serialize) && !(body instanceof $window.FormData || body instanceof $window.URLSearchParams)\n\t\t\tvar responseType = args.responseType || (typeof args.extract === \"function\" ? \"\" : \"json\")\n\n\t\t\tvar xhr = new $window.XMLHttpRequest(), aborted = false, isTimeout = false\n\t\t\tvar original = xhr, replacedAbort\n\t\t\tvar abort = xhr.abort\n\n\t\t\txhr.abort = function() {\n\t\t\t\taborted = true\n\t\t\t\tabort.call(this)\n\t\t\t}\n\n\t\t\txhr.open(method, url, args.async !== false, typeof args.user === \"string\" ? args.user : undefined, typeof args.password === \"string\" ? args.password : undefined)\n\n\t\t\tif (assumeJSON && body != null && !hasHeader(args, \"content-type\")) {\n\t\t\t\txhr.setRequestHeader(\"Content-Type\", \"application/json; charset=utf-8\")\n\t\t\t}\n\t\t\tif (typeof args.deserialize !== \"function\" && !hasHeader(args, \"accept\")) {\n\t\t\t\txhr.setRequestHeader(\"Accept\", \"application/json, text/*\")\n\t\t\t}\n\t\t\tif (args.withCredentials) xhr.withCredentials = args.withCredentials\n\t\t\tif (args.timeout) xhr.timeout = args.timeout\n\t\t\txhr.responseType = responseType\n\n\t\t\tfor (var key in args.headers) {\n\t\t\t\tif (hasOwn.call(args.headers, key)) {\n\t\t\t\t\txhr.setRequestHeader(key, args.headers[key])\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txhr.onreadystatechange = function(ev) {\n\t\t\t\t// Don't throw errors on xhr.abort().\n\t\t\t\tif (aborted) return\n\n\t\t\t\tif (ev.target.readyState === 4) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar success = (ev.target.status >= 200 && ev.target.status < 300) || ev.target.status === 304 || (/^file:\\/\\//i).test(url)\n\t\t\t\t\t\t// When the response type isn't \"\" or \"text\",\n\t\t\t\t\t\t// `xhr.responseText` is the wrong thing to use.\n\t\t\t\t\t\t// Browsers do the right thing and throw here, and we\n\t\t\t\t\t\t// should honor that and do the right thing by\n\t\t\t\t\t\t// preferring `xhr.response` where possible/practical.\n\t\t\t\t\t\tvar response = ev.target.response, message\n\n\t\t\t\t\t\tif (responseType === \"json\") {\n\t\t\t\t\t\t\t// For IE and Edge, which don't implement\n\t\t\t\t\t\t\t// `responseType: \"json\"`.\n\t\t\t\t\t\t\tif (!ev.target.responseType && typeof args.extract !== \"function\") {\n\t\t\t\t\t\t\t\t// Handle no-content which will not parse.\n\t\t\t\t\t\t\t\ttry { response = JSON.parse(ev.target.responseText) }\n\t\t\t\t\t\t\t\tcatch (e) { response = null }\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (!responseType || responseType === \"text\") {\n\t\t\t\t\t\t\t// Only use this default if it's text. If a parsed\n\t\t\t\t\t\t\t// document is needed on old IE and friends (all\n\t\t\t\t\t\t\t// unsupported), the user should use a custom\n\t\t\t\t\t\t\t// `config` instead. They're already using this at\n\t\t\t\t\t\t\t// their own risk.\n\t\t\t\t\t\t\tif (response == null) response = ev.target.responseText\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (typeof args.extract === \"function\") {\n\t\t\t\t\t\t\tresponse = args.extract(ev.target, args)\n\t\t\t\t\t\t\tsuccess = true\n\t\t\t\t\t\t} else if (typeof args.deserialize === \"function\") {\n\t\t\t\t\t\t\tresponse = args.deserialize(response)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (success) resolve(response)\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar completeErrorResponse = function() {\n\t\t\t\t\t\t\t\ttry { message = ev.target.responseText }\n\t\t\t\t\t\t\t\tcatch (e) { message = response }\n\t\t\t\t\t\t\t\tvar error = new Error(message)\n\t\t\t\t\t\t\t\terror.code = ev.target.status\n\t\t\t\t\t\t\t\terror.response = response\n\t\t\t\t\t\t\t\treject(error)\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (xhr.status === 0) {\n\t\t\t\t\t\t\t\t// Use setTimeout to push this code block onto the event queue\n\t\t\t\t\t\t\t\t// This allows `xhr.ontimeout` to run in the case that there is a timeout\n\t\t\t\t\t\t\t\t// Without this setTimeout, `xhr.ontimeout` doesn't have a chance to reject\n\t\t\t\t\t\t\t\t// as `xhr.onreadystatechange` will run before it\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tif (isTimeout) return\n\t\t\t\t\t\t\t\t\tcompleteErrorResponse()\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t} else completeErrorResponse()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcatch (e) {\n\t\t\t\t\t\treject(e)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\txhr.ontimeout = function (ev) {\n\t\t\t\tisTimeout = true\n\t\t\t\tvar error = new Error(\"Request timed out\")\n\t\t\t\terror.code = ev.target.status\n\t\t\t\treject(error)\n\t\t\t}\n\n\t\t\tif (typeof args.config === \"function\") {\n\t\t\t\txhr = args.config(xhr, args, url) || xhr\n\n\t\t\t\t// Propagate the `abort` to any replacement XHR as well.\n\t\t\t\tif (xhr !== original) {\n\t\t\t\t\treplacedAbort = xhr.abort\n\t\t\t\t\txhr.abort = function() {\n\t\t\t\t\t\taborted = true\n\t\t\t\t\t\treplacedAbort.call(this)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (body == null) xhr.send()\n\t\t\telse if (typeof args.serialize === \"function\") xhr.send(args.serialize(body))\n\t\t\telse if (body instanceof $window.FormData || body instanceof $window.URLSearchParams) xhr.send(body)\n\t\t\telse xhr.send(JSON.stringify(body))\n\t\t}),\n\t\tjsonp: makeRequest(function(url, args, resolve, reject) {\n\t\t\tvar callbackName = args.callbackName || \"_mithril_\" + Math.round(Math.random() * 1e16) + \"_\" + callbackCount++\n\t\t\tvar script = $window.document.createElement(\"script\")\n\t\t\t$window[callbackName] = function(data) {\n\t\t\t\tdelete $window[callbackName]\n\t\t\t\tscript.parentNode.removeChild(script)\n\t\t\t\tresolve(data)\n\t\t\t}\n\t\t\tscript.onerror = function() {\n\t\t\t\tdelete $window[callbackName]\n\t\t\t\tscript.parentNode.removeChild(script)\n\t\t\t\treject(new Error(\"JSONP request failed\"))\n\t\t\t}\n\t\t\tscript.src = url + (url.indexOf(\"?\") < 0 ? \"?\" : \"&\") +\n\t\t\t\tencodeURIComponent(args.callbackKey || \"callback\") + \"=\" +\n\t\t\t\tencodeURIComponent(callbackName)\n\t\t\t$window.document.documentElement.appendChild(script)\n\t\t}),\n\t}\n}\n","\"use strict\"\n\nvar mountRedraw = require(\"./mount-redraw\")\n\nmodule.exports = require(\"./api/router\")(typeof window !== \"undefined\" ? window : null, mountRedraw)\n","\"use strict\"\n\nmodule.exports = require(\"./stream/stream\")\n","/* eslint-disable */\n;(function() {\n\"use strict\"\n/* eslint-enable */\nStream.SKIP = {}\nStream.lift = lift\nStream.scan = scan\nStream.merge = merge\nStream.combine = combine\nStream.scanMerge = scanMerge\nStream[\"fantasy-land/of\"] = Stream\n\nvar warnedHalt = false\nObject.defineProperty(Stream, \"HALT\", {\n\tget: function() {\n\t\twarnedHalt || console.log(\"HALT is deprecated and has been renamed to SKIP\");\n\t\twarnedHalt = true\n\t\treturn Stream.SKIP\n\t}\n})\n\nfunction Stream(value) {\n\tvar dependentStreams = []\n\tvar dependentFns = []\n\n\tfunction stream(v) {\n\t\tif (arguments.length && v !== Stream.SKIP) {\n\t\t\tvalue = v\n\t\t\tif (open(stream)) {\n\t\t\t\tstream._changing()\n\t\t\t\tstream._state = \"active\"\n\t\t\t\t// Cloning the list to ensure it's still iterated in intended\n\t\t\t\t// order\n\t\t\t\tdependentStreams.slice().forEach(function(s, i) {\n\t\t\t\t\tif (open(s)) s(this[i](value))\n\t\t\t\t}, dependentFns.slice())\n\t\t\t}\n\t\t}\n\n\t\treturn value\n\t}\n\n\tstream.constructor = Stream\n\tstream._state = arguments.length && value !== Stream.SKIP ? \"active\" : \"pending\"\n\tstream._parents = []\n\n\tstream._changing = function() {\n\t\tif (open(stream)) stream._state = \"changing\"\n\t\tdependentStreams.forEach(function(s) {\n\t\t\ts._changing()\n\t\t})\n\t}\n\n\tstream._map = function(fn, ignoreInitial) {\n\t\tvar target = ignoreInitial ? Stream() : Stream(fn(value))\n\t\ttarget._parents.push(stream)\n\t\tdependentStreams.push(target)\n\t\tdependentFns.push(fn)\n\t\treturn target\n\t}\n\n\tstream.map = function(fn) {\n\t\treturn stream._map(fn, stream._state !== \"active\")\n\t}\n\n\tvar end\n\tfunction createEnd() {\n\t\tend = Stream()\n\t\tend.map(function(value) {\n\t\t\tif (value === true) {\n\t\t\t\tstream._parents.forEach(function (p) {p._unregisterChild(stream)})\n\t\t\t\tstream._state = \"ended\"\n\t\t\t\tstream._parents.length = dependentStreams.length = dependentFns.length = 0\n\t\t\t}\n\t\t\treturn value\n\t\t})\n\t\treturn end\n\t}\n\n\tstream.toJSON = function() { return value != null && typeof value.toJSON === \"function\" ? value.toJSON() : value }\n\n\tstream[\"fantasy-land/map\"] = stream.map\n\tstream[\"fantasy-land/ap\"] = function(x) { return combine(function(s1, s2) { return s1()(s2()) }, [x, stream]) }\n\n\tstream._unregisterChild = function(child) {\n\t\tvar childIndex = dependentStreams.indexOf(child)\n\t\tif (childIndex !== -1) {\n\t\t\tdependentStreams.splice(childIndex, 1)\n\t\t\tdependentFns.splice(childIndex, 1)\n\t\t}\n\t}\n\n\tObject.defineProperty(stream, \"end\", {\n\t\tget: function() { return end || createEnd() }\n\t})\n\n\treturn stream\n}\n\nfunction combine(fn, streams) {\n\tvar ready = streams.every(function(s) {\n\t\tif (s.constructor !== Stream)\n\t\t\tthrow new Error(\"Ensure that each item passed to stream.combine/stream.merge/lift is a stream.\")\n\t\treturn s._state === \"active\"\n\t})\n\tvar stream = ready\n\t\t? Stream(fn.apply(null, streams.concat([streams])))\n\t\t: Stream()\n\n\tvar changed = []\n\n\tvar mappers = streams.map(function(s) {\n\t\treturn s._map(function(value) {\n\t\t\tchanged.push(s)\n\t\t\tif (ready || streams.every(function(s) { return s._state !== \"pending\" })) {\n\t\t\t\tready = true\n\t\t\t\tstream(fn.apply(null, streams.concat([changed])))\n\t\t\t\tchanged = []\n\t\t\t}\n\t\t\treturn value\n\t\t}, true)\n\t})\n\n\tvar endStream = stream.end.map(function(value) {\n\t\tif (value === true) {\n\t\t\tmappers.forEach(function(mapper) { mapper.end(true) })\n\t\t\tendStream.end(true)\n\t\t}\n\t\treturn undefined\n\t})\n\n\treturn stream\n}\n\nfunction merge(streams) {\n\treturn combine(function() { return streams.map(function(s) { return s() }) }, streams)\n}\n\nfunction scan(fn, acc, origin) {\n\tvar stream = origin.map(function(v) {\n\t\tvar next = fn(acc, v)\n\t\tif (next !== Stream.SKIP) acc = next\n\t\treturn next\n\t})\n\tstream(acc)\n\treturn stream\n}\n\nfunction scanMerge(tuples, seed) {\n\tvar streams = tuples.map(function(tuple) { return tuple[0] })\n\n\tvar stream = combine(function() {\n\t\tvar changed = arguments[arguments.length - 1]\n\t\tstreams.forEach(function(stream, i) {\n\t\t\tif (changed.indexOf(stream) > -1)\n\t\t\t\tseed = tuples[i][1](seed, stream())\n\t\t})\n\n\t\treturn seed\n\t}, streams)\n\n\tstream(seed)\n\n\treturn stream\n}\n\nfunction lift() {\n\tvar fn = arguments[0]\n\tvar streams = Array.prototype.slice.call(arguments, 1)\n\treturn merge(streams).map(function(streams) {\n\t\treturn fn.apply(undefined, streams)\n\t})\n}\n\nfunction open(s) {\n\treturn s._state === \"pending\" || s._state === \"active\" || s._state === \"changing\"\n}\n\nif (typeof module !== \"undefined\") module[\"exports\"] = Stream\nelse if (typeof window.m === \"function\" && !(\"stream\" in window.m)) window.m.stream = Stream\nelse window.m = {stream : Stream}\n\n}());\n","// This exists so I'm only saving it once.\n\"use strict\"\n\nvar hasOwn = require(\"./hasOwn\")\n\nmodule.exports = Object.assign || function(target, source) {\n\tfor (var key in source) {\n\t\tif (hasOwn.call(source, key)) target[key] = source[key]\n\t}\n}\n","\"use strict\"\n\n// Note: this is mildly perf-sensitive.\n//\n// It does *not* use `delete` - dynamic `delete`s usually cause objects to bail\n// out into dictionary mode and just generally cause a bunch of optimization\n// issues within engines.\n//\n// Ideally, I would've preferred to do this, if it weren't for the optimization\n// issues:\n//\n// ```js\n// const hasOwn = require(\"./hasOwn\")\n// const magic = [\n// \"key\", \"oninit\", \"oncreate\", \"onbeforeupdate\", \"onupdate\",\n// \"onbeforeremove\", \"onremove\",\n// ]\n// module.exports = (attrs, extras) => {\n// const result = Object.assign(Object.create(null), attrs)\n// for (const key of magic) delete result[key]\n// if (extras != null) for (const key of extras) delete result[key]\n// return result\n// }\n// ```\n\nvar hasOwn = require(\"./hasOwn\")\n// Words in RegExp literals are sometimes mangled incorrectly by the internal bundler, so use RegExp().\nvar magic = new RegExp(\"^(?:key|oninit|oncreate|onbeforeupdate|onupdate|onbeforeremove|onremove)$\")\n\nmodule.exports = function(attrs, extras) {\n\tvar result = {}\n\n\tif (extras != null) {\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key) && !magic.test(key) && extras.indexOf(key) < 0) {\n\t\t\t\tresult[key] = attrs[key]\n\t\t\t}\n\t\t}\n\t} else {\n\t\tfor (var key in attrs) {\n\t\t\tif (hasOwn.call(attrs, key) && !magic.test(key)) {\n\t\t\t\tresult[key] = attrs[key]\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result\n}\n","// This exists so I'm only saving it once.\n\"use strict\"\n\nmodule.exports = {}.hasOwnProperty\n","'use strict';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7F]/; // Note: U+007F DEL is excluded too.\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n\t'overflow': 'Overflow: input needs wider integers to process',\n\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t'invalid-input': 'Invalid input'\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n\tthrow new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, callback) {\n\tconst result = [];\n\tlet length = array.length;\n\twhile (length--) {\n\t\tresult[length] = callback(array[length]);\n\t}\n\treturn result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, callback) {\n\tconst parts = domain.split('@');\n\tlet result = '';\n\tif (parts.length > 1) {\n\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t// the local part (i.e. everything up to `@`) intact.\n\t\tresult = parts[0] + '@';\n\t\tdomain = parts[1];\n\t}\n\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\tdomain = domain.replace(regexSeparators, '\\x2E');\n\tconst labels = domain.split('.');\n\tconst encoded = map(labels, callback).join('.');\n\treturn result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nfunction ucs2decode(string) {\n\tconst output = [];\n\tlet counter = 0;\n\tconst length = string.length;\n\twhile (counter < length) {\n\t\tconst value = string.charCodeAt(counter++);\n\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t// It's a high surrogate, and there is a next character.\n\t\t\tconst extra = string.charCodeAt(counter++);\n\t\t\tif ((extra & 0xFC00) == 0xDC00) { // Low surrogate.\n\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t} else {\n\t\t\t\t// It's an unmatched surrogate; only append this code unit, in case the\n\t\t\t\t// next code unit is the high surrogate of a surrogate pair.\n\t\t\t\toutput.push(value);\n\t\t\t\tcounter--;\n\t\t\t}\n\t\t} else {\n\t\t\toutput.push(value);\n\t\t}\n\t}\n\treturn output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nconst ucs2encode = codePoints => String.fromCodePoint(...codePoints);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nconst basicToDigit = function(codePoint) {\n\tif (codePoint >= 0x30 && codePoint < 0x3A) {\n\t\treturn 26 + (codePoint - 0x30);\n\t}\n\tif (codePoint >= 0x41 && codePoint < 0x5B) {\n\t\treturn codePoint - 0x41;\n\t}\n\tif (codePoint >= 0x61 && codePoint < 0x7B) {\n\t\treturn codePoint - 0x61;\n\t}\n\treturn base;\n};\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nconst digitToBasic = function(digit, flag) {\n\t// 0..25 map to ASCII a..z or A..Z\n\t// 26..35 map to ASCII 0..9\n\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n};\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nconst adapt = function(delta, numPoints, firstTime) {\n\tlet k = 0;\n\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\tdelta += floor(delta / numPoints);\n\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\tdelta = floor(delta / baseMinusTMin);\n\t}\n\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n};\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nconst decode = function(input) {\n\t// Don't use UCS-2.\n\tconst output = [];\n\tconst inputLength = input.length;\n\tlet i = 0;\n\tlet n = initialN;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points: let `basic` be the number of input code\n\t// points before the last delimiter, or `0` if there is none, then copy\n\t// the first basic code points to the output.\n\n\tlet basic = input.lastIndexOf(delimiter);\n\tif (basic < 0) {\n\t\tbasic = 0;\n\t}\n\n\tfor (let j = 0; j < basic; ++j) {\n\t\t// if it's not a basic code point\n\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\terror('not-basic');\n\t\t}\n\t\toutput.push(input.charCodeAt(j));\n\t}\n\n\t// Main decoding loop: start just after the last delimiter if any basic code\n\t// points were copied; start at the beginning otherwise.\n\n\tfor (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t// `index` is the index of the next character to be consumed.\n\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t// which gets added to `i`. The overflow checking is easier\n\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t// value at the end to obtain `delta`.\n\t\tconst oldi = i;\n\t\tfor (let w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\tif (index >= inputLength) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\n\t\t\tconst digit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\tif (digit >= base) {\n\t\t\t\terror('invalid-input');\n\t\t\t}\n\t\t\tif (digit > floor((maxInt - i) / w)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\ti += digit * w;\n\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\tif (digit < t) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst baseMinusT = base - t;\n\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tw *= baseMinusT;\n\n\t\t}\n\n\t\tconst out = output.length + 1;\n\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t// incrementing `n` each time, so we'll fix that now:\n\t\tif (floor(i / out) > maxInt - n) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tn += floor(i / out);\n\t\ti %= out;\n\n\t\t// Insert `n` at position `i` of the output.\n\t\toutput.splice(i++, 0, n);\n\n\t}\n\n\treturn String.fromCodePoint(...output);\n};\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nconst encode = function(input) {\n\tconst output = [];\n\n\t// Convert the input in UCS-2 to an array of Unicode code points.\n\tinput = ucs2decode(input);\n\n\t// Cache the length.\n\tconst inputLength = input.length;\n\n\t// Initialize the state.\n\tlet n = initialN;\n\tlet delta = 0;\n\tlet bias = initialBias;\n\n\t// Handle the basic code points.\n\tfor (const currentValue of input) {\n\t\tif (currentValue < 0x80) {\n\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t}\n\t}\n\n\tconst basicLength = output.length;\n\tlet handledCPCount = basicLength;\n\n\t// `handledCPCount` is the number of code points that have been handled;\n\t// `basicLength` is the number of basic code points.\n\n\t// Finish the basic string with a delimiter unless it's empty.\n\tif (basicLength) {\n\t\toutput.push(delimiter);\n\t}\n\n\t// Main encoding loop:\n\twhile (handledCPCount < inputLength) {\n\n\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t// larger one:\n\t\tlet m = maxInt;\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\tm = currentValue;\n\t\t\t}\n\t\t}\n\n\t\t// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n\t\t// but guard against overflow.\n\t\tconst handledCPCountPlusOne = handledCPCount + 1;\n\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\terror('overflow');\n\t\t}\n\n\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\tn = m;\n\n\t\tfor (const currentValue of input) {\n\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\t\t\tif (currentValue === n) {\n\t\t\t\t// Represent delta as a generalized variable-length integer.\n\t\t\t\tlet q = delta;\n\t\t\t\tfor (let k = base; /* no condition */; k += base) {\n\t\t\t\t\tconst t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tconst qMinusT = q - t;\n\t\t\t\t\tconst baseMinusT = base - t;\n\t\t\t\t\toutput.push(\n\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t);\n\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t}\n\n\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n\t\t\t\tdelta = 0;\n\t\t\t\t++handledCPCount;\n\t\t\t}\n\t\t}\n\n\t\t++delta;\n\t\t++n;\n\n\t}\n\treturn output.join('');\n};\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nconst toUnicode = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexPunycode.test(string)\n\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t: string;\n\t});\n};\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nconst toASCII = function(input) {\n\treturn mapDomain(input, function(string) {\n\t\treturn regexNonASCII.test(string)\n\t\t\t? 'xn--' + encode(string)\n\t\t\t: string;\n\t});\n};\n\n/*--------------------------------------------------------------------------*/\n\n/** Define the public API */\nconst punycode = {\n\t/**\n\t * A string representing the current Punycode.js version number.\n\t * @memberOf punycode\n\t * @type String\n\t */\n\t'version': '2.3.1',\n\t/**\n\t * An object of methods to convert from JavaScript's internal character\n\t * representation (UCS-2) to Unicode code points, and back.\n\t * @see <https://mathiasbynens.be/notes/javascript-encoding>\n\t * @memberOf punycode\n\t * @type Object\n\t */\n\t'ucs2': {\n\t\t'decode': ucs2decode,\n\t\t'encode': ucs2encode\n\t},\n\t'decode': decode,\n\t'encode': encode,\n\t'toASCII': toASCII,\n\t'toUnicode': toUnicode\n};\n\nexport { ucs2decode, ucs2encode, decode, encode, toASCII, toUnicode };\nexport default punycode;\n","const candidateSelectors = [\n 'input',\n 'select',\n 'textarea',\n 'a[href]',\n 'button',\n '[tabindex]:not(slot)',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n 'details>summary:first-of-type',\n 'details',\n];\nconst candidateSelector = /* #__PURE__ */ candidateSelectors.join(',');\n\nconst NoElement = typeof Element === 'undefined';\n\nconst matches = NoElement\n ? function () {}\n : Element.prototype.matches ||\n Element.prototype.msMatchesSelector ||\n Element.prototype.webkitMatchesSelector;\n\nconst getRootNode =\n !NoElement && Element.prototype.getRootNode\n ? (element) => element.getRootNode()\n : (element) => element.ownerDocument;\n\n/**\n * @param {Element} el container to check in\n * @param {boolean} includeContainer add container to check\n * @param {(node: Element) => boolean} filter filter candidates\n * @returns {Element[]}\n */\nconst getCandidates = function (el, includeContainer, filter) {\n let candidates = Array.prototype.slice.apply(\n el.querySelectorAll(candidateSelector)\n );\n if (includeContainer && matches.call(el, candidateSelector)) {\n candidates.unshift(el);\n }\n candidates = candidates.filter(filter);\n return candidates;\n};\n\n/**\n * @callback GetShadowRoot\n * @param {Element} element to check for shadow root\n * @returns {ShadowRoot|boolean} ShadowRoot if available or boolean indicating if a shadowRoot is attached but not available.\n */\n\n/**\n * @callback ShadowRootFilter\n * @param {Element} shadowHostNode the element which contains shadow content\n * @returns {boolean} true if a shadow root could potentially contain valid candidates.\n */\n\n/**\n * @typedef {Object} CandidatesScope\n * @property {Element} scope contains inner candidates\n * @property {Element[]} candidates\n */\n\n/**\n * @typedef {Object} IterativeOptions\n * @property {GetShadowRoot|boolean} getShadowRoot true if shadow support is enabled; falsy if not;\n * if a function, implies shadow support is enabled and either returns the shadow root of an element\n * or a boolean stating if it has an undisclosed shadow root\n * @property {(node: Element) => boolean} filter filter candidates\n * @property {boolean} flatten if true then result will flatten any CandidatesScope into the returned list\n * @property {ShadowRootFilter} shadowRootFilter filter shadow roots;\n */\n\n/**\n * @param {Element[]} elements list of element containers to match candidates from\n * @param {boolean} includeContainer add container list to check\n * @param {IterativeOptions} options\n * @returns {Array.<Element|CandidatesScope>}\n */\nconst getCandidatesIteratively = function (\n elements,\n includeContainer,\n options\n) {\n const candidates = [];\n const elementsToCheck = Array.from(elements);\n while (elementsToCheck.length) {\n const element = elementsToCheck.shift();\n if (element.tagName === 'SLOT') {\n // add shadow dom slot scope (slot itself cannot be focusable)\n const assigned = element.assignedElements();\n const content = assigned.length ? assigned : element.children;\n const nestedCandidates = getCandidatesIteratively(content, true, options);\n if (options.flatten) {\n candidates.push(...nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: nestedCandidates,\n });\n }\n } else {\n // check candidate element\n const validCandidate = matches.call(element, candidateSelector);\n if (\n validCandidate &&\n options.filter(element) &&\n (includeContainer || !elements.includes(element))\n ) {\n candidates.push(element);\n }\n\n // iterate over shadow content if possible\n const shadowRoot =\n element.shadowRoot ||\n // check for an undisclosed shadow\n (typeof options.getShadowRoot === 'function' &&\n options.getShadowRoot(element));\n\n const validShadowRoot =\n !options.shadowRootFilter || options.shadowRootFilter(element);\n\n if (shadowRoot && validShadowRoot) {\n // add shadow dom scope IIF a shadow root node was given; otherwise, an undisclosed\n // shadow exists, so look at light dom children as fallback BUT create a scope for any\n // child candidates found because they're likely slotted elements (elements that are\n // children of the web component element (which has the shadow), in the light dom, but\n // slotted somewhere _inside_ the undisclosed shadow) -- the scope is created below,\n // _after_ we return from this recursive call\n const nestedCandidates = getCandidatesIteratively(\n shadowRoot === true ? element.children : shadowRoot.children,\n true,\n options\n );\n\n if (options.flatten) {\n candidates.push(...nestedCandidates);\n } else {\n candidates.push({\n scope: element,\n candidates: nestedCandidates,\n });\n }\n } else {\n // there's not shadow so just dig into the element's (light dom) children\n // __without__ giving the element special scope treatment\n elementsToCheck.unshift(...element.children);\n }\n }\n }\n return candidates;\n};\n\nconst getTabindex = function (node, isScope) {\n if (node.tabIndex < 0) {\n // in Chrome, <details/>, <audio controls/> and <video controls/> elements get a default\n // `tabIndex` of -1 when the 'tabindex' attribute isn't specified in the DOM,\n // yet they are still part of the regular tab order; in FF, they get a default\n // `tabIndex` of 0; since Chrome still puts those elements in the regular tab\n // order, consider their tab index to be 0.\n // Also browsers do not return `tabIndex` correctly for contentEditable nodes;\n // so if they don't have a tabindex attribute specifically set, assume it's 0.\n //\n // isScope is positive for custom element with shadow root or slot that by default\n // have tabIndex -1, but need to be sorted by document order in order for their\n // content to be inserted in the correct position\n if (\n (isScope ||\n /^(AUDIO|VIDEO|DETAILS)$/.test(node.tagName) ||\n node.isContentEditable) &&\n isNaN(parseInt(node.getAttribute('tabindex'), 10))\n ) {\n return 0;\n }\n }\n\n return node.tabIndex;\n};\n\nconst sortOrderedTabbables = function (a, b) {\n return a.tabIndex === b.tabIndex\n ? a.documentOrder - b.documentOrder\n : a.tabIndex - b.tabIndex;\n};\n\nconst isInput = function (node) {\n return node.tagName === 'INPUT';\n};\n\nconst isHiddenInput = function (node) {\n return isInput(node) && node.type === 'hidden';\n};\n\nconst isDetailsWithSummary = function (node) {\n const r =\n node.tagName === 'DETAILS' &&\n Array.prototype.slice\n .apply(node.children)\n .some((child) => child.tagName === 'SUMMARY');\n return r;\n};\n\nconst getCheckedRadio = function (nodes, form) {\n for (let i = 0; i < nodes.length; i++) {\n if (nodes[i].checked && nodes[i].form === form) {\n return nodes[i];\n }\n }\n};\n\nconst isTabbableRadio = function (node) {\n if (!node.name) {\n return true;\n }\n const radioScope = node.form || getRootNode(node);\n const queryRadios = function (name) {\n return radioScope.querySelectorAll(\n 'input[type=\"radio\"][name=\"' + name + '\"]'\n );\n };\n\n let radioSet;\n if (\n typeof window !== 'undefined' &&\n typeof window.CSS !== 'undefined' &&\n typeof window.CSS.escape === 'function'\n ) {\n radioSet = queryRadios(window.CSS.escape(node.name));\n } else {\n try {\n radioSet = queryRadios(node.name);\n } catch (err) {\n // eslint-disable-next-line no-console\n console.error(\n 'Looks like you have a radio button with a name attribute containing invalid CSS selector characters and need the CSS.escape polyfill: %s',\n err.message\n );\n return false;\n }\n }\n\n const checked = getCheckedRadio(radioSet, node.form);\n return !checked || checked === node;\n};\n\nconst isRadio = function (node) {\n return isInput(node) && node.type === 'radio';\n};\n\nconst isNonTabbableRadio = function (node) {\n return isRadio(node) && !isTabbableRadio(node);\n};\n\nconst isZeroArea = function (node) {\n const { width, height } = node.getBoundingClientRect();\n return width === 0 && height === 0;\n};\nconst isHidden = function (node, { displayCheck, getShadowRoot }) {\n // NOTE: visibility will be `undefined` if node is detached from the document\n // (see notes about this further down), which means we will consider it visible\n // (this is legacy behavior from a very long way back)\n // NOTE: we check this regardless of `displayCheck=\"none\"` because this is a\n // _visibility_ check, not a _display_ check\n if (getComputedStyle(node).visibility === 'hidden') {\n return true;\n }\n\n const isDirectSummary = matches.call(node, 'details>summary:first-of-type');\n const nodeUnderDetails = isDirectSummary ? node.parentElement : node;\n if (matches.call(nodeUnderDetails, 'details:not([open]) *')) {\n return true;\n }\n\n // The root node is the shadow root if the node is in a shadow DOM; some document otherwise\n // (but NOT _the_ document; see second 'If' comment below for more).\n // If rootNode is shadow root, it'll have a host, which is the element to which the shadow\n // is attached, and the one we need to check if it's in the document or not (because the\n // shadow, and all nodes it contains, is never considered in the document since shadows\n // behave like self-contained DOMs; but if the shadow's HOST, which is part of the document,\n // is hidden, or is not in the document itself but is detached, it will affect the shadow's\n // visibility, including all the nodes it contains). The host could be any normal node,\n // or a custom element (i.e. web component). Either way, that's the one that is considered\n // part of the document, not the shadow root, nor any of its children (i.e. the node being\n // tested).\n // If rootNode is not a shadow root, it won't have a host, and so rootNode should be the\n // document (per the docs) and while it's a Document-type object, that document does not\n // appear to be the same as the node's `ownerDocument` for some reason, so it's safer\n // to ignore the rootNode at this point, and use `node.ownerDocument`. Otherwise,\n // using `rootNode.contains(node)` will _always_ be true we'll get false-positives when\n // node is actually detached.\n const nodeRootHost = getRootNode(node).host;\n const nodeIsAttached =\n nodeRootHost?.ownerDocument.contains(nodeRootHost) ||\n node.ownerDocument.contains(node);\n\n if (!displayCheck || displayCheck === 'full') {\n if (typeof getShadowRoot === 'function') {\n // figure out if we should consider the node to be in an undisclosed shadow and use the\n // 'non-zero-area' fallback\n const originalNode = node;\n while (node) {\n const parentElement = node.parentElement;\n const rootNode = getRootNode(node);\n if (\n parentElement &&\n !parentElement.shadowRoot &&\n getShadowRoot(parentElement) === true // check if there's an undisclosed shadow\n ) {\n // node has an undisclosed shadow which means we can only treat it as a black box, so we\n // fall back to a non-zero-area test\n return isZeroArea(node);\n } else if (node.assignedSlot) {\n // iterate up slot\n node = node.assignedSlot;\n } else if (!parentElement && rootNode !== node.ownerDocument) {\n // cross shadow boundary\n node = rootNode.host;\n } else {\n // iterate up normal dom\n node = parentElement;\n }\n }\n\n node = originalNode;\n }\n // else, `getShadowRoot` might be true, but all that does is enable shadow DOM support\n // (i.e. it does not also presume that all nodes might have undisclosed shadows); or\n // it might be a falsy value, which means shadow DOM support is disabled\n\n // Since we didn't find it sitting in an undisclosed shadow (or shadows are disabled)\n // now we can just test to see if it would normally be visible or not, provided it's\n // attached to the main document.\n // NOTE: We must consider case where node is inside a shadow DOM and given directly to\n // `isTabbable()` or `isFocusable()` -- regardless of `getShadowRoot` option setting.\n\n if (nodeIsAttached) {\n // this works wherever the node is: if there's at least one client rect, it's\n // somehow displayed; it also covers the CSS 'display: contents' case where the\n // node itself is hidden in place of its contents; and there's no need to search\n // up the hierarchy either\n return !node.getClientRects().length;\n }\n\n // Else, the node isn't attached to the document, which means the `getClientRects()`\n // API will __always__ return zero rects (this can happen, for example, if React\n // is used to render nodes onto a detached tree, as confirmed in this thread:\n // https://github.com/facebook/react/issues/9117#issuecomment-284228870)\n //\n // It also means that even window.getComputedStyle(node).display will return `undefined`\n // because styles are only computed for nodes that are in the document.\n //\n // NOTE: THIS HAS BEEN THE CASE FOR YEARS. It is not new, nor is it caused by tabbable\n // somehow. Though it was never stated officially, anyone who has ever used tabbable\n // APIs on nodes in detached containers has actually implicitly used tabbable in what\n // was later (as of v5.2.0 on Apr 9, 2021) called `displayCheck=\"none\"` mode -- essentially\n // considering __everything__ to be visible because of the innability to determine styles.\n } else if (displayCheck === 'non-zero-area') {\n // NOTE: Even though this tests that the node's client rect is non-zero to determine\n // whether it's displayed, and that a detached node will __always__ have a zero-area\n // client rect, we don't special-case for whether the node is attached or not. In\n // this mode, we do want to consider nodes that have a zero area to be hidden at all\n // times, and that includes attached or not.\n return isZeroArea(node);\n }\n\n // visible, as far as we can tell, or per current `displayCheck` mode\n return false;\n};\n\n// form fields (nested) inside a disabled fieldset are not focusable/tabbable\n// unless they are in the _first_ <legend> element of the top-most disabled\n// fieldset\nconst isDisabledFromFieldset = function (node) {\n if (/^(INPUT|BUTTON|SELECT|TEXTAREA)$/.test(node.tagName)) {\n let parentNode = node.parentElement;\n // check if `node` is contained in a disabled <fieldset>\n while (parentNode) {\n if (parentNode.tagName === 'FIELDSET' && parentNode.disabled) {\n // look for the first <legend> among the children of the disabled <fieldset>\n for (let i = 0; i < parentNode.children.length; i++) {\n const child = parentNode.children.item(i);\n // when the first <legend> (in document order) is found\n if (child.tagName === 'LEGEND') {\n // if its parent <fieldset> is not nested in another disabled <fieldset>,\n // return whether `node` is a descendant of its first <legend>\n return matches.call(parentNode, 'fieldset[disabled] *')\n ? true\n : !child.contains(node);\n }\n }\n // the disabled <fieldset> containing `node` has no <legend>\n return true;\n }\n parentNode = parentNode.parentElement;\n }\n }\n\n // else, node's tabbable/focusable state should not be affected by a fieldset's\n // enabled/disabled state\n return false;\n};\n\nconst isNodeMatchingSelectorFocusable = function (options, node) {\n if (\n node.disabled ||\n isHiddenInput(node) ||\n isHidden(node, options) ||\n // For a details element with a summary, the summary element gets the focus\n isDetailsWithSummary(node) ||\n isDisabledFromFieldset(node)\n ) {\n return false;\n }\n return true;\n};\n\nconst isNodeMatchingSelectorTabbable = function (options, node) {\n if (\n isNonTabbableRadio(node) ||\n getTabindex(node) < 0 ||\n !isNodeMatchingSelectorFocusable(options, node)\n ) {\n return false;\n }\n return true;\n};\n\nconst isValidShadowRootTabbable = function (shadowHostNode) {\n const tabIndex = parseInt(shadowHostNode.getAttribute('tabindex'), 10);\n if (isNaN(tabIndex) || tabIndex >= 0) {\n return true;\n }\n // If a custom element has an explicit negative tabindex,\n // browsers will not allow tab targeting said element's children.\n return false;\n};\n\n/**\n * @param {Array.<Element|CandidatesScope>} candidates\n * @returns Element[]\n */\nconst sortByOrder = function (candidates) {\n const regularTabbables = [];\n const orderedTabbables = [];\n candidates.forEach(function (item, i) {\n const isScope = !!item.scope;\n const element = isScope ? item.scope : item;\n const candidateTabindex = getTabindex(element, isScope);\n const elements = isScope ? sortByOrder(item.candidates) : element;\n if (candidateTabindex === 0) {\n isScope\n ? regularTabbables.push(...elements)\n : regularTabbables.push(element);\n } else {\n orderedTabbables.push({\n documentOrder: i,\n tabIndex: candidateTabindex,\n item: item,\n isScope: isScope,\n content: elements,\n });\n }\n });\n\n return orderedTabbables\n .sort(sortOrderedTabbables)\n .reduce((acc, sortable) => {\n sortable.isScope\n ? acc.push(...sortable.content)\n : acc.push(sortable.content);\n return acc;\n }, [])\n .concat(regularTabbables);\n};\n\nconst tabbable = function (el, options) {\n options = options || {};\n\n let candidates;\n if (options.getShadowRoot) {\n candidates = getCandidatesIteratively([el], options.includeContainer, {\n filter: isNodeMatchingSelectorTabbable.bind(null, options),\n flatten: false,\n getShadowRoot: options.getShadowRoot,\n shadowRootFilter: isValidShadowRootTabbable,\n });\n } else {\n candidates = getCandidates(\n el,\n options.includeContainer,\n isNodeMatchingSelectorTabbable.bind(null, options)\n );\n }\n return sortByOrder(candidates);\n};\n\nconst focusable = function (el, options) {\n options = options || {};\n\n let candidates;\n if (options.getShadowRoot) {\n candidates = getCandidatesIteratively([el], options.includeContainer, {\n filter: isNodeMatchingSelectorFocusable.bind(null, options),\n flatten: true,\n getShadowRoot: options.getShadowRoot,\n });\n } else {\n candidates = getCandidates(\n el,\n options.includeContainer,\n isNodeMatchingSelectorFocusable.bind(null, options)\n );\n }\n\n return candidates;\n};\n\nconst isTabbable = function (node, options) {\n options = options || {};\n if (!node) {\n throw new Error('No node provided');\n }\n if (matches.call(node, candidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorTabbable(options, node);\n};\n\nconst focusableCandidateSelector = /* #__PURE__ */ candidateSelectors\n .concat('iframe')\n .join(',');\n\nconst isFocusable = function (node, options) {\n options = options || {};\n if (!node) {\n throw new Error('No node provided');\n }\n if (matches.call(node, focusableCandidateSelector) === false) {\n return false;\n }\n return isNodeMatchingSelectorFocusable(options, node);\n};\n\nexport { tabbable, focusable, isTabbable, isFocusable };\n","/* jshint browser: true */\n\n(function () {\n\n// We'll copy the properties below into the mirror div.\n// Note that some browsers, such as Firefox, do not concatenate properties\n// into their shorthand (e.g. padding-top, padding-bottom etc. -> padding),\n// so we have to list every single property explicitly.\nvar properties = [\n 'direction', // RTL support\n 'boxSizing',\n 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does\n 'height',\n 'overflowX',\n 'overflowY', // copy the scrollbar for IE\n\n 'borderTopWidth',\n 'borderRightWidth',\n 'borderBottomWidth',\n 'borderLeftWidth',\n 'borderStyle',\n\n 'paddingTop',\n 'paddingRight',\n 'paddingBottom',\n 'paddingLeft',\n\n // https://developer.mozilla.org/en-US/docs/Web/CSS/font\n 'fontStyle',\n 'fontVariant',\n 'fontWeight',\n 'fontStretch',\n 'fontSize',\n 'fontSizeAdjust',\n 'lineHeight',\n 'fontFamily',\n\n 'textAlign',\n 'textTransform',\n 'textIndent',\n 'textDecoration', // might not make a difference, but better be safe\n\n 'letterSpacing',\n 'wordSpacing',\n\n 'tabSize',\n 'MozTabSize'\n\n];\n\nvar isBrowser = (typeof window !== 'undefined');\nvar isFirefox = (isBrowser && window.mozInnerScreenX != null);\n\nfunction getCaretCoordinates(element, position, options) {\n if (!isBrowser) {\n throw new Error('textarea-caret-position#getCaretCoordinates should only be called in a browser');\n }\n\n var debug = options && options.debug || false;\n if (debug) {\n var el = document.querySelector('#input-textarea-caret-position-mirror-div');\n if (el) el.parentNode.removeChild(el);\n }\n\n // The mirror div will replicate the textarea's style\n var div = document.createElement('div');\n div.id = 'input-textarea-caret-position-mirror-div';\n document.body.appendChild(div);\n\n var style = div.style;\n var computed = window.getComputedStyle ? window.getComputedStyle(element) : element.currentStyle; // currentStyle for IE < 9\n var isInput = element.nodeName === 'INPUT';\n\n // Default textarea styles\n style.whiteSpace = 'pre-wrap';\n if (!isInput)\n style.wordWrap = 'break-word'; // only for textarea-s\n\n // Position off-screen\n style.position = 'absolute'; // required to return coordinates properly\n if (!debug)\n style.visibility = 'hidden'; // not 'display: none' because we want rendering\n\n // Transfer the element's properties to the div\n properties.forEach(function (prop) {\n if (isInput && prop === 'lineHeight') {\n // Special case for <input>s because text is rendered centered and line height may be != height\n style.lineHeight = computed.height;\n } else {\n style[prop] = computed[prop];\n }\n });\n\n if (isFirefox) {\n // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275\n if (element.scrollHeight > parseInt(computed.height))\n style.overflowY = 'scroll';\n } else {\n style.overflow = 'hidden'; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll'\n }\n\n div.textContent = element.value.substring(0, position);\n // The second special handling for input type=\"text\" vs textarea:\n // spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037\n if (isInput)\n div.textContent = div.textContent.replace(/\\s/g, '\\u00a0');\n\n var span = document.createElement('span');\n // Wrapping must be replicated *exactly*, including when a long word gets\n // onto the next line, with whitespace at the end of the line before (#7).\n // The *only* reliable way to do that is to copy the *entire* rest of the\n // textarea's content into the <span> created at the caret position.\n // For inputs, just '.' would be enough, but no need to bother.\n span.textContent = element.value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all\n div.appendChild(span);\n\n var coordinates = {\n top: span.offsetTop + parseInt(computed['borderTopWidth']),\n left: span.offsetLeft + parseInt(computed['borderLeftWidth']),\n height: parseInt(computed['lineHeight'])\n };\n\n if (debug) {\n span.style.backgroundColor = '#aaa';\n } else {\n document.body.removeChild(div);\n }\n\n return coordinates;\n}\n\nif (typeof module != 'undefined' && typeof module.exports != 'undefined') {\n module.exports = getCaretCoordinates;\n} else if(isBrowser) {\n window.getCaretCoordinates = getCaretCoordinates;\n}\n\n}());\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../../babel-loader/lib/index.js??ruleSet[1].rules[2]!./jquery.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"$\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"$\"] = ___EXPOSE_LOADER_IMPORT___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"jQuery\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"jQuery\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../../babel-loader/lib/index.js??ruleSet[1].rules[2]!./color-thief.min.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"ColorThief\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"ColorThief\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../babel-loader/lib/index.js??ruleSet[1].rules[2]!./dayjs.min.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"dayjs\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"dayjs\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../babel-loader/lib/index.js??ruleSet[1].rules[2]!./index.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"m\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"m\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","var ___EXPOSE_LOADER_IMPORT___ = require(\"-!../babel-loader/lib/index.js??ruleSet[1].rules[2]!./punycode.es6.js\");\nvar ___EXPOSE_LOADER_GET_GLOBAL_THIS___ = require(\"../expose-loader/dist/runtime/getGlobalThis.js\");\nvar ___EXPOSE_LOADER_GLOBAL_THIS___ = ___EXPOSE_LOADER_GET_GLOBAL_THIS___;\nif (typeof ___EXPOSE_LOADER_GLOBAL_THIS___[\"punycode\"] === 'undefined') ___EXPOSE_LOADER_GLOBAL_THIS___[\"punycode\"] = ___EXPOSE_LOADER_IMPORT___;\nmodule.exports = ___EXPOSE_LOADER_IMPORT___;\n","function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n return arr2;\n}\nmodule.exports = _arrayLikeToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\nmodule.exports = _arrayWithHoles, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _assertThisInitialized(self) {\n if (self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n}\nmodule.exports = _assertThisInitialized, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\nmodule.exports = _classCallCheck, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, toPropertyKey(descriptor.key), descriptor);\n }\n}\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n}\nmodule.exports = _createClass, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var toPropertyKey = require(\"./toPropertyKey.js\");\nfunction _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\nmodule.exports = _defineProperty, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _getPrototypeOf(o) {\n module.exports = _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf(o) {\n return o.__proto__ || Object.getPrototypeOf(o);\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _getPrototypeOf(o);\n}\nmodule.exports = _getPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var setPrototypeOf = require(\"./setPrototypeOf.js\");\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function\");\n }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n Object.defineProperty(subClass, \"prototype\", {\n writable: false\n });\n if (superClass) setPrototypeOf(subClass, superClass);\n}\nmodule.exports = _inherits, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _iterableToArrayLimit(r, l) {\n var t = null == r ? null : \"undefined\" != typeof Symbol && r[Symbol.iterator] || r[\"@@iterator\"];\n if (null != t) {\n var e,\n n,\n i,\n u,\n a = [],\n f = !0,\n o = !1;\n try {\n if (i = (t = t.call(r)).next, 0 === l) {\n if (Object(t) !== t) return;\n f = !1;\n } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0);\n } catch (r) {\n o = !0, n = r;\n } finally {\n try {\n if (!f && null != t[\"return\"] && (u = t[\"return\"](), Object(u) !== u)) return;\n } finally {\n if (o) throw n;\n }\n }\n return a;\n }\n}\nmodule.exports = _iterableToArrayLimit, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\nmodule.exports = _nonIterableRest, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar assertThisInitialized = require(\"./assertThisInitialized.js\");\nfunction _possibleConstructorReturn(self, call) {\n if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) {\n return call;\n } else if (call !== void 0) {\n throw new TypeError(\"Derived constructors may only return object or undefined\");\n }\n return assertThisInitialized(self);\n}\nmodule.exports = _possibleConstructorReturn, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _setPrototypeOf(o, p) {\n module.exports = _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;\n return _setPrototypeOf(o, p);\n}\nmodule.exports = _setPrototypeOf, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayWithHoles = require(\"./arrayWithHoles.js\");\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit.js\");\nvar unsupportedIterableToArray = require(\"./unsupportedIterableToArray.js\");\nvar nonIterableRest = require(\"./nonIterableRest.js\");\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || unsupportedIterableToArray(arr, i) || nonIterableRest();\n}\nmodule.exports = _slicedToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nfunction toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nmodule.exports = toPrimitive, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var _typeof = require(\"./typeof.js\")[\"default\"];\nvar toPrimitive = require(\"./toPrimitive.js\");\nfunction toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}\nmodule.exports = toPropertyKey, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return (module.exports = _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, module.exports.__esModule = true, module.exports[\"default\"] = module.exports), _typeof(o);\n}\nmodule.exports = _typeof, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","var arrayLikeToArray = require(\"./arrayLikeToArray.js\");\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n}\nmodule.exports = _unsupportedIterableToArray, module.exports.__esModule = true, module.exports[\"default\"] = module.exports;","import Component from '../Component';\nimport extract from '../utils/extract';\n\n/**\n * The link component enables both internal and external links.\n * It will return a regular HTML link for any links to external sites,\n * and it will use Mithril's m.route.Link for any internal links.\n *\n * Links will default to internal; the 'external' attr must be set to\n * `true` for the link to be external.\n */\nexport default class Link extends Component {\n view(vnode) {\n let {\n options = {},\n ...attrs\n } = vnode.attrs;\n attrs.href || (attrs.href = '');\n const children = vnode.children;\n if (attrs.external) {\n return m(\"a\", attrs, children);\n }\n\n // If the href URL of the link is the same as the current page path\n // we will not add a new entry to the browser history.\n // This allows us to still refresh the Page component\n // without adding endless history entries.\n if (attrs.href === m.route.get()) {\n if (!('replace' in options)) options.replace = true;\n }\n\n // Mithril 2 does not completely rerender the page if a route change leads to the same route\n // (or the same component handling a different route).\n // Here, the `force` parameter will use Mithril's key system to force a full rerender\n // see https://mithril.js.org/route.html#key-parameter\n if (extract(attrs, 'force')) {\n if (!('state' in options)) options.state = {};\n if (!('key' in options.state)) options.state.key = Date.now();\n }\n attrs.options = options;\n return m(m.route.Link, attrs, children);\n }\n}\nflarum.reg.add('core', 'common/components/Link', Link);","import Button from './Button';\nimport Link from './Link';\nimport classList from '../utils/classList';\n\n/**\n * The `LinkButton` component defines a `Button` which links to a route.\n *\n * ### Attrs\n *\n * All of the attrs accepted by `Button`, plus:\n *\n * - `active` Whether or not the page that this button links to is currently\n * active.\n * - `href` The URL to link to. If the current URL `m.route()` matches this,\n * the `active` prop will automatically be set to true.\n * - `force` Whether the page should be fully rerendered. Defaults to `true`.\n */\nexport default class LinkButton extends Button {\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n attrs.active = this.isActive(attrs);\n attrs.className = classList('LinkButton', attrs.className);\n if (attrs.force === undefined) attrs.force = true;\n }\n view(vnode) {\n const vdom = super.view(vnode);\n vdom.tag = Link;\n vdom.attrs.active = String(vdom.attrs.active);\n delete vdom.attrs.type;\n return vdom;\n }\n\n /**\n * Determine whether a component with the given attrs is 'active'.\n *\n * @param {object} attrs\n * @return {boolean}\n */\n static isActive(attrs) {\n var _m$route$get, _attrs$href;\n return typeof attrs.active !== 'undefined' ? attrs.active : ((_m$route$get = m.route.get()) == null ? void 0 : _m$route$get.split('?')[0]) === ((_attrs$href = attrs.href) == null ? void 0 : _attrs$href.split('?')[0]);\n }\n}\nflarum.reg.add('core', 'common/components/LinkButton', LinkButton);","import Component from '../Component';\n\n/**\n * The `Placeholder` component displays a muted text with some call to action,\n * usually used as an empty state.\n *\n * ### Attrs\n *\n * - `text`\n */\nexport default class Placeholder extends Component {\n view() {\n return m(\"div\", {\n className: \"Placeholder\"\n }, m(\"p\", null, this.attrs.text));\n }\n}\nflarum.reg.add('core', 'common/components/Placeholder', Placeholder);","import Component from '../Component';\n\n/**\n * The `Separator` component defines a menu separator item.\n */\nclass Separator extends Component {\n view() {\n return m(\"li\", {\n className: \"Dropdown-separator\"\n });\n }\n}\nSeparator.isListItem = true;\nexport default Separator;\nflarum.reg.add('core', 'common/components/Separator', Separator);","import app from '../../common/app';\nimport Component from '../Component';\nimport ItemList from '../utils/ItemList';\nimport listItems from '../helpers/listItems';\nimport Button from './Button';\nimport BasicEditorDriver from '../utils/BasicEditorDriver';\nimport Tooltip from './Tooltip';\nimport LoadingIndicator from './LoadingIndicator';\n\n/**\n * The `TextEditor` component displays a textarea with controls, including a\n * submit button.\n *\n * ### Attrs\n *\n * - `composer`\n * - `submitLabel`\n * - `value`\n * - `placeholder`\n * - `disabled`\n * - `preview`\n */\nexport default class TextEditor extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n /**\n * The value of the editor.\n *\n * @type {String}\n */\n this.value = this.attrs.value || '';\n\n /**\n * Whether the editor is disabled.\n */\n this.disabled = !!this.attrs.disabled;\n\n /**\n * Whether the editor is loading.\n */\n this.loading = true;\n\n /**\n * Async operations to complete before the editor is ready.\n */\n this._loaders = [];\n }\n view() {\n return m(\"div\", {\n className: \"TextEditor\"\n }, this.loading ? m(LoadingIndicator, null) : m('[', null, m(\"div\", {\n className: \"TextEditor-editorContainer\"\n }), m(\"ul\", {\n className: \"TextEditor-controls Composer-footer\"\n }, listItems(this.controlItems().toArray()), m(\"li\", {\n className: \"TextEditor-toolbar\"\n }, this.toolbarItems().toArray()))));\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this._load().then(() => {\n setTimeout(this.onbuild.bind(this), 50);\n });\n }\n onbuild() {\n this.attrs.composer.editor = this.buildEditor(this.$('.TextEditor-editorContainer')[0]);\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n const newDisabled = !!this.attrs.disabled;\n if (this.disabled !== newDisabled) {\n this.disabled = newDisabled;\n this.attrs.composer.editor.disabled(newDisabled);\n }\n }\n _load() {\n return Promise.all(this._loaders.map(loader => loader())).then(() => {\n this.loading = false;\n m.redraw();\n });\n }\n buildEditorParams() {\n return {\n classNames: ['FormControl', 'Composer-flexible', 'TextEditor-editor'],\n disabled: this.disabled,\n placeholder: this.attrs.placeholder || '',\n value: this.value,\n oninput: this.oninput.bind(this),\n inputListeners: [],\n onsubmit: () => {\n this.onsubmit();\n m.redraw();\n }\n };\n }\n buildEditor(dom) {\n return new BasicEditorDriver(dom, this.buildEditorParams());\n }\n\n /**\n * Build an item list for the text editor controls.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n controlItems() {\n const items = new ItemList();\n items.add('submit', m(Button, {\n icon: \"fas fa-paper-plane\",\n className: \"Button Button--primary\",\n itemClassName: \"App-primaryControl\",\n onclick: this.onsubmit.bind(this)\n }, this.attrs.submitLabel));\n if (this.attrs.preview) {\n items.add('preview', m(Tooltip, {\n text: app.translator.trans('core.forum.composer.preview_tooltip')\n }, m(Button, {\n icon: \"far fa-eye\",\n className: \"Button Button--icon\",\n onclick: this.attrs.preview\n })));\n }\n return items;\n }\n\n /**\n * Build an item list for the toolbar controls.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n toolbarItems() {\n return new ItemList();\n }\n\n /**\n * Handle input into the textarea.\n *\n * @param {string} value\n */\n oninput(value) {\n this.value = value;\n this.attrs.onchange(this.value);\n }\n\n /**\n * Handle the submit button being clicked.\n */\n onsubmit() {\n this.attrs.onsubmit(this.value);\n }\n}\nflarum.reg.add('core', 'common/components/TextEditor', TextEditor);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport { createFocusTrap } from './focusTrap';\n\n/**\n * The `Drawer` class controls the page's drawer. The drawer is the area the\n * slides out from the left on mobile devices; it contains the header and the\n * footer.\n */\nexport default class Drawer {\n constructor() {\n /**\n * @type {import('./focusTrap').FocusTrap}\n */\n _defineProperty(this, \"focusTrap\", void 0);\n /**\n * @type {HTMLDivElement}\n */\n _defineProperty(this, \"appElement\", void 0);\n /**\n * Handler for the `resize` event on `window`.\n *\n * This is used to close the drawer when the viewport is widened past the `phone` size.\n * At this point, the drawer turns into the standard header that we see on desktop, but\n * the drawer is still registered as 'open' internally.\n *\n * This causes issues with the focus trap, resulting in focus becoming trapped within\n * the header on desktop viewports.\n *\n * @internal\n */\n _defineProperty(this, \"resizeHandler\", (e => {\n if (!e.matches && this.isOpen()) {\n // Drawer is open but we've made window bigger, so hide it.\n this.hide();\n }\n }).bind(this));\n /**\n * @internal\n * @type {MediaQueryList}\n */\n _defineProperty(this, \"drawerAvailableMediaQuery\", void 0);\n // Set up an event handler so that whenever the content area is tapped,\n // the drawer will close.\n document.getElementById('content').addEventListener('click', e => {\n if (this.isOpen()) {\n e.preventDefault();\n this.hide();\n }\n });\n this.appElement = document.getElementById('app');\n // Despite the `focus-trap` documentation, both `clickOutsideDeactivates`\n // and `allowOutsideClick` are necessary so that inputs in modals triggered\n // from the drawer's nav components can be interacted with.\n this.focusTrap = createFocusTrap('#drawer', {\n allowOutsideClick: true,\n clickOutsideDeactivates: true\n });\n this.drawerAvailableMediaQuery = window.matchMedia(\"(max-width: \".concat(getComputedStyle(document.documentElement).getPropertyValue('--screen-phone-max'), \")\"));\n }\n /**\n * Check whether or not the drawer is currently open.\n *\n * @return {boolean}\n */\n isOpen() {\n return this.appElement.classList.contains('drawerOpen');\n }\n\n /**\n * Hide the drawer.\n */\n hide() {\n var _this$$backdrop, _this$$backdrop$remov;\n /**\n * As part of hiding the drawer, this function also ensures that the drawer\n * correctly animates out, while ensuring it is not part of the navigation\n * tree while off-screen.\n *\n * More info: https://github.com/flarum/core/pull/2666#discussion_r595381014\n */\n\n this.focusTrap.deactivate();\n this.drawerAvailableMediaQuery.removeListener(this.resizeHandler);\n if (!this.isOpen()) return;\n const $drawer = $('#drawer');\n\n // Used to prevent `visibility: hidden` from breaking the exit animation\n $drawer.css('visibility', 'visible').one('transitionend', () => $drawer.css('visibility', ''));\n this.appElement.classList.remove('drawerOpen');\n (_this$$backdrop = this.$backdrop) == null || (_this$$backdrop$remov = _this$$backdrop.remove) == null || _this$$backdrop$remov.call(_this$$backdrop);\n }\n\n /**\n * Show the drawer.\n */\n show() {\n this.appElement.classList.add('drawerOpen');\n this.drawerAvailableMediaQuery.addListener(this.resizeHandler);\n this.$backdrop = $('<div/>').addClass('drawer-backdrop fade').appendTo('body').on('click', this.hide.bind(this));\n requestAnimationFrame(() => {\n this.$backdrop.addClass('in');\n this.focusTrap.activate();\n });\n }\n}\nflarum.reg.add('core', 'common/utils/Drawer', Drawer);","/**\n * The `ScrollListener` class sets up a listener that handles element scroll\n * events.\n */\nexport default class ScrollListener {\n /**\n * @param {(top: number) => void} callback The callback to run when the scroll position\n * changes.\n * @param {Window|Element} element The element to listen for scroll events on. Defaults to\n * `window`.\n */\n constructor(callback, element) {\n if (element === void 0) {\n element = window;\n }\n this.callback = callback;\n this.ticking = false;\n this.element = element;\n }\n\n /**\n * On each animation frame, as long as the listener is active, run the\n * `update` method.\n *\n * @protected\n */\n loop() {\n // THROTTLE: If the callback is still running (or hasn't yet run), we ignore\n // further scroll events.\n if (this.ticking) return;\n\n // Schedule the callback to be executed soon (TM), and stop throttling once\n // the callback is done.\n requestAnimationFrame(() => {\n this.update();\n this.ticking = false;\n });\n this.ticking = true;\n }\n\n /**\n * Run the callback, whether there was a scroll event or not.\n */\n update() {\n this.callback(this.element.pageYOffset);\n }\n\n /**\n * Start listening to and handling the element's scroll position.\n */\n start() {\n if (!this.active) {\n this.element.addEventListener('scroll', this.active = this.loop.bind(this), {\n passive: true\n });\n }\n }\n\n /**\n * Stop listening to and handling the element's scroll position.\n */\n stop() {\n this.element.removeEventListener('scroll', this.active);\n this.active = null;\n }\n}\nflarum.reg.add('core', 'common/utils/ScrollListener', ScrollListener);","/**\n * The `anchorScroll` utility saves the scroll position relative to an element,\n * and then restores it after a callback has been run.\n *\n * This is useful if a redraw will change the page's content above the viewport.\n * Normally doing this will result in the content in the viewport being pushed\n * down or pulled up. By wrapping the redraw with this utility, the scroll\n * position can be anchor to an element that is in or below the viewport, so\n * the content in the viewport will stay the same.\n *\n * @param {string | HTMLElement | SVGElement | Element} element The element to anchor the scroll position to.\n * @param {() => void} callback The callback to run that will change page content.\n */\nexport default function anchorScroll(element, callback) {\n const $window = $(window);\n const relativeScroll = $(element).offset().top - $window.scrollTop();\n callback();\n $window.scrollTop($(element).offset().top - relativeScroll);\n}\nflarum.reg.add('core', 'common/utils/anchorScroll', anchorScroll);","/**\n * Check if class A is the same as or a subclass of class B.\n */\nexport default function subclassOf(A, B) {\n return A && (A === B || A.prototype instanceof B);\n}\nflarum.reg.add('core', 'common/utils/subclassOf', subclassOf);","import Component from '../../common/Component';\n\n/**\n * The `AffixedSidebar` component uses Bootstrap's \"affix\" plugin to keep a\n * sidebar navigation at the top of the viewport when scrolling.\n *\n * ### Children\n *\n * The component must wrap an element that itself wraps an <ul> element, which\n * will be \"affixed\".\n *\n * @see https://getbootstrap.com/docs/3.4/javascript/#affix\n */\nexport default class AffixedSidebar extends Component {\n view(vnode) {\n return vnode.children[0];\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n\n // Register the affix plugin to execute on every window resize (and trigger)\n this.boundOnresize = this.onresize.bind(this);\n $(window).on('resize', this.boundOnresize).resize();\n }\n onremove(vnode) {\n super.onremove(vnode);\n $(window).off('resize', this.boundOnresize);\n }\n onresize() {\n const $sidebar = this.$();\n const $header = $('#header');\n const $footer = $('#footer');\n const $affixElement = $sidebar.find('> ul');\n $(window).off('.affix');\n $affixElement.removeClass('affix affix-top affix-bottom').removeData('bs.affix');\n\n // Don't affix the sidebar if it is taller than the viewport (otherwise\n // there would be no way to scroll through its content).\n if ($sidebar.outerHeight(true) > $(window).height() - $header.outerHeight(true)) return;\n $affixElement.affix({\n offset: {\n top: () => $sidebar.offset().top - $header.outerHeight(true) - parseInt($sidebar.css('margin-top'), 10),\n bottom: () => this.bottom = $footer.outerHeight(true)\n }\n });\n }\n}\nflarum.reg.add('core', 'forum/components/AffixedSidebar', AffixedSidebar);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport listItems from '../../common/helpers/listItems';\nimport ItemList from '../../common/utils/ItemList';\nimport classList from '../../common/utils/classList';\nimport Button from '../../common/components/Button';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport Icon from '../../common/components/Icon';\nimport Avatar from '../../common/components/Avatar';\n\n/**\n * The `AvatarEditor` component displays a user's avatar along with a dropdown\n * menu which allows the user to upload/remove the avatar.\n *\n * ### Attrs\n *\n * - `className`\n * - `user`\n */\nexport default class AvatarEditor extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n\n /**\n * Whether or not an avatar upload is in progress.\n *\n * @type {Boolean}\n */\n this.loading = false;\n\n /**\n * Whether or not an image has been dragged over the dropzone.\n *\n * @type {Boolean}\n */\n this.isDraggedOver = false;\n }\n view() {\n const user = this.attrs.user;\n return m(\"div\", {\n className: classList(['AvatarEditor', 'Dropdown', this.attrs.className, this.loading && 'loading', this.isDraggedOver && 'dragover'])\n }, m(Avatar, {\n user: user,\n loading: \"eager\"\n }), m(\"a\", {\n className: user.avatarUrl() ? 'Dropdown-toggle' : 'Dropdown-toggle AvatarEditor--noAvatar',\n title: app.translator.trans('core.forum.user.avatar_upload_tooltip'),\n \"data-toggle\": \"dropdown\",\n onclick: this.quickUpload.bind(this),\n ondragover: this.enableDragover.bind(this),\n ondragenter: this.enableDragover.bind(this),\n ondragleave: this.disableDragover.bind(this),\n ondragend: this.disableDragover.bind(this),\n ondrop: this.dropUpload.bind(this)\n }, this.loading ? m(LoadingIndicator, {\n display: \"unset\",\n size: \"large\"\n }) : user.avatarUrl() ? m(Icon, {\n name: 'fas fa-pencil-alt'\n }) : m(Icon, {\n name: 'fas fa-plus-circle'\n })), m(\"ul\", {\n className: \"Dropdown-menu Menu\"\n }, listItems(this.controlItems().toArray())));\n }\n\n /**\n * Get the items in the edit avatar dropdown menu.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n controlItems() {\n const items = new ItemList();\n items.add('upload', m(Button, {\n icon: \"fas fa-upload\",\n onclick: this.openPicker.bind(this)\n }, app.translator.trans('core.forum.user.avatar_upload_button')));\n items.add('remove', m(Button, {\n icon: \"fas fa-times\",\n onclick: this.remove.bind(this)\n }, app.translator.trans('core.forum.user.avatar_remove_button')));\n return items;\n }\n\n /**\n * Enable dragover style\n *\n * @param {DragEvent} e\n */\n enableDragover(e) {\n e.preventDefault();\n e.stopPropagation();\n this.isDraggedOver = true;\n }\n\n /**\n * Disable dragover style\n *\n * @param {DragEvent} e\n */\n disableDragover(e) {\n e.preventDefault();\n e.stopPropagation();\n this.isDraggedOver = false;\n }\n\n /**\n * Upload avatar when file is dropped into dropzone.\n *\n * @param {DragEvent} e\n */\n dropUpload(e) {\n e.preventDefault();\n e.stopPropagation();\n this.isDraggedOver = false;\n this.upload(e.dataTransfer.files[0]);\n }\n\n /**\n * If the user doesn't have an avatar, there's no point in showing the\n * controls dropdown, because only one option would be viable: uploading.\n * Thus, when the avatar editor's dropdown toggle button is clicked, we prompt\n * the user to upload an avatar immediately.\n *\n * @param {MouseEvent} e\n */\n quickUpload(e) {\n if (!this.attrs.user.avatarUrl()) {\n e.preventDefault();\n e.stopPropagation();\n this.openPicker();\n }\n }\n\n /**\n * Upload avatar using file picker\n */\n openPicker() {\n if (this.loading) return;\n\n // Create a hidden HTML input element and click on it so the user can select\n // an avatar file. Once they have, we will upload it via the API.\n const $input = $('<input type=\"file\" accept=\".jpg, .jpeg, .png, .bmp, .gif\">');\n $input.appendTo('body').hide().click().on('input', e => {\n this.upload($(e.target)[0].files[0]);\n });\n }\n\n /**\n * Upload avatar\n *\n * @param {File} file\n */\n upload(file) {\n if (this.loading) return;\n const user = this.attrs.user;\n const data = new FormData();\n data.append('avatar', file);\n this.loading = true;\n m.redraw();\n app.request({\n method: 'POST',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/users/\").concat(user.id(), \"/avatar\"),\n serialize: raw => raw,\n body: data\n }).then(this.success.bind(this), this.failure.bind(this));\n }\n\n /**\n * Remove the user's avatar.\n */\n remove() {\n const user = this.attrs.user;\n this.loading = true;\n m.redraw();\n app.request({\n method: 'DELETE',\n url: \"\".concat(app.forum.attribute('apiUrl'), \"/users/\").concat(user.id(), \"/avatar\")\n }).then(this.success.bind(this), this.failure.bind(this));\n }\n\n /**\n * After a successful upload/removal, push the updated user data into the\n * store, and force a re-computation of the user's avatar color.\n *\n * @param {object} response\n * @protected\n */\n success(response) {\n app.store.pushPayload(response);\n delete this.attrs.user.avatarColor;\n this.loading = false;\n m.redraw();\n }\n\n /**\n * If avatar upload/removal fails, stop loading.\n *\n * @param {object} response\n * @protected\n */\n failure(response) {\n this.loading = false;\n m.redraw();\n }\n}\nflarum.reg.add('core', 'forum/components/AvatarEditor', AvatarEditor);","import Component from '../../common/Component';\nimport listItems from '../../common/helpers/listItems';\nimport UserCard from './UserCard';\nimport ComposerPostPreview from './ComposerPostPreview';\nimport app from '../app';\nimport escapeRegExp from '../../common/utils/escapeRegExp';\nimport highlight from '../../common/helpers/highlight';\nexport default class Comment extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view() {\n let contentHtml = this.attrs.isEditing ? '' : this.attrs.contentHtml;\n if (!this.attrs.isEditing && this.attrs.search) {\n const phrase = escapeRegExp(this.attrs.search);\n const highlightRegExp = new RegExp(phrase + '|' + phrase.trim().replace(/\\s+/g, '|'), 'gi');\n contentHtml = highlight(contentHtml, highlightRegExp, undefined, true);\n } else {\n contentHtml = m.trust(contentHtml);\n }\n return [m(\"header\", {\n className: \"Post-header\"\n }, m(\"ul\", null, listItems(this.attrs.headerItems.toArray())), !this.attrs.isHidden && this.attrs.cardVisible && m(UserCard, {\n user: this.attrs.user,\n className: \"UserCard--popover\",\n controlsButtonClassName: \"Button Button--icon Button--flat\"\n })), m(\"div\", {\n className: \"Post-body\"\n }, this.attrs.isEditing ? m(ComposerPostPreview, {\n className: \"Post-preview\",\n composer: app.composer\n }) : contentHtml)];\n }\n}\nflarum.reg.add('core', 'forum/components/Comment', Comment);","import app from '../../forum/app';\nimport Post from './Post';\nimport classList from '../../common/utils/classList';\nimport PostUser from './PostUser';\nimport PostMeta from './PostMeta';\nimport PostEdited from './PostEdited';\nimport ItemList from '../../common/utils/ItemList';\nimport Button from '../../common/components/Button';\nimport Link from '../../common/components/Link';\nimport Avatar from '../../common/components/Avatar';\nimport escapeRegExp from '../../common/utils/escapeRegExp';\nimport highlight from '../../common/helpers/highlight';\nimport Comment from './Comment';\n\n/**\n * The `CommentPost` component displays a standard `comment`-typed post. This\n * includes a number of item lists (controls, header, and footer) surrounding\n * the post's HTML content.\n *\n * ### Attrs\n *\n * - `post`\n */\nexport default class CommentPost extends Post {\n oninit(vnode) {\n super.oninit(vnode);\n\n /**\n * If the post has been hidden, then this flag determines whether or not its\n * content has been expanded.\n *\n * @type {Boolean}\n */\n this.revealContent = false;\n\n /**\n * Whether or not the user hover card inside of PostUser is visible.\n * The property must be managed in CommentPost to be able to use it in the subtree check\n *\n * @type {Boolean}\n */\n this.cardVisible = false;\n this.subtree.check(() => this.cardVisible, () => this.isEditing(), () => this.revealContent);\n }\n avatar() {\n const user = this.attrs.post.user();\n const view = m(Avatar, {\n user: user,\n className: \"Post-avatar\"\n });\n if (user) {\n return m(Link, {\n href: app.route.user(user)\n }, view);\n }\n return view;\n }\n content() {\n var _this$params;\n return super.content().concat([m(Comment, {\n headerItems: this.headerItems(),\n cardVisible: this.cardVisible,\n isEditing: this.isEditing(),\n isHidden: this.attrs.post.isHidden(),\n contentHtml: this.attrs.post.contentHtml(),\n user: this.attrs.post.user(),\n search: (_this$params = this.params) == null ? void 0 : _this$params.q\n })]);\n }\n refreshContent() {\n const contentHtml = this.isEditing() ? '' : this.attrs.post.contentHtml();\n\n // If the post content has changed since the last render, we'll run through\n // all of the <script> tags in the content and evaluate them. This is\n // necessary because TextFormatter outputs them for e.g. syntax highlighting.\n if (this.contentHtml !== contentHtml) {\n this.$('.Post-body script').each(function () {\n const script = document.createElement('script');\n script.textContent = this.textContent;\n Array.from(this.attributes).forEach(attr => script.setAttribute(attr.name, attr.value));\n this.parentNode.replaceChild(script, this);\n });\n }\n this.contentHtml = contentHtml;\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n this.listenForCard();\n this.refreshContent();\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n this.refreshContent();\n }\n isEditing() {\n const EditPostComposer = flarum.reg.checkModule('core', 'forum/components/EditPostComposer');\n if (!EditPostComposer) return false;\n return app.composer.bodyMatches(EditPostComposer, {\n post: this.attrs.post\n });\n }\n elementAttrs() {\n const post = this.attrs.post;\n const attrs = super.elementAttrs();\n attrs.className = classList(attrs.className, 'CommentPost', {\n 'Post--renderFailed': post.renderFailed(),\n 'Post--hidden': post.isHidden(),\n 'Post--edited': post.isEdited(),\n revealContent: this.revealContent,\n editing: this.isEditing()\n });\n if (this.isEditing()) attrs['aria-busy'] = 'true';\n return attrs;\n }\n\n /**\n * Toggle the visibility of a hidden post's content.\n */\n toggleContent() {\n this.revealContent = !this.revealContent;\n }\n\n /**\n * Build an item list for the post's header.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n headerItems() {\n const items = new ItemList();\n const post = this.attrs.post;\n items.add('user', m(PostUser, {\n post: post\n }), 100);\n items.add('meta', m(PostMeta, {\n post: post\n }));\n if (post.isEdited() && !post.isHidden()) {\n items.add('edited', m(PostEdited, {\n post: post\n }));\n }\n\n // If the post is hidden, add a button that allows toggling the visibility\n // of the post's content.\n if (post.isHidden()) {\n items.add('toggle', m(Button, {\n className: \"Button Button--default Button--more\",\n icon: \"fas fa-ellipsis-h\",\n onclick: this.toggleContent.bind(this)\n }));\n }\n return items;\n }\n listenForCard() {\n let timeout;\n this.$().on('mouseover', '.PostUser-name a, .UserCard, .Post-avatar', () => {\n clearTimeout(timeout);\n timeout = setTimeout(this.showCard.bind(this), 500);\n }).on('mouseout', '.PostUser-name a, .UserCard, .Post-avatar', () => {\n clearTimeout(timeout);\n timeout = setTimeout(this.hideCard.bind(this), 250);\n });\n }\n\n /**\n * Show the user card.\n */\n showCard() {\n this.cardVisible = true;\n m.redraw();\n setTimeout(() => this.$('.UserCard').addClass('in'));\n }\n\n /**\n * Hide the user card.\n */\n hideCard() {\n this.$('.UserCard').removeClass('in').one('transitionend webkitTransitionEnd oTransitionEnd', () => {\n this.cardVisible = false;\n m.redraw();\n });\n }\n}\nflarum.reg.add('core', 'forum/components/CommentPost', CommentPost);","/*global s9e*/\n\nimport Component from '../../common/Component';\n\n/**\n * The `ComposerPostPreview` component renders Markdown as HTML using the\n * TextFormatter library, polling a data source for changes every 50ms. This is\n * done to prevent expensive redraws on e.g. every single keystroke, while\n * still retaining the perception of live updates for the user.\n *\n * ### Attrs\n *\n * - `composer` The state of the composer controlling this preview.\n * - `className` A CSS class for the element surrounding the preview.\n * - `surround` A callback that can execute code before and after re-render, e.g. for scroll anchoring.\n */\nexport default class ComposerPostPreview extends Component {\n static initAttrs(attrs) {\n attrs.className = attrs.className || '';\n attrs.surround = attrs.surround || (preview => preview());\n }\n view() {\n return m(\"div\", {\n className: this.attrs.className\n });\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n\n // Every 50ms, if the composer content has changed, then update the post's\n // body with a preview.\n let preview;\n const updatePreview = () => {\n // Since we're polling, the composer may have been closed in the meantime,\n // so we bail in that case.\n if (!this.attrs.composer.isVisible()) return;\n const content = this.attrs.composer.fields.content();\n if (preview === content) return;\n preview = content;\n this.attrs.surround(() => s9e.TextFormatter.preview(preview || '', vnode.dom));\n };\n updatePreview();\n this.updateInterval = setInterval(updatePreview, 50);\n }\n onremove(vnode) {\n super.onremove(vnode);\n clearInterval(this.updateInterval);\n }\n}\nflarum.reg.add('core', 'forum/components/ComposerPostPreview', ComposerPostPreview);","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\n\n/**\n * The `DiscussionHero` component displays the hero on a discussion page.\n *\n * ### attrs\n *\n * - `discussion`\n */\nexport default class DiscussionHero extends Component {\n view() {\n return m(\"header\", {\n className: \"Hero DiscussionHero\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"ul\", {\n className: \"DiscussionHero-items\"\n }, listItems(this.items().toArray()))));\n }\n\n /**\n * Build an item list for the contents of the discussion hero.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n items() {\n const items = new ItemList();\n const discussion = this.attrs.discussion;\n const badges = discussion.badges().toArray();\n if (badges.length) {\n items.add('badges', m(\"ul\", {\n className: \"DiscussionHero-badges badges\"\n }, listItems(badges)), 10);\n }\n items.add('title', m(\"h1\", {\n className: \"DiscussionHero-title\"\n }, discussion.title()));\n return items;\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionHero', DiscussionHero);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport DiscussionListItem from './DiscussionListItem';\nimport Button from '../../common/components/Button';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nimport Placeholder from '../../common/components/Placeholder';\nimport classList from '../../common/utils/classList';\n\n/**\n * The `DiscussionList` component displays a list of discussions.\n *\n * ### Attrs\n *\n * - `state` A DiscussionListState object that represents the discussion lists's state.\n */\nexport default class DiscussionList extends Component {\n view() {\n /**\n * @type {import('../states/DiscussionListState').default}\n */\n const state = this.attrs.state;\n const params = state.getParams();\n const isLoading = state.isInitialLoading() || state.isLoadingNext();\n let loading;\n if (isLoading) {\n loading = m(LoadingIndicator, null);\n } else if (state.hasNext()) {\n loading = m(Button, {\n className: \"Button\",\n onclick: state.loadNext.bind(state)\n }, app.translator.trans('core.forum.discussion_list.load_more_button'));\n }\n if (state.isEmpty()) {\n const text = app.translator.trans('core.forum.discussion_list.empty_text');\n return m(\"div\", {\n className: \"DiscussionList\"\n }, m(Placeholder, {\n text: text\n }));\n }\n const pageSize = state.pageSize;\n return m(\"div\", {\n className: classList('DiscussionList', {\n 'DiscussionList--searchResults': state.isSearchResults()\n })\n }, m(\"ul\", {\n role: \"feed\",\n \"aria-busy\": isLoading,\n className: \"DiscussionList-discussions\"\n }, state.getPages().map((pg, pageNum) => {\n return pg.items.map((discussion, itemNum) => m(\"li\", {\n key: discussion.id(),\n \"data-id\": discussion.id(),\n role: \"article\",\n \"aria-setsize\": \"-1\",\n \"aria-posinset\": pageNum * pageSize + itemNum\n }, m(DiscussionListItem, {\n discussion: discussion,\n params: params\n })));\n })), m(\"div\", {\n className: \"DiscussionList-loadMore\"\n }, loading));\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionList', DiscussionList);","import app from '../../forum/app';\nimport DiscussionList from './DiscussionList';\nimport Component from '../../common/Component';\nimport DiscussionPage from './DiscussionPage';\nconst hotEdge = e => {\n if (e.pageX < 10) app.pane.show();\n};\n\n/**\n * The `DiscussionListPane` component displays the list of previously viewed\n * discussions in a panel that can be displayed by moving the mouse to the left\n * edge of the screen, where it can also be pinned in place.\n *\n * ### Attrs\n *\n * - `state` A DiscussionListState object that represents the discussion lists's state.\n */\nexport default class DiscussionListPane extends Component {\n view() {\n if (!this.attrs.state.hasItems()) {\n return;\n }\n return m(\"aside\", {\n className: \"DiscussionListPane\"\n }, this.enoughSpace() && m(DiscussionList, {\n state: this.attrs.state\n }));\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n const $list = $(vnode.dom);\n\n // When the mouse enters and leaves the discussions pane, we want to show\n // and hide the pane respectively. We also create a 10px 'hot edge' on the\n // left of the screen to activate the pane.\n const pane = app.pane;\n $list.hover(pane.show.bind(pane), pane.onmouseleave.bind(pane));\n $(document).on('mousemove', hotEdge);\n\n // When coming from another discussion, scroll to the previous postition\n // to prevent the discussion list jumping around.\n if (app.previous.matches(DiscussionPage)) {\n const top = app.cache.discussionListPaneScrollTop || 0;\n $list.scrollTop(top);\n } else {\n // If the discussion we are viewing is listed in the discussion list, then\n // we will make sure it is visible in the viewport – if it is not we will\n // scroll the list down to it.\n const $discussion = $list.find('.DiscussionListItem.active');\n if ($discussion.length) {\n const listTop = $list.offset().top;\n const listBottom = listTop + $list.outerHeight();\n const discussionTop = $discussion.offset().top;\n const discussionBottom = discussionTop + $discussion.outerHeight();\n if (discussionTop < listTop || discussionBottom > listBottom) {\n $list.scrollTop($list.scrollTop() - listTop + discussionTop);\n }\n }\n }\n }\n onremove(vnode) {\n app.cache.discussionListPaneScrollTop = $(vnode.dom).scrollTop();\n $(document).off('mousemove', hotEdge);\n }\n\n /**\n * Are we on a device that's larger than we consider \"mobile\"?\n *\n * @returns {boolean}\n */\n enoughSpace() {\n return !$('.App-navigation').is(':visible');\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionListPane', DiscussionListPane);","import app from '../../forum/app';\nimport EventPost from './EventPost';\nimport extractText from '../../common/utils/extractText';\nimport Tooltip from '../../common/components/Tooltip';\n\n/**\n * The `DiscussionRenamedPost` component displays a discussion event post\n * indicating that the discussion has been renamed.\n *\n * ### Attrs\n *\n * - All of the attrs for EventPost\n */\nexport default class DiscussionRenamedPost extends EventPost {\n icon() {\n return 'fas fa-pencil-alt';\n }\n description(data) {\n const renamed = app.translator.trans('core.forum.post_stream.discussion_renamed_text', data);\n return m(\"span\", null, renamed);\n }\n descriptionData() {\n const post = this.attrs.post;\n const oldTitle = post.content()[0];\n const newTitle = post.content()[1];\n return {\n new: m(Tooltip, {\n text: extractText(app.translator.trans('core.forum.post_stream.discussion_renamed_old_tooltip', {\n old: oldTitle\n }))\n }, m(\"strong\", {\n className: \"DiscussionRenamedPost-new\"\n }, newTitle))\n };\n }\n}\nflarum.reg.add('core', 'forum/components/DiscussionRenamedPost', DiscussionRenamedPost);","import app from '../../forum/app';\nimport Post from './Post';\nimport { ucfirst } from '../../common/utils/string';\nimport usernameHelper from '../../common/helpers/username';\nimport Link from '../../common/components/Link';\nimport humanTime from '../../common/helpers/humanTime';\nimport classList from '../../common/utils/classList';\nimport Icon from '../../common/components/Icon';\n\n/**\n * The `EventPost` component displays a post which indicating a discussion\n * event, like a discussion being renamed or stickied. Subclasses must implement\n * the `icon` and `description` methods.\n *\n * ### Attrs\n *\n * - All of the attrs for `Post`\n *\n * @abstract\n */\nexport default class EventPost extends Post {\n elementAttrs() {\n const attrs = super.elementAttrs();\n attrs.className = classList(attrs.className, 'EventPost', ucfirst(this.attrs.post.contentType()) + 'Post');\n return attrs;\n }\n avatar() {\n return m(Icon, {\n name: this.icon(),\n className: \"EventPost-icon\"\n });\n }\n content() {\n const user = this.attrs.post.user();\n const username = usernameHelper(user);\n const data = Object.assign(this.descriptionData(), {\n user,\n username: user ? m(Link, {\n className: \"EventPost-user\",\n href: app.route.user(user)\n }, username) : username,\n time: humanTime(this.attrs.post.createdAt())\n });\n return super.content().concat([m(\"div\", {\n className: \"EventPost-info\"\n }, this.description(data))]);\n }\n\n /**\n * Get the name of the event icon.\n *\n * @return {string}\n */\n icon() {\n return '';\n }\n\n /**\n * Get the description text for the event.\n *\n * @param {Record<string, unknown>} data\n * @return {import('mithril').Children} The description to render in the DOM\n */\n description(data) {\n return app.translator.trans(this.descriptionKey(), data);\n }\n\n /**\n * Get the translation key for the description of the event.\n *\n * @return {string}\n */\n descriptionKey() {\n return '';\n }\n\n /**\n * Get the translation data for the description of the event.\n *\n * @return {Record<string, unknown>}\n */\n descriptionData() {\n return {};\n }\n}\nflarum.reg.add('core', 'forum/components/EventPost', EventPost);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport Button from '../../common/components/Button';\nimport SessionDropdown from './SessionDropdown';\nimport SelectDropdown from '../../common/components/SelectDropdown';\nimport NotificationsDropdown from './NotificationsDropdown';\nimport ItemList from '../../common/utils/ItemList';\nimport listItems from '../../common/helpers/listItems';\nimport Search from '../components/Search';\n\n/**\n * The `HeaderSecondary` component displays secondary header controls, such as\n * the search box and the user menu. On the default skin, these are shown on the\n * right side of the header.\n */\nexport default class HeaderSecondary extends Component {\n view() {\n return m(\"ul\", {\n className: \"Header-controls\"\n }, listItems(this.items().toArray()));\n }\n\n /**\n * Build an item list for the controls.\n *\n * @return {ItemList}\n */\n items() {\n const items = new ItemList();\n items.add('search', m(Search, {\n state: app.search.state\n }), 30);\n if (app.forum.attribute('showLanguageSelector') && Object.keys(app.data.locales).length > 1) {\n const locales = [];\n for (const locale in app.data.locales) {\n locales.push(m(Button, {\n active: app.data.locale === locale,\n icon: app.data.locale === locale ? 'fas fa-check' : true,\n onclick: () => {\n if (app.session.user) {\n app.session.user.savePreferences({\n locale\n }).then(() => window.location.reload());\n } else {\n document.cookie = \"locale=\".concat(locale, \"; path=/; expires=Tue, 19 Jan 2038 03:14:07 GMT\");\n window.location.reload();\n }\n }\n }, app.data.locales[locale]));\n }\n items.add('locale', m(SelectDropdown, {\n buttonClassName: \"Button Button--link\",\n accessibleToggleLabel: app.translator.trans('core.forum.header.locale_dropdown_accessible_label')\n }, locales), 20);\n }\n if (app.session.user) {\n items.add('notifications', m(NotificationsDropdown, {\n state: app.notifications\n }), 10);\n items.add('session', m(SessionDropdown, null), 0);\n } else {\n if (app.forum.attribute('allowSignUp')) {\n items.add('signUp', m(Button, {\n className: \"Button Button--link\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'forum/components/SignUpModal', webpackMode: 'lazy-once' */ './SignUpModal'))\n }, app.translator.trans('core.forum.header.sign_up_link')), 10);\n }\n items.add('logIn', m(Button, {\n className: \"Button Button--link\",\n onclick: () => app.modal.show(() => import(/* webpackChunkName: 'forum/components/LogInModal', webpackMode: 'lazy-once' */ './LogInModal'))\n }, app.translator.trans('core.forum.header.log_in_link')), 0);\n }\n return items;\n }\n}\nflarum.reg.add('core', 'forum/components/HeaderSecondary', HeaderSecondary);flarum.reg.addChunkModule('559', '9509', 'core', 'forum/components/SignUpModal');","import Component from '../../common/Component';\nimport ItemList from '../../common/utils/ItemList';\n\n/**\n * The `LogInButtons` component displays a collection of social login buttons.\n */\nexport default class LogInButtons extends Component {\n view() {\n return m(\"div\", {\n className: \"LogInButtons\"\n }, this.items().toArray());\n }\n\n /**\n * Build a list of LogInButton components.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n items() {\n return new ItemList();\n }\n}\nflarum.reg.add('core', 'forum/components/LogInButtons', LogInButtons);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from '../../common/Component';\nimport classList from '../../common/utils/classList';\nimport LoadingIndicator from '../../common/components/LoadingIndicator';\nexport default class HeaderList extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"$content\", null);\n _defineProperty(this, \"$scrollParent\", null);\n _defineProperty(this, \"boundScrollHandler\", null);\n }\n view(vnode) {\n const {\n title,\n controls,\n hasItems,\n loading = false,\n emptyText,\n className,\n footer,\n ...attrs\n } = vnode.attrs;\n return m(\"div\", Object.assign({\n className: classList('HeaderList', className)\n }, attrs), m(\"div\", {\n className: \"HeaderList-header\"\n }, m(\"h4\", {\n className: \"App-titleControl App-titleControl--text\"\n }, title), m(\"div\", {\n className: \"App-primaryControl\"\n }, controls == null ? void 0 : controls.toArray())), m(\"div\", {\n className: \"HeaderList-content\"\n }, loading ? m(LoadingIndicator, {\n className: \"LoadingIndicator--block\"\n }) : hasItems ? vnode.children : m(\"div\", {\n className: \"HeaderList-empty\"\n }, emptyText)), !!footer && m(\"div\", {\n className: \"HeaderList-footer\"\n }, footer()));\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n if (this.attrs.loadMore) {\n this.$content = this.$('.HeaderList-content');\n\n // If we are on the notifications page, the window will be scrolling and not the $notifications element.\n this.$scrollParent = this.inPanel() ? this.$content : $(window);\n this.boundScrollHandler = this.scrollHandler.bind(this);\n this.$scrollParent.on('scroll', this.boundScrollHandler);\n }\n }\n onremove(vnode) {\n super.onremove(vnode);\n if (this.attrs.loadMore) {\n this.$scrollParent.off('scroll', this.boundScrollHandler);\n }\n }\n scrollHandler() {\n // Whole-page scroll events are listened to on `window`, but we need to get the actual\n // scrollHeight, scrollTop, and clientHeight from the document element.\n const scrollParent = this.inPanel() ? this.$scrollParent[0] : document.documentElement;\n\n // On very short screens, the scrollHeight + scrollTop might not reach the clientHeight\n // by a fraction of a pixel, so we compensate for that.\n const atBottom = Math.abs(scrollParent.scrollHeight - scrollParent.scrollTop - scrollParent.clientHeight) <= 1;\n if (atBottom) {\n var _this$attrs$loadMore, _this$attrs;\n (_this$attrs$loadMore = (_this$attrs = this.attrs).loadMore) == null || _this$attrs$loadMore.call(_this$attrs);\n }\n }\n\n /**\n * If the NotificationList component isn't in a panel (e.g. on NotificationPage when mobile),\n * we need to listen to scroll events on the window, and get scroll state from the body.\n */\n inPanel() {\n return this.$content.css('overflow') === 'auto';\n }\n}\nflarum.reg.add('core', 'forum/components/HeaderList', HeaderList);","import Component from '../../common/Component';\nimport listItems from '../../common/helpers/listItems';\nexport default class HeaderListGroup extends Component {\n view(vnode) {\n return m(\"div\", {\n className: \"HeaderListGroup\"\n }, m(\"div\", {\n className: \"HeaderListGroup-header\"\n }, vnode.attrs.label), m(\"ul\", {\n className: \"HeaderListGroup-content\"\n }, listItems(vnode.children)));\n }\n}\nflarum.reg.add('core', 'forum/components/HeaderListGroup', HeaderListGroup);","import Component from '../../common/Component';\nimport app from '../app';\nexport default class NotificationType extends Component {\n view() {\n const notification = this.attrs.notification;\n const NotificationComponent = app.notificationComponents[notification.contentType()];\n return !!NotificationComponent ? m(NotificationComponent, {\n notification: notification\n }) : null;\n }\n}\nflarum.reg.add('core', 'forum/components/NotificationType', NotificationType);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport listItems from '../../common/helpers/listItems';\nimport Button from '../../common/components/Button';\nimport Link from '../../common/components/Link';\nimport Discussion from '../../common/models/Discussion';\nimport ItemList from '../../common/utils/ItemList';\nimport Tooltip from '../../common/components/Tooltip';\nimport HeaderList from './HeaderList';\nimport HeaderListGroup from './HeaderListGroup';\nimport NotificationType from './NotificationType';\n\n/**\n * The `NotificationList` component displays a list of the logged-in user's\n * notifications, grouped by discussion.\n */\nexport default class NotificationList extends Component {\n view() {\n const state = this.attrs.state;\n return m(HeaderList, {\n className: \"NotificationList\",\n title: app.translator.trans('core.forum.notifications.title'),\n controls: this.controlItems(),\n hasItems: state.hasItems(),\n loading: state.isLoading(),\n emptyText: app.translator.trans('core.forum.notifications.empty_text'),\n loadMore: () => state.hasNext() && !state.isLoadingNext() && state.loadNext()\n }, this.content(state));\n }\n controlItems() {\n const items = new ItemList();\n const state = this.attrs.state;\n items.add('mark_all_as_read', m(Tooltip, {\n text: app.translator.trans('core.forum.notifications.mark_all_as_read_tooltip')\n }, m(Button, {\n className: \"Button Button--link\",\n \"data-container\": \".NotificationList\",\n icon: \"fas fa-check\",\n title: app.translator.trans('core.forum.notifications.mark_all_as_read_tooltip'),\n onclick: state.markAllAsRead.bind(state)\n })), 70);\n items.add('delete_all', m(Tooltip, {\n text: app.translator.trans('core.forum.notifications.delete_all_tooltip')\n }, m(Button, {\n className: \"Button Button--link\",\n \"data-container\": \".NotificationList\",\n icon: \"fas fa-trash-alt\",\n title: app.translator.trans('core.forum.notifications.delete_all_tooltip'),\n onclick: () => {\n if (confirm(app.translator.trans('core.forum.notifications.delete_all_confirm'))) {\n state.deleteAll.call(state);\n }\n }\n })), 50);\n return items;\n }\n content(state) {\n if (!state.isLoading() && state.hasItems()) {\n return state.getPages().map(page => {\n const groups = [];\n const discussions = {};\n page.items.forEach(notification => {\n const subject = notification.subject();\n if (typeof subject === 'undefined') return;\n\n // Get the discussion that this notification is related to. If it's not\n // directly related to a discussion, it may be related to a post or\n // other entity which is related to a discussion.\n let discussion = null;\n if (subject instanceof Discussion) discussion = subject;else if (subject && subject.discussion) discussion = subject.discussion();\n\n // If the notification is not related to a discussion directly or\n // indirectly, then we will assign it to a neutral group.\n const key = discussion ? discussion.id() : 0;\n discussions[key] = discussions[key] || {\n discussion: discussion,\n notifications: []\n };\n discussions[key].notifications.push(notification);\n if (groups.indexOf(discussions[key]) === -1) {\n groups.push(discussions[key]);\n }\n });\n return groups.map(group => {\n const badges = group.discussion && group.discussion.badges().toArray();\n return m(HeaderListGroup, {\n label: group.discussion ? m(Link, {\n href: app.route.discussion(group.discussion)\n }, badges && !!badges.length && m(\"ul\", {\n className: \"HeaderListGroup-badges badges\"\n }, listItems(badges)), m(\"span\", null, group.discussion.title())) : app.forum.attribute('title')\n }, group.notifications.map(notification => m(NotificationType, {\n notification: notification\n })).filter(component => !!component));\n });\n });\n }\n return null;\n }\n}\nflarum.reg.add('core', 'forum/components/NotificationList', NotificationList);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport humanTime from '../../common/utils/humanTime';\nimport Tooltip from '../../common/components/Tooltip';\n\n/**\n * The `PostEdited` component displays information about when and by whom a post\n * was edited.\n *\n * ### Attrs\n *\n * - `post`\n */\nexport default class PostEdited extends Component {\n oninit(vnode) {\n super.oninit(vnode);\n }\n view() {\n const post = this.attrs.post;\n const editedUser = post.editedUser();\n const editedInfo = app.translator.trans('core.forum.post.edited_tooltip', {\n user: editedUser,\n ago: humanTime(post.editedAt())\n });\n return m(Tooltip, {\n text: editedInfo\n }, m(\"span\", {\n className: \"PostEdited\"\n }, app.translator.trans('core.forum.post.edited_text')));\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n }\n}\nflarum.reg.add('core', 'forum/components/PostEdited', PostEdited);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport humanTime from '../../common/helpers/humanTime';\nimport Icon from '../../common/components/Icon';\n\n/**\n * Displays information about a the first or last post in a discussion.\n *\n * ### Attrs\n *\n * - `discussion`\n * - `lastPost`\n */\nexport default class TerminalPost extends Component {\n view() {\n const discussion = this.attrs.discussion;\n const lastPost = this.attrs.lastPost && discussion.replyCount();\n const user = discussion[lastPost ? 'lastPostedUser' : 'user']();\n const time = discussion[lastPost ? 'lastPostedAt' : 'createdAt']();\n return m(\"span\", null, !!lastPost && m(Icon, {\n name: 'fas fa-reply'\n }), ' ', app.translator.trans('core.forum.discussion_list.' + (lastPost ? 'replied' : 'started') + '_text', {\n user,\n ago: humanTime(time)\n }));\n }\n}\nflarum.reg.add('core', 'forum/components/TerminalPost', TerminalPost);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport humanTime from '../../common/utils/humanTime';\nimport ItemList from '../../common/utils/ItemList';\nimport UserControls from '../utils/UserControls';\nimport username from '../../common/helpers/username';\nimport Dropdown from '../../common/components/Dropdown';\nimport Link from '../../common/components/Link';\nimport AvatarEditor from './AvatarEditor';\nimport listItems from '../../common/helpers/listItems';\nimport classList from '../../common/utils/classList';\nimport Icon from '../../common/components/Icon';\nimport Avatar from '../../common/components/Avatar';\n\n/**\n * The `UserCard` component displays a user's profile card. This is used both on\n * the `UserPage` (in the hero) and in discussions, shown when hovering over a\n * post author.\n *\n * ### Attrs\n *\n * - `user`\n * - `className`\n * - `editable`\n * - `controlsButtonClassName`\n */\nexport default class UserCard extends Component {\n view() {\n const user = this.attrs.user;\n const color = user.color();\n return m(\"div\", {\n className: classList('UserCard', this.attrs.className),\n style: color && !window.testing && {\n '--usercard-bg': color\n }\n }, m(\"div\", {\n className: \"darkenBackground\"\n }, m(\"div\", {\n className: \"container\"\n }, m(\"div\", {\n className: \"UserCard-profile\"\n }, this.profileItems().toArray()), m(\"div\", {\n className: \"UserCard-controls\"\n }, this.controlsItems().toArray()))));\n }\n profileItems() {\n const items = new ItemList();\n items.add('avatar', this.avatar(), 100);\n items.add('content', this.content(), 10);\n return items;\n }\n avatar() {\n const user = this.attrs.user;\n return this.attrs.editable ? m(AvatarEditor, {\n user: user,\n className: \"UserCard-avatar\"\n }) : m(Link, {\n href: app.route.user(user)\n }, m(\"div\", {\n className: \"UserCard-avatar\"\n }, m(Avatar, {\n user: user,\n loading: \"eager\"\n })));\n }\n content() {\n return m(\"div\", {\n className: \"UserCard-content\"\n }, this.contentItems().toArray());\n }\n contentItems() {\n const items = new ItemList();\n const user = this.attrs.user;\n const badges = user.badges().toArray();\n items.add('identity', m(\"h1\", {\n className: \"UserCard-identity\"\n }, username(user)), 100);\n if (badges.length) {\n items.add('badges', m(\"ul\", {\n className: \"UserCard-badges badges\"\n }, listItems(badges)), 90);\n }\n items.add('info', m(\"ul\", {\n className: \"UserCard-info\"\n }, listItems(this.infoItems().toArray())), 80);\n return items;\n }\n\n /**\n * Build an item list of tidbits of info to show on this user's profile.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n infoItems() {\n const items = new ItemList();\n const user = this.attrs.user;\n const lastSeenAt = user.lastSeenAt();\n if (lastSeenAt) {\n const online = user.isOnline();\n items.add('lastSeen', m(\"span\", {\n className: classList('UserCard-lastSeen', {\n online\n })\n }, online ? [m(Icon, {\n name: 'fas fa-circle'\n }), ' ', app.translator.trans('core.forum.user.online_text')] : [m(Icon, {\n name: 'far fa-clock'\n }), ' ', humanTime(lastSeenAt)]), 100);\n }\n items.add('joined', app.translator.trans('core.forum.user.joined_date_text', {\n ago: humanTime(user.joinTime())\n }), 90);\n return items;\n }\n controlsItems() {\n const items = new ItemList();\n const user = this.attrs.user;\n const controls = UserControls.controls(user, this).toArray();\n if (controls.length) {\n items.add('controls', m(Dropdown, {\n className: \"App-primaryControl\",\n menuClassName: \"Dropdown-menu--right\",\n buttonClassName: this.attrs.controlsButtonClassName,\n label: app.translator.trans('core.forum.user_controls.button'),\n accessibleToggleLabel: app.translator.trans('core.forum.user_controls.toggle_dropdown_accessible_label'),\n icon: \"fas fa-ellipsis-v\"\n }, controls), 100);\n }\n return items;\n }\n}\nflarum.reg.add('core', 'forum/components/UserCard', UserCard);","import app from '../../forum/app';\nimport DiscussionPage from '../components/DiscussionPage';\nimport Button from '../../common/components/Button';\nimport Separator from '../../common/components/Separator';\nimport RenameDiscussionModal from '../components/RenameDiscussionModal';\nimport ItemList from '../../common/utils/ItemList';\nimport extractText from '../../common/utils/extractText';\n\n/**\n * The `DiscussionControls` utility constructs a list of buttons for a\n * discussion which perform actions on it.\n */\nconst DiscussionControls = {\n /**\n * Get a list of controls for a discussion.\n *\n * @param {import('../../common/models/Discussion').default} discussion\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n controls(discussion, context) {\n const items = new ItemList();\n ['user', 'moderation', 'destructive'].forEach(section => {\n const controls = this[section + 'Controls'](discussion, context).toArray();\n if (controls.length) {\n controls.forEach(item => items.add(item.itemName, item));\n items.add(section + 'Separator', m(Separator, null));\n }\n });\n return items;\n },\n /**\n * Get controls for a discussion pertaining to the current user (e.g. reply,\n * follow).\n *\n * @param {import('../../common/models/Discussion').default} discussion\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n * @protected\n */\n userControls(discussion, context) {\n const items = new ItemList();\n\n // Only add a reply control if this is the discussion's controls dropdown\n // for the discussion page itself. We don't want it to show up for\n // discussions in the discussion list, etc.\n if (context instanceof DiscussionPage) {\n items.add('reply', !app.session.user || discussion.canReply() ? m(Button, {\n icon: \"fas fa-reply\",\n onclick: () => {\n // If the user is not logged in, the promise rejects, and a login modal shows up.\n // Since that's already handled, we dont need to show an error message in the console.\n return this.replyAction.bind(discussion)(true, false).catch(() => {});\n }\n }, app.translator.trans(app.session.user ? 'core.forum.discussion_controls.reply_button' : 'core.forum.discussion_controls.log_in_to_reply_button')) : m(Button, {\n icon: \"fas fa-reply\",\n className: \"disabled\",\n title: extractText(app.translator.trans('core.forum.discussion_controls.cannot_reply_text'))\n }, app.translator.trans('core.forum.discussion_controls.cannot_reply_button')));\n }\n return items;\n },\n /**\n * Get controls for a discussion pertaining to moderation (e.g. rename, lock).\n *\n * @param {import('../../common/models/Discussion').default} discussion\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n * @protected\n */\n moderationControls(discussion) {\n const items = new ItemList();\n if (discussion.canRename()) {\n items.add('rename', m(Button, {\n icon: \"fas fa-pencil-alt\",\n onclick: this.renameAction.bind(discussion)\n }, app.translator.trans('core.forum.discussion_controls.rename_button')));\n }\n return items;\n },\n /**\n * Get controls for a discussion which are destructive (e.g. delete).\n *\n * @param {import('../../common/models/Discussion').default} discussion\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n * @protected\n */\n destructiveControls(discussion) {\n const items = new ItemList();\n if (!discussion.isHidden()) {\n if (discussion.canHide()) {\n items.add('hide', m(Button, {\n icon: \"far fa-trash-alt\",\n onclick: this.hideAction.bind(discussion)\n }, app.translator.trans('core.forum.discussion_controls.delete_button')));\n }\n } else {\n if (discussion.canHide()) {\n items.add('restore', m(Button, {\n icon: \"fas fa-reply\",\n onclick: this.restoreAction.bind(discussion)\n }, app.translator.trans('core.forum.discussion_controls.restore_button')));\n }\n if (discussion.canDelete()) {\n items.add('delete', m(Button, {\n icon: \"fas fa-times\",\n onclick: this.deleteAction.bind(discussion)\n }, app.translator.trans('core.forum.discussion_controls.delete_forever_button')));\n }\n }\n return items;\n },\n /**\n * Open the reply composer for the discussion. A promise will be returned,\n * which resolves when the composer opens successfully. If the user is not\n * logged in, they will be prompted. If they don't have permission to\n * reply, the promise will be rejected.\n *\n * @param {boolean} goToLast Whether or not to scroll down to the last post if the discussion is being viewed.\n * @param {boolean} forceRefresh Whether or not to force a reload of the composer component, even if it is already open for this discussion.\n *\n * @return {Promise<import('../states/ComposerState.js')>}\n */\n async replyAction(goToLast, forceRefresh) {\n if (app.session.user) {\n if (this.canReply()) {\n if (!app.composer.composingReplyTo(this) || forceRefresh) {\n await app.composer.load(() => import(/* webpackChunkName: 'forum/components/ReplyComposer', webpackMode: 'lazy-once' */ '../components/ReplyComposer'), {\n user: app.session.user,\n discussion: this\n });\n }\n await app.composer.show();\n if (goToLast && app.viewingDiscussion(this) && !app.composer.isFullScreen()) {\n await app.current.get('stream').goToNumber('reply');\n }\n return Promise.resolve(app.composer);\n } else {\n return Promise.reject();\n }\n }\n await app.modal.show(() => import(/* webpackChunkName: 'forum/components/LogInModal', webpackMode: 'lazy-once' */ '../components/LogInModal'));\n return Promise.reject();\n },\n /**\n * Hide a discussion.\n *\n * @return {Promise<void>}\n */\n hideAction() {\n this.pushData({\n attributes: {\n hiddenAt: new Date()\n },\n relationships: {\n hiddenUser: app.session.user\n }\n });\n return this.save({\n isHidden: true\n });\n },\n /**\n * Restore a discussion.\n *\n * @return {Promise<void>}\n */\n restoreAction() {\n this.pushData({\n attributes: {\n hiddenAt: null\n },\n relationships: {\n hiddenUser: null\n }\n });\n return this.save({\n isHidden: false\n });\n },\n /**\n * Delete the discussion after confirming with the user.\n *\n * @return {Promise<void>}\n */\n deleteAction() {\n if (confirm(extractText(app.translator.trans('core.forum.discussion_controls.delete_confirmation')))) {\n // If we're currently viewing the discussion that was deleted, go back\n // to the previous page.\n if (app.viewingDiscussion(this)) {\n app.history.back();\n }\n return this.delete().then(() => app.discussions.removeDiscussion(this));\n }\n },\n /**\n * Rename the discussion.\n */\n renameAction() {\n return app.modal.show(RenameDiscussionModal, {\n currentTitle: this.title(),\n discussion: this\n });\n }\n};\nexport default DiscussionControls;\nflarum.reg.add('core', 'forum/utils/DiscussionControls', DiscussionControls);flarum.reg.addChunkModule('378', '6349', 'core', 'forum/components/ReplyComposer');\nflarum.reg.addChunkModule('378', '6349', 'core', 'forum/components/ComposerBody');\nflarum.reg.addChunkModule('378', '6349', 'core', 'common/components/ConfirmDocumentUnload');\nflarum.reg.addChunkModule('226', '1793', 'core', 'forum/components/LogInModal');\nflarum.reg.addChunkModule('226', '1793', 'core', 'forum/components/ForgotPasswordModal');","/**\n * The `Pane` class manages the page's discussion list sidepane. The pane is a\n * part of the content view (DiscussionPage component), but its visibility is\n * determined by CSS classes applied to the outer page element. This class\n * manages the application of those CSS classes.\n */\nexport default class Pane {\n constructor(element) {\n /**\n * The localStorage key to store the pane's pinned state with.\n *\n * @type {String}\n * @protected\n */\n this.pinnedKey = 'panePinned';\n\n /**\n * The page element.\n *\n * @type {jQuery}\n * @protected\n */\n this.$element = $(element);\n\n /**\n * Whether or not the pane is currently pinned.\n *\n * @type {Boolean}\n * @protected\n */\n this.pinned = localStorage.getItem(this.pinnedKey) === 'true';\n\n /**\n * Whether or not the pane is currently exists.\n *\n * @type {Boolean}\n * @protected\n */\n this.active = false;\n\n /**\n * Whether or not the pane is currently showing, or is hidden off the edge\n * of the screen.\n *\n * @type {Boolean}\n * @protected\n */\n this.showing = false;\n this.render();\n }\n\n /**\n * Enable the pane.\n */\n enable() {\n this.active = true;\n this.render();\n }\n\n /**\n * Disable the pane.\n */\n disable() {\n this.active = false;\n this.showing = false;\n this.render();\n }\n\n /**\n * Show the pane.\n */\n show() {\n clearTimeout(this.hideTimeout);\n this.showing = true;\n this.render();\n }\n\n /**\n * Hide the pane.\n */\n hide() {\n this.showing = false;\n this.render();\n }\n\n /**\n * Begin a timeout to hide the pane, which can be cancelled by showing the\n * pane.\n */\n onmouseleave() {\n this.hideTimeout = setTimeout(this.hide.bind(this), 250);\n }\n\n /**\n * Toggle whether or not the pane is pinned.\n */\n togglePinned() {\n this.pinned = !this.pinned;\n localStorage.setItem(this.pinnedKey, this.pinned ? 'true' : 'false');\n this.render();\n }\n\n /**\n * Apply the appropriate CSS classes to the page element.\n *\n * @protected\n */\n render() {\n this.$element.toggleClass('panePinned', this.pinned).toggleClass('hasPane', this.active).toggleClass('paneShowing', this.showing);\n }\n}\nflarum.reg.add('core', 'forum/utils/Pane', Pane);","import app from '../../forum/app';\nimport Button from '../../common/components/Button';\nimport Separator from '../../common/components/Separator';\nimport ItemList from '../../common/utils/ItemList';\nimport extractText from '../../common/utils/extractText';\n\n/**\n * The `PostControls` utility constructs a list of buttons for a post which\n * perform actions on it.\n */\nconst PostControls = {\n /**\n * Get a list of controls for a post.\n *\n * @param {import('../../common/models/Post').default} post\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}')}\n */\n controls(post, context) {\n const items = new ItemList();\n ['user', 'moderation', 'destructive'].forEach(section => {\n const controls = this[section + 'Controls'](post, context).toArray();\n if (controls.length) {\n controls.forEach(item => items.add(item.itemName, item));\n items.add(section + 'Separator', m(Separator, null));\n }\n });\n return items;\n },\n /**\n * Get controls for a post pertaining to the current user (e.g. report).\n *\n * @param {import('../../common/models/Post').default} post\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}')}\n * @protected\n */\n userControls(post, context) {\n return new ItemList();\n },\n /**\n * Get controls for a post pertaining to moderation (e.g. edit).\n *\n * @param {import('../../common/models/Post').default} post\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}')}\n * @protected\n */\n moderationControls(post, context) {\n const items = new ItemList();\n if (post.contentType() === 'comment' && post.canEdit()) {\n if (!post.isHidden()) {\n items.add('edit', m(Button, {\n icon: \"fas fa-pencil-alt\",\n onclick: this.editAction.bind(post)\n }, app.translator.trans('core.forum.post_controls.edit_button')));\n }\n }\n return items;\n },\n /**\n * Get controls for a post that are destructive (e.g. delete).\n *\n * @param {import('../../common/models/Post').default} post\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}')}\n * @protected\n */\n destructiveControls(post, context) {\n const items = new ItemList();\n if (post.contentType() === 'comment' && !post.isHidden()) {\n if (post.canHide()) {\n items.add('hide', m(Button, {\n icon: \"far fa-trash-alt\",\n onclick: this.hideAction.bind(post)\n }, app.translator.trans('core.forum.post_controls.delete_button')));\n }\n } else {\n if (post.contentType() === 'comment' && post.canHide()) {\n items.add('restore', m(Button, {\n icon: \"fas fa-reply\",\n onclick: this.restoreAction.bind(post)\n }, app.translator.trans('core.forum.post_controls.restore_button')));\n }\n if (post.canDelete()) {\n items.add('delete', m(Button, {\n icon: \"fas fa-times\",\n onclick: this.deleteAction.bind(post, context)\n }, app.translator.trans('core.forum.post_controls.delete_forever_button')));\n }\n }\n return items;\n },\n /**\n * Open the composer to edit a post.\n *\n * @return {Promise<void>}\n */\n editAction() {\n return new Promise(resolve => {\n app.composer.load(() => import(/* webpackChunkName: 'forum/components/EditPostComposer', webpackMode: 'lazy-once' */ '../components/EditPostComposer'), {\n post: this\n }).then(() => app.composer.show());\n return resolve();\n });\n },\n /**\n * Hide a post.\n *\n * @return {Promise<void>}\n */\n hideAction() {\n if (!confirm(extractText(app.translator.trans('core.forum.post_controls.hide_confirmation')))) return;\n this.pushData({\n attributes: {\n hiddenAt: new Date()\n },\n relationships: {\n hiddenUser: app.session.user\n }\n });\n return this.save({\n isHidden: true\n }).then(() => m.redraw());\n },\n /**\n * Restore a post.\n *\n * @return {Promise<void>}\n */\n restoreAction() {\n this.pushData({\n attributes: {\n hiddenAt: null\n },\n relationships: {\n hiddenUser: null\n }\n });\n return this.save({\n isHidden: false\n }).then(() => m.redraw());\n },\n /**\n * Delete a post.\n *\n * @return {Promise<void>}\n */\n deleteAction(context) {\n if (!confirm(extractText(app.translator.trans('core.forum.post_controls.delete_confirmation')))) return;\n if (context) context.loading = true;\n return this.delete().then(() => {\n const discussion = this.discussion();\n discussion.removePost(this.id());\n\n // If this was the last post in the discussion, then we will assume that\n // the whole discussion was deleted too.\n if (!discussion.postIds().length) {\n app.discussions.removeDiscussion(discussion);\n if (app.viewingDiscussion(discussion)) {\n app.history.back();\n }\n }\n }).catch(() => {}).then(() => {\n if (context) context.loading = false;\n m.redraw();\n });\n }\n};\nexport default PostControls;\nflarum.reg.add('core', 'forum/utils/PostControls', PostControls);flarum.reg.addChunkModule('948', '4191', 'core', 'forum/components/EditPostComposer');","import app from '../../forum/app';\nimport Button from '../../common/components/Button';\nimport Separator from '../../common/components/Separator';\nimport UserPage from '../components/UserPage';\nimport ItemList from '../../common/utils/ItemList';\n\n/**\n * The `UserControls` utility constructs a list of buttons for a user which\n * perform actions on it.\n */\nconst UserControls = {\n /**\n * Get a list of controls for a user.\n *\n * @param {import('../../common/models/User').default} user\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n */\n controls(user, context) {\n const items = new ItemList();\n ['user', 'moderation', 'destructive'].forEach(section => {\n const controls = this[section + 'Controls'](user, context).toArray();\n if (controls.length) {\n controls.forEach(item => items.add(item.itemName, item));\n items.add(section + 'Separator', m(Separator, null));\n }\n });\n return items;\n },\n /**\n * Get controls for a user pertaining to the current user (e.g. poke, follow).\n *\n * @param {import('../../common/models/User').default} user\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n * @protected\n */\n userControls() {\n return new ItemList();\n },\n /**\n * Get controls for a user pertaining to moderation (e.g. suspend, edit).\n *\n * @param {import('../../common/models/User').default} user\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n * @protected\n */\n moderationControls(user) {\n const items = new ItemList();\n if (user.canEdit() || user.canEditCredentials() || user.canEditGroups()) {\n items.add('edit', m(Button, {\n icon: \"fas fa-pencil-alt\",\n onclick: this.editAction.bind(this, user)\n }, app.translator.trans('core.forum.user_controls.edit_button')));\n }\n return items;\n },\n /**\n * Get controls for a user which are destructive (e.g. delete).\n *\n * @param {import('../../common/models/User').default} user\n * @param {import('../../common/Component').default<any, any>} context The parent component under which the controls menu will be displayed.\n *\n * @return {ItemList<import('mithril').Children>}\n * @protected\n */\n destructiveControls(user) {\n const items = new ItemList();\n if (user.id() !== '1' && user.canDelete()) {\n items.add('delete', m(Button, {\n icon: \"fas fa-times\",\n onclick: this.deleteAction.bind(this, user)\n }, app.translator.trans('core.forum.user_controls.delete_button')));\n }\n return items;\n },\n /**\n * Delete the user.\n *\n * @param {import('../../common/models/User').default} user\n */\n deleteAction(user) {\n if (!confirm(app.translator.trans('core.forum.user_controls.delete_confirmation'))) {\n return;\n }\n user.delete().then(() => {\n this.showDeletionAlert(user, 'success');\n if (app.current.matches(UserPage, {\n user\n })) {\n app.history.back();\n } else {\n window.location.reload();\n }\n }).catch(() => this.showDeletionAlert(user, 'error'));\n },\n /**\n * Show deletion alert of user.\n *\n * @param {import('../../common/models/User').default} user\n * @param {string} type\n */\n showDeletionAlert(user, type) {\n const message = {\n success: 'core.forum.user_controls.delete_success_message',\n error: 'core.forum.user_controls.delete_error_message'\n }[type];\n app.alerts.show({\n type\n }, app.translator.trans(message, {\n user,\n email: user.email()\n }));\n },\n /**\n * Edit the user.\n *\n * @param {import('../../common/models/User').default} user\n */\n editAction(user) {\n app.modal.show(() => import(/* webpackChunkName: 'common/components/EditUserModal', webpackMode: 'lazy-once' */ '../../common/components/EditUserModal'), {\n user\n });\n }\n};\nexport default UserControls;\nflarum.reg.add('core', 'forum/utils/UserControls', UserControls);flarum.reg.addChunkModule('234', '422', 'core', 'common/components/EditUserModal');","/**\n * The `slidable` utility adds touch gestures to an element so that it can be\n * slid away to reveal controls underneath, and then released to activate those\n * controls.\n *\n * It relies on the element having children with particular CSS classes.\n *\n * The function returns a record with a `reset` proeprty. This is a function\n * which reverts the slider to its original position. This should be called,\n * for example, when a controls dropdown is closed.\n *\n * @param {HTMLElement | SVGElement | Element} element\n * @return {{ reset : () => void }}\n */\nexport default function slidable(element) {\n const $element = $(element);\n const threshold = 50;\n let $underneathLeft;\n let $underneathRight;\n let startX;\n let startY;\n let couldBeSliding = false;\n let isSliding = false;\n let pos = 0;\n\n /**\n * Animate the slider to a new position.\n *\n * @param {number} newPos\n * @param {Partial<JQueryAnimationOptions>} [options]\n */\n const animatePos = function (newPos, options) {\n var _options;\n if (options === void 0) {\n options = {};\n }\n // Since we can't animate the transform property with jQuery, we'll use a\n // bit of a workaround. We set up the animation with a step function that\n // will set the transform property, but then we animate an unused property\n // (background-position-x) with jQuery.\n (_options = options).duration || (_options.duration = 'fast');\n options.step = function (x) {\n $(this).css('transform', 'translate(' + x + 'px, 0)');\n };\n $element.find('.Slidable-content').animate({\n 'background-position-x': newPos\n }, options);\n };\n\n /**\n * Revert the slider to its original position.\n */\n const reset = () => {\n animatePos(0, {\n complete: function () {\n $element.removeClass('sliding');\n $underneathLeft.hide();\n $underneathRight.hide();\n isSliding = false;\n }\n });\n };\n $element.find('.Slidable-content').on('touchstart', function (e) {\n // Update the references to the elements underneath the slider, provided\n // they're not disabled.\n $underneathLeft = $element.find('.Slidable-underneath--left:not(.disabled)');\n $underneathRight = $element.find('.Slidable-underneath--right:not(.disabled)');\n startX = e.originalEvent.targetTouches[0].clientX;\n startY = e.originalEvent.targetTouches[0].clientY;\n couldBeSliding = true;\n pos = 0;\n }).on('touchmove', function (e) {\n const newX = e.originalEvent.targetTouches[0].clientX;\n const newY = e.originalEvent.targetTouches[0].clientY;\n\n // Once the user moves their touch in a direction that's more up/down than\n // left/right, we'll assume they're scrolling the page. But if they do\n // move in a horizontal direction at first, then we'll lock their touch\n // into the slider.\n if (couldBeSliding && Math.abs(newX - startX) > Math.abs(newY - startY)) {\n isSliding = true;\n }\n couldBeSliding = false;\n if (isSliding) {\n pos = newX - startX;\n\n // If there are controls underneath the either side, then we'll show/hide\n // them depending on the slider's position. We also make the controls\n // icon get a bit bigger the further they slide.\n const toggle = ($underneath, side) => {\n if ($underneath.length) {\n const active = side === 'left' ? pos > 0 : pos < 0;\n if (active && $underneath.hasClass('Slidable-underneath--elastic')) {\n pos -= pos * 0.5;\n }\n $underneath.toggle(active);\n const scale = Math.max(0, Math.min(1, (Math.abs(pos) - 25) / threshold));\n $underneath.find('.icon').css('transform', 'scale(' + scale + ')');\n } else {\n pos = Math[side === 'left' ? 'min' : 'max'](0, pos);\n }\n };\n toggle($underneathLeft, 'left');\n toggle($underneathRight, 'right');\n $(this).css('transform', 'translate(' + pos + 'px, 0)');\n $(this).css('background-position-x', pos + 'px');\n $element.toggleClass('sliding', !!pos);\n e.preventDefault();\n }\n }).on('touchend', function () {\n // If the user releases the touch and the slider is past the threshold\n // position on either side, then we will activate the control for that\n // side. We will also animate the slider's position all the way to the\n // other side, or back to its original position, depending on whether or\n // not the side is 'elastic'.\n const activate = $underneath => {\n $underneath.click();\n if ($underneath.hasClass('Slidable-underneath--elastic')) {\n reset();\n } else {\n animatePos((pos > 0 ? 1 : -1) * $element.width());\n }\n };\n if ($underneathRight.length && pos < -threshold) {\n activate($underneathRight);\n } else if ($underneathLeft.length && pos > threshold) {\n activate($underneathLeft);\n } else {\n reset();\n }\n couldBeSliding = false;\n isSliding = false;\n });\n return {\n reset\n };\n}\nflarum.reg.add('core', 'forum/utils/slidable', slidable);","export default function _typeof(o) {\n \"@babel/helpers - typeof\";\n\n return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) {\n return typeof o;\n } : function (o) {\n return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o;\n }, _typeof(o);\n}","import toPropertyKey from \"./toPropertyKey.js\";\nexport default function _defineProperty(obj, key, value) {\n key = toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}","import _typeof from \"./typeof.js\";\nimport toPrimitive from \"./toPrimitive.js\";\nexport default function toPropertyKey(t) {\n var i = toPrimitive(t, \"string\");\n return \"symbol\" == _typeof(i) ? i : i + \"\";\n}","import _typeof from \"./typeof.js\";\nexport default function toPrimitive(t, r) {\n if (\"object\" != _typeof(t) || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r || \"default\");\n if (\"object\" != _typeof(i)) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}","/* eslint-disable no-undefined,no-param-reassign,no-shadow */\n\n/**\n * Throttle execution of a function. Especially useful for rate limiting\n * execution of handlers on events like resize and scroll.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {boolean} [noTrailing] - Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the\n * throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time\n * after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,\n * the internal counter is reset).\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the throttled-function is executed.\n * @param {boolean} [debounceMode] - If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),\n * schedule `callback` to execute after `delay` ms.\n *\n * @returns {Function} A new, throttled, function.\n */\nexport default function (delay, noTrailing, callback, debounceMode) {\n\t/*\n\t * After wrapper has stopped being called, this timeout ensures that\n\t * `callback` is executed at the proper times in `throttle` and `end`\n\t * debounce modes.\n\t */\n\tlet timeoutID;\n\tlet cancelled = false;\n\n\t// Keep track of the last time `callback` was executed.\n\tlet lastExec = 0;\n\n\t// Function to clear existing timeout\n\tfunction clearExistingTimeout() {\n\t\tif (timeoutID) {\n\t\t\tclearTimeout(timeoutID);\n\t\t}\n\t}\n\n\t// Function to cancel next exec\n\tfunction cancel() {\n\t\tclearExistingTimeout();\n\t\tcancelled = true;\n\t}\n\n\t// `noTrailing` defaults to falsy.\n\tif (typeof noTrailing !== 'boolean') {\n\t\tdebounceMode = callback;\n\t\tcallback = noTrailing;\n\t\tnoTrailing = undefined;\n\t}\n\n\t/*\n\t * The `wrapper` function encapsulates all of the throttling / debouncing\n\t * functionality and when executed will limit the rate at which `callback`\n\t * is executed.\n\t */\n\tfunction wrapper(...arguments_) {\n\t\tlet self = this;\n\t\tlet elapsed = Date.now() - lastExec;\n\n\t\tif (cancelled) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Execute `callback` and update the `lastExec` timestamp.\n\t\tfunction exec() {\n\t\t\tlastExec = Date.now();\n\t\t\tcallback.apply(self, arguments_);\n\t\t}\n\n\t\t/*\n\t\t * If `debounceMode` is true (at begin) this is used to clear the flag\n\t\t * to allow future `callback` executions.\n\t\t */\n\t\tfunction clear() {\n\t\t\ttimeoutID = undefined;\n\t\t}\n\n\t\tif (debounceMode && !timeoutID) {\n\t\t\t/*\n\t\t\t * Since `wrapper` is being called for the first time and\n\t\t\t * `debounceMode` is true (at begin), execute `callback`.\n\t\t\t */\n\t\t\texec();\n\t\t}\n\n\t\tclearExistingTimeout();\n\n\t\tif (debounceMode === undefined && elapsed > delay) {\n\t\t\t/*\n\t\t\t * In throttle mode, if `delay` time has been exceeded, execute\n\t\t\t * `callback`.\n\t\t\t */\n\t\t\texec();\n\t\t} else if (noTrailing !== true) {\n\t\t\t/*\n\t\t\t * In trailing throttle mode, since `delay` time has not been\n\t\t\t * exceeded, schedule `callback` to execute `delay` ms after most\n\t\t\t * recent execution.\n\t\t\t *\n\t\t\t * If `debounceMode` is true (at begin), schedule `clear` to execute\n\t\t\t * after `delay` ms.\n\t\t\t *\n\t\t\t * If `debounceMode` is false (at end), schedule `callback` to\n\t\t\t * execute after `delay` ms.\n\t\t\t */\n\t\t\ttimeoutID = setTimeout(\n\t\t\t\tdebounceMode ? clear : exec,\n\t\t\t\tdebounceMode === undefined ? delay - elapsed : delay\n\t\t\t);\n\t\t}\n\t}\n\n\twrapper.cancel = cancel;\n\n\t// Return the wrapper function.\n\treturn wrapper;\n}\n","/* eslint-disable no-undefined */\n\nimport throttle from './throttle';\n\n/**\n * Debounce execution of a function. Debouncing, unlike throttling,\n * guarantees that a function is only executed a single time, either at the\n * very beginning of a series of calls, or at the very end.\n *\n * @param {number} delay - A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n * @param {boolean} [atBegin] - Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds\n * after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.\n * (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).\n * @param {Function} callback - A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n * to `callback` when the debounced-function is executed.\n *\n * @returns {Function} A new, debounced function.\n */\nexport default function (delay, atBegin, callback) {\n\treturn callback === undefined\n\t\t? throttle(delay, atBegin, false)\n\t\t: throttle(delay, callback, atBegin !== false);\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + {\"158\":\"forum/components/PostStream\",\"173\":\"forum/components/NotificationsPage\",\"226\":\"forum/components/LogInModal\",\"234\":\"common/components/EditUserModal\",\"298\":\"forum/components/SettingsPage\",\"366\":\"forum/components/Composer\",\"378\":\"forum/components/ReplyComposer\",\"485\":\"common/components/SearchModal\",\"486\":\"forum/components/PostStreamScrubber\",\"559\":\"forum/components/SignUpModal\",\"698\":\"forum/components/UserSecurityPage\",\"814\":\"forum/components/DiscussionComposer\",\"879\":\"forum/components/DiscussionsUserPage\",\"948\":\"forum/components/EditPostComposer\"}[chunkId] + \".js\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src;\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) {\n\t\t\tvar i = scripts.length - 1;\n\t\t\twhile (i > -1 && (!scriptUrl || !/^http(s?):/.test(scriptUrl))) scriptUrl = scripts[i--].src;\n\t\t}\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.f.compat = (chunkId, promises) => {\n\n\tconst originalLoadChunk = __webpack_require__.l;\n\t__webpack_require__.l = flarum.reg.loadChunk.bind(flarum.reg, originalLoadChunk);\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t170: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkflarum_core\"] = self[\"webpackChunkflarum_core\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","function bidi(node, prop) {\n var type = node.tag === 'select' ? node.attrs.multi ? 'multi' : 'select' : node.attrs.type;\n\n // Setup: bind listeners\n if (type === 'multi') {\n node.attrs.onchange = function () {\n prop([].slice.call(this.selectedOptions, function (x) {\n return x.value;\n }));\n };\n } else if (type === 'select') {\n node.attrs.onchange = function (e) {\n prop(this.selectedOptions[0].value);\n };\n } else if (type === 'checkbox') {\n node.attrs.onchange = function (e) {\n prop(this.checked);\n };\n } else {\n node.attrs.onchange = node.attrs.oninput = function (e) {\n prop(this.value);\n };\n }\n if (node.tag === 'select') {\n node.children.forEach(function (option) {\n if (option.attrs.value === prop() || option.children[0] === prop()) {\n option.attrs.selected = true;\n }\n });\n } else if (type === 'checkbox') {\n node.attrs.checked = prop();\n } else if (type === 'radio') {\n node.attrs.checked = prop() === node.attrs.value;\n } else {\n node.attrs.value = prop();\n }\n node.attrs.bidi = null;\n return node;\n}\nbidi.view = function (ctrl, node, prop) {\n return bidi(node, node.attrs.bidi);\n};\nexport default bidi;\nflarum.reg.add('core', 'common/utils/bidi', bidi);","import ExportRegistry from './ExportRegistry';\nflarum.reg = new ExportRegistry();","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/**\n * @internal\n */\n\n/**\n * @internal\n */\n\nexport default class ExportRegistry {\n constructor() {\n _defineProperty(this, \"moduleExports\", new Map());\n _defineProperty(this, \"onLoads\", new Map());\n _defineProperty(this, \"chunks\", new Map());\n _defineProperty(this, \"chunkModules\", new Map());\n _defineProperty(this, \"_revisions\", null);\n }\n add(namespace, id, object) {\n var _this$moduleExports$g, _this$onLoads$get;\n this.moduleExports.set(namespace, this.moduleExports.get(namespace) || new Map());\n (_this$moduleExports$g = this.moduleExports.get(namespace)) == null || _this$moduleExports$g.set(id, object);\n (_this$onLoads$get = this.onLoads.get(namespace)) == null || (_this$onLoads$get = _this$onLoads$get.get(id)) == null || _this$onLoads$get.forEach(handler => handler(object));\n }\n onLoad(namespace, id, handler) {\n var _this$moduleExports$g2;\n if (this.moduleExports.has(namespace) && (_this$moduleExports$g2 = this.moduleExports.get(namespace)) != null && _this$moduleExports$g2.has(id)) {\n var _this$moduleExports$g3;\n handler((_this$moduleExports$g3 = this.moduleExports.get(namespace)) == null ? void 0 : _this$moduleExports$g3.get(id));\n } else {\n var _this$onLoads$get2, _this$onLoads$get3, _this$onLoads$get4;\n this.onLoads.set(namespace, this.onLoads.get(namespace) || new Map());\n (_this$onLoads$get2 = this.onLoads.get(namespace)) == null || _this$onLoads$get2.set(id, ((_this$onLoads$get3 = this.onLoads.get(namespace)) == null ? void 0 : _this$onLoads$get3.get(id)) || []);\n (_this$onLoads$get4 = this.onLoads.get(namespace)) == null || (_this$onLoads$get4 = _this$onLoads$get4.get(id)) == null || _this$onLoads$get4.push(handler);\n }\n }\n get(namespace, id) {\n var _this$moduleExports$g4;\n const module = (_this$moduleExports$g4 = this.moduleExports.get(namespace)) == null ? void 0 : _this$moduleExports$g4.get(id);\n const error = \"No module found for \".concat(namespace, \":\").concat(id);\n\n // @ts-ignore\n if (!module && flarum.debug) {\n throw new Error(error);\n } else if (!module) {\n console.warn(error);\n }\n return module;\n }\n checkModule(namespace, id) {\n var _this$moduleExports$g5;\n const exists = this.moduleExports.has(namespace) && ((_this$moduleExports$g5 = this.moduleExports.get(namespace)) == null ? void 0 : _this$moduleExports$g5.has(id)) || false;\n return exists ? this.get(namespace, id) : false;\n }\n addChunkModule(chunkId, moduleId, namespace, urlPath) {\n if (!this.chunks.has(chunkId.toString())) {\n this.chunks.set(chunkId.toString(), {\n namespace,\n urlPath,\n modules: [urlPath]\n });\n } else {\n var _this$chunks$get;\n (_this$chunks$get = this.chunks.get(chunkId.toString())) == null || (_this$chunks$get = _this$chunks$get.modules) == null || _this$chunks$get.push(urlPath);\n }\n this.chunkModules.set(\"\".concat(namespace, \":\").concat(urlPath), {\n chunkId: chunkId.toString(),\n moduleId: moduleId.toString()\n });\n }\n getChunk(chunkId) {\n var _this$chunks$get2;\n const chunk = (_this$chunks$get2 = this.chunks.get(chunkId.toString())) != null ? _this$chunks$get2 : null;\n if (!chunk) {\n console.warn(\"[Export Registry] No chunk by the ID \".concat(chunkId, \" found.\"));\n return null;\n }\n return chunk;\n }\n async loadChunk(original, url, done, key, chunkId) {\n // @ts-ignore\n app.alerts.showLoading();\n return await original(this.chunkUrl(chunkId) || url, function () {\n // @ts-ignore\n app.alerts.clearLoading();\n return done(...arguments);\n }, key, chunkId);\n }\n chunkUrl(chunkId) {\n var _this$_revisions, _document$getElementB, _document$getElementB2;\n const chunk = this.getChunk(chunkId.toString());\n if (!chunk) return null;\n (_this$_revisions = this._revisions) != null ? _this$_revisions : this._revisions = JSON.parse((_document$getElementB = (_document$getElementB2 = document.getElementById('flarum-rev-manifest')) == null ? void 0 : _document$getElementB2.textContent) != null ? _document$getElementB : '{}');\n\n // @ts-ignore cannot import the app object here, so we use the global one.\n const path = \"\".concat(app.forum.attribute('jsChunksBaseUrl'), \"/\").concat(chunk.namespace, \"/\").concat(chunk.urlPath, \".js\");\n\n // The paths in the revision are stored as (relative path from the assets path) + the path.\n // @ts-ignore\n const assetsPath = app.forum.attribute('assetsBaseUrl');\n const key = path.replace(assetsPath, '').replace(/^\\//, '');\n const revision = this._revisions[key];\n return revision ? \"\".concat(path, \"?v=\").concat(revision) : path;\n }\n async asyncModuleImport(path) {\n const [namespace, id] = this.namespaceAndIdFromPath(path);\n const module = this.chunkModules.get(\"\".concat(namespace, \":\").concat(id));\n if (!module) {\n throw new Error(\"No chunk found for module \".concat(namespace, \":\").concat(id));\n }\n\n // @ts-ignore\n const wr = __webpack_require__;\n return await wr.e(module.chunkId).then(() => {\n // Needed to make sure the module is loaded.\n // Taken care of by webpack.\n wr.bind(wr, module.moduleId)();\n const moduleExport = this.get(namespace, id);\n\n // For consistent access to async modules.\n moduleExport.default = moduleExport.default || moduleExport;\n return moduleExport;\n });\n }\n clear() {\n this.moduleExports.clear();\n this.onLoads.clear();\n this.chunks.clear();\n this.chunkModules.clear();\n }\n namespaceAndIdFromPath(path) {\n // Either we get a path like `flarum/forum/components/LogInModal` or `ext:flarum/tags/forum/components/TagPage`.\n const matches = /^(?:ext:([^\\/]+)\\/(?:flarum-(?:ext-)?)?([^\\/]+)|(flarum))(?:\\/(.+))?$/.exec(path);\n const id = matches[4];\n let namespace;\n if (matches[1]) {\n namespace = \"\".concat(matches[1], \"-\").concat(matches[2]);\n } else {\n namespace = 'core';\n }\n return [namespace, id];\n }\n}","import bidi from './bidi';\nexport default function patchMithril(global) {\n const defaultMithril = global.m;\n const modifiedMithril = function (comp) {\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n args[_key - 1] = arguments[_key];\n }\n const node = defaultMithril.apply(this, arguments);\n if (!node.attrs) node.attrs = {};\n\n // Allows the use of the bidi attr.\n if (node.attrs.bidi) {\n bidi(node, node.attrs.bidi);\n }\n return node;\n };\n Object.keys(defaultMithril).forEach(key => modifiedMithril[key] = defaultMithril[key]);\n global.m = modifiedMithril;\n}\nflarum.reg.add('core', 'common/utils/patchMithril', patchMithril);","// Expose jQuery, mithril and dayjs to the window browser object\nimport 'expose-loader?exposes=$,jQuery!jquery';\nimport 'expose-loader?exposes=m!mithril';\nimport 'expose-loader?exposes=dayjs!dayjs';\nimport 'bootstrap/js/affix';\nimport 'bootstrap/js/dropdown';\nimport 'bootstrap/js/tooltip';\nimport 'bootstrap/js/transition';\nimport 'jquery.hotkeys/jquery.hotkeys';\nimport relativeTime from 'dayjs/plugin/relativeTime';\nimport localizedFormat from 'dayjs/plugin/localizedFormat';\ndayjs.extend(relativeTime);\ndayjs.extend(localizedFormat);\nimport './registry';\nimport patchMithril from './utils/patchMithril';\npatchMithril(window);\nimport app from './app';\nexport { app };\nimport './utils/arrayFlatPolyfill';\nconst tooltipGen = $.fn.tooltip;\n\n// Remove in a future version of Flarum.\n// @ts-ignore\n$.fn.tooltip = function (options, caller) {\n // Show a warning when `$.tooltip` is used outside of the Tooltip component.\n // This functionality is deprecated and should not be used.\n if (!['DANGEROUS_tooltip_jquery_fn_deprecation_exempt'].includes(caller)) {\n console.warn(\"Calling `$.tooltip` is now deprecated. Please use the `<Tooltip>` component exposed by flarum/core instead. `$.tooltip` may be removed in a future version of Flarum.\\n\\nIf this component doesn't meet your requirements, please open an issue: https://github.com/flarum/core/issues/new?assignees=davwheat&labels=type/bug,needs-verification&template=bug-report.md&title=Tooltip%20component%20unsuitable%20for%20use%20case\");\n }\n tooltipGen.bind(this)(options);\n};","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport ActualModel from '../Model';\nexport default class Model {\n constructor(model) {\n _defineProperty(this, \"model\", void 0);\n _defineProperty(this, \"callbacks\", []);\n this.model = model;\n }\n attribute(name, transform) {\n if (transform === void 0) {\n transform = null;\n }\n this.callbacks.push(() => {\n this.model.prototype[name] = transform ? ActualModel.attribute(name, transform) : ActualModel.attribute(name);\n });\n return this;\n }\n hasOne(name) {\n this.callbacks.push(() => {\n this.model.prototype[name] = ActualModel.hasOne(name);\n });\n return this;\n }\n hasMany(name) {\n this.callbacks.push(() => {\n this.model.prototype[name] = ActualModel.hasMany(name);\n });\n return this;\n }\n extend(app, extension) {\n for (const callback of this.callbacks) {\n callback.call(this);\n }\n }\n}\nflarum.reg.add('core', 'common/extenders/Model', Model);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class PostTypes {\n constructor() {\n _defineProperty(this, \"postComponents\", {});\n }\n /**\n * Register a new post component type.\n * Usually used for event posts.\n *\n * @param name The name of the post type.\n * @param component The component class to render the post.\n */\n add(name, component) {\n this.postComponents[name] = component;\n return this;\n }\n extend(app, extension) {\n Object.assign(app.postComponents, this.postComponents);\n }\n}\nflarum.reg.add('core', 'common/extenders/PostTypes', PostTypes);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class Routes {\n constructor() {\n _defineProperty(this, \"routes\", {});\n _defineProperty(this, \"helpers\", {});\n }\n /**\n * Add a mithril route to the application.\n *\n * @param name The name of the route.\n * @param path The path of the route.\n * @param component must extend `Page` component.\n */\n add(name, path, component) {\n this.routes[name] = {\n path,\n component\n };\n return this;\n }\n helper(name, callback) {\n this.helpers[name] = callback;\n return this;\n }\n extend(app, extension) {\n Object.assign(app.routes, this.routes);\n Object.assign(app.route, this.helpers);\n }\n}\nflarum.reg.add('core', 'common/extenders/Routes', Routes);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class Store {\n constructor() {\n _defineProperty(this, \"models\", {});\n }\n add(type, model) {\n this.models[type] = model;\n return this;\n }\n extend(app, extension) {\n for (const type in this.models) {\n if (app.store.models[type]) {\n throw new Error(\"The model type \\\"\".concat(type, \"\\\" has already been registered with the class \\\"\").concat(app.store.models[type].name, \"\\\".\"));\n }\n app.store.models[type] = this.models[type];\n }\n }\n}\nflarum.reg.add('core', 'common/extenders/Store', Store);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class Search {\n constructor() {\n _defineProperty(this, \"gambits\", {});\n }\n gambit(modelType, gambit) {\n var _this$gambits;\n (_this$gambits = this.gambits)[modelType] || (_this$gambits[modelType] = []);\n this.gambits[modelType].push(gambit);\n return this;\n }\n extend(app, extension) {\n for (const [modelType, gambits] of Object.entries(this.gambits)) {\n for (const gambit of gambits) {\n var _app$search$gambits$g;\n (_app$search$gambits$g = app.search.gambits.gambits)[modelType] || (_app$search$gambits$g[modelType] = []);\n app.search.gambits.gambits[modelType].push(gambit);\n }\n }\n }\n}\nflarum.reg.add('core', 'common/extenders/Search', Search);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class Notification {\n constructor() {\n _defineProperty(this, \"notificationComponents\", {});\n }\n /**\n * Register a new notification component type.\n *\n * @param name The name of the notification type.\n * @param component The component class to render the notification.\n */\n add(name, component) {\n this.notificationComponents[name] = component;\n return this;\n }\n extend(app, extension) {\n Object.assign(app.notificationComponents, this.notificationComponents);\n }\n}\nflarum.reg.add('core', 'common/extenders/Notification', Notification);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport ThemeModeComponent from '../components/ThemeMode';\nexport default class ThemeMode {\n constructor() {\n _defineProperty(this, \"colorSchemes\", []);\n }\n add(mode, label) {\n this.colorSchemes.push({\n id: mode,\n label\n });\n return this;\n }\n extend(app, extension) {\n ThemeModeComponent.colorSchemes = Array.from(new Set([...ThemeModeComponent.colorSchemes, ...this.colorSchemes]));\n }\n}\nflarum.reg.add('core', 'common/extenders/ThemeMode', ThemeMode);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nexport default class Admin {\n constructor() {\n _defineProperty(this, \"settings\", []);\n _defineProperty(this, \"permissions\", []);\n _defineProperty(this, \"customPage\", null);\n _defineProperty(this, \"generalIndexes\", {});\n }\n /**\n * Register a setting to be shown on the extension's settings page.\n */\n setting(setting, priority) {\n if (priority === void 0) {\n priority = 0;\n }\n this.settings.push({\n setting,\n priority\n });\n return this;\n }\n\n /**\n * Register a custom setting to be shown on the extension's settings page.\n */\n customSetting(setting, priority) {\n if (priority === void 0) {\n priority = 0;\n }\n this.settings.push({\n customSetting: setting,\n priority\n });\n return this;\n }\n\n /**\n * Register a permission to be shown on the extension's permissions page.\n */\n permission(permission, type, priority) {\n if (priority === void 0) {\n priority = 0;\n }\n this.permissions.push({\n permission,\n type,\n priority\n });\n return this;\n }\n\n /**\n * Register a custom page to be shown in the admin interface.\n */\n page(page) {\n this.customPage = page;\n return this;\n }\n\n /**\n * Register a custom general search index entry.\n */\n generalIndexItems(type, items) {\n this.generalIndexes[type] = items;\n return this;\n }\n extend(app, extension) {\n app.registry.for(extension.name);\n this.settings.forEach(_ref => {\n let {\n setting,\n customSetting,\n priority\n } = _ref;\n app.registry.registerSetting(setting ? setting() : customSetting, priority);\n });\n this.permissions.forEach(_ref2 => {\n let {\n permission,\n type,\n priority\n } = _ref2;\n app.registry.registerPermission(permission(), type, priority);\n });\n if (this.customPage) {\n app.registry.registerPage(this.customPage);\n }\n app.generalIndex.for(extension.name);\n Object.keys(this.generalIndexes).forEach(key => {\n if (key !== 'settings' && key !== 'permissions') return;\n const callback = this.generalIndexes[key];\n if (callback) {\n app.generalIndex.add(key, callback());\n }\n });\n }\n}\nflarum.reg.add('core', 'common/extenders/Admin', Admin);","import Model from './Model';\nimport PostTypes from './PostTypes';\nimport Routes from './Routes';\nimport Store from './Store';\nimport Search from './Search';\nimport Notification from './Notification';\nimport ThemeMode from './ThemeMode';\nimport Admin from './Admin';\nconst extenders = {\n Model,\n PostTypes,\n Routes,\n Store,\n Search,\n Notification,\n ThemeMode,\n Admin\n};\nexport default extenders;\nflarum.reg.add('core', 'common/extenders', extenders);","/**\n * The `mixin` utility assigns the properties of a set of 'mixin' objects to\n * the prototype of a parent object.\n *\n * @example\n * class MyClass extends mixin(ExistingClass, evented, etc) {}\n *\n * @param {object} Parent The class to extend the new class from.\n * @param {Record<string, any>[]} mixins The objects to mix in.\n * @return {object} A new class that extends Parent and contains the mixins.\n */\nexport default function mixin(Parent) {\n class Mixed extends Parent {}\n for (var _len = arguments.length, mixins = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n mixins[_key - 1] = arguments[_key];\n }\n mixins.forEach(object => {\n Object.assign(Mixed.prototype, object);\n });\n return Mixed;\n}\nflarum.reg.add('core', 'common/utils/mixin', mixin);","/*\n * Original Copyright GitHub, Inc. Licensed under the MIT License.\n * See license text at https://github.com/github/markdown-toolbar-element/blob/master/LICENSE.\n */\n\nimport insertText from './insertText';\nconst defaults = {\n prefix: '',\n suffix: '',\n blockPrefix: '',\n blockSuffix: '',\n multiline: false,\n replaceNext: '',\n prefixSpace: false,\n scanFor: '',\n surroundWithNewlines: false,\n orderedList: false,\n unorderedList: false,\n trimFirst: false\n};\nexport default function styleSelectedText(textarea, styleArgs) {\n // Next 2 lines are added\n textarea.focus();\n styleArgs = Object.assign({}, defaults, styleArgs);\n // Prev 2 lines are added\n const text = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n let result;\n if (styleArgs.orderedList || styleArgs.unorderedList) {\n result = listStyle(textarea, styleArgs);\n } else if (styleArgs.multiline && isMultipleLines(text)) {\n result = multilineStyle(textarea, styleArgs);\n } else {\n result = blockStyle(textarea, styleArgs);\n }\n insertText(textarea, result);\n}\nfunction isMultipleLines(string) {\n return string.trim().split('\\n').length > 1;\n}\nfunction repeat(string, n) {\n return Array(n + 1).join(string);\n}\nfunction wordSelectionStart(text, i) {\n let index = i;\n while (text[index] && text[index - 1] != null && !text[index - 1].match(/\\s/)) {\n index--;\n }\n return index;\n}\nfunction wordSelectionEnd(text, i, multiline) {\n let index = i;\n const breakpoint = multiline ? /\\n/ : /\\s/;\n while (text[index] && !text[index].match(breakpoint)) {\n index++;\n }\n return index;\n}\nfunction expandSelectionToLine(textarea) {\n const lines = textarea.value.split('\\n');\n let counter = 0;\n for (let index = 0; index < lines.length; index++) {\n const lineLength = lines[index].length + 1;\n if (textarea.selectionStart >= counter && textarea.selectionStart < counter + lineLength) {\n textarea.selectionStart = counter;\n }\n if (textarea.selectionEnd >= counter && textarea.selectionEnd < counter + lineLength) {\n textarea.selectionEnd = counter + lineLength - 1;\n }\n counter += lineLength;\n }\n}\nfunction expandSelectedText(textarea, prefixToUse, suffixToUse, multiline) {\n if (multiline === void 0) {\n multiline = false;\n }\n if (textarea.selectionStart === textarea.selectionEnd) {\n textarea.selectionStart = wordSelectionStart(textarea.value, textarea.selectionStart);\n textarea.selectionEnd = wordSelectionEnd(textarea.value, textarea.selectionEnd, multiline);\n } else {\n const expandedSelectionStart = textarea.selectionStart - prefixToUse.length;\n const expandedSelectionEnd = textarea.selectionEnd + suffixToUse.length;\n const beginsWithPrefix = textarea.value.slice(expandedSelectionStart, textarea.selectionStart) === prefixToUse;\n const endsWithSuffix = textarea.value.slice(textarea.selectionEnd, expandedSelectionEnd) === suffixToUse;\n if (beginsWithPrefix && endsWithSuffix) {\n textarea.selectionStart = expandedSelectionStart;\n textarea.selectionEnd = expandedSelectionEnd;\n }\n }\n return textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n}\nfunction newlinesToSurroundSelectedText(textarea) {\n const beforeSelection = textarea.value.slice(0, textarea.selectionStart);\n const afterSelection = textarea.value.slice(textarea.selectionEnd);\n const breaksBefore = beforeSelection.match(/\\n*$/);\n const breaksAfter = afterSelection.match(/^\\n*/);\n const newlinesBeforeSelection = breaksBefore ? breaksBefore[0].length : 0;\n const newlinesAfterSelection = breaksAfter ? breaksAfter[0].length : 0;\n let newlinesToAppend;\n let newlinesToPrepend;\n if (beforeSelection.match(/\\S/) && newlinesBeforeSelection < 2) {\n newlinesToAppend = repeat('\\n', 2 - newlinesBeforeSelection);\n }\n if (afterSelection.match(/\\S/) && newlinesAfterSelection < 2) {\n newlinesToPrepend = repeat('\\n', 2 - newlinesAfterSelection);\n }\n if (newlinesToAppend == null) {\n newlinesToAppend = '';\n }\n if (newlinesToPrepend == null) {\n newlinesToPrepend = '';\n }\n return {\n newlinesToAppend,\n newlinesToPrepend\n };\n}\nfunction blockStyle(textarea, arg) {\n let newlinesToAppend;\n let newlinesToPrepend;\n const {\n prefix,\n suffix,\n blockPrefix,\n blockSuffix,\n replaceNext,\n prefixSpace,\n scanFor,\n surroundWithNewlines\n } = arg;\n const originalSelectionStart = textarea.selectionStart;\n const originalSelectionEnd = textarea.selectionEnd;\n let selectedText = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n let prefixToUse = isMultipleLines(selectedText) && blockPrefix.length > 0 ? \"\".concat(blockPrefix, \"\\n\") : prefix;\n // CHANGED\n let suffixToUse = isMultipleLines(selectedText) && blockSuffix.length > 0 ? \"\\n\".concat(blockSuffix) : prefixToUse === prefix ? suffix : '';\n // END CHANGED\n\n if (prefixSpace) {\n const beforeSelection = textarea.value[textarea.selectionStart - 1];\n if (textarea.selectionStart !== 0 && beforeSelection != null && !beforeSelection.match(/\\s/)) {\n prefixToUse = \" \".concat(prefixToUse);\n }\n }\n selectedText = expandSelectedText(textarea, prefixToUse, suffixToUse, arg.multiline);\n let selectionStart = textarea.selectionStart;\n let selectionEnd = textarea.selectionEnd;\n const hasReplaceNext = replaceNext.length > 0 && suffixToUse.indexOf(replaceNext) > -1 && selectedText.length > 0;\n if (surroundWithNewlines) {\n const ref = newlinesToSurroundSelectedText(textarea);\n newlinesToAppend = ref.newlinesToAppend;\n newlinesToPrepend = ref.newlinesToPrepend;\n prefixToUse = newlinesToAppend + prefix;\n suffixToUse += newlinesToPrepend;\n }\n if (selectedText.startsWith(prefixToUse) && selectedText.endsWith(suffixToUse)) {\n const replacementText = selectedText.slice(prefixToUse.length, selectedText.length - suffixToUse.length);\n if (originalSelectionStart === originalSelectionEnd) {\n let position = originalSelectionStart - prefixToUse.length;\n position = Math.max(position, selectionStart);\n position = Math.min(position, selectionStart + replacementText.length);\n selectionStart = selectionEnd = position;\n } else {\n selectionEnd = selectionStart + replacementText.length;\n }\n return {\n text: replacementText,\n selectionStart,\n selectionEnd\n };\n } else if (!hasReplaceNext) {\n let replacementText = prefixToUse + selectedText + suffixToUse;\n selectionStart = originalSelectionStart + prefixToUse.length;\n selectionEnd = originalSelectionEnd + prefixToUse.length;\n const whitespaceEdges = selectedText.match(/^\\s*|\\s*$/g);\n if (arg.trimFirst && whitespaceEdges) {\n const leadingWhitespace = whitespaceEdges[0] || '';\n const trailingWhitespace = whitespaceEdges[1] || '';\n replacementText = leadingWhitespace + prefixToUse + selectedText.trim() + suffixToUse + trailingWhitespace;\n selectionStart += leadingWhitespace.length;\n selectionEnd -= trailingWhitespace.length;\n }\n return {\n text: replacementText,\n selectionStart,\n selectionEnd\n };\n } else if (scanFor.length > 0 && selectedText.match(scanFor)) {\n suffixToUse = suffixToUse.replace(replaceNext, selectedText);\n const replacementText = prefixToUse + suffixToUse;\n selectionStart = selectionEnd = selectionStart + prefixToUse.length;\n return {\n text: replacementText,\n selectionStart,\n selectionEnd\n };\n } else {\n const replacementText = prefixToUse + selectedText + suffixToUse;\n selectionStart = selectionStart + prefixToUse.length + selectedText.length + suffixToUse.indexOf(replaceNext);\n selectionEnd = selectionStart + replaceNext.length;\n return {\n text: replacementText,\n selectionStart,\n selectionEnd\n };\n }\n}\nfunction multilineStyle(textarea, arg) {\n const {\n prefix,\n suffix,\n blockPrefix,\n blockSuffix,\n surroundWithNewlines\n } = arg;\n let text = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n let selectionStart = textarea.selectionStart;\n let selectionEnd = textarea.selectionEnd;\n const lines = text.split('\\n');\n // CHANGED\n let prefixToUse = blockPrefix.length > 0 ? blockPrefix : prefix;\n let suffixToUse = blockSuffix.length > 0 ? blockSuffix : prefixToUse == prefix ? suffix : '';\n const undoStyle = lines.every(line => line.startsWith(prefixToUse) && line.endsWith(suffixToUse));\n // END CHANGED\n\n if (undoStyle) {\n text = lines.map(line => line.slice(prefixToUse.length, line.length - suffixToUse.length)).join('\\n');\n selectionEnd = selectionStart + text.length;\n } else {\n // CHANGED\n text = lines.map(line => prefixToUse + line + suffixToUse).join('\\n');\n if (surroundWithNewlines || suffixToUse === '') {\n // END CHANGED\n const {\n newlinesToAppend,\n newlinesToPrepend\n } = newlinesToSurroundSelectedText(textarea);\n selectionStart += newlinesToAppend.length;\n selectionEnd = selectionStart + text.length;\n text = newlinesToAppend + text + newlinesToPrepend;\n }\n }\n return {\n text,\n selectionStart,\n selectionEnd\n };\n}\nfunction undoOrderedListStyle(text) {\n const lines = text.split('\\n');\n const orderedListRegex = /^\\d+\\.\\s+/;\n const shouldUndoOrderedList = lines.every(line => orderedListRegex.test(line));\n let result = lines;\n if (shouldUndoOrderedList) {\n result = lines.map(line => line.replace(orderedListRegex, ''));\n }\n return {\n text: result.join('\\n'),\n processed: shouldUndoOrderedList\n };\n}\nfunction undoUnorderedListStyle(text) {\n const lines = text.split('\\n');\n const unorderedListPrefix = '- ';\n const shouldUndoUnorderedList = lines.every(line => line.startsWith(unorderedListPrefix));\n let result = lines;\n if (shouldUndoUnorderedList) {\n result = lines.map(line => line.slice(unorderedListPrefix.length, line.length));\n }\n return {\n text: result.join('\\n'),\n processed: shouldUndoUnorderedList\n };\n}\nfunction makePrefix(index, unorderedList) {\n if (unorderedList) {\n return '- ';\n } else {\n return \"\".concat(index + 1, \". \");\n }\n}\nfunction clearExistingListStyle(style, selectedText) {\n let undoResultOpositeList;\n let undoResult;\n let pristineText;\n if (style.orderedList) {\n undoResult = undoOrderedListStyle(selectedText);\n undoResultOpositeList = undoUnorderedListStyle(undoResult.text);\n pristineText = undoResultOpositeList.text;\n } else {\n undoResult = undoUnorderedListStyle(selectedText);\n undoResultOpositeList = undoOrderedListStyle(undoResult.text);\n pristineText = undoResultOpositeList.text;\n }\n return [undoResult, undoResultOpositeList, pristineText];\n}\nfunction listStyle(textarea, style) {\n const noInitialSelection = textarea.selectionStart === textarea.selectionEnd;\n let selectionStart = textarea.selectionStart;\n let selectionEnd = textarea.selectionEnd;\n\n // Select whole line\n expandSelectionToLine(textarea);\n const selectedText = textarea.value.slice(textarea.selectionStart, textarea.selectionEnd);\n\n // If the user intent was to do an undo, we will stop after this.\n // Otherwise, we will still undo to other list type to prevent list stacking\n const [undoResult, undoResultOpositeList, pristineText] = clearExistingListStyle(style, selectedText);\n const prefixedLines = pristineText.split('\\n').map((value, index) => {\n return \"\".concat(makePrefix(index, style.unorderedList)).concat(value);\n });\n const totalPrefixLength = prefixedLines.reduce((previousValue, _currentValue, currentIndex) => {\n return previousValue + makePrefix(currentIndex, style.unorderedList).length;\n }, 0);\n const totalPrefixLengthOpositeList = prefixedLines.reduce((previousValue, _currentValue, currentIndex) => {\n return previousValue + makePrefix(currentIndex, !style.unorderedList).length;\n }, 0);\n if (undoResult.processed) {\n if (noInitialSelection) {\n selectionStart = Math.max(selectionStart - makePrefix(0, style.unorderedList).length, 0);\n selectionEnd = selectionStart;\n } else {\n selectionStart = textarea.selectionStart;\n selectionEnd = textarea.selectionEnd - totalPrefixLength;\n }\n return {\n text: pristineText,\n selectionStart,\n selectionEnd\n };\n }\n const {\n newlinesToAppend,\n newlinesToPrepend\n } = newlinesToSurroundSelectedText(textarea);\n const text = newlinesToAppend + prefixedLines.join('\\n') + newlinesToPrepend;\n if (noInitialSelection) {\n selectionStart = Math.max(selectionStart + makePrefix(0, style.unorderedList).length + newlinesToAppend.length, 0);\n selectionEnd = selectionStart;\n } else {\n if (undoResultOpositeList.processed) {\n selectionStart = Math.max(textarea.selectionStart + newlinesToAppend.length, 0);\n selectionEnd = textarea.selectionEnd + newlinesToAppend.length + totalPrefixLength - totalPrefixLengthOpositeList;\n } else {\n selectionStart = Math.max(textarea.selectionStart + newlinesToAppend.length, 0);\n selectionEnd = textarea.selectionEnd + newlinesToAppend.length + totalPrefixLength;\n }\n }\n return {\n text,\n selectionStart,\n selectionEnd\n };\n}\nflarum.reg.add('core', 'common/utils/styleSelectedText', styleSelectedText);","// Re-exports `throttle-debounce` to be added in the export registry.\n\nimport { throttle } from 'throttle-debounce';\nexport { throttle }\nimport { debounce } from 'throttle-debounce';\nexport { debounce };\nflarum.reg.add('core', 'common/utils/throttleDebounce', { throttle: throttle,debounce: debounce, });","export default function formatAmount(size) {\n const units = ['K', 'M', 'B'];\n for (let i = units.length - 1; i >= 0; i--) {\n const decimal = Math.pow(1000, i + 1);\n if (size >= decimal) {\n return (size / decimal).toFixed(1).replace(/\\.0$/, '') + units[i];\n }\n }\n return size.toString();\n}\nflarum.reg.add('core', 'common/utils/formatAmount', formatAmount);","import { urlAlphabet } from './url-alphabet/index.js'\nlet random = bytes => crypto.getRandomValues(new Uint8Array(bytes))\nlet customRandom = (alphabet, defaultSize, getRandom) => {\n let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1\n let step = -~((1.6 * mask * defaultSize) / alphabet.length)\n return (size = defaultSize) => {\n let id = ''\n while (true) {\n let bytes = getRandom(step)\n let j = step\n while (j--) {\n id += alphabet[bytes[j] & mask] || ''\n if (id.length === size) return id\n }\n }\n }\n}\nlet customAlphabet = (alphabet, size = 21) =>\n customRandom(alphabet, size, random)\nlet nanoid = (size = 21) =>\n crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {\n byte &= 63\n if (byte < 36) {\n id += byte.toString(36)\n } else if (byte < 62) {\n id += (byte - 26).toString(36).toUpperCase()\n } else if (byte > 62) {\n id += '-'\n } else {\n id += '_'\n }\n return id\n }, '')\nexport { nanoid, customAlphabet, customRandom, urlAlphabet, random }\n","import { nanoid } from 'nanoid';\nexport default nanoid;\nflarum.reg.add('core', 'common/utils/generateElementId', nanoid);","import Component from '../Component';\nimport Icon from './Icon';\nexport default class DetailedDropdownItem extends Component {\n view() {\n return m(\"button\", {\n className: \"DetailedDropdownItem hasIcon\",\n onclick: this.attrs.onclick\n }, m(Icon, {\n name: this.attrs.active ? 'fas fa-check' : 'fas',\n className: \"Button-icon\"\n }), m(\"span\", {\n className: \"DetailedDropdownItem-content\"\n }, m(Icon, {\n name: this.attrs.icon,\n className: \"Button-icon\"\n }), m(\"span\", {\n className: \"DetailedDropdownItem-label\"\n }, m(\"strong\", null, this.attrs.label), m(\"span\", {\n className: \"DetailedDropdownItem-description\"\n }, this.attrs.description))));\n }\n}\nflarum.reg.add('core', 'common/components/DetailedDropdownItem', DetailedDropdownItem);","import Component from '../Component';\nimport withAttr from '../utils/withAttr';\nimport classList from '../utils/classList';\nimport Icon from './Icon';\n/**\n * The `Select` component displays a <select> input, surrounded with some extra\n * elements for styling. It accepts the following attrs:\n *\n * - `options` A map of option values to labels.\n * - `onchange` A callback to run when the selected value is changed.\n * - `value` The value of the selected option.\n * - `disabled` Disabled state for the input.\n * - `wrapperAttrs` A map of attrs to be passed to the DOM element wrapping the `<select>`\n *\n * Other attributes are passed directly to the `<select>` element rendered to the DOM.\n */\nexport default class Select extends Component {\n view() {\n const {\n // Destructure the `wrapperAttrs` object to extract the `className` for passing to `classList()`\n // `= {}` prevents errors when `wrapperAttrs` is undefined\n wrapperAttrs: {\n className: wrapperClassName,\n class: wrapperClass,\n ...wrapperAttrs\n } = {}\n } = this.attrs;\n return m(\"span\", Object.assign({\n className: classList('Select', wrapperClassName, wrapperClass)\n }, wrapperAttrs), this.input());\n }\n input() {\n const {\n options,\n onchange,\n value,\n disabled,\n className,\n class: _class,\n ...domAttrs\n } = this.attrs;\n return m('[', null, m(\"select\", Object.assign({\n className: classList('Select-input FormControl', className, _class),\n onchange: onchange ? withAttr('value', onchange.bind(this)) : undefined,\n value: value,\n disabled: disabled\n }, domAttrs), Object.keys(options).map(key => {\n const option = options[key];\n const label = typeof option === 'object' && 'label' in option ? option.label : option;\n let disabled = typeof option === 'object' && 'disabled' in option ? option.disabled : false;\n if (typeof disabled === 'function') {\n disabled = disabled(value != null ? value : null);\n }\n return m(\"option\", {\n value: key,\n disabled: disabled\n }, label);\n })), m(Icon, {\n name: \"fas fa-sort\",\n className: \"Select-caret\"\n }));\n }\n}\nflarum.reg.add('core', 'common/components/Select', Select);","import Component from '../Component';\nimport classList from '../utils/classList';\nimport Icon from './Icon';\nexport default class ColorPreviewInput extends Component {\n view(vnode) {\n const {\n className,\n id,\n ...otherAttrs\n } = this.attrs;\n const attrs = otherAttrs;\n attrs.type || (attrs.type = 'text');\n attrs.onblur = () => {\n if (attrs.value.length === 4) {\n var _attrs$onchange;\n attrs.value = attrs.value.replace(/#([a-f0-9])([a-f0-9])([a-f0-9])/, '#$1$1$2$2$3$3');\n (_attrs$onchange = attrs.onchange) == null || _attrs$onchange.call(attrs, {\n target: {\n value: attrs.value\n }\n });\n }\n\n // Validate the color\n if (!/^#[a-f0-9]{6}$/i.test(attrs.value)) {\n var _attrs$onchange2;\n attrs.value = '#000000';\n (_attrs$onchange2 = attrs.onchange) == null || _attrs$onchange2.call(attrs, {\n target: {\n value: attrs.value\n }\n });\n }\n };\n return m(\"div\", {\n className: \"ColorInput\"\n }, m(\"input\", Object.assign({\n className: classList('FormControl', className),\n id: id\n }, attrs)), m(\"span\", {\n className: \"ColorInput-icon\",\n role: \"presentation\"\n }, m(Icon, {\n name: 'fas fa-exclamation-circle'\n })), m(\"input\", Object.assign({\n className: \"ColorInput-preview\"\n }, attrs, {\n type: \"color\"\n })));\n }\n}\nflarum.reg.add('core', 'common/components/ColorPreviewInput', ColorPreviewInput);","import Component from '../Component';\nimport Button from './Button';\nimport classList from '../utils/classList';\nexport default class Pill extends Component {\n view(vnode) {\n return m(\"span\", {\n className: classList('Pill', this.attrs.className)\n }, m(\"span\", {\n className: \"Pill-content\"\n }, vnode.children), this.attrs.deletable && m(Button, {\n type: \"button\",\n className: \"Button Button--icon\",\n icon: \"fas fa-times\",\n onclick: this.attrs.ondelete\n }));\n }\n}\nflarum.reg.add('core', 'common/components/Pill', Pill);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport FormModal from './FormModal';\nimport Stream from '../utils/Stream';\nimport classList from '../utils/classList';\nimport Avatar from './Avatar';\nimport Button from './Button';\nimport LoadingIndicator from './LoadingIndicator';\nimport { throttle } from '../utils/throttleDebounce';\nimport InfoTile from './InfoTile';\nimport UserSearchResult from '../../common/components/UserSearchResult';\nimport Pill from './Pill';\n/**\n * The `UserSelectionModal` component displays a modal dialog with searchable\n * user list and submit button. The user can select one or more users from the\n * list and submit them to the callback.\n */\nexport default class UserSelectionModal extends FormModal {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"search\", Stream(''));\n _defineProperty(this, \"selected\", void 0);\n _defineProperty(this, \"focused\", false);\n _defineProperty(this, \"results\", Stream({}));\n _defineProperty(this, \"load\", throttle(500, () => {\n if (this.results()[this.search()]) return;\n if (this.attrs.maxItems && this.selected().length === this.attrs.maxItems) return;\n this.loading = true;\n return app.store.find('users', {\n filter: {\n q: this.search()\n }\n }).then(results => {\n this.results({\n ...this.results(),\n [this.search()]: results\n });\n }).finally(() => {\n this.loading = false;\n m.redraw();\n });\n }));\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.selected = Stream(this.attrs.selected || []);\n\n // preload.\n this.load();\n }\n className() {\n return 'UserSelectionModal Modal--simple';\n }\n title() {\n return this.attrs.title || app.translator.trans('core.lib.user_selection_modal.title');\n }\n content() {\n var _this$results$this$se;\n let list = this.attrs.maxItems && this.selected().length === this.attrs.maxItems ? this.selected() : this.results()[this.search()] || [];\n if (this.attrs.excluded) {\n list = list.filter(user => {\n var _this$attrs$excluded;\n return !((_this$attrs$excluded = this.attrs.excluded) != null && _this$attrs$excluded.map(String).includes(user.id()));\n });\n }\n return [m(\"div\", {\n className: \"Modal-body\"\n }, m(\"div\", {\n className: \"UserSelectionModal-form\"\n }, m(\"div\", {\n className: \"UserSelectionModal-form-input\"\n }, m(\"input\", {\n type: \"text\",\n className: \"FormControl\",\n placeholder: this.attrs.maxItems ? app.translator.trans('core.lib.user_selection_modal.max_items_to_select', {\n count: this.attrs.maxItems\n }, true) : app.translator.trans('core.lib.user_selection_modal.search_placeholder'),\n value: this.search(),\n oninput: e => {\n this.search(e.target.value);\n this.load();\n },\n onfocus: () => this.focused = true,\n onblur: () => this.focused = false,\n disabled: this.attrs.maxItems && this.selected().length === this.attrs.maxItems\n })), m(\"div\", {\n className: \"UserSelectionModal-form-submit App-primaryControl\"\n }, m(Button, {\n type: \"submit\",\n className: \"Button Button--primary\",\n disabled: !this.meetsRequirements(),\n icon: \"fas fa-check\"\n }, app.translator.trans('core.lib.user_selection_modal.submit_button')))), m(\"div\", {\n className: \"UserSelectionModal-selected Pill-list\"\n }, this.selected().map(user => m(Pill, {\n deletable: true,\n ondelete: () => {\n const selected = this.selected().filter(u => u !== user);\n this.selected(selected);\n if (!selected.length) {\n this.load();\n }\n },\n className: \"Pill-alt\"\n }, m(Avatar, {\n user: user\n }), user.displayName())))), this.loading || this.results()[this.search()] ? m(\"div\", {\n className: \"Modal-footer\"\n }, this.loading ? m(LoadingIndicator, null) : this.results() && !((_this$results$this$se = this.results()[this.search()]) != null && _this$results$this$se.length) ? m(InfoTile, {\n icon: \"fas fa-search\"\n }, app.translator.trans('core.lib.user_selection_modal.empty_results')) : m(\"ul\", {\n className: \"UserSelectionModal-list Dropdown-menu\"\n }, list.map(user => this.userListItem(user)))) : null];\n }\n userListItem(user) {\n const selected = this.selected().includes(user);\n return m(UserSearchResult, {\n user: user,\n query: this.search(),\n className: classList({\n 'UserSelectionModal-listItem': true,\n 'UserSelectionModal-listItem--selected': selected\n }),\n onclick: () => {\n if (selected) {\n this.selected(this.selected().filter(u => u !== user));\n } else {\n this.selected([...this.selected(), user]);\n }\n }\n }, m(\"input\", {\n type: \"checkbox\",\n checked: selected,\n readOnly: true\n }));\n }\n meetsRequirements() {\n return this.selected().length > 0 && this.selected().length <= (this.attrs.maxItems || Infinity);\n }\n onsubmit(e) {\n e.preventDefault();\n if (this.attrs.onsubmit) this.attrs.onsubmit(this.selected());\n this.hide();\n }\n}\nflarum.reg.add('core', 'common/components/UserSelectionModal', UserSelectionModal);","import extractText from '../utils/extractText';\nimport Button from './Button';\nimport Tooltip from './Tooltip';\n\n/**\n * The `TextEditorButton` component displays a button suitable for the text\n * editor toolbar.\n *\n * Automatically creates tooltips using the Tooltip component and provided text.\n *\n * ## Attrs\n * - `title` - Tooltip for the button\n */\nexport default class TextEditorButton extends Button {\n view(vnode) {\n const originalView = super.view(vnode);\n return m(Tooltip, {\n text: this.attrs.tooltipText || extractText(vnode.children)\n }, originalView);\n }\n static initAttrs(attrs) {\n super.initAttrs(attrs);\n attrs.className = attrs.className || 'Button Button--icon Button--link';\n attrs.tooltipText = attrs.title;\n }\n}\nflarum.reg.add('core', 'common/components/TextEditorButton', TextEditorButton);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport Component from '../Component';\nimport KeyboardNavigatable from '../utils/KeyboardNavigatable';\nimport classList from '../utils/classList';\n/**\n * A reusable component that wraps around an input element and displays a list\n * of suggestions based on the input's value.\n * Must be extended and the `suggestions` method implemented.\n */\nexport default class AutocompleteDropdown extends Component {\n constructor() {\n super(...arguments);\n /**\n * The index of the currently-selected <li> in the results list. This can be\n * a unique string (to account for the fact that an item's position may jump\n * around as new results load), but otherwise it will be numeric (the\n * sequential position within the list).\n */\n _defineProperty(this, \"index\", 0);\n _defineProperty(this, \"navigator\", void 0);\n _defineProperty(this, \"updateMaxHeightHandler\", void 0);\n /**\n * Whether the input has focus.\n */\n _defineProperty(this, \"hasFocus\", false);\n }\n view(vnode) {\n const suggestions = this.suggestions();\n const shouldShowSuggestions = !!suggestions.length;\n return m(\"div\", {\n className: classList('AutocompleteDropdown', {\n focused: this.hasFocus,\n open: shouldShowSuggestions && this.hasFocus\n })\n }, vnode.children, m(\"ul\", {\n className: \"Dropdown-menu Dropdown-suggestions\",\n \"aria-hidden\": !shouldShowSuggestions || undefined,\n \"aria-live\": shouldShowSuggestions ? 'polite' : undefined\n }, suggestions));\n }\n updateMaxHeight() {\n var _this$element$querySe;\n // Since extensions might add elements above the search box on mobile,\n // we need to calculate and set the max height dynamically.\n const resultsElementMargin = 14;\n const maxHeight = window.innerHeight - this.element.querySelector('.FormControl').getBoundingClientRect().bottom - resultsElementMargin;\n (_this$element$querySe = this.element.querySelector('.Dropdown-suggestions')) == null || (_this$element$querySe = _this$element$querySe.style) == null || _this$element$querySe.setProperty('max-height', \"\".concat(maxHeight, \"px\"));\n }\n onupdate(vnode) {\n super.onupdate(vnode);\n\n // Highlight the item that is currently selected.\n this.setIndex(this.getCurrentNumericIndex());\n this.updateMaxHeight();\n }\n oncreate(vnode) {\n super.oncreate(vnode);\n const component = this;\n\n // Highlight the item that is currently selected.\n this.setIndex(this.getCurrentNumericIndex());\n this.$('.Dropdown-suggestions').on('mousedown', e => e.preventDefault())\n // Whenever the mouse is hovered over a search result, highlight it.\n .on('mouseenter', '> li:not(.Dropdown-header)', function () {\n component.setIndex(component.selectableItems().index(this));\n });\n const $input = this.inputElement();\n this.navigator = new KeyboardNavigatable();\n this.navigator.onUp(() => this.setIndex(this.getCurrentNumericIndex() - 1, true)).onDown(() => this.setIndex(this.getCurrentNumericIndex() + 1, true)).onSelect(this.selectSuggestion.bind(this), true).bindTo($input);\n $input.on('focus', function () {\n component.hasFocus = true;\n m.redraw();\n $(this).one('mouseup', e => e.preventDefault()).trigger('select');\n }).on('blur', function () {\n component.hasFocus = false;\n m.redraw();\n });\n this.updateMaxHeightHandler = this.updateMaxHeight.bind(this);\n window.addEventListener('resize', this.updateMaxHeightHandler);\n }\n onremove(vnode) {\n super.onremove(vnode);\n if (this.updateMaxHeightHandler) {\n window.removeEventListener('resize', this.updateMaxHeightHandler);\n }\n }\n selectableItems() {\n return this.$('.Dropdown-suggestions > li:not(.Dropdown-header)');\n }\n inputElement() {\n return this.$('input');\n }\n selectSuggestion() {\n this.getItem(this.index).find('button')[0].click();\n }\n\n /**\n * Get the position of the currently selected item.\n * Returns zero if not found.\n */\n getCurrentNumericIndex() {\n return Math.max(0, this.selectableItems().index(this.getItem(this.index)));\n }\n\n /**\n * Get the <li> in the search results with the given index (numeric or named).\n */\n getItem(index) {\n const $items = this.selectableItems();\n let $item = $items.filter(\"[data-index=\\\"\".concat(index, \"\\\"]\"));\n if (!$item.length) {\n $item = $items.eq(index);\n }\n return $item;\n }\n\n /**\n * Set the currently-selected search result item to the one with the given\n * index.\n */\n setIndex(index, scrollToItem) {\n if (scrollToItem === void 0) {\n scrollToItem = false;\n }\n const $items = this.selectableItems();\n const $dropdown = $items.parent();\n let fixedIndex = index;\n if (index < 0) {\n fixedIndex = $items.length - 1;\n } else if (index >= $items.length) {\n fixedIndex = 0;\n }\n const $item = $items.removeClass('active').eq(fixedIndex).addClass('active');\n this.index = parseInt($item.attr('data-index')) || fixedIndex;\n if (scrollToItem) {\n const dropdownScroll = $dropdown.scrollTop();\n const dropdownTop = $dropdown.offset().top;\n const dropdownBottom = dropdownTop + $dropdown.outerHeight();\n const itemTop = $item.offset().top;\n const itemBottom = itemTop + $item.outerHeight();\n let scrollTop;\n if (itemTop < dropdownTop) {\n scrollTop = dropdownScroll - dropdownTop + itemTop - parseInt($dropdown.css('padding-top'), 10);\n } else if (itemBottom > dropdownBottom) {\n scrollTop = dropdownScroll - dropdownBottom + itemBottom + parseInt($dropdown.css('padding-bottom'), 10);\n }\n if (typeof scrollTop !== 'undefined') {\n $dropdown.stop(true).animate({\n scrollTop\n }, 100);\n }\n }\n }\n}\nflarum.reg.add('core', 'common/components/AutocompleteDropdown', AutocompleteDropdown);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport AutocompleteDropdown from './AutocompleteDropdown';\nimport GambitsAutocomplete from '../utils/GambitsAutocomplete';\n/**\n * This is an autocomplete component not related to the SearchModal forum components.\n * It is a standalone component that can be reused for search inputs of any other types\n * of resources. It will display a dropdown menu under the input with gambit suggestions\n * similar to the SearchModal component.\n */\nexport default class GambitsAutocompleteDropdown extends AutocompleteDropdown {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"gambitsAutocomplete\", void 0);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.gambitsAutocomplete = new GambitsAutocomplete(this.attrs.resource, () => this.inputElement(), this.attrs.onchange, this.attrs.onchange);\n }\n suggestions() {\n return this.gambitsAutocomplete.suggestions(this.attrs.query);\n }\n}\nflarum.reg.add('core', 'common/components/GambitsAutocompleteDropdown', GambitsAutocompleteDropdown);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport Button from './Button';\nimport classList from '../utils/classList';\nimport Component from '../Component';\nexport default class UploadImageButton extends Component {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"loading\", false);\n }\n view(vnode) {\n let {\n name,\n value,\n url,\n ...attrs\n } = vnode.attrs;\n attrs.loading = this.loading;\n attrs.className = classList(attrs.className, 'Button');\n if (typeof value === 'function') {\n value = value();\n }\n if (typeof url === 'function') {\n url = url();\n }\n return m(\"div\", {\n className: \"UploadImageButton\"\n }, value ? m('[', null, m(\"div\", {\n className: \"UploadImageButton-image\"\n }, m(\"img\", {\n src: url,\n alt: name\n })), m(Button, Object.assign({\n onclick: this.remove.bind(this)\n }, attrs), app.translator.trans('core.admin.upload_image.remove_button'))) : m(Button, Object.assign({\n onclick: this.upload.bind(this)\n }, attrs), app.translator.trans('core.admin.upload_image.upload_button')));\n }\n upload() {\n if (this.loading) return;\n const $input = $('<input type=\"file\">');\n $input.appendTo('body').hide().trigger('click').on('change', e => {\n const body = new FormData();\n // @ts-ignore\n body.append(this.attrs.name, $(e.target)[0].files[0]);\n this.loading = true;\n m.redraw();\n app.request({\n method: 'POST',\n url: this.resourceUrl(),\n serialize: raw => raw,\n body\n }).then(this.success.bind(this), this.failure.bind(this));\n });\n }\n remove() {\n this.loading = true;\n m.redraw();\n app.request({\n method: 'DELETE',\n url: this.resourceUrl()\n }).then(this.success.bind(this), this.failure.bind(this));\n }\n resourceUrl() {\n return app.forum.attribute('apiUrl') + '/' + this.attrs.routePath;\n }\n\n /**\n * After a successful upload/removal, reload the page.\n */\n success(response) {\n window.location.reload();\n }\n\n /**\n * If upload/removal fails, stop loading.\n */\n failure(response) {\n this.loading = false;\n m.redraw();\n }\n}\nflarum.reg.add('core', 'common/components/UploadImageButton', UploadImageButton);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\nimport app from '../app';\nimport classList from '../utils/classList';\nimport Dropdown from './Dropdown';\nimport Button from './Button';\nimport Tooltip from './Tooltip';\nimport Select from './Select';\nexport default class MultiSelect extends Select {\n constructor() {\n super(...arguments);\n _defineProperty(this, \"selected\", []);\n }\n oninit(vnode) {\n super.oninit(vnode);\n this.selected = this.attrs.value || [];\n }\n input() {\n const {\n options,\n onchange,\n disabled,\n className,\n class: _class,\n ...domAttrs\n } = this.attrs;\n return m(Dropdown, {\n disabled: disabled,\n buttonClassName: \"Button\",\n buttonAttrs: {\n disabled\n },\n label: Object.keys(options).filter(key => this.selected.includes(key)).map(key => typeof options[key] === 'string' ? options[key] : options[key].label).join(', ') || app.translator.trans('core.lib.multi_select.placeholder')\n }, Object.keys(options).map(key => {\n const option = options[key];\n const label = typeof option === 'string' ? option : option.label;\n const tooltip = typeof option !== 'string' && option.tooltip;\n let disabled = typeof option !== 'string' && option.disabled;\n if (typeof disabled === 'function') {\n disabled = disabled(this.selected);\n }\n const button = m(Button, {\n type: \"button\",\n className: classList('Dropdown-item', \"Dropdown-item--\".concat(key), {\n disabled\n }),\n onclick: this.toggle.bind(this, key),\n disabled: disabled,\n icon: this.selected.includes(key) ? 'fas fa-check' : 'fas fa-empty'\n }, label);\n if (tooltip) {\n return m(Tooltip, {\n text: tooltip\n }, button);\n }\n return button;\n }));\n }\n select(value) {\n this.selected.push(value);\n }\n unselect(value) {\n this.selected = this.selected.filter(v => v !== value);\n }\n toggle(value, e) {\n e.stopPropagation();\n if (this.selected.includes(value)) {\n this.unselect(value);\n } else {\n this.select(value);\n }\n if (this.attrs.onchange) {\n this.attrs.onchange(this.selected);\n }\n }\n}\nflarum.reg.add('core', 'common/components/MultiSelect', MultiSelect);","import Component from '../Component';\nimport generateElementId from '../utils/generateElementId';\nimport Switch from './Switch';\nimport Select from './Select';\nimport UploadImageButton from './UploadImageButton';\nimport classList from '../utils/classList';\nimport ColorPreviewInput from './ColorPreviewInput';\nimport ItemList from '../utils/ItemList';\nimport MultiSelect from './MultiSelect';\nimport FieldSet from './FieldSet';\n\n/**\n * A type that matches any valid value for the `type` attribute on an HTML `<input>` element.\n *\n * @see https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-type\n *\n * Note: this will be exported from a different location in the future.\n *\n * @see https://github.com/flarum/core/issues/3039\n */\n\n/**\n * Valid options for the setting component builder to generate an HTML input element.\n */\n\nconst BooleanSettingTypes = ['bool', 'checkbox', 'switch', 'boolean'];\nconst SelectSettingTypes = ['select', 'dropdown', 'selectdropdown'];\nconst RadioSettingTypes = ['radio'];\nconst TextareaSettingTypes = ['textarea'];\nconst ColorPreviewSettingType = 'color-preview';\nconst ImageUploadSettingType = 'image-upload';\nconst StackedFormControlType = 'stacked-text';\n\n/**\n * Valid options for the setting component builder to generate a Switch.\n */\n\n/**\n * Valid options for the setting component builder to generate a Select dropdown.\n */\n\n/**\n * Valid options for the setting component builder to generate a Textarea.\n */\n\n/**\n * Valid options for the setting component builder to generate a ColorPreviewInput.\n */\n\n/**\n * All valid options for the setting component builder.\n */\n\n/**\n * Builds a field component based on the provided attributes.\n * Depending on the type of input, you can set the type to 'bool', 'select', or\n * any standard <input> type. Any values inside the 'extra' object will be added\n * to the component as an attribute.\n *\n * Alternatively, you can pass a callback that will be executed in ExtensionPage's\n * context to include custom JSX elements.\n *\n * @example\n *\n * <FormGroup key=\"acme.checkbox\"\n * label={app.translator.trans('acme.admin.setting_label')}\n * type=\"bool\"\n * help={app.translator.trans('acme.admin.setting_help')}\n * className=\"Setting-item\" />\n *\n * @example\n *\n * <FormGroup key=\"acme.select\"\n * label={app.translator.trans('acme.admin.setting_label')}\n * type=\"select\"\n * options={{\n * 'option1': 'Option 1 label',\n * 'option2': 'Option 2 label',\n * }}\n * default=\"option1\" />\n */\nexport default class FormGroup extends Component {\n view(vnode) {\n const customFieldComponents = this.customFieldComponents();\n const {\n help,\n type,\n label,\n stream,\n getSetting,\n containerClassName,\n ...componentAttrs\n } = this.attrs;\n\n // TypeScript being TypeScript\n const attrs = componentAttrs;\n const value = stream ? stream() : null;\n const [inputId, helpTextId] = [generateElementId(), generateElementId()];\n let settingElement;\n\n // Typescript being Typescript\n // https://github.com/microsoft/TypeScript/issues/14520\n if (BooleanSettingTypes.includes(type)) {\n return (\n // TODO: Add aria-describedby for switch help text.\n //? Requires changes to Checkbox component to allow providing attrs directly for the element(s).\n m(\"div\", {\n className: classList('Form-group', containerClassName)\n }, m(Switch, Object.assign({\n state: !!value && value !== '0',\n onchange: stream\n }, attrs), label), help ? m(\"div\", {\n className: \"helpText\"\n }, help) : null)\n );\n } else if (SelectSettingTypes.includes(type)) {\n const {\n default: defaultValue,\n options,\n multiple,\n ...otherAttrs\n } = attrs;\n const Tag = multiple ? MultiSelect : Select;\n settingElement = m(Tag, Object.assign({\n id: inputId,\n \"aria-describedby\": helpTextId,\n value: value || defaultValue,\n options: options,\n onchange: stream\n }, otherAttrs));\n } else if (RadioSettingTypes.includes(type)) {\n const {\n default: defaultValue,\n options,\n multiple,\n ...otherAttrs\n } = attrs;\n settingElement = m(FieldSet, otherAttrs, options.map(_ref => {\n let {\n value,\n label\n } = _ref;\n return m(\"label\", {\n className: \"checkbox\"\n }, m(\"input\", {\n type: \"radio\",\n name: \"homePage\",\n value: value,\n bidi: stream\n }), label);\n }));\n } else if (type === StackedFormControlType) {\n const {\n textArea,\n ...otherAttrs\n } = attrs;\n const {\n setting: textAreaSetting,\n ...textAreaAttrs\n } = textArea;\n settingElement = m(\"div\", Object.assign({\n className: \"StackedFormControl\"\n }, otherAttrs), m(\"input\", {\n type: \"text\",\n className: \"FormControl\",\n bidi: stream\n }), m(\"textarea\", Object.assign({\n className: \"FormControl\",\n bidi: getSetting == null ? void 0 : getSetting(textAreaSetting)\n }, textAreaAttrs)));\n } else if (type === ImageUploadSettingType) {\n const {\n value,\n ...otherAttrs\n } = attrs;\n settingElement = m(UploadImageButton, Object.assign({\n value: stream\n }, otherAttrs));\n } else if (customFieldComponents.has(type)) {\n return customFieldComponents.get(type)({\n ...this.attrs,\n bidi: this.attrs.stream\n });\n } else {\n attrs.className = classList('FormControl', attrs.className);\n if (TextareaSettingTypes.includes(type)) {\n settingElement = m(\"textarea\", Object.assign({\n id: inputId,\n \"aria-describedby\": helpTextId,\n bidi: stream\n }, attrs));\n } else {\n let Tag = 'input';\n if (type === ColorPreviewSettingType) {\n Tag = ColorPreviewInput;\n } else {\n attrs.type = type;\n }\n settingElement = m(Tag, Object.assign({\n id: inputId,\n \"aria-describedby\": helpTextId,\n bidi: stream\n }, attrs));\n }\n }\n return m(\"div\", {\n className: classList('Form-group', containerClassName)\n }, label && m(\"label\", {\n for: inputId\n }, label), help && m(\"div\", {\n id: helpTextId,\n className: \"helpText\"\n }, help), settingElement);\n }\n\n /**\n * A list of extension-defined custom setting components to be available.\n *\n * The ItemList key represents the value for the `type` attribute.\n * All attributes passed are provided as arguments to the function added to the ItemList.\n *\n * ItemList priority has no effect here.\n *\n * @example\n * ```tsx\n * extend(AdminPage.prototype, 'customFieldComponents', function (items) {\n * // You can access the AdminPage instance with `this` to access its `settings` property.\n *\n * // Prefixing the key with your extension ID is recommended to avoid collisions.\n * items.add('my-ext.setting-component', (attrs) => {\n * return (\n * <div className={attrs.className}>\n * <label>{attrs.label}</label>\n * {attrs.help && <p className=\"helpText\">{attrs.help}</p>}\n *\n * My setting component!\n * </div>\n * );\n * })\n * })\n * ```\n */\n customFieldComponents() {\n const items = new ItemList();\n return items;\n }\n}\nflarum.reg.add('core', 'common/components/FormGroup', FormGroup);","import app from '../../common/app';\n\n/**\n * The `punctuateSeries` helper formats a list of strings (e.g. names) to read\n * fluently in the application's locale.\n *\n * ```js\n * punctuateSeries(['Toby', 'Franz', 'Dominion']) // Toby, Franz, and Dominion\n * ```\n *\n * @param {import('mithril').Children[]} items\n * @return {import('mithril').Children}')}\n */\nexport default function punctuateSeries(items) {\n if (items.length === 2) {\n return app.translator.trans('core.lib.series.two_text', {\n first: items[0],\n second: items[1]\n });\n } else if (items.length >= 3) {\n // If there are three or more items, we will join all but the first and\n // last items with the equivalent of a comma, and then we will feed that\n // into the translator along with the first and last item.\n const second = items.slice(1, items.length - 1).reduce((list, item) => list.concat([item, app.translator.trans('core.lib.series.glue_text')]), []).slice(0, -1);\n return app.translator.trans('core.lib.series.three_text', {\n first: items[0],\n second,\n third: items[items.length - 1]\n });\n }\n return items;\n}\nflarum.reg.add('core', 'common/helpers/punctuateSeries', punctuateSeries);","import _defineProperty from \"@babel/runtime/helpers/esm/defineProperty\";\n/**\n * The `Fragment` class represents a chunk of DOM that is rendered once with Mithril and then takes\n * over control of its own DOM and lifecycle.\n *\n * This is very similar to the `Component` wrapper class, but is used for more fine-grained control over\n * the rendering and display of some significant chunks of the DOM. In contrast to components, fragments\n * do not offer Mithril's lifecycle hooks.\n *\n * Use this when you want to enjoy the benefits of JSX / VDOM for initial rendering, combined with\n * small helper methods that then make updates to that DOM directly, instead of fully redrawing\n * everything through Mithril.\n *\n * This should only be used when necessary, and only with `m.render`. If you are unsure whether you need\n * this or `Component, you probably need `Component`.\n */\nexport default class Fragment {\n constructor() {\n /**\n * The root DOM element for the fragment.\n */\n _defineProperty(this, \"element\", void 0);\n }\n /**\n * Returns a jQuery object for this fragment's element. If you pass in a\n * selector string, this method will return a jQuery object, using the current\n * element as its buffer.\n *\n * For example, calling `fragment.$('li')` will return a jQuery object\n * containing all of the `li` elements inside the DOM element of this\n * fragment.\n *\n * @param [selector] a jQuery-compatible selector string\n * @returns the jQuery object for the DOM node\n * @final\n */\n $(selector) {\n const $element = $(this.element);\n return selector ? $element.find(selector) : $element;\n }\n\n /**\n * Get the renderable virtual DOM that represents the fragment's view.\n *\n * This should NOT be overridden by subclasses. Subclasses wishing to define\n * their virtual DOM should override Fragment#view instead.\n *\n * @example\n * const fragment = new MyFragment();\n * m.render(document.body, fragment.render());\n *\n * @final\n */\n render() {\n const vdom = this.view();\n vdom.attrs = vdom.attrs || {};\n const originalOnCreate = vdom.attrs.oncreate;\n vdom.attrs.oncreate = vnode => {\n this.element = vnode.dom;\n if (originalOnCreate) originalOnCreate.apply(this, [vnode]);\n };\n return vdom;\n }\n\n /**\n * Creates a view out of virtual elements.\n */\n}\nflarum.reg.add('core', 'common/Fragment', Fragment);","import app from '../../forum/app';\nimport Button from '../../common/components/Button';\nimport classList from '../../common/utils/classList';\n\n/**\n * The `LogInButton` component displays a social login button which will open\n * a popup window containing the specified path.\n *\n * ### Attrs\n *\n * - `path`\n */\nexport default class LogInButton extends Button {\n static initAttrs(attrs) {\n attrs.className = classList(attrs.className, 'LogInButton');\n attrs.onclick = function () {\n const width = 580;\n const height = 400;\n const $window = $(window);\n window.open(app.forum.attribute('baseUrl') + attrs.path, 'logInPopup', \"width=\".concat(width, \",\") + \"height=\".concat(height, \",\") + \"top=\".concat($window.height() / 2 - height / 2, \",\") + \"left=\".concat($window.width() / 2 - width / 2, \",\") + 'status=no,scrollbars=yes,resizable=no');\n };\n super.initAttrs(attrs);\n }\n}\nflarum.reg.add('core', 'forum/components/LogInButton', LogInButton);","import app from '../../forum/app';\nimport Component from '../../common/Component';\nimport Link from '../../common/components/Link';\nimport username from '../../common/helpers/username';\nimport highlight from '../../common/helpers/highlight';\nimport Avatar from '../../common/components/Avatar';\n\n/**\n * The `PostPreview` component shows a link to a post containing the avatar and\n * username of the author, and a short excerpt of the post's content.\n *\n * ### Attrs\n *\n * - `post`\n */\nexport default class PostPreview extends Component {\n view() {\n const post = this.attrs.post;\n const user = post.user();\n const content = post.contentType() === 'comment' && post.contentPlain();\n const excerpt = content ? highlight(content, this.attrs.highlight, 300) : '';\n return m(Link, {\n className: \"PostPreview\",\n href: app.route.post(post),\n onclick: this.attrs.onclick\n }, m(\"span\", {\n className: \"PostPreview-content\"\n }, m(Avatar, {\n user: user\n }), username(user), \" \", m(\"span\", {\n className: \"PostPreview-excerpt\"\n }, excerpt)));\n }\n}\nflarum.reg.add('core', 'forum/components/PostPreview', PostPreview);"],"names":["inProgress","dataWebpackPrefix","Application","constructor","this","A","forums","users","discussions","posts","groups","notifications","fontawesome","title","val","_title","titleCount","_titleCount","load","payload","data","translator","setLocale","locale","initialize","caughtInitializationErrors","initializers","toArray","forEach","initializer","e","extension","itemName","includes","replace","push","trans","concat","boot","_this$store$getById","store","pushPayload","resources","forum","getById","session","String","userId","csrfToken","beforeMount","mount","initialRoute","window","location","href","handler","bootExtensions","extensions","Object","keys","name","extend","extenders","flat","Infinity","extender","exports","basePath","m","document","getElementById","view","state","modal","alerts","drawer","route","routes","appEl","appHeaderEl","querySelector","scrollListener","top","offset","getBoundingClientRect","body","scrollTop","classList","toggle","start","update","add","initColorScheme","forumDefault","_app$forum$attribute","_this$session$user","attribute","allowUserColorScheme","userConfiguredPreference","user","preferences","colorScheme","scheme","setColorScheme","watchSystemColorSchemePreference","getSystemColorSchemePreference","matchMedia","matches","callback","addEventListener","Auto","documentElement","setAttribute","setColoredHeader","value","preloadedApiDocument","apiDocument","results","screen","getComputedStyle","getPropertyValue","setTitle","updateTitle","setTitleCount","count","onHomepage","get","params","pageTitle","forumName","pageNumber","parser","DOMParser","parseFromString","innerText","transformRequestOptions","flarumOptions","background","deserialize","modifyText","tmpOptions","options","response","_","xhr","setRequestHeader","method","extract","responseText","status","getResponseHeader","JSON","parse","request","originalOptions","requestErrorAlert","dismiss","catch","requestErrorCatch","errorHandler","error","customErrorHandler","_error$response$error","_error$response","_error$response2","_app$session$user","formattedErrors","errors","map","_e$detail","decodeURI","detail","content","slice","code","isAdmin","requestWasCrossOrigin","isDebug","alert","type","controls","className","onclick","showDebug","bind","requestErrorDefaultHandler","Promise","reject","URL","url","baseURI","origin","console","group","length","groupEnd","show","formattedError","Error","path","key","hasOwnProperty","queryString","buildQueryString","prefix","flarum","reg","Component","oninit","vnode","setAttrs","attrs","oncreate","element","dom","onbeforeupdate","onupdate","onbeforeremove","onremove","$","selector","$element","find","component","children","componentAttrs","initAttrs","Model","Date","id","undefined","_this$data","attributes","pushData","_this$data2","assign","_this$data$relationsh","relationships","r","relationship","identifier","getIdentifier","Array","freshness","pushAttributes","save","model","oldData","copyData","meta","exists","apiEndpoint","then","err","redraw","remove","resolve","stringify","rawRelationship","_this$data$relationsh2","transform","hasOne","_this$data$relationsh3","relationshipData","hasMany","_this$data$relationsh4","transformDate","AuthorGambit","app","hint","filterKey","CreatedGambit","valuePattern","HiddenGambit","enabled","UnreadGambit","EmailGambit","GroupGambit","DiscussionGambit","GambitManager","apply","filter","q","match","gambit","negate","additions","toFilter","predicates","isArray","query","onmatch","gambits","for","bits","split","bit","pattern","RegExp","splice","trim","from","substring","fromFilter","gambitClass","SearchManager","Session","login","logout","payloadIsPlural","Store","models","included","pushObject","result","o","setTimeout","curr","instance","createRecord","idOrParams","_params","join","search","getBy","all","records","values","Translator","formatterTypeHandlers","formatter","getLocale","addTranslations","translations","plural","select","preprocessParameters","parameters","username","translation","rich","w","appProxy","Proxy","properties","Reflect","set","Alert","icon","dismissible","ondismiss","dismissControl","containerClassName","AlertManager","super","activeAlerts","getActiveAlerts","Number","urgent","role","componentClass","Avatar","loading","hasTitle","displayName","avatarUrl","src","alt","charAt","toUpperCase","style","testing","color","Badge","iconName","label","iconChild","trust","newStyle","badgeAttrs","badgeNode","text","fireDebugWarning","warn","arguments","Button","ariaLabel","disabled","class","_class","extractText","hasIcon","buttonAttrs","getButtonContent","_this$element","_this$element$getAttr","prototype","getAttribute","call","Icon","LoadingIndicator","size","display","Checkbox","checked","onchange","getDisplay","Dropdown","buttonClassName","menuClassName","caretIcon","accessibleToggleLabel","items","renderItems","lazyDraw","showing","getButton","getMenu","on","_$menu$offset$top","_$menu$offset","_$menu$height","_$$scrollTop","_$$height","_$menu$offset2","_$menu$offset$left","_$menu$offset3","_$menu$width","_$$scrollLeft","_$$width","onshow","sync","$menu","isRight","hasClass","height","windowSrollTop","windowHeight","removeClass","toggleClass","left","width","windowScrollLeft","scrollLeft","windowWidth","onhide","button","tooltip","position","FieldSet","description","Form","FormModal","wrapper","onsubmit","onready","first","trigger","onerror","alertAttrs","source","pointer","GroupBadge","nameSingular","InfoTile","iconElement","Input","_this$attrs$stream","_this$attrs","inputClassName","inputAttrs","stream","prefixIcon","clearable","input","clear","clearLabel","_ref","oninput","_this$onchange","target","placeholder","readonly","renderInput","_this$attrs$onchange","_this$attrs2","completeClassName","completeContainerClassName","containerAttrs","Modal","dismissibleOptions","viaCloseButton","isDismissibleViaCloseButton","viaEscKey","isDismissibleViaEscKey","viaBackdropClick","isDismissibleViaBackdropClick","animateShow","hide","inner","animateHide","loaded","ModalManager","modalList","i","Tag","handlePossibleBackdropClick","backdropShown","loadingModal","ontransitionend","onBackdropTransitionEnd","keyUpListener","handleEscPress","removeEventListener","requestAnimationFrame","_document$getElementB2","_document$getElementB","_deactivate","isModalOpen","focusTrap","deactivate","dialogKey","_deactivate2","_ref2","_activate","_ref3","lastSetFocusTrap","activeDialogElement","allowOutsideClick","activate","activeDialogManagerElement","reserveScrollBarGap","_this$attrs$state$mod","_this$attrs$state$mod2","readyCallback","_this$activeDialogEle","once","_this$activeDialogEle2","closedCallback","_this$activeDialogEle3","_this$activeDialogEle4","_this$activeDialogEle5","modalClosing","close","dismissibleState","preventDefault","propertyName","currentTarget","Navigation","history","pane","onmouseenter","onmouseleave","canGoBack","getBackButton","getPaneButton","getDrawerButton","previous","getPrevious","backUrl","shiftKey","ctrlKey","metaKey","which","back","active","pinned","togglePinned","new","newNotificationCount","stopPropagation","Page","current","routeName","bodyClass","addClass","scrollTopOnCreate","scrollRestoration","useBrowserScrollRestoration","RequestErrorModal","statusText","_responseText","srcdoc","onload","_iframe$contentWindow","iframe","contentWindow","offsetHeight","isActive","tag","SelectDropdown","activeChild","defaultLabel","SplitDropdown","mainAction","firstChild","getFirstChild","Switch","ColorScheme","ThemeMode","mode","selected","alternate","Light","Dark","LightHighContrast","DarkHighContrast","Tooltip","tooltipVisible","showOnFocus","ignoreTitleWarning","html","delay","realText","getRealText","oldText","shouldRecreateTooltip","oldVisibility","shouldChangeTooltipVisibility","checkDomNodeChanged","recreateTooltip","childDomNode","createTooltip","updateVisibility","placement","domNode","isSameNode","UserSearchResult","badges","object","methods","namespace","namespaceAndIdFromPath","onLoad","module","original","_len","args","_key","override","newMethod","_len2","_key2","fireApplicationError","userTitle","consoleTitle","_app$session","fullTime","time","d","datetime","format","full","pubdate","highlight","string","phrase","safe","regexp","highlighted","Math","max","humanTime","ago","isVnode","item","isSeparator","listItems","rawItems","customTag","newItems","prevItem","Boolean","withoutUnnecessarySeparators","_item$attrs2","classes","isListItem","_item$attrs","_item$tag$isActive","_item$tag","itemClassName","textContrastClass","hexcolor","userOnline","lastSeenAt","isOnline","transformer","AccessToken","token","createdAt","lastActivityAt","lastIpAddress","device","isCurrent","isSessionToken","Discussion","slug","firstPost","lastPostedAt","lastPostedUser","lastPost","lastPostNumber","commentCount","replyCount","mostRelevantPost","lastReadAt","lastReadPostNumber","isUnread","unreadCount","isRead","hiddenAt","hiddenUser","isHidden","canReply","canRename","canHide","canDelete","removePost","some","_user$markedAllAsRead","_user$markedAllAsRead2","_this$lastPostedAt","markedAllAsReadAt","getTime","_this$lastPostNumber","_this$commentCount","min","postIds","_this$rawRelationship","_this$rawRelationship2","link","Forum","Group","namePlural","Notification","contentType","fromUser","subject","Post","number","discussion","contentHtml","renderFailed","contentPlain","editedAt","editedUser","isEdited","canEdit","User","email","isEmailConfirmed","password","joinTime","unreadNotificationCount","discussionCount","canEditCredentials","canEditGroups","avatarColor","calculateAvatarColor","dayjs","subtract","isBefore","_this$avatarUrl","image","Image","colorThief","getColor","TypeError","crossOrigin","savePreferences","newPreferences","GambitType","BooleanGambit","Grouped","is","_matches","suggestion","KeyValueGambit","KeyValue","gambitValueToFilterValue","filterValueToGambitValue","toString","DefaultResolver","makeKey","param","makeAttrs","requestedPath","default","render","AlertManagerState","arg1","arg2","arg3","alertId","showLoading","loadingPool","clearLoading","ModalManagerState","stackModal","invalidModalWarning","pop","PageState","every","PaginatedListState","page","pageSize","pages","loadPrev","loadingPrev","getLocation","getPrevPageNumber","loadPage","parseResults","finally","loadNext","loadingNext","getNextPageNumber","pg","_results$payload","pageNum","links","hasNext","next","hasPrev","prev","isEmpty","unshift","reqParams","requestParams","include","limit","_results$payload2","_results$payload3","usedPerPage","perPage","usedTotal","total","DEFAULT_PAGE_SIZE","totalItems","refreshParams","newParams","paramsChanged","refresh","initialLoading","goto","loadingPage","getPages","isLoading","isInitialLoading","isLoadingPrev","isLoadingNext","hasItems","getAllItems","_this$pages$","_this$pages","getParams","_this$pages2","isNaN","_this$pages$2","isSearchResults","lastPage","getSort","sort","sortMap","sortValue","currentSort","changeSort","changeFilter","SearchState","cachedSearches","Set","getInitialSearch","getValue","setValue","cache","isCached","has","AutocompleteReader","symbol","check","lastChunk","cursor","validBit","absoluteStart","_validBit","character","substr","test","relativeStart","typed","toLowerCase","BasicEditorDriver","el","createElement","build","classNames","callInputListeners","inputListeners","listener","onkeyup","keyHandlers","append","moveCursorTo","setSelectionRange","getSelectionRange","selectionStart","selectionEnd","getLastNChars","n","insertAtCursor","insertAt","pos","insertBetween","cursorPos","replaceBeforeCursor","end","focus","getCaretCoordinates","relCoords","destroy","EventEmitter","events","event","emit","GambitsAutocomplete","resource","jqueryInput","afterSuggest","suggestions","groupedGambits","keyValueGambits","uniqueGroups","instancePerGroup","autocompleteReader","cursorPosition","prop","autocomplete","negative","startsWith","endsWith","gambitKey","gambitQuery","specificGambitSuggestions","gambitSuggestion","negated","_autocomplete$relativ","suggest","flatMap","fromTyped","$input","replaced","Item","priority","ItemList","_items","getPriority","setContent","setPriority","merge","otherList","keepPrimitives","createItemContentProxy","a","b","toObject","reduce","obj","property","receiver","Keys","KeyboardNavigatable","Map","onUp","onDirection","ArrowUp","onDown","ArrowDown","onLeft","ArrowLeft","onRight","ArrowRight","direction","callbacks","onSelect","ignoreTabPress","Tab","Enter","onTab","onCancel","Escape","onRemove","Backspace","KeyboardEvent","HTMLInputElement","when","whenCallback","bindTo","navigate","keyCallback","RequestError","SubtreeRetainer","needsRebuild","invalidate","abbreviateNumber","floor","toFixed","depth","acc","t","f","computed","compute","dependentValues","computedValue","recompute","attr","specialChars","escapeRegExp","vdom","createFocusTrap","escapeDeactivates","formatNumber","Intl","NumberFormat","now","isAfter","diff","year","fromNow","canInsertText","insertText","textarea","originalSelectionStart","before","after","contentEditable","execCommand","dispatchEvent","CustomEvent","bubbles","cancelable","isDark","hexnumbers","char","repeat","parseInt","isObject","updateHumanTimes","each","$this","liveHumanTimes","setInterval","mapRoutes","resolver","resolverClass","setRouteWithForcedRefresh","newOptions","truncate","SluggingMode","getPlainContent","removeSelectors","querySelectorAll","ucfirst","camelCaseToSnakeCase","str","letter","ALPHANUMERIC","UTF8","generateRandomString","arr","Uint8Array","crypto","getRandomValues","dec","padStart","stringToColor","num","charCodeAt","rgb","h","s","v","g","p","hsvToRgb","withAttr","cb","isSafariMobile","navigator","vendor","userAgent","Notices","onclickEmailConfirmation","sent","bisecting","maintenanceMode","Footer","ForumApplication","discussionRenamed","DiscussionRenamedNotification","comment","CommentPost","DiscussionRenamedPost","History","NotificationListState","GlobalSearchState","ComposerState","DiscussionListState","getPrototypeOf","defaultRoute","defaultAction","Pane","HeaderPrimary","HeaderSecondary","home","viewingDiscussion","DiscussionPage","authenticationComplete","loggedIn","reload","DiscussionListItem","subtree","elementAttrs","Slidable","viewItems","controlsView","slidableUnderneathView","contentView","markAsRead","unread","read","contentItems","authorView","mainView","statsView","authorItems","author","badgesView","jumpTo","getJumpTo","highlightRegExp","infoItems","post","_discussion$lastPostN","slidableInstance","reset","showFirstPost","_this$attrs$params$so","showRepliesCount","_post$contentPlain","excerpt","statsItems","replyCountItem","showUnread","a11yKey","DiscussionListItemStatsItem","a11yLabel","_app$pane","_app$pane2","enable","_app$pane3","_app$composer","disable","composer","composingReplyTo","fields","minimize","hero","sidebar","PostStream","onPositionChange","positionChanged","sidebarItems","PostStreamImport","PostStreamScrubberImport","PostStreamScrubber","preloadedDiscussion","bySlug","near","_includedPosts$0$numb","_includedPosts$","includedPosts","discussionId","record","rawNearParam","nearParam","goToNumber","startNumber","endNumber","replaceState","addChunkModule","notification","postNumber","DiscussionsSearchSource","customGrouping","fullPage","gotoItem","IndexPage","lastDiscussion","actionItems","oldHeroHeight","heroHeight","outerHeight","css","$discussion","indexTop","indexBottom","discussionOffset","discussionTop","discussionBottom","sortOptions","sortId","markAllAsRead","confirm","IndexSidebar","canStartDiscussion","newDiscussionAction","navItems","stickyParams","LoadingPost","MinimalDiscussionListItem","HeaderListItem","avatar","actions","Link","external","_this$href","_app$session$user$unr","HeaderDropdown","newCount","getNewCount","getUnreadCount","menuClick","getContent","_this$attrs$state","isOpen","goToRoute","NotificationsDropdown","NotificationList","PageStructure","rootItems","providedPane","main","mainItems","providedHero","container","loadingItems","containerItems","providedContent","AbstractPost","footerItems","header","sideItems","$actions","$controls","existing","createdByStarter","PostControls","PostListItem","PostList","Placeholder","itemNum","PostMeta","permalink","getPermalink","touch","parent","postIdentifier","ipAddress","_this$attrs$permalink","PostUser","PostsPage","PostsUserPage","loadLimit","loadUser","RenameDiscussionModal","currentTitle","newTitle","bidi","PostsSearchSource","LinkButton","AbstractSearch","searchState","sourceItems","openSearchModal","blur","sources","a11yRoleLabel","onkeydown","Search","UsersSearchSource","SessionDropdown","UserPage","editable","controlsButtonClassName","lowercaseUsername","isActor","lastIndexOf","localeCompare","LOCAL_STORAGE_KEY","WelcomeHero","slideUp","welcomeItems","localStorage","setItem","getItem","DiscussionPageResolver","canonicalizeDiscussionSlug","scrollToPostNumber","index","settings","makeRouteHelpers","Position","HIDDEN","preventExit","isVisible","onExit","editor","mounted","Composer","NORMAL","FULLSCREEN","MINIMIZED","fullScreen","exitFullScreen","bodyMatches","isFullScreen","ReplyComposer","checkModule","message","preventClosingWhen","minimumHeight","maximumHeight","computedHeight","globalEventEmitter","eventEmitter","deleteDiscussion","preloadedDiscussions","_preloadedDiscussions","extraDiscussions","relevance","latest","newest","oldest","removeDiscussion","indexOf","addDiscussion","initialValueSet","currPageProvidesSearch","intializeValue","providesInitialSearch","searchToQuery","clearInitialSearch","_app$session$user2","_app$session$user3","deleteAll","_app$session$user4","PostListState","_this$params$sort","preloadedPosts","_preloadedPosts$paylo","extraPosts","PostStreamState","_loadNext","loadPrevious","_loadPrevious","viewingEnd","visibleEnd","loadRange","visibleStart","goToFirst","goToIndex","goToLast","noAnimation","resultPromise","targetPost","reply","paused","loadPromise","loadNearNumber","needsScroll","animateScroll","loadNearIndex","sanitizeIndex","loadCount","twoPagesAway","loadPageTimeouts","clearTimeout","pagesLoading","backwards","anchorIndex","loadIds","newPosts","_posts$0$id","visible","abs","getCurrent","stack","secondTop","replaceRichTags","dontUnescapeIndices","traverseMessageTags","segment","currTagIsClosing","currTag","j","currTagStart","break","endingLocation","startIndex","startSegmentIndex","segmentIndex","segmentStart","segmentEnd","exit","findClosingTag","entireTagInSegment","segmentContainingClosingTag","tagContents","k","processedSegment","newSegmentIndex","unEscapeHtml","startI","startJ","onTagClose","ch","inTag","instructions","recSanitizeArr","defaultRichHandler","contents","RichMessageFormatter","_MessageFormatter","_this","typeHandlers","richHandler","_classCallCheck","_super","cleanedValues","sanitizeValues","formatted","flatten","process","sym","random","fakeValues","fromEntries","entries","_slicedToArray","originalTemplateSegmentIndices","MessageFormatter","mithrilRichHandler","fragment","_objectSpread","array","accumulator","memoize","func","arg","toISOString","parseCases","isWhitespace","cases","currTermStart","latestTerm","inTerm","caseBody","branchEndIndex","findClosingBracket","fromIndex","splitFormattedArgument","block","separator","indexOfDelimiter","head","tail","pluralFormatter","_defineProperty","blockStartIndex","blockEndIndex","_splitFormattedArgume","_splitFormattedArgume2","typeHandler","keyCounter","ONE","OTHER$1","replaceNumberSign","output","numBraces","numberValues","keyParam","pluralTypeHandler","_parseCases","intValue","keywordPossibilities","resolvedOptions","PluralRules","pluralKeyword","keyword","_replaceNumberSign","OTHER","selectTypeHandler","hasPassiveEvents","passiveTestOptions","passive","isIosDevice","platform","maxTouchPoints","locks","documentListenerAdded","initialClientY","previousBodyOverflowSetting","previousBodyPosition","previousBodyPaddingRight","allowTouchMove","lock","rawEvent","touches","disableBodyScroll","targetElement","arr2","_toConsumableArray","_window","scrollY","scrollX","innerHeight","bottomBarHeight","_reserveScrollBarGap","scrollBarGap","innerWidth","clientWidth","computedBodyPaddingRight","paddingRight","overflow","setOverflowHidden","ontouchstart","targetTouches","clientY","ontouchmove","scrollHeight","clientHeight","isTargetElementTotallyScrolled","handleScroll","clearAllBodyScrollLocks","y","x","scrollTo","restorePositionSetting","Affix","DEFAULTS","$target","proxy","checkPosition","checkPositionWithEventLoop","affixed","unpin","pinnedOffset","Plugin","option","VERSION","RESET","getState","offsetTop","offsetBottom","targetHeight","initializing","colliderTop","getPinnedOffset","bottom","affix","affixType","Event","isDefaultPrevented","old","fn","Constructor","noConflict","$spy","jQuery","getParent","$parent","clearMenus","relatedTarget","tagName","contains","closest","insertAfter","keydown","$items","eq","dropdown","DISALLOWED_ATTRIBUTES","uriAttrs","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","allowedAttributeList","attrName","nodeName","inArray","nodeValue","regExp","l","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","implementation","createHTMLDocument","createdDocument","innerHTML","whitelistKeys","elements","len","elName","attributeList","whitelistedAttributes","len2","removeAttribute","parentNode","removeChild","timeout","hoverState","inState","init","TRANSITION_DURATION","animation","template","viewport","padding","sanitize","area","br","col","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","pre","small","span","sub","sup","strong","u","ul","getOptions","$viewport","isFunction","click","hover","triggers","eventIn","eventOut","enter","leave","_options","fixTitle","getDefaults","dataAttributes","dataAttr","getDelegateOptions","defaults","self","tip","isInStateTrue","hasContent","inDom","ownerDocument","that","$tip","tipId","getUID","autoToken","autoPlace","detach","appendTo","getPosition","actualWidth","offsetWidth","actualHeight","orgPlacement","viewportDim","right","calculatedOffset","getCalculatedOffset","applyPlacement","complete","prevHoverState","support","transition","one","emulateTransitionEnd","marginTop","marginLeft","setOffset","using","props","round","delta","getViewportAdjustedDelta","isVertical","arrowDelta","arrowOffsetPosition","replaceArrow","dimension","arrow","getTitle","removeAttr","$e","isBody","elRect","isSvg","SVGElement","elOffset","scroll","outerDims","viewportPadding","viewportDimensions","topEdgeOffset","bottomEdgeOffset","leftEdgeOffset","rightEdgeOffset","$arrow","toggleEnabled","off","removeData","duration","called","$el","transEndEventNames","WebkitTransition","MozTransition","OTransition","transitionEnd","special","bsTransitionEnd","bindType","delegateType","handle","handleObj","CanvasImage","canvas","context","getContext","appendChild","drawImage","clearRect","putImageData","getPixelCount","getImageData","removeCanvas","ColorThief","getPalette","c","MMCQ","quantize","palette","pv","naturalOrder","sum","peek","debug","r1","r2","g1","g2","b1","b2","histo","vboxes","vbox","volume","copy","_volume","_count_set","_count","avg","_avg","gval","bval","nearest","sqrt","pow","forcebw","M","weekdays","months","ordinal","z","utcOffset","date","month","clone","ceil","D","ms","Q","S","O","$L","utc","$u","$x","$offset","$d","NaN","UTC","$y","getFullYear","$M","getMonth","$D","getDate","$W","getDay","$H","getHours","$m","getMinutes","$s","getSeconds","$ms","getMilliseconds","$utils","isValid","isSame","startOf","endOf","$g","unix","valueOf","toDate","$locale","weekStart","$set","daysInMonth","invalidDate","meridiem","monthsShort","weekdaysMin","weekdaysShort","getTimezoneOffset","toJSON","toUTCString","$i","isDayjs","en","Ls","LTS","LT","L","LL","LLL","LLLL","formats","future","past","mm","hh","dd","MM","yy","fromToBase","relativeTime","thresholds","rounding","to","toNow","globalThis","Function","global","trapQueue","activeFocusTraps","activateTrap","trap","activeTrap","pause","trapIndex","deactivateTrap","unpause","findIndex","idx","valueOrHandler","getActualTarget","shadowRoot","composedPath","userOptions","doc","config","_objectSpread2","returnFocusOnDeactivate","delayInitialFocus","containers","containerGroups","tabbableGroups","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","delayInitialFocusTimer","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","tabbableNodes","node","getNodeForOption","optionValue","getInitialFocusNode","activeElement","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","tabbable","tabbableOptions","focusableNodes","focusable","lastTabbableNode","nextTabbableNode","forward","nodeIdx","isTabbable","reverse","tryFocus","preventScroll","isSelectableInput","getReturnFocusNode","previousActiveElement","checkPointerDown","clickOutsideDeactivates","returnFocus","isFocusable","checkFocusIn","targetContained","Document","stopImmediatePropagation","checkKey","keyCode","isEscapeEvent","isTabEvent","destinationNode","containerIndex","containerGroup","startOfGroupIndex","destinationGroupIndex","lastOfGroupIndex","_destinationGroupIndex","checkTab","checkClick","addListeners","capture","removeListeners","activateOptions","onActivate","onPostActivate","checkCanFocusTrap","finishActivation","deactivateOptions","onDeactivate","onPostDeactivate","checkCanReturnFocus","finishDeactivation","updateContainerElements","containerElements","elementsAsArray","keyHandler","origHandler","hotkeys","filterInputAcceptingElements","textInputTypes","filterContentEditable","filterTextInputs","textAcceptingInputTypes","specialKeys","fromCharCode","modif","possible","specialKey","shiftNums","version","factory","noGlobal","getProto","class2type","hasOwn","fnToString","ObjectFunctionString","nodeType","isWindow","preservedScriptAttributes","nonce","noModule","DOMEval","script","toType","rhtmlSuffix","isArrayLike","elem","jquery","pushStack","elems","ret","prevObject","last","even","grep","_elem","odd","copyIsArray","deep","isPlainObject","expando","isReady","msg","noop","proto","Ctor","isEmptyObject","globalEval","textContent","makeArray","isXMLDoc","namespaceURI","docElem","second","invert","callbackExpect","guid","Symbol","iterator","_i","whitespace","rtrimCSS","bup","compareDocumentPosition","rcssescape","fcssescape","asCodePoint","escapeSelector","sel","preferredDoc","pushNative","Expr","outermostContext","sortInput","hasDuplicate","documentIsHTML","rbuggyQSA","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","booleans","pseudos","rwhitespace","rcomma","rleadingCombinator","rdescend","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rquickExpr","rsibling","runescape","funescape","escape","nonHex","high","unloadHandler","setDocument","inDisabledFieldset","addCombinator","dir","childNodes","els","seed","nid","newSelector","newContext","exec","getElementsByTagName","getElementsByClassName","testContext","scope","tokenize","toSelector","qsaError","cacheLength","shift","markFunction","assert","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","subWindow","webkitMatchesSelector","msMatchesSelector","defaultView","getElementsByName","disconnectedMatch","cssHas","attrId","getAttributeNode","compare","sortDetached","expr","matchesSelector","attrHandle","uniqueSort","duplicates","sortStable","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","expectedNodeName","operator","what","_argument","simple","ofType","_context","xml","outerCache","nodeIndex","useCache","lastChild","pseudo","setFilters","matched","not","matcher","compile","unmatched","lang","elemLang","hash","root","safeActiveElement","hasFocus","tabIndex","selectedIndex","empty","nextSibling","_matchIndexes","lt","gt","nth","radio","checkbox","file","submit","parseOnly","tokens","soFar","preFilters","cached","combinator","base","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","matcherOut","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","filters","unique","getText","isXML","selectors","until","siblings","rneedsContext","rsingleTag","winnow","qualifier","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","sibling","cur","targets","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","rnothtmlwhite","Identity","Thrower","ex","adoptValue","noValue","promise","fail","Callbacks","flag","createOptions","firing","memory","fired","locked","list","queue","firingIndex","fire","stopOnFalse","fireWith","Deferred","tuples","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","mightThrow","notifyWith","resolveWith","exceptionHook","rejectWith","getErrorHook","getStackHook","stateString","singleValue","remaining","resolveContexts","resolveValues","primary","updateFunc","rerrorNames","asyncError","readyException","readyList","completed","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","rmsPrefix","rdashAlpha","fcamelCase","_all","camelCase","acceptData","owner","Data","uid","defineProperty","configurable","hasData","dataPriv","dataUser","rbrace","rmultiDash","getData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","tmp","defer","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","rcheckableType","rtagName","rscriptType","createDocumentFragment","checkClone","cloneNode","noCloneChecked","defaultValue","wrapMap","thead","tr","td","_default","getAll","setGlobalEval","refElements","tbody","tfoot","colgroup","caption","th","optgroup","rhtml","buildFragment","scripts","selection","ignored","wrap","attached","nodes","htmlPrefilter","createTextNode","rtypenamespace","returnTrue","returnFalse","types","origFn","leverageNative","isSetup","saved","isTrigger","isImmediatePropagationStopped","handleObjIn","eventHandle","handlers","namespaces","origType","elemData","create","triggered","dispatch","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","enumerable","originalEvent","writable","noBubble","beforeunload","returnValue","defaultPrevented","timeStamp","isSimulated","altKey","changedTouches","eventPhase","pageX","pageY","charCode","buttons","clientX","offsetX","offsetY","pointerId","pointerType","screenX","screenY","toElement","focusMappedHandler","documentMode","simulate","attaches","dataHolder","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","prepend","insertBefore","replaceWith","replaceChild","prependTo","replaceAll","insert","rnumnonpx","rcustomProp","getStyles","opener","swap","rboxStyle","curCSS","minWidth","maxWidth","isCustomProp","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","parseFloat","reliableTrDimensionsVal","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","reliableTrDimensions","table","trChild","trStyle","borderTopWidth","borderBottomWidth","cssPrefixes","emptyStyle","vendorProps","finalPropName","cssProps","capName","vendorPropName","rdisplayswap","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","boxModelAdjustment","box","isBorderBox","styles","computedVal","extra","marginDelta","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","animationIterationCount","aspectRatio","borderImageSlice","columnCount","flexGrow","flexShrink","gridArea","gridColumn","gridColumnEnd","gridColumnStart","gridRow","gridRowEnd","gridRowStart","lineHeight","order","orphans","widows","zIndex","zoom","fillOpacity","floodOpacity","stopOpacity","strokeMiterlimit","strokeOpacity","origName","setProperty","isFinite","scrollboxSizeBuggy","margin","border","suffix","expand","expanded","parts","propHooks","run","percent","eased","step","fx","linear","swing","cos","PI","fxNow","rfxtypes","rrun","schedule","hidden","interval","tick","createFxNow","genFx","includeWidth","createTween","Animation","tweeners","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","gotoEnd","propFilter","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","checkOn","optSelected","radioValue","boolHook","nType","attrHooks","attrNames","getter","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","curValue","finalValue","stateVal","isValidValue","rreturn","valHooks","optionSet","rquery","parseXML","parserErrorElem","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","triggerHandler","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","lastModified","etag","isLocal","protocol","processData","async","accepts","json","responseFields","converters","ajaxSetup","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","overrideMimeType","mimeType","abort","finalText","crossDomain","host","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","XMLHttpRequest","xhrSuccessStatus","xhrSupported","cors","errorCallback","open","xhrFields","onabort","ontimeout","onreadystatechange","responseType","binary","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","animated","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","Height","Width","defaultExtra","funcName","unbind","delegate","undelegate","fnOver","fnOut","rtrim","holdReady","hold","parseJSON","isNumeric","_jQuery","_$","Vnode","require","subscriptions","pending","buildPathname","parsePathname","compileTemplate","censor","sentinel","decodeURIComponentSave","decodeURIComponent","$window","mountRedraw","fallbackRoute","currentPath","lastUpdate","callAsync","setImmediate","scheduled","currentResolver","RouterRoot","fireAsync","resolveRoute","SKIP","pathname","setPath","loop","matchedRoute","localComp","comp","pushState","SyntaxError","defaultData","ReferenceError","child","handleEvent","hyperscript","Fragment","parseQueryString","PromisePolyfill","queryIndex","hashIndex","queryEnd","pathEnd","resolved","variadic","newQueryIndex","newHashIndex","newQueryEnd","newPathEnd","querystring","templateData","templateKeys","executor","resolvers","rejectors","resolveCurrent","rejectCurrent","_instance","shouldAbsorb","execute","retry","executeOnce","runs","onRejection","resolveNext","rejectNext","reason","consume","race","destructure","counters","entry","levels","level","nextLevel","isNumber","desc","getOwnPropertyDescriptor","hyperscriptVnode","normalizeChildren","selectorParser","selectorCache","newAttrs","execSelector","attrValue","compileSelector","currentRedraw","$doc","nameSpace","svg","math","getNameSpace","xmlns","checkState","callHook","createNodes","vnodes","ns","createNode","initLifecycle","insertNode","createText","createHTML","domSize","createFragment","createElementNS","isFileInput","setAttr","maybeSetContentEditable","normalized","setLateSelectAttrs","$$reentrantLock$$","normalize","initComponent","createComponent","possibleParents","updateNodes","removeNodes","isOldKeyed","isKeyed","oldStart","oe","ve","topSibling","oldEnd","updateNode","getNextSibling","moveNodes","lisIndices","originalNextSibling","vnodesLength","oldIndices","getKeyMap","oldIndex","il","lisTemp","makeLisIndices","commonLength","removeNode","oldTag","force","shouldNotUpdate","updateLifecycle","updateText","removeHTML","updateHTML","updateFragment","updateAttrs","updateElement","updateComponent","frag","moveChildToFrag","contenteditable","stateResult","attrsResult","mask","reallyRemove","isLifecycleMethod","isFormAttribute","updateEvent","setAttributeNS","updateStyle","hasPropertyKey","nsLastIndex","currentDOM","uppercaseRegex","capital","normalizeKey","removeProperty","EventDict","ev","prevRedraw","prevDOM","oncompletion","callbackCount","PromiseProxy","makeRequest","hasHeader","__proto__","replacedAbort","assumeJSON","FormData","URLSearchParams","aborted","isTimeout","withCredentials","completeErrorResponse","callbackKey","Stream","lift","streams","scan","combine","scanMerge","changed","warnedHalt","dependentStreams","dependentFns","_changing","_state","_parents","_map","ignoreInitial","s1","s2","_unregisterChild","childIndex","mappers","endStream","mapper","log","magic","extras","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","RangeError","mapDomain","domain","encoded","ucs2decode","counter","ucs2encode","codePoints","fromCodePoint","digitToBasic","digit","adapt","numPoints","firstTime","baseMinusTMin","decode","inputLength","bias","basic","oldi","codePoint","baseMinusT","out","encode","basicLength","handledCPCount","handledCPCountPlusOne","qMinusT","toUnicode","toASCII","candidateSelectors","candidateSelector","NoElement","Element","getCandidates","includeContainer","candidates","getCandidatesIteratively","elementsToCheck","assigned","assignedElements","nestedCandidates","getShadowRoot","validShadowRoot","shadowRootFilter","_nestedCandidates","getTabindex","isScope","isContentEditable","sortOrderedTabbables","documentOrder","isInput","isZeroArea","_node$getBoundingClie","isNodeMatchingSelectorFocusable","isHiddenInput","displayCheck","nodeUnderDetails","parentElement","nodeRootHost","nodeIsAttached","originalNode","rootNode","assignedSlot","isDetailsWithSummary","isDisabledFromFieldset","isNodeMatchingSelectorTabbable","isRadio","radioSet","radioScope","form","queryRadios","CSS","getCheckedRadio","isTabbableRadio","isNonTabbableRadio","isValidShadowRootTabbable","shadowHostNode","sortByOrder","regularTabbables","orderedTabbables","candidateTabindex","sortable","focusableCandidateSelector","isBrowser","isFirefox","mozInnerScreenX","currentStyle","whiteSpace","wordWrap","coordinates","offsetLeft","backgroundColor","___EXPOSE_LOADER_IMPORT___","___EXPOSE_LOADER_GLOBAL_THIS___","__esModule","toPropertyKey","_defineProperties","descriptor","protoProps","staticProps","_getPrototypeOf","setPrototypeOf","subClass","superClass","_typeof","assertThisInitialized","_setPrototypeOf","arrayWithHoles","iterableToArrayLimit","unsupportedIterableToArray","nonIterableRest","toPrimitive","arrayLikeToArray","minLen","_m$route$get","_attrs$href","Separator","TextEditor","_loaders","controlItems","toolbarItems","_load","onbuild","buildEditor","newDisabled","loader","buildEditorParams","submitLabel","preview","Drawer","appElement","drawerAvailableMediaQuery","_this$$backdrop","_this$$backdrop$remov","removeListener","resizeHandler","$drawer","$backdrop","addListener","ScrollListener","ticking","anchorScroll","relativeScroll","subclassOf","B","AffixedSidebar","boundOnresize","onresize","resize","$sidebar","$header","$footer","$affixElement","AvatarEditor","isDraggedOver","quickUpload","ondragover","enableDragover","ondragenter","ondragleave","disableDragover","ondragend","ondrop","dropUpload","openPicker","upload","dataTransfer","files","failure","Comment","isEditing","headerItems","cardVisible","UserCard","ComposerPostPreview","revealContent","_this$params","refreshContent","listenForCard","EditPostComposer","editing","toggleContent","PostEdited","showCard","hideCard","surround","updatePreview","s9e","TextFormatter","updateInterval","clearInterval","DiscussionHero","DiscussionList","hotEdge","DiscussionListPane","enoughSpace","$list","discussionListPaneScrollTop","listTop","listBottom","renamed","descriptionData","oldTitle","EventPost","descriptionKey","locales","cookie","LogInButtons","HeaderList","emptyText","footer","loadMore","$content","$scrollParent","inPanel","boundScrollHandler","scrollHandler","scrollParent","_this$attrs$loadMore","HeaderListGroup","NotificationType","NotificationComponent","notificationComponents","editedInfo","TerminalPost","profileItems","controlsItems","online","DiscussionControls","section","userControls","replyAction","moderationControls","renameAction","destructiveControls","restoreAction","deleteAction","hideAction","forceRefresh","delete","pinnedKey","hideTimeout","editAction","UserControls","showDeletionAlert","slidable","$underneathLeft","$underneathRight","startX","startY","couldBeSliding","isSliding","animatePos","newPos","newX","newY","$underneath","side","throttle","noTrailing","debounceMode","timeoutID","cancelled","lastExec","clearExistingTimeout","arguments_","elapsed","cancel","debounce","atBegin","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","definition","chunkId","promises","needAttach","nc","onScriptComplete","doneFns","toStringTag","scriptUrl","importScripts","currentScript","compat","originalLoadChunk","loadChunk","installedChunks","installedChunkData","errorType","realSrc","webpackJsonpCallback","parentChunkLoadingFunction","chunkIds","moreModules","runtime","chunkLoadingGlobal","multi","selectedOptions","_this$moduleExports$g","_this$onLoads$get","moduleExports","onLoads","_this$moduleExports$g2","_this$moduleExports$g3","_this$onLoads$get2","_this$onLoads$get3","_this$onLoads$get4","_this$moduleExports$g4","_this$moduleExports$g5","urlPath","_this$chunks$get","chunks","modules","chunkModules","getChunk","_this$chunks$get2","chunkUrl","chunk","_revisions","assetsPath","revision","asyncModuleImport","wr","moduleExport","ctrl","patchMithril","defaultMithril","modifiedMithril","tooltipGen","caller","PostTypes","postComponents","Routes","helper","helpers","modelType","_this$gambits","_app$search$gambits$g","colorSchemes","Admin","setting","customSetting","permission","permissions","customPage","generalIndexItems","generalIndexes","registry","registerSetting","registerPermission","registerPage","generalIndex","Parent","Mixed","mixins","blockPrefix","blockSuffix","multiline","replaceNext","prefixSpace","scanFor","surroundWithNewlines","orderedList","unorderedList","trimFirst","isMultipleLines","newlinesToSurroundSelectedText","beforeSelection","afterSelection","breaksBefore","breaksAfter","newlinesBeforeSelection","newlinesAfterSelection","newlinesToAppend","newlinesToPrepend","undoOrderedListStyle","lines","orderedListRegex","shouldUndoOrderedList","line","processed","undoUnorderedListStyle","shouldUndoUnorderedList","unorderedListPrefix","makePrefix","styleArgs","noInitialSelection","lineLength","expandSelectionToLine","selectedText","undoResult","undoResultOpositeList","pristineText","clearExistingListStyle","prefixedLines","totalPrefixLength","previousValue","_currentValue","currentIndex","totalPrefixLengthOpositeList","listStyle","prefixToUse","suffixToUse","multilineStyle","originalSelectionEnd","wordSelectionStart","breakpoint","wordSelectionEnd","expandedSelectionStart","expandedSelectionEnd","beginsWithPrefix","endsWithSuffix","expandSelectedText","hasReplaceNext","ref","replacementText","whitespaceEdges","leadingWhitespace","trailingWhitespace","blockStyle","units","decimal","nanoid","byte","DetailedDropdownItem","Select","wrapperAttrs","wrapperClassName","wrapperClass","domAttrs","ColorPreviewInput","otherAttrs","onblur","_attrs$onchange","_attrs$onchange2","Pill","deletable","ondelete","UserSelectionModal","maxItems","_this$results$this$se","excluded","_this$attrs$excluded","onfocus","focused","meetsRequirements","userListItem","readOnly","TextEditorButton","originalView","tooltipText","AutocompleteDropdown","shouldShowSuggestions","updateMaxHeight","_this$element$querySe","maxHeight","setIndex","getCurrentNumericIndex","selectableItems","inputElement","selectSuggestion","updateMaxHeightHandler","$item","scrollToItem","$dropdown","fixedIndex","dropdownScroll","dropdownTop","dropdownBottom","itemTop","itemBottom","gambitsAutocomplete","UploadImageButton","resourceUrl","routePath","MultiSelect","unselect","BooleanSettingTypes","SelectSettingTypes","RadioSettingTypes","TextareaSettingTypes","FormGroup","customFieldComponents","help","getSetting","inputId","helpTextId","generateElementId","settingElement","multiple","textArea","textAreaSetting","textAreaAttrs","third","originalOnCreate","LogInButton","PostPreview"],"sourceRoot":""} \ No newline at end of file