import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/auth/LoginPanel.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/auth/WorkspaceInviteHeader.vue"; import { default as __nuxt_component_1 } from "/_nuxt/components/auth/third-party/LoginBlock.vue"; import { FormButton as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { default as __nuxt_component_3 } from "/_nuxt/components/auth/LoginWithEmailBlock.vue"; import { default as __nuxt_component_4 } from "/_nuxt/node_modules/nuxt/dist/app/components/nuxt-link.js?v=e4f18c29"; /* Injection by vite-plugin-vue-inspector Start */ import { createElementVNode as __createElementVNode,createElementBlock as __createElementBlock,createBlock as __createBlock,createVNode as __createVNode } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29" function _interopVNode(vnode) { if (vnode && vnode.props && 'data-v-inspector' in vnode.props) { const data = vnode.props['data-v-inspector'] delete vnode.props['data-v-inspector'] Object.defineProperty(vnode.props, '__v_inspector', { value: data, enumerable: false }) } return vnode } function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) } function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } function _createBlock(...args) { return _interopVNode(__createBlock(...args)) } function _createVNode(...args) { return _interopVNode(__createVNode(...args)) } /* Injection by vite-plugin-vue-inspector End */ import { defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { useQuery } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29"; import { AuthStrategy } from "/_nuxt/lib/auth/helpers/strategies.ts"; import { useLoginOrRegisterUtils, useAuthManager } from "/_nuxt/lib/auth/composables/auth.ts"; import { LayoutDialog } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { registerRoute, ssoLoginRoute } from "/_nuxt/lib/common/helpers/route.ts"; import { authLoginPanelQuery, authLoginPanelWorkspaceInviteQuery } from "/_nuxt/lib/auth/graphql/queries.ts"; import { useActiveUser, useIsWorkspacesEnabled, useIsWorkspacesSsoEnabled } from "/_nuxt/composables/globals.ts"; import { useRouter } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29"; import { computed } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "AuthLoginPanel", props: { dialogMode: { type: Boolean, required: false, default: false }, title: { type: String, required: false, default: "Speckle login" }, subtitle: { type: String, required: false } }, setup(__props, { expose: __expose }) { __expose(); const props = __props; const { appId, challenge } = useLoginOrRegisterUtils(); const { isLoggedIn } = useActiveUser(); const { inviteToken } = useAuthManager(); const router = useRouter(); const isWorkspacesEnabled = useIsWorkspacesEnabled(); const isSsoEnabled = useIsWorkspacesSsoEnabled(); const { result } = useQuery(authLoginPanelQuery); const { result: workspaceInviteResult } = useQuery( authLoginPanelWorkspaceInviteQuery, () => ({ token: inviteToken.value }), () => ({ enabled: isWorkspacesEnabled.value }) ); const finalRegisterRoute = computed(() => { const result2 = router.resolve({ path: registerRoute, query: inviteToken.value ? { token: inviteToken.value } : {} }); return result2.fullPath; }); const concreteComponent = computed(() => { return props.dialogMode ? LayoutDialog : "div"; }); const workspaceInvite = computed(() => workspaceInviteResult.value?.workspaceInvite); const forcedInviteEmail = computed(() => workspaceInvite.value?.email); const serverInfo = computed(() => result.value?.serverInfo); const hasLocalStrategy = computed( () => (serverInfo.value?.authStrategies || []).some((s) => s.id === AuthStrategy.Local) ); const hasThirdPartyStrategies = computed( () => serverInfo.value?.authStrategies.some((s) => s.id !== AuthStrategy.Local) ); const __returned__ = { props, appId, challenge, isLoggedIn, inviteToken, router, isWorkspacesEnabled, isSsoEnabled, result, workspaceInviteResult, finalRegisterRoute, concreteComponent, workspaceInvite, forcedInviteEmail, serverInfo, hasLocalStrategy, hasThirdPartyStrategies, get ssoLoginRoute() { return ssoLoginRoute; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { toDisplayString as _toDisplayString, openBlock as _openBlock, createCommentVNode as _createCommentVNode, resolveComponent as _resolveComponent, createTextVNode as _createTextVNode, withCtx as _withCtx, resolveDynamicComponent as _resolveDynamicComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { class: "flex flex-col gap-4", "data-v-inspector": "components/auth/LoginPanel.vue:8:5" }; const _hoisted_2 = { key: 0, class: "flex flex-col items-center gap-y-2 pb-4", "data-v-inspector": "components/auth/LoginPanel.vue:9:7" }; const _hoisted_3 = { class: "text-heading-xl text-center inline-block", "data-v-inspector": "components/auth/LoginPanel.vue:10:9" }; const _hoisted_4 = { class: "text-body-sm text-center text-foreground-2", "data-v-inspector": "components/auth/LoginPanel.vue:13:9" }; const _hoisted_5 = { "data-v-inspector": "components/auth/LoginPanel.vue:36:7" }; const _hoisted_6 = { key: 1, class: "text-center text-body-xs text-foreground-3 mt-2 select-none", "data-v-inspector": "components/auth/LoginPanel.vue:42:9" }; const _hoisted_7 = { key: 1, "data-v-inspector": "components/auth/LoginPanel.vue:52:3" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_AuthWorkspaceInviteHeader = __nuxt_component_0; const _component_AuthThirdPartyLoginBlock = __nuxt_component_1; const _component_FormButton = __nuxt_component_2; const _component_AuthLoginWithEmailBlock = __nuxt_component_3; const _component_NuxtLink = __nuxt_component_4; return !$setup.isLoggedIn ? (_openBlock(), _createBlock(_resolveDynamicComponent($setup.concreteComponent), { key: 0, "no-shadow": "", class: "mx-auto w-full", "data-v-inspector": "components/auth/LoginPanel.vue:2:3" }, { default: _withCtx(() => [ _createElementVNode("div", _hoisted_1, [ !$setup.workspaceInvite ? (_openBlock(), _createElementBlock("div", _hoisted_2, [ _createElementVNode( "h1", _hoisted_3, _toDisplayString($props.title), 1 /* TEXT */ ), _createElementVNode( "h2", _hoisted_4, _toDisplayString($props.subtitle), 1 /* TEXT */ ) ])) : (_openBlock(), _createBlock(_component_AuthWorkspaceInviteHeader, { key: 1, invite: $setup.workspaceInvite, "data-v-inspector": "components/auth/LoginPanel.vue:17:7" }, null, 8, ["invite"])), $setup.hasThirdPartyStrategies && $setup.serverInfo ? (_openBlock(), _createBlock(_component_AuthThirdPartyLoginBlock, { key: 2, "server-info": $setup.serverInfo, challenge: $setup.challenge, "app-id": $setup.appId, "newsletter-consent": false, "data-v-inspector": "components/auth/LoginPanel.vue:18:7" }, null, 8, ["server-info", "challenge", "app-id"])) : _createCommentVNode("v-if", true), $setup.isSsoEnabled ? (_openBlock(), _createBlock(_component_FormButton, { key: 3, color: "outline", "full-width": "", size: "lg", to: $setup.ssoLoginRoute, "data-v-inspector": "components/auth/LoginPanel.vue:25:7" }, { default: _withCtx(() => [..._cache[0] || (_cache[0] = [ _createTextVNode( " Continue with SSO ", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ }, 8, ["to"])) : _createCommentVNode("v-if", true), _cache[3] || (_cache[3] = _createElementVNode( "div", { class: "h-px w-full bg-outline-3 mt-2 shrink-0", "data-v-inspector": "components/auth/LoginPanel.vue:35:7" }, null, -1 /* CACHED */ )), _createElementVNode("div", _hoisted_5, [ $setup.hasLocalStrategy ? (_openBlock(), _createBlock(_component_AuthLoginWithEmailBlock, { key: 0, challenge: $setup.challenge, "workspace-invite": $setup.workspaceInvite || void 0, "data-v-inspector": "components/auth/LoginPanel.vue:37:9" }, null, 8, ["challenge", "workspace-invite"])) : _createCommentVNode("v-if", true), !$setup.forcedInviteEmail ? (_openBlock(), _createElementBlock("div", _hoisted_6, [ _cache[2] || (_cache[2] = _createTextVNode( " Don't have an account? ", -1 /* CACHED */ )), _createVNode(_component_NuxtLink, { class: "text-foreground", to: $setup.finalRegisterRoute, "data-v-inspector": "components/auth/LoginPanel.vue:47:11" }, { default: _withCtx(() => [..._cache[1] || (_cache[1] = [ _createTextVNode( "Sign up", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ }, 8, ["to"]) ])) : _createCommentVNode("v-if", true) ]) ]) ]), _: 1 /* STABLE */ })) : (_openBlock(), _createElementBlock("div", _hoisted_7)); } _sfc_main.__hmrId = "0fd6f685"; typeof __VUE_HMR_RUNTIME__ !== "undefined" && __VUE_HMR_RUNTIME__.createRecord(_sfc_main.__hmrId, _sfc_main); import.meta.hot.on("file-changed", ({ file }) => { __VUE_HMR_RUNTIME__.CHANGED_FILE = file; }); import.meta.hot.accept((mod) => { if (!mod) return; const { default: updated, _rerender_only } = mod; if (_rerender_only) { __VUE_HMR_RUNTIME__.rerender(updated.__hmrId, updated.render); } else { __VUE_HMR_RUNTIME__.reload(updated.__hmrId, updated); } }); import _export_sfc from "/_nuxt/@id/__x00__plugin-vue:export-helper"; export default /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "D:/speckle-server/packages/frontend-2/components/auth/LoginPanel.vue"]]); //# sourceMappingURL=data:application/json;base64,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QUE7UUFHdkMscUNBRFIsYUFRYTtBQUFBO1VBTlgsT0FBTTtBQUFBLFVBQ047QUFBQSxVQUNBLE1BQUs7QUFBQSxVQUNKLElBQUk7QUFBQSxVQUFlLG9CQUFpQjtBQUFBOzRCQUN0QyxNQUVEO0FBQUE7Y0FGQztBQUFBLGNBRUQ7QUFBQTtBQUFBO0FBQUE7Ozs7a0NBRUE7QUFBQSxVQUE2RztBQUFBO0FBQUEsWUFBeEcsT0FBTTtBQUFBLFlBQXlDLG9CQUFpQjtBQUFBOzs7OztRQUNyRSxvQkFhTSxPQWJOLFlBYU07QUFBQSxVQVhJLHlDQURSLGFBSUU7QUFBQTtZQUZDLFdBQVc7QUFBQSxZQUNYLG9CQUFrQiwwQkFBbUI7QUFBQSxZQUFXLG9CQUFpQjtBQUFBO1dBRzNELDBDQURULG9CQU1NLE9BTk4sWUFNTTtBQUFBO2NBSEw7QUFBQSxjQUVDO0FBQUE7QUFBQTtBQUFBLHlCQUFxSTtBQUFBLGNBQTNILE9BQU07QUFBQSxjQUFtQixJQUFJO0FBQUEsY0FBb0Isb0JBQWlCO0FBQUE7Z0NBQXVDLE1BQU87QUFBQTtrQkFBUDtBQUFBLGtCQUFPO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7O3VCQUtsSSxvQkFBcUUsT0FBckUsVUFBcUUiLCJuYW1lcyI6WyJyZXN1bHQiXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiTG9naW5QYW5lbC52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gIDxDb21wb25lbnRcclxuICAgIDppcz1cImNvbmNyZXRlQ29tcG9uZW50XCJcclxuICAgIHYtaWY9XCIhaXNMb2dnZWRJblwiXHJcbiAgICBuby1zaGFkb3dcclxuICAgIGNsYXNzPVwibXgtYXV0byB3LWZ1bGxcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlOjI6M1wiXHJcbiAgPlxyXG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlOjg6NVwiPlxyXG4gICAgICA8ZGl2IHYtaWY9XCIhd29ya3NwYWNlSW52aXRlXCIgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAteS0yIHBiLTRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlOjk6N1wiPlxyXG4gICAgICAgIDxoMSBjbGFzcz1cInRleHQtaGVhZGluZy14bCB0ZXh0LWNlbnRlciBpbmxpbmUtYmxvY2tcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlOjEwOjlcIj5cclxuICAgICAgICAgIHt7IHRpdGxlIH19XHJcbiAgICAgICAgPC9oMT5cclxuICAgICAgICA8aDIgY2xhc3M9XCJ0ZXh0LWJvZHktc20gdGV4dC1jZW50ZXIgdGV4dC1mb3JlZ3JvdW5kLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlOjEzOjlcIj5cclxuICAgICAgICAgIHt7IHN1YnRpdGxlIH19XHJcbiAgICAgICAgPC9oMj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxBdXRoV29ya3NwYWNlSW52aXRlSGVhZGVyIHYtZWxzZSA6aW52aXRlPVwid29ya3NwYWNlSW52aXRlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0aC9Mb2dpblBhbmVsLnZ1ZToxNzo3XCIgLz5cclxuICAgICAgPEF1dGhUaGlyZFBhcnR5TG9naW5CbG9ja1xyXG4gICAgICAgIHYtaWY9XCJoYXNUaGlyZFBhcnR5U3RyYXRlZ2llcyAmJiBzZXJ2ZXJJbmZvXCJcclxuICAgICAgICA6c2VydmVyLWluZm89XCJzZXJ2ZXJJbmZvXCJcclxuICAgICAgICA6Y2hhbGxlbmdlPVwiY2hhbGxlbmdlXCJcclxuICAgICAgICA6YXBwLWlkPVwiYXBwSWRcIlxyXG4gICAgICAgIDpuZXdzbGV0dGVyLWNvbnNlbnQ9XCJmYWxzZVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dGgvTG9naW5QYW5lbC52dWU6MTg6N1wiXHJcbiAgICAgIC8+XHJcbiAgICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgICAgdi1pZj1cImlzU3NvRW5hYmxlZFwiXHJcbiAgICAgICAgY29sb3I9XCJvdXRsaW5lXCJcclxuICAgICAgICBmdWxsLXdpZHRoXHJcbiAgICAgICAgc2l6ZT1cImxnXCJcclxuICAgICAgICA6dG89XCJzc29Mb2dpblJvdXRlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0aC9Mb2dpblBhbmVsLnZ1ZToyNTo3XCJcclxuICAgICAgPlxyXG4gICAgICAgIENvbnRpbnVlIHdpdGggU1NPXHJcbiAgICAgIDwvRm9ybUJ1dHRvbj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoLXB4IHctZnVsbCBiZy1vdXRsaW5lLTMgbXQtMiBzaHJpbmstMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dGgvTG9naW5QYW5lbC52dWU6MzU6N1wiIC8+XHJcbiAgICAgIDxkaXYgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0aC9Mb2dpblBhbmVsLnZ1ZTozNjo3XCI+XHJcbiAgICAgICAgPEF1dGhMb2dpbldpdGhFbWFpbEJsb2NrXHJcbiAgICAgICAgICB2LWlmPVwiaGFzTG9jYWxTdHJhdGVneVwiXHJcbiAgICAgICAgICA6Y2hhbGxlbmdlPVwiY2hhbGxlbmdlXCJcclxuICAgICAgICAgIDp3b3Jrc3BhY2UtaW52aXRlPVwid29ya3NwYWNlSW52aXRlIHx8IHVuZGVmaW5lZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dGgvTG9naW5QYW5lbC52dWU6Mzc6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICB2LWlmPVwiIWZvcmNlZEludml0ZUVtYWlsXCJcclxuICAgICAgICAgIGNsYXNzPVwidGV4dC1jZW50ZXIgdGV4dC1ib2R5LXhzIHRleHQtZm9yZWdyb3VuZC0zIG10LTIgc2VsZWN0LW5vbmVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlOjQyOjlcIlxyXG4gICAgICAgID5cclxuICAgICAgICAgIERvbid0IGhhdmUgYW4gYWNjb3VudD9cclxuICAgICAgICAgIDxOdXh0TGluayBjbGFzcz1cInRleHQtZm9yZWdyb3VuZFwiIDp0bz1cImZpbmFsUmVnaXN0ZXJSb3V0ZVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dGgvTG9naW5QYW5lbC52dWU6NDc6MTFcIj5TaWduIHVwPC9OdXh0TGluaz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L0NvbXBvbmVudD5cclxuICA8ZGl2IHYtZWxzZSBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlOjUyOjNcIiAvPlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyB1c2VRdWVyeSB9IGZyb20gJ0B2dWUvYXBvbGxvLWNvbXBvc2FibGUnXHJcbmltcG9ydCB7IEF1dGhTdHJhdGVneSB9IGZyb20gJ35+L2xpYi9hdXRoL2hlbHBlcnMvc3RyYXRlZ2llcydcclxuaW1wb3J0IHsgdXNlTG9naW5PclJlZ2lzdGVyVXRpbHMsIHVzZUF1dGhNYW5hZ2VyIH0gZnJvbSAnfn4vbGliL2F1dGgvY29tcG9zYWJsZXMvYXV0aCdcclxuaW1wb3J0IHsgTGF5b3V0RGlhbG9nIH0gZnJvbSAnQHNwZWNrbGUvdWktY29tcG9uZW50cydcclxuaW1wb3J0IHsgcmVnaXN0ZXJSb3V0ZSwgc3NvTG9naW5Sb3V0ZSB9IGZyb20gJ35+L2xpYi9jb21tb24vaGVscGVycy9yb3V0ZSdcclxuaW1wb3J0IHtcclxuICBhdXRoTG9naW5QYW5lbFF1ZXJ5LFxyXG4gIGF1dGhMb2dpblBhbmVsV29ya3NwYWNlSW52aXRlUXVlcnlcclxufSBmcm9tICd+L2xpYi9hdXRoL2dyYXBocWwvcXVlcmllcydcclxuXHJcbmNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKFxyXG4gIGRlZmluZVByb3BzPHtcclxuICAgIGRpYWxvZ01vZGU/OiBib29sZWFuXHJcbiAgICB0aXRsZT86IHN0cmluZ1xyXG4gICAgc3VidGl0bGU/OiBzdHJpbmdcclxuICB9PigpLFxyXG4gIHtcclxuICAgIGRpYWxvZ01vZGU6IGZhbHNlLFxyXG4gICAgdGl0bGU6ICdTcGVja2xlIGxvZ2luJ1xyXG4gIH1cclxuKVxyXG5cclxuY29uc3QgeyBhcHBJZCwgY2hhbGxlbmdlIH0gPSB1c2VMb2dpbk9yUmVnaXN0ZXJVdGlscygpXHJcbmNvbnN0IHsgaXNMb2dnZWRJbiB9ID0gdXNlQWN0aXZlVXNlcigpXHJcbmNvbnN0IHsgaW52aXRlVG9rZW4gfSA9IHVzZUF1dGhNYW5hZ2VyKClcclxuY29uc3Qgcm91dGVyID0gdXNlUm91dGVyKClcclxuY29uc3QgaXNXb3Jrc3BhY2VzRW5hYmxlZCA9IHVzZUlzV29ya3NwYWNlc0VuYWJsZWQoKVxyXG5jb25zdCBpc1Nzb0VuYWJsZWQgPSB1c2VJc1dvcmtzcGFjZXNTc29FbmFibGVkKClcclxuXHJcbmNvbnN0IHsgcmVzdWx0IH0gPSB1c2VRdWVyeShhdXRoTG9naW5QYW5lbFF1ZXJ5KVxyXG5cclxuY29uc3QgeyByZXN1bHQ6IHdvcmtzcGFjZUludml0ZVJlc3VsdCB9ID0gdXNlUXVlcnkoXHJcbiAgYXV0aExvZ2luUGFuZWxXb3Jrc3BhY2VJbnZpdGVRdWVyeSxcclxuICAoKSA9PiAoe1xyXG4gICAgdG9rZW46IGludml0ZVRva2VuLnZhbHVlXHJcbiAgfSksXHJcbiAgKCkgPT4gKHtcclxuICAgIGVuYWJsZWQ6IGlzV29ya3NwYWNlc0VuYWJsZWQudmFsdWVcclxuICB9KVxyXG4pXHJcblxyXG5jb25zdCBmaW5hbFJlZ2lzdGVyUm91dGUgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgcmVzdWx0ID0gcm91dGVyLnJlc29sdmUoe1xyXG4gICAgcGF0aDogcmVnaXN0ZXJSb3V0ZSxcclxuICAgIHF1ZXJ5OiBpbnZpdGVUb2tlbi52YWx1ZSA/IHsgdG9rZW46IGludml0ZVRva2VuLnZhbHVlIH0gOiB7fVxyXG4gIH0pXHJcbiAgcmV0dXJuIHJlc3VsdC5mdWxsUGF0aFxyXG59KVxyXG5cclxuY29uc3QgY29uY3JldGVDb21wb25lbnQgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgcmV0dXJuIHByb3BzLmRpYWxvZ01vZGUgPyBMYXlvdXREaWFsb2cgOiAnZGl2J1xyXG59KVxyXG5cclxuY29uc3Qgd29ya3NwYWNlSW52aXRlID0gY29tcHV0ZWQoKCkgPT4gd29ya3NwYWNlSW52aXRlUmVzdWx0LnZhbHVlPy53b3Jrc3BhY2VJbnZpdGUpXHJcbmNvbnN0IGZvcmNlZEludml0ZUVtYWlsID0gY29tcHV0ZWQoKCkgPT4gd29ya3NwYWNlSW52aXRlLnZhbHVlPy5lbWFpbClcclxuXHJcbmNvbnN0IHNlcnZlckluZm8gPSBjb21wdXRlZCgoKSA9PiByZXN1bHQudmFsdWU/LnNlcnZlckluZm8pXHJcbmNvbnN0IGhhc0xvY2FsU3RyYXRlZ3kgPSBjb21wdXRlZCgoKSA9PlxyXG4gIChzZXJ2ZXJJbmZvLnZhbHVlPy5hdXRoU3RyYXRlZ2llcyB8fCBbXSkuc29tZSgocykgPT4gcy5pZCA9PT0gQXV0aFN0cmF0ZWd5LkxvY2FsKVxyXG4pXHJcblxyXG5jb25zdCBoYXNUaGlyZFBhcnR5U3RyYXRlZ2llcyA9IGNvbXB1dGVkKCgpID0+XHJcbiAgc2VydmVySW5mby52YWx1ZT8uYXV0aFN0cmF0ZWdpZXMuc29tZSgocykgPT4gcy5pZCAhPT0gQXV0aFN0cmF0ZWd5LkxvY2FsKVxyXG4pXHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy9hdXRoL0xvZ2luUGFuZWwudnVlIn0=