import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/project/model-page/dialog/embed/Embed.vue");import { CommonAlert as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { FormClipboardInput as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { FormCheckbox 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/form/select/SavedView.vue"; import { default as __nuxt_component_4 } from "/_nuxt/node_modules/nuxt/dist/app/components/nuxt-link.js?v=e4f18c29"; import { LayoutDialogSection as __nuxt_component_5 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { default as __nuxt_component_6 } from "/_nuxt/components/project/model-page/dialog/embed/Iframe.vue"; import { LayoutDialog as __nuxt_component_7 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; /* Injection by vite-plugin-vue-inspector Start */ import { createElementVNode as __createElementVNode,createBlock as __createBlock,createVNode as __createVNode,createElementBlock as __createElementBlock } 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 _createBlock(...args) { return _interopVNode(__createBlock(...args)) } function _createVNode(...args) { return _interopVNode(__createVNode(...args)) } function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) } /* Injection by vite-plugin-vue-inspector End */ import { useModel as _useModel, mergeModels as _mergeModels, defineComponent as _defineComponent } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { SavedViewVisibility } from "/_nuxt/lib/common/generated/gql/graphql.ts"; import { useClipboard } from "/_nuxt/composables/browser.ts"; import { SpeckleViewer, Roles } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js"; import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts"; import { settingsWorkspaceRoutes } from "/_nuxt/lib/common/helpers/route.ts"; import { useCreateEmbedToken } from "/_nuxt/lib/projects/composables/tokenManagement.ts"; import { SupportedProjectVisibility, castToSupportedVisibility } from "/_nuxt/lib/projects/helpers/visibility.ts"; import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts"; import { useAreSavedViewsEnabled } from "/_nuxt/lib/viewer/composables/savedViews/general.ts"; import { ref, computed, watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; import { useRoute } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29"; import { useRuntimeConfig } from "/_nuxt/node_modules/nuxt/dist/app/nuxt.js?v=e4f18c29"; import { useIsWorkspacesEnabled } from "/_nuxt/composables/globals.ts"; import { useIsSmallerOrEqualThanBreakpoint } from "/_nuxt/composables/browser.ts"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "ProjectModelPageDialogEmbed", props: /* @__PURE__ */ _mergeModels({ project: { type: Object, required: true }, modelId: { type: String, required: false }, versionId: { type: String, required: false } }, { "open": { type: Boolean, ...{ required: true } }, "openModifiers": {}, "view": { type: Object, ...{ required: false } }, "viewModifiers": {} }), emits: ["update:open", "update:view"], setup(__props, { expose: __expose }) { __expose(); graphql(` fragment ProjectsModelPageEmbed_Project on Project { id visibility permissions { canCreateEmbedTokens { ...FullPermissionCheckResult } } workspace { id slug role embedOptions { hideSpeckleBranding } permissions { canEditEmbedOptions { ...FullPermissionCheckResult } } } } `); const props = __props; const isOpen = _useModel(__props, "open"); const areOptionsExpanded = ref(false); const mixpanel = useMixpanel(); const route = useRoute(); const { copy } = useClipboard(); const { public: { baseUrl } } = useRuntimeConfig(); const createEmbedToken = useCreateEmbedToken(); const areSavedViewsEnabled = useAreSavedViewsEnabled(); const isWorkspacesEnabled = useIsWorkspacesEnabled(); const { isSmallerOrEqualSm } = useIsSmallerOrEqualThanBreakpoint(); const transparentBackground = ref(false); const hideViewerControls = ref(false); const hideSelectionInfo = ref(false); const disableModelLink = ref(false); const preventScrolling = ref(false); const manuallyLoadModel = ref(false); const hideSpeckleBranding = ref(false); const embedToken = ref(null); const shouldEmbedSavedView = ref(false); const embeddedSavedView = _useModel(__props, "view"); const optionLabelClasses = computed( () => "flex items-center gap-1 cursor-pointer max-w-max" ); const isAdmin = computed(() => props.project.workspace?.role === Roles.Workspace.Admin); const routeModelId = computed(() => route.params.modelId); const parsedResources = computed( () => SpeckleViewer.ViewerRoute.parseUrlParameters(routeModelId.value) ); const multipleVersionedResources = computed(() => { return parsedResources.value.filter( (resource) => SpeckleViewer.ViewerRoute.isModelResource(resource) && resource.versionId !== void 0 ).length > 1; }); const updatedUrl = computed(() => { const url = new URL(`/projects/${encodeURIComponent(props.project.id)}`, baseUrl); url.pathname += "/models/"; if (props.modelId) { let modelPath = encodeURIComponent(props.modelId); if (props.versionId) { modelPath += `@${encodeURIComponent(props.versionId)}`; } url.pathname += modelPath; } else { url.pathname += routeModelId.value; } if (embedToken.value) { url.searchParams.set("embedToken", embedToken.value); } const embedOptions = { isEnabled: true }; embedDialogOptions.forEach((option) => { if (option.value.value) { embedOptions[option.id] = true; } }); if (hideSpeckleBranding.value && isWorkspacesEnabled.value && !workspaceHideSpeckleBrandingEnabled.value) { embedOptions["hideSpeckleBranding"] = true; } const hashFragment = encodeURIComponent(JSON.stringify(embedOptions)); url.hash = `embed=${hashFragment}`; const savedViewSettings = {}; if (shouldEmbedSavedView.value && embeddedSavedView.value) { savedViewSettings["id"] = embeddedSavedView.value.id; } if (Object.keys(savedViewSettings).length > 0) { const savedViewFragment = encodeURIComponent(JSON.stringify(savedViewSettings)); url.hash += `&savedView=${savedViewFragment}`; } return url.toString(); }); const iframeCode = computed(() => { return ``; }); const buttons = computed(() => [ { text: "Close", props: { color: "outline" }, onClick: () => { isOpen.value = false; } }, ...isPublicProject.value || !isPublicProject.value && canCreateEmbedTokens.value ? [ { text: "Copy embed code", props: {}, onClick: () => { handleEmbedCodeCopy(iframeCode.value); } } ] : [] ]); const workspaceSlug = computed(() => { return props.project.workspace?.slug; }); const canEditEmbedOptions = computed(() => { return props.project.workspace?.permissions?.canEditEmbedOptions; }); const canCreateEmbedTokens = computed(() => { return props.project.permissions?.canCreateEmbedTokens?.authorized; }); const projectVisibility = computed( () => castToSupportedVisibility(props.project.visibility) ); const isPublicProject = computed( () => projectVisibility.value === SupportedProjectVisibility.Public ); const workspaceHideSpeckleBrandingEnabled = computed(() => { if (!isWorkspacesEnabled.value) return false; return props.project.workspace?.embedOptions?.hideSpeckleBranding; }); const hideSpeckleBrandingTooltip = computed(() => { if (!isWorkspacesEnabled.value) return ""; if (workspaceHideSpeckleBrandingEnabled.value) { return "Speckle branding is disabled for all embeds in this workspace"; } return ""; }); const canGenerateEmbed = computed(() => { return isPublicProject.value || !isPublicProject.value && canCreateEmbedTokens.value; }); const cantGenerateDialogDescription = computed(() => { if (props.project.permissions?.canCreateEmbedTokens?.code === "WorkspaceNoFeatureAccess") { return `Embedding ${props.project.visibility.toLowerCase()} projects is not available on your plan. Upgrade your workspace to get access to this feature.`; } return `The visibility of this project is set to '${props.project.visibility.toLowerCase()}'. Please contact the project owner to change the visibility or generate an embed link.`; }); const handleEmbedCodeCopy = async (value) => { await copy(value, { successMessage: "Embed code copied to clipboard", failureMessage: "Failed to copy embed code to clipboard" }); }; const updateOption = (optionRef, newValue) => { optionRef.value = newValue === void 0 ? false : !!newValue; }; const embedDialogOptions = [ { id: "isTransparent", label: "Transparent background", value: transparentBackground }, { id: "hideControls", label: "Hide viewer controls", value: hideViewerControls }, { id: "hideSelectionInfo", label: "Hide the selection info panel", value: hideSelectionInfo }, { id: "disableModelLink", label: "No link back to web viewer", value: disableModelLink }, { id: "noScroll", label: "Prevent scrolling (zooming)", value: preventScrolling }, { id: "manualLoad", label: "Load model manually", value: manuallyLoadModel } ]; watch( () => props.project.workspace?.embedOptions?.hideSpeckleBranding, () => { if (isWorkspacesEnabled.value) { hideSpeckleBranding.value = props.project.workspace?.embedOptions?.hideSpeckleBranding ?? false; } }, { immediate: true } ); watch( isOpen, async (newValue) => { if (newValue) { mixpanel.track("Embed Dialog Opened", { projectId: props.project.id, visibility: projectVisibility.value }); if (canCreateEmbedTokens.value) { mixpanel.track("Embed Token Created", { projectId: props.project.id, visibility: projectVisibility.value }); const token = await createEmbedToken({ projectId: props.project.id, resourceIdString: routeModelId.value }); if (token) { embedToken.value = token; } } } }, { immediate: true } ); watch(embeddedSavedView, (newVal, oldVal) => { if (newVal) { shouldEmbedSavedView.value = true; if (!oldVal || newVal.id !== oldVal.id) { areOptionsExpanded.value = true; } } }); const __returned__ = { props, isOpen, areOptionsExpanded, mixpanel, route, copy, baseUrl, createEmbedToken, areSavedViewsEnabled, isWorkspacesEnabled, isSmallerOrEqualSm, transparentBackground, hideViewerControls, hideSelectionInfo, disableModelLink, preventScrolling, manuallyLoadModel, hideSpeckleBranding, embedToken, shouldEmbedSavedView, embeddedSavedView, optionLabelClasses, isAdmin, routeModelId, parsedResources, multipleVersionedResources, updatedUrl, iframeCode, buttons, workspaceSlug, canEditEmbedOptions, canCreateEmbedTokens, projectVisibility, isPublicProject, workspaceHideSpeckleBrandingEnabled, hideSpeckleBrandingTooltip, canGenerateEmbed, cantGenerateDialogDescription, handleEmbedCodeCopy, updateOption, embedDialogOptions, get SavedViewVisibility() { return SavedViewVisibility; }, get settingsWorkspaceRoutes() { return settingsWorkspaceRoutes; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, openBlock as _openBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, normalizeClass as _normalizeClass, renderList as _renderList, Fragment as _Fragment, resolveDirective as _resolveDirective, withDirectives as _withDirectives } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { class: "lowercase", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:32:11" }; const _hoisted_2 = { class: "flex flex-col lg:flex-row gap-8 mb-6", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:43:7" }; const _hoisted_3 = { class: "flex-1 order-1 lg:order-2", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:44:9" }; const _hoisted_4 = { class: "flex flex-col gap-1.5 sm:gap-2 text-body-xs cursor-default", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:58:13" }; const _hoisted_5 = { key: 0, class: "flex flex-col gap-1", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:59:15" }; const _hoisted_6 = ["for"]; const _hoisted_7 = { "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:93:19" }; const _hoisted_8 = { key: 1, "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:96:15" }; const _hoisted_9 = { class: "flex flex-col gap-0.5", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:109:19" }; const _hoisted_10 = { key: 0, class: "text-body-2xs text-foreground-2", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:116:21" }; const _hoisted_11 = { key: 1, class: "text-body-2xs text-foreground-2", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:133:21" }; const _hoisted_12 = { class: "lowercase", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:173:11" }; const _hoisted_13 = { "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:177:11" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_CommonAlert = __nuxt_component_0; const _component_FormClipboardInput = __nuxt_component_1; const _component_FormCheckbox = __nuxt_component_2; const _component_FormSelectSavedView = __nuxt_component_3; const _component_NuxtLink = __nuxt_component_4; const _component_LayoutDialogSection = __nuxt_component_5; const _component_ProjectModelPageDialogEmbedIframe = __nuxt_component_6; const _component_LayoutDialog = __nuxt_component_7; const _directive_tippy = _resolveDirective("tippy"); return _openBlock(), _createBlock(_component_LayoutDialog, { open: $setup.isOpen, "onUpdate:open": _cache[4] || (_cache[4] = ($event) => $setup.isOpen = $event), "max-width": "lg", buttons: $setup.buttons, title: "Embed model", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:2:3" }, { default: _withCtx(() => [ $setup.canGenerateEmbed ? (_openBlock(), _createElementBlock( _Fragment, { key: 0 }, [ $setup.multipleVersionedResources ? (_openBlock(), _createBlock(_component_CommonAlert, { key: 0, class: "mb-4", color: "info", size: "xs", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:9:7" }, { title: _withCtx(() => [..._cache[5] || (_cache[5] = [ _createTextVNode( "You are embedding a specific version", -1 /* CACHED */ ) ])]), description: _withCtx(() => [..._cache[6] || (_cache[6] = [ _createElementVNode( "p", { "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:17:11" }, " Anyone with this embed link can view your model data. Be careful where you share it! ", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ })) : _createCommentVNode("v-if", true), !$setup.isPublicProject && $setup.canCreateEmbedTokens ? (_openBlock(), _createBlock(_component_CommonAlert, { key: 1, class: "mb-4", color: "info", size: "2xs", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:24:7" }, { title: _withCtx(() => [ _cache[7] || (_cache[7] = _createTextVNode( " You are embedding a ", -1 /* CACHED */ )), _createElementVNode( "span", _hoisted_1, _toDisplayString($setup.projectVisibility), 1 /* TEXT */ ), _cache[8] || (_cache[8] = _createTextVNode( " project ", -1 /* CACHED */ )) ]), description: _withCtx(() => [..._cache[9] || (_cache[9] = [ _createElementVNode( "p", { "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:36:11" }, " Anyone with this embed link can view your model, be careful where you share it. ", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ })) : _createCommentVNode("v-if", true), _createElementVNode("div", _hoisted_2, [ _createElementVNode("div", _hoisted_3, [ _cache[16] || (_cache[16] = _createElementVNode( "h4", { class: "text-heading-sm text-foreground-2 mb-1 ml-0.5", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:45:11" }, "Embed code", -1 /* CACHED */ )), _createVNode(_component_FormClipboardInput, { value: $setup.iframeCode, "is-multiline": "", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:46:11" }, null, 8, ["value"]), _cache[17] || (_cache[17] = _createElementVNode( "p", { class: "text-body-xs text-foreground-2 mt-2 mb-5 ml-0.5", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:47:11" }, " Copy this code to embed your model in a webpage or document. ", -1 /* CACHED */ )), _cache[18] || (_cache[18] = _createElementVNode( "h4", { class: "text-heading-sm text-foreground-2 mb-1 ml-0.5", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:50:11" }, "Embed URL", -1 /* CACHED */ )), _createVNode(_component_FormClipboardInput, { class: "mb-4", value: $setup.updatedUrl, "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:51:11" }, null, 8, ["value"]), _createVNode(_component_LayoutDialogSection, { open: $setup.areOptionsExpanded, "onUpdate:open": _cache[3] || (_cache[3] = ($event) => $setup.areOptionsExpanded = $event), "border-b": "", "border-t": "", title: "Options", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:52:11" }, { default: _withCtx(() => [ _createElementVNode("div", _hoisted_4, [ $setup.areSavedViewsEnabled ? (_openBlock(), _createElementBlock("div", _hoisted_5, [ _createElementVNode( "label", { for: "option-saved-view", class: _normalizeClass($setup.optionLabelClasses), "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:60:17" }, [ _createVNode(_component_FormCheckbox, { id: "option-saved-view", modelValue: $setup.shouldEmbedSavedView, "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.shouldEmbedSavedView = $event), name: "Embed a saved view", "hide-label": "", class: "cursor-pointer", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:61:19" }, null, 8, ["modelValue"]), _cache[10] || (_cache[10] = _createElementVNode( "span", { "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:68:19" }, "Embed a saved view", -1 /* CACHED */ )) ], 2 /* CLASS */ ), $setup.shouldEmbedSavedView ? (_openBlock(), _createBlock(_component_FormSelectSavedView, { key: 0, modelValue: $setup.embeddedSavedView, "onUpdate:modelValue": _cache[1] || (_cache[1] = ($event) => $setup.embeddedSavedView = $event), "project-id": $setup.props.project.id, "resource-id-string": $setup.routeModelId, "only-visibility": $setup.SavedViewVisibility.Public, "show-label": false, "mount-menu-on-body": "", class: "max-w-sm", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:70:17" }, null, 8, ["modelValue", "project-id", "resource-id-string", "only-visibility"])) : _createCommentVNode("v-if", true) ])) : _createCommentVNode("v-if", true), (_openBlock(), _createElementBlock( _Fragment, null, _renderList($setup.embedDialogOptions, (option) => { return _createElementVNode("div", { key: option.id, "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:81:15" }, [ _createElementVNode("label", { for: `option-${option.id}`, class: _normalizeClass($setup.optionLabelClasses), "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:82:17" }, [ _createVNode(_component_FormCheckbox, { id: `option-${option.id}`, "model-value": option.value.value, name: option.label, "hide-label": "", class: "cursor-pointer", "onUpdate:modelValue": (newValue) => $setup.updateOption(option.value, newValue), "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:83:19" }, null, 8, ["id", "model-value", "name", "onUpdate:modelValue"]), _createElementVNode( "span", _hoisted_7, _toDisplayString(option.label), 1 /* TEXT */ ) ], 10, _hoisted_6) ]); }), 64 /* STABLE_FRAGMENT */ )), $setup.isWorkspacesEnabled ? (_openBlock(), _createElementBlock("div", _hoisted_8, [ _createElementVNode( "label", { for: `option-hide-logo`, class: _normalizeClass($setup.optionLabelClasses), "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:97:17" }, [ _createVNode(_component_FormCheckbox, { id: "option-hide-logo", modelValue: $setup.hideSpeckleBranding, "onUpdate:modelValue": _cache[2] || (_cache[2] = ($event) => $setup.hideSpeckleBranding = $event), name: "Hide Speckle logo", "hide-label": "", class: "cursor-pointer", disabled: $setup.workspaceHideSpeckleBrandingEnabled || !$setup.canEditEmbedOptions?.authorized, "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:98:19" }, null, 8, ["modelValue", "disabled"]), _createElementVNode("div", _hoisted_9, [ _withDirectives((_openBlock(), _createElementBlock("span", { key: `hide-branding-tooltip-${$setup.workspaceHideSpeckleBrandingEnabled}`, "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:110:21" }, [..._cache[11] || (_cache[11] = [ _createTextVNode( " Hide Speckle logo ", -1 /* CACHED */ ) ])])), [ [_directive_tippy, $setup.hideSpeckleBrandingTooltip] ]), !$setup.canEditEmbedOptions?.authorized && $setup.canEditEmbedOptions?.code === "WorkspacePlanNoFeatureAccessError" ? (_openBlock(), _createElementBlock("span", _hoisted_10, [ _cache[13] || (_cache[13] = _createTextVNode( " This feature is only available on the business plan ", -1 /* CACHED */ )), $setup.isAdmin ? (_openBlock(), _createBlock(_component_NuxtLink, { key: 0, to: $setup.settingsWorkspaceRoutes.billing.route($setup.workspaceSlug), class: "underline", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:125:23" }, { default: _withCtx(() => [..._cache[12] || (_cache[12] = [ _createTextVNode( " upgrade now ", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ }, 8, ["to"])) : _createCommentVNode("v-if", true) ])) : _createCommentVNode("v-if", true), $setup.hideSpeckleBranding && !$setup.workspaceHideSpeckleBrandingEnabled ? (_openBlock(), _createElementBlock("span", _hoisted_11, [ _cache[15] || (_cache[15] = _createTextVNode( " Tip: You can also hide the logo for all embeds in ", -1 /* CACHED */ )), _createVNode(_component_NuxtLink, { to: $setup.settingsWorkspaceRoutes.general.route($setup.workspaceSlug), class: "underline", target: "_blank", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:138:23" }, { default: _withCtx(() => [..._cache[14] || (_cache[14] = [ _createTextVNode( " workspace settings. ", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ }, 8, ["to"]) ])) : _createCommentVNode("v-if", true) ]) ], 2 /* CLASS */ ) ])) : _createCommentVNode("v-if", true) ]) ]), _: 1 /* STABLE */ }, 8, ["open"]), !$setup.isSmallerOrEqualSm ? (_openBlock(), _createBlock(_component_LayoutDialogSection, { key: 0, "lazy-load": "", "border-b": "", title: "Preview", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:151:11" }, { default: _withCtx(() => [ !$setup.isSmallerOrEqualSm ? (_openBlock(), _createBlock(_component_ProjectModelPageDialogEmbedIframe, { key: 0, src: $setup.updatedUrl, title: "Preview", width: "600", height: "400", class: "shrink-0 w-[600px] h-[400px] mx-auto border border-outline-2", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:157:13" }, null, 8, ["src"])) : _createCommentVNode("v-if", true) ]), _: 1 /* STABLE */ })) : _createCommentVNode("v-if", true) ]) ]) ], 64 /* STABLE_FRAGMENT */ )) : (_openBlock(), _createBlock(_component_CommonAlert, { key: 1, color: "info", size: "xs", "data-v-inspector": "components/project/model-page/dialog/embed/Embed.vue:170:7" }, { title: _withCtx(() => [ _cache[19] || (_cache[19] = _createTextVNode( " Cannot embed ", -1 /* CACHED */ )), _createElementVNode( "span", _hoisted_12, "'" + _toDisplayString($props.project.visibility) + "'", 1 /* TEXT */ ), _cache[20] || (_cache[20] = _createTextVNode( " project ", -1 /* CACHED */ )) ]), description: _withCtx(() => [ _createElementVNode( "p", _hoisted_13, _toDisplayString($setup.cantGenerateDialogDescription), 1 /* TEXT */ ) ]), _: 1 /* STABLE */ })) ]), _: 1 /* STABLE */ }, 8, ["open", "buttons"]); } _sfc_main.__hmrId = "d192a893"; 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/project/model-page/dialog/embed/Embed.vue"]]); //# sourceMappingURL=data:application/json;base64,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QUFBLFlBQXhJO0FBQUEsWUFBdUcsTUFBQyxpQkFBRyxlQUFRLFVBQVUsSUFBRztBQUFBLFlBQUM7QUFBQTtBQUFBO0FBQUE7WUFBTztBQUFBLFlBRTFJO0FBQUE7QUFBQTtBQUFBO1FBQ1csYUFBVyxTQUNwQixNQUVJO0FBQUEsVUFGSjtBQUFBLFlBRUk7QUFBQSxZQUZKO0FBQUEsWUFFSSxpQkFEQyxvQ0FBNkI7QUFBQTtBQUFBO0FBQUE7QUFBQSIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiRW1iZWQudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8TGF5b3V0RGlhbG9nXHJcbiAgICB2LW1vZGVsOm9wZW49XCJpc09wZW5cIlxyXG4gICAgbWF4LXdpZHRoPVwibGdcIlxyXG4gICAgOmJ1dHRvbnM9XCJidXR0b25zXCJcclxuICAgIHRpdGxlPVwiRW1iZWQgbW9kZWxcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZToyOjNcIlxyXG4gID5cclxuICAgIDx0ZW1wbGF0ZSB2LWlmPVwiY2FuR2VuZXJhdGVFbWJlZFwiPlxyXG4gICAgICA8Q29tbW9uQWxlcnRcclxuICAgICAgICB2LWlmPVwibXVsdGlwbGVWZXJzaW9uZWRSZXNvdXJjZXNcIlxyXG4gICAgICAgIGNsYXNzPVwibWItNFwiXHJcbiAgICAgICAgY29sb3I9XCJpbmZvXCJcclxuICAgICAgICBzaXplPVwieHNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTo5OjdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPHRlbXBsYXRlICN0aXRsZT5Zb3UgYXJlIGVtYmVkZGluZyBhIHNwZWNpZmljIHZlcnNpb248L3RlbXBsYXRlPlxyXG4gICAgICAgIDx0ZW1wbGF0ZSAjZGVzY3JpcHRpb24+XHJcbiAgICAgICAgICA8cCBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZToxNzoxMVwiPlxyXG4gICAgICAgICAgICBBbnlvbmUgd2l0aCB0aGlzIGVtYmVkIGxpbmsgY2FuIHZpZXcgeW91ciBtb2RlbCBkYXRhLiBCZSBjYXJlZnVsIHdoZXJlIHlvdVxyXG4gICAgICAgICAgICBzaGFyZSBpdCFcclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8L0NvbW1vbkFsZXJ0PlxyXG5cclxuICAgICAgPENvbW1vbkFsZXJ0XHJcbiAgICAgICAgdi1pZj1cIiFpc1B1YmxpY1Byb2plY3QgJiYgY2FuQ3JlYXRlRW1iZWRUb2tlbnNcIlxyXG4gICAgICAgIGNsYXNzPVwibWItNFwiXHJcbiAgICAgICAgY29sb3I9XCJpbmZvXCJcclxuICAgICAgICBzaXplPVwiMnhzXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6MjQ6N1wiXHJcbiAgICAgID5cclxuICAgICAgICA8dGVtcGxhdGUgI3RpdGxlPlxyXG4gICAgICAgICAgWW91IGFyZSBlbWJlZGRpbmcgYVxyXG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJsb3dlcmNhc2VcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTozMjoxMVwiPnt7IHByb2plY3RWaXNpYmlsaXR5IH19PC9zcGFuPlxyXG4gICAgICAgICAgcHJvamVjdFxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPHRlbXBsYXRlICNkZXNjcmlwdGlvbj5cclxuICAgICAgICAgIDxwIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjM2OjExXCI+XHJcbiAgICAgICAgICAgIEFueW9uZSB3aXRoIHRoaXMgZW1iZWQgbGluayBjYW4gdmlldyB5b3VyIG1vZGVsLCBiZSBjYXJlZnVsIHdoZXJlIHlvdSBzaGFyZVxyXG4gICAgICAgICAgICBpdC5cclxuICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L3RlbXBsYXRlPlxyXG4gICAgICA8L0NvbW1vbkFsZXJ0PlxyXG5cclxuICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgbGc6ZmxleC1yb3cgZ2FwLTggbWItNlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjQzOjdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xIG9yZGVyLTEgbGc6b3JkZXItMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjQ0OjlcIj5cclxuICAgICAgICAgIDxoNCBjbGFzcz1cInRleHQtaGVhZGluZy1zbSB0ZXh0LWZvcmVncm91bmQtMiBtYi0xIG1sLTAuNVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjQ1OjExXCI+RW1iZWQgY29kZTwvaDQ+XHJcbiAgICAgICAgICA8Rm9ybUNsaXBib2FyZElucHV0IDp2YWx1ZT1cImlmcmFtZUNvZGVcIiBpcy1tdWx0aWxpbmUgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6NDY6MTFcIiAvPlxyXG4gICAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LWJvZHkteHMgdGV4dC1mb3JlZ3JvdW5kLTIgbXQtMiBtYi01IG1sLTAuNVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjQ3OjExXCI+XHJcbiAgICAgICAgICAgIENvcHkgdGhpcyBjb2RlIHRvIGVtYmVkIHlvdXIgbW9kZWwgaW4gYSB3ZWJwYWdlIG9yIGRvY3VtZW50LlxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgPGg0IGNsYXNzPVwidGV4dC1oZWFkaW5nLXNtIHRleHQtZm9yZWdyb3VuZC0yIG1iLTEgbWwtMC41XCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6NTA6MTFcIj5FbWJlZCBVUkw8L2g0PlxyXG4gICAgICAgICAgPEZvcm1DbGlwYm9hcmRJbnB1dCBjbGFzcz1cIm1iLTRcIiA6dmFsdWU9XCJ1cGRhdGVkVXJsXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6NTE6MTFcIiAvPlxyXG4gICAgICAgICAgPExheW91dERpYWxvZ1NlY3Rpb25cclxuICAgICAgICAgICAgdi1tb2RlbDpvcGVuPVwiYXJlT3B0aW9uc0V4cGFuZGVkXCJcclxuICAgICAgICAgICAgYm9yZGVyLWJcclxuICAgICAgICAgICAgYm9yZGVyLXRcclxuICAgICAgICAgICAgdGl0bGU9XCJPcHRpb25zXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6NTI6MTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtMS41IHNtOmdhcC0yIHRleHQtYm9keS14cyBjdXJzb3ItZGVmYXVsdFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjU4OjEzXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiB2LWlmPVwiYXJlU2F2ZWRWaWV3c0VuYWJsZWRcIiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTo1OToxNVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm9wdGlvbi1zYXZlZC12aWV3XCIgOmNsYXNzPVwib3B0aW9uTGFiZWxDbGFzc2VzXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6NjA6MTdcIj5cclxuICAgICAgICAgICAgICAgICAgPEZvcm1DaGVja2JveFxyXG4gICAgICAgICAgICAgICAgICAgIGlkPVwib3B0aW9uLXNhdmVkLXZpZXdcIlxyXG4gICAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJzaG91bGRFbWJlZFNhdmVkVmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cIkVtYmVkIGEgc2F2ZWQgdmlld1wiXHJcbiAgICAgICAgICAgICAgICAgICAgaGlkZS1sYWJlbFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTo2MToxOVwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjY4OjE5XCI+RW1iZWQgYSBzYXZlZCB2aWV3PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgIDxGb3JtU2VsZWN0U2F2ZWRWaWV3XHJcbiAgICAgICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRFbWJlZFNhdmVkVmlld1wiXHJcbiAgICAgICAgICAgICAgICAgIHYtbW9kZWw9XCJlbWJlZGRlZFNhdmVkVmlld1wiXHJcbiAgICAgICAgICAgICAgICAgIDpwcm9qZWN0LWlkPVwicHJvcHMucHJvamVjdC5pZFwiXHJcbiAgICAgICAgICAgICAgICAgIDpyZXNvdXJjZS1pZC1zdHJpbmc9XCJyb3V0ZU1vZGVsSWRcIlxyXG4gICAgICAgICAgICAgICAgICA6b25seS12aXNpYmlsaXR5PVwiU2F2ZWRWaWV3VmlzaWJpbGl0eS5QdWJsaWNcIlxyXG4gICAgICAgICAgICAgICAgICA6c2hvdy1sYWJlbD1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgbW91bnQtbWVudS1vbi1ib2R5XHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF4LXctc21cIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTo3MDoxN1wiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgdi1mb3I9XCJvcHRpb24gaW4gZW1iZWREaWFsb2dPcHRpb25zXCIgOmtleT1cIm9wdGlvbi5pZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjgxOjE1XCI+XHJcbiAgICAgICAgICAgICAgICA8bGFiZWwgOmZvcj1cImBvcHRpb24tJHtvcHRpb24uaWR9YFwiIDpjbGFzcz1cIm9wdGlvbkxhYmVsQ2xhc3Nlc1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjgyOjE3XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxGb3JtQ2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICA6aWQ9XCJgb3B0aW9uLSR7b3B0aW9uLmlkfWBcIlxyXG4gICAgICAgICAgICAgICAgICAgIDptb2RlbC12YWx1ZT1cIm9wdGlvbi52YWx1ZS52YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgOm5hbWU9XCJvcHRpb24ubGFiZWxcIlxyXG4gICAgICAgICAgICAgICAgICAgIGhpZGUtbGFiZWxcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1wb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICBAdXBkYXRlOm1vZGVsLXZhbHVlPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAobmV3VmFsdWUpID0+IHVwZGF0ZU9wdGlvbihvcHRpb24udmFsdWUsIG5ld1ZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjgzOjE5XCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgPHNwYW4gZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6OTM6MTlcIj57eyBvcHRpb24ubGFiZWwgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDxkaXYgdi1pZj1cImlzV29ya3NwYWNlc0VuYWJsZWRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTo5NjoxNVwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIDpmb3I9XCJgb3B0aW9uLWhpZGUtbG9nb2BcIiA6Y2xhc3M9XCJvcHRpb25MYWJlbENsYXNzZXNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTo5NzoxN1wiPlxyXG4gICAgICAgICAgICAgICAgICA8Rm9ybUNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ9XCJvcHRpb24taGlkZS1sb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICB2LW1vZGVsPVwiaGlkZVNwZWNrbGVCcmFuZGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZT1cIkhpZGUgU3BlY2tsZSBsb2dvXCJcclxuICAgICAgICAgICAgICAgICAgICBoaWRlLWxhYmVsXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgOmRpc2FibGVkPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2VIaWRlU3BlY2tsZUJyYW5kaW5nRW5hYmxlZCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgIWNhbkVkaXRFbWJlZE9wdGlvbnM/LmF1dGhvcml6ZWRcclxuICAgICAgICAgICAgICAgICAgICBcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZTo5ODoxOVwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC0wLjVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZToxMDk6MTlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgOmtleT1cImBoaWRlLWJyYW5kaW5nLXRvb2x0aXAtJHt3b3Jrc3BhY2VIaWRlU3BlY2tsZUJyYW5kaW5nRW5hYmxlZH1gXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHYtdGlwcHk9XCJoaWRlU3BlY2tsZUJyYW5kaW5nVG9vbHRpcFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjExMDoyMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgSGlkZSBTcGVja2xlIGxvZ29cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgIHYtaWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgIWNhbkVkaXRFbWJlZE9wdGlvbnM/LmF1dGhvcml6ZWQgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FuRWRpdEVtYmVkT3B0aW9ucz8uY29kZSA9PT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAnV29ya3NwYWNlUGxhbk5vRmVhdHVyZUFjY2Vzc0Vycm9yJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1ib2R5LTJ4cyB0ZXh0LWZvcmVncm91bmQtMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjExNjoyMVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgVGhpcyBmZWF0dXJlIGlzIG9ubHkgYXZhaWxhYmxlIG9uIHRoZSBidXNpbmVzcyBwbGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8TnV4dExpbmtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdi1pZj1cImlzQWRtaW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6dG89XCJzZXR0aW5nc1dvcmtzcGFjZVJvdXRlcy5iaWxsaW5nLnJvdXRlKHdvcmtzcGFjZVNsdWcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1bmRlcmxpbmVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZToxMjU6MjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cGdyYWRlIG5vd1xyXG4gICAgICAgICAgICAgICAgICAgICAgPC9OdXh0TGluaz5cclxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgIHYtaWY9XCJoaWRlU3BlY2tsZUJyYW5kaW5nICYmICF3b3Jrc3BhY2VIaWRlU3BlY2tsZUJyYW5kaW5nRW5hYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtYm9keS0yeHMgdGV4dC1mb3JlZ3JvdW5kLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZToxMzM6MjFcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIFRpcDogWW91IGNhbiBhbHNvIGhpZGUgdGhlIGxvZ28gZm9yIGFsbCBlbWJlZHMgaW5cclxuICAgICAgICAgICAgICAgICAgICAgIDxOdXh0TGlua1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA6dG89XCJzZXR0aW5nc1dvcmtzcGFjZVJvdXRlcy5nZW5lcmFsLnJvdXRlKHdvcmtzcGFjZVNsdWcpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1bmRlcmxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZToxMzg6MjNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3Jrc3BhY2Ugc2V0dGluZ3MuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L051eHRMaW5rPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvTGF5b3V0RGlhbG9nU2VjdGlvbj5cclxuICAgICAgICAgIDxMYXlvdXREaWFsb2dTZWN0aW9uXHJcbiAgICAgICAgICAgIHYtaWY9XCIhaXNTbWFsbGVyT3JFcXVhbFNtXCJcclxuICAgICAgICAgICAgbGF6eS1sb2FkXHJcbiAgICAgICAgICAgIGJvcmRlci1iXHJcbiAgICAgICAgICAgIHRpdGxlPVwiUHJldmlld1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjE1MToxMVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIDxQcm9qZWN0TW9kZWxQYWdlRGlhbG9nRW1iZWRJZnJhbWVcclxuICAgICAgICAgICAgICB2LWlmPVwiIWlzU21hbGxlck9yRXF1YWxTbVwiXHJcbiAgICAgICAgICAgICAgOnNyYz1cInVwZGF0ZWRVcmxcIlxyXG4gICAgICAgICAgICAgIHRpdGxlPVwiUHJldmlld1wiXHJcbiAgICAgICAgICAgICAgd2lkdGg9XCI2MDBcIlxyXG4gICAgICAgICAgICAgIGhlaWdodD1cIjQwMFwiXHJcbiAgICAgICAgICAgICAgY2xhc3M9XCJzaHJpbmstMCB3LVs2MDBweF0gaC1bNDAwcHhdIG14LWF1dG8gYm9yZGVyIGJvcmRlci1vdXRsaW5lLTJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZToxNTc6MTNcIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgICAgPC9MYXlvdXREaWFsb2dTZWN0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICA8Q29tbW9uQWxlcnQgY29sb3I9XCJpbmZvXCIgc2l6ZT1cInhzXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvcHJvamVjdC9tb2RlbC1wYWdlL2RpYWxvZy9lbWJlZC9FbWJlZC52dWU6MTcwOjdcIj5cclxuICAgICAgICA8dGVtcGxhdGUgI3RpdGxlPlxyXG4gICAgICAgICAgQ2Fubm90IGVtYmVkXHJcbiAgICAgICAgICA8c3BhbiBjbGFzcz1cImxvd2VyY2FzZVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjE3MzoxMVwiPid7eyBwcm9qZWN0LnZpc2liaWxpdHkgfX0nPC9zcGFuPlxyXG4gICAgICAgICAgcHJvamVjdFxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgICAgPHRlbXBsYXRlICNkZXNjcmlwdGlvbj5cclxuICAgICAgICAgIDxwIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3Byb2plY3QvbW9kZWwtcGFnZS9kaWFsb2cvZW1iZWQvRW1iZWQudnVlOjE3NzoxMVwiPlxyXG4gICAgICAgICAgICB7eyBjYW50R2VuZXJhdGVEaWFsb2dEZXNjcmlwdGlvbiB9fVxyXG4gICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvdGVtcGxhdGU+XHJcbiAgICAgIDwvQ29tbW9uQWxlcnQ+XHJcbiAgICA8L3RlbXBsYXRlPlxyXG4gIDwvTGF5b3V0RGlhbG9nPlxyXG48L3RlbXBsYXRlPlxyXG5cclxuPHNjcmlwdCBzZXR1cCBsYW5nPVwidHNcIj5cclxuaW1wb3J0IHtcclxuICBTYXZlZFZpZXdWaXNpYmlsaXR5LFxyXG4gIHR5cGUgRm9ybVNlbGVjdFNhdmVkVmlld19TYXZlZFZpZXdGcmFnbWVudCxcclxuICB0eXBlIFByb2plY3RzTW9kZWxQYWdlRW1iZWRfUHJvamVjdEZyYWdtZW50XHJcbn0gZnJvbSAnfn4vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsL2dyYXBocWwnXHJcbmltcG9ydCB7IHVzZUNsaXBib2FyZCB9IGZyb20gJ35+L2NvbXBvc2FibGVzL2Jyb3dzZXInXHJcbmltcG9ydCB7IFNwZWNrbGVWaWV3ZXIsIFJvbGVzIH0gZnJvbSAnQHNwZWNrbGUvc2hhcmVkJ1xyXG5pbXBvcnQgeyBncmFwaHFsIH0gZnJvbSAnfn4vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsJ1xyXG5pbXBvcnQgdHlwZSB7IExheW91dERpYWxvZ0J1dHRvbiB9IGZyb20gJ0BzcGVja2xlL3VpLWNvbXBvbmVudHMnXHJcbmltcG9ydCB7IHNldHRpbmdzV29ya3NwYWNlUm91dGVzIH0gZnJvbSAnfi9saWIvY29tbW9uL2hlbHBlcnMvcm91dGUnXHJcbmltcG9ydCB7IHVzZUNyZWF0ZUVtYmVkVG9rZW4gfSBmcm9tICd+fi9saWIvcHJvamVjdHMvY29tcG9zYWJsZXMvdG9rZW5NYW5hZ2VtZW50J1xyXG5pbXBvcnQge1xyXG4gIFN1cHBvcnRlZFByb2plY3RWaXNpYmlsaXR5LFxyXG4gIGNhc3RUb1N1cHBvcnRlZFZpc2liaWxpdHlcclxufSBmcm9tICd+L2xpYi9wcm9qZWN0cy9oZWxwZXJzL3Zpc2liaWxpdHknXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfi9saWIvY29yZS9jb21wb3NhYmxlcy9tcCdcclxuaW1wb3J0IHsgdXNlQXJlU2F2ZWRWaWV3c0VuYWJsZWQgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2F2ZWRWaWV3cy9nZW5lcmFsJ1xyXG5cclxuZ3JhcGhxbChgXHJcbiAgZnJhZ21lbnQgUHJvamVjdHNNb2RlbFBhZ2VFbWJlZF9Qcm9qZWN0IG9uIFByb2plY3Qge1xyXG4gICAgaWRcclxuICAgIHZpc2liaWxpdHlcclxuICAgIHBlcm1pc3Npb25zIHtcclxuICAgICAgY2FuQ3JlYXRlRW1iZWRUb2tlbnMge1xyXG4gICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgd29ya3NwYWNlIHtcclxuICAgICAgaWRcclxuICAgICAgc2x1Z1xyXG4gICAgICByb2xlXHJcbiAgICAgIGVtYmVkT3B0aW9ucyB7XHJcbiAgICAgICAgaGlkZVNwZWNrbGVCcmFuZGluZ1xyXG4gICAgICB9XHJcbiAgICAgIHBlcm1pc3Npb25zIHtcclxuICAgICAgICBjYW5FZGl0RW1iZWRPcHRpb25zIHtcclxuICAgICAgICAgIC4uLkZ1bGxQZXJtaXNzaW9uQ2hlY2tSZXN1bHRcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbmApXHJcblxyXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzPHtcclxuICBwcm9qZWN0OiBQcm9qZWN0c01vZGVsUGFnZUVtYmVkX1Byb2plY3RGcmFnbWVudFxyXG4gIG1vZGVsSWQ/OiBzdHJpbmdcclxuICB2ZXJzaW9uSWQ/OiBzdHJpbmdcclxufT4oKVxyXG5cclxuY29uc3QgaXNPcGVuID0gZGVmaW5lTW9kZWw8Ym9vbGVhbj4oJ29wZW4nLCB7IHJlcXVpcmVkOiB0cnVlIH0pXHJcbmNvbnN0IGFyZU9wdGlvbnNFeHBhbmRlZCA9IHJlZihmYWxzZSlcclxuXHJcbmNvbnN0IG1peHBhbmVsID0gdXNlTWl4cGFuZWwoKVxyXG5jb25zdCByb3V0ZSA9IHVzZVJvdXRlKClcclxuY29uc3QgeyBjb3B5IH0gPSB1c2VDbGlwYm9hcmQoKVxyXG5jb25zdCB7XHJcbiAgcHVibGljOiB7IGJhc2VVcmwgfVxyXG59ID0gdXNlUnVudGltZUNvbmZpZygpXHJcbmNvbnN0IGNyZWF0ZUVtYmVkVG9rZW4gPSB1c2VDcmVhdGVFbWJlZFRva2VuKClcclxuXHJcbmNvbnN0IGFyZVNhdmVkVmlld3NFbmFibGVkID0gdXNlQXJlU2F2ZWRWaWV3c0VuYWJsZWQoKVxyXG5jb25zdCBpc1dvcmtzcGFjZXNFbmFibGVkID0gdXNlSXNXb3Jrc3BhY2VzRW5hYmxlZCgpXHJcbmNvbnN0IHsgaXNTbWFsbGVyT3JFcXVhbFNtIH0gPSB1c2VJc1NtYWxsZXJPckVxdWFsVGhhbkJyZWFrcG9pbnQoKVxyXG5cclxuY29uc3QgdHJhbnNwYXJlbnRCYWNrZ3JvdW5kID0gcmVmKGZhbHNlKVxyXG5jb25zdCBoaWRlVmlld2VyQ29udHJvbHMgPSByZWYoZmFsc2UpXHJcbmNvbnN0IGhpZGVTZWxlY3Rpb25JbmZvID0gcmVmKGZhbHNlKVxyXG5jb25zdCBkaXNhYmxlTW9kZWxMaW5rID0gcmVmKGZhbHNlKVxyXG5jb25zdCBwcmV2ZW50U2Nyb2xsaW5nID0gcmVmKGZhbHNlKVxyXG5jb25zdCBtYW51YWxseUxvYWRNb2RlbCA9IHJlZihmYWxzZSlcclxuY29uc3QgaGlkZVNwZWNrbGVCcmFuZGluZyA9IHJlZihmYWxzZSlcclxuY29uc3QgZW1iZWRUb2tlbiA9IHJlZjxzdHJpbmcgfCBudWxsPihudWxsKVxyXG5jb25zdCBzaG91bGRFbWJlZFNhdmVkVmlldyA9IHJlZihmYWxzZSlcclxuXHJcbmNvbnN0IGVtYmVkZGVkU2F2ZWRWaWV3ID0gZGVmaW5lTW9kZWw8Rm9ybVNlbGVjdFNhdmVkVmlld19TYXZlZFZpZXdGcmFnbWVudD4oJ3ZpZXcnLCB7XHJcbiAgcmVxdWlyZWQ6IGZhbHNlXHJcbn0pXHJcblxyXG5jb25zdCBvcHRpb25MYWJlbENsYXNzZXMgPSBjb21wdXRlZChcclxuICAoKSA9PiAnZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTEgY3Vyc29yLXBvaW50ZXIgbWF4LXctbWF4J1xyXG4pXHJcbmNvbnN0IGlzQWRtaW4gPSBjb21wdXRlZCgoKSA9PiBwcm9wcy5wcm9qZWN0LndvcmtzcGFjZT8ucm9sZSA9PT0gUm9sZXMuV29ya3NwYWNlLkFkbWluKVxyXG5cclxuY29uc3Qgcm91dGVNb2RlbElkID0gY29tcHV0ZWQoKCkgPT4gcm91dGUucGFyYW1zLm1vZGVsSWQgYXMgc3RyaW5nKVxyXG5cclxuY29uc3QgcGFyc2VkUmVzb3VyY2VzID0gY29tcHV0ZWQoKCkgPT5cclxuICBTcGVja2xlVmlld2VyLlZpZXdlclJvdXRlLnBhcnNlVXJsUGFyYW1ldGVycyhyb3V0ZU1vZGVsSWQudmFsdWUpXHJcbilcclxuXHJcbmNvbnN0IG11bHRpcGxlVmVyc2lvbmVkUmVzb3VyY2VzID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIHJldHVybiAoXHJcbiAgICBwYXJzZWRSZXNvdXJjZXMudmFsdWUuZmlsdGVyKFxyXG4gICAgICAocmVzb3VyY2UpID0+XHJcbiAgICAgICAgU3BlY2tsZVZpZXdlci5WaWV3ZXJSb3V0ZS5pc01vZGVsUmVzb3VyY2UocmVzb3VyY2UpICYmXHJcbiAgICAgICAgcmVzb3VyY2UudmVyc2lvbklkICE9PSB1bmRlZmluZWRcclxuICAgICkubGVuZ3RoID4gMVxyXG4gIClcclxufSlcclxuXHJcbmNvbnN0IHVwZGF0ZWRVcmwgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgdXJsID0gbmV3IFVSTChgL3Byb2plY3RzLyR7ZW5jb2RlVVJJQ29tcG9uZW50KHByb3BzLnByb2plY3QuaWQpfWAsIGJhc2VVcmwpXHJcblxyXG4gIHVybC5wYXRobmFtZSArPSAnL21vZGVscy8nXHJcblxyXG4gIC8vIFVzZSBwcm9wcy5tb2RlbElkIGFuZCBwcm9wcy52ZXJzaW9uSWQgaWYgcHJvdmlkZWRcclxuICBpZiAocHJvcHMubW9kZWxJZCkge1xyXG4gICAgbGV0IG1vZGVsUGF0aCA9IGVuY29kZVVSSUNvbXBvbmVudChwcm9wcy5tb2RlbElkKVxyXG4gICAgaWYgKHByb3BzLnZlcnNpb25JZCkge1xyXG4gICAgICBtb2RlbFBhdGggKz0gYEAke2VuY29kZVVSSUNvbXBvbmVudChwcm9wcy52ZXJzaW9uSWQpfWBcclxuICAgIH1cclxuICAgIHVybC5wYXRobmFtZSArPSBtb2RlbFBhdGhcclxuICB9IGVsc2Uge1xyXG4gICAgLy8gT3RoZXJ3aXNlLCB1c2Ugcm91dGVNb2RlbElkIGRpcmVjdGx5XHJcbiAgICB1cmwucGF0aG5hbWUgKz0gcm91dGVNb2RlbElkLnZhbHVlXHJcbiAgfVxyXG5cclxuICAvLyBBZGQgdG9rZW4gcGFyYW1ldGVyIGlmIGVtYmVkIHRva2VuIGV4aXN0c1xyXG4gIGlmIChlbWJlZFRva2VuLnZhbHVlKSB7XHJcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnZW1iZWRUb2tlbicsIGVtYmVkVG9rZW4udmFsdWUpXHJcbiAgfVxyXG5cclxuICAvLyBDb25zdHJ1Y3QgdGhlIGVtYmVkIG9wdGlvbnMgYXMgYSBoYXNoIGZyYWdtZW50XHJcbiAgY29uc3QgZW1iZWRPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgaXNFbmFibGVkOiB0cnVlIH1cclxuICBlbWJlZERpYWxvZ09wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XHJcbiAgICBpZiAob3B0aW9uLnZhbHVlLnZhbHVlKSB7XHJcbiAgICAgIGVtYmVkT3B0aW9uc1tvcHRpb24uaWRdID0gdHJ1ZVxyXG4gICAgfVxyXG4gIH0pXHJcblxyXG4gIGlmIChcclxuICAgIGhpZGVTcGVja2xlQnJhbmRpbmcudmFsdWUgJiZcclxuICAgIGlzV29ya3NwYWNlc0VuYWJsZWQudmFsdWUgJiZcclxuICAgICF3b3Jrc3BhY2VIaWRlU3BlY2tsZUJyYW5kaW5nRW5hYmxlZC52YWx1ZVxyXG4gICkge1xyXG4gICAgZW1iZWRPcHRpb25zWydoaWRlU3BlY2tsZUJyYW5kaW5nJ10gPSB0cnVlXHJcbiAgfVxyXG5cclxuICAvLyBTZXJpYWxpemUgdGhlIGVtYmVkT3B0aW9ucyBpbnRvIGEgaGFzaCBmcmFnbWVudFxyXG4gIGNvbnN0IGhhc2hGcmFnbWVudCA9IGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShlbWJlZE9wdGlvbnMpKVxyXG4gIHVybC5oYXNoID0gYGVtYmVkPSR7aGFzaEZyYWdtZW50fWBcclxuXHJcbiAgLy8gRW1iZWQgdmlldz9cclxuICBjb25zdCBzYXZlZFZpZXdTZXR0aW5nczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fVxyXG4gIGlmIChzaG91bGRFbWJlZFNhdmVkVmlldy52YWx1ZSAmJiBlbWJlZGRlZFNhdmVkVmlldy52YWx1ZSkge1xyXG4gICAgc2F2ZWRWaWV3U2V0dGluZ3NbJ2lkJ10gPSBlbWJlZGRlZFNhdmVkVmlldy52YWx1ZS5pZFxyXG4gIH1cclxuXHJcbiAgaWYgKE9iamVjdC5rZXlzKHNhdmVkVmlld1NldHRpbmdzKS5sZW5ndGggPiAwKSB7XHJcbiAgICBjb25zdCBzYXZlZFZpZXdGcmFnbWVudCA9IGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzYXZlZFZpZXdTZXR0aW5ncykpXHJcbiAgICB1cmwuaGFzaCArPSBgJnNhdmVkVmlldz0ke3NhdmVkVmlld0ZyYWdtZW50fWBcclxuICB9XHJcblxyXG4gIHJldHVybiB1cmwudG9TdHJpbmcoKVxyXG59KVxyXG5cclxuY29uc3QgaWZyYW1lQ29kZSA9IGNvbXB1dGVkKCgpID0+IHtcclxuICByZXR1cm4gYDxpZnJhbWUgdGl0bGU9XCJTcGVja2xlXCIgc3JjPVwiJHt1cGRhdGVkVXJsLnZhbHVlfVwiIHdpZHRoPVwiNjAwXCIgaGVpZ2h0PVwiNDAwXCIgZnJhbWVib3JkZXI9XCIwXCI+PC9pZnJhbWU+YFxyXG59KVxyXG5cclxuY29uc3QgYnV0dG9ucyA9IGNvbXB1dGVkKCgpOiBMYXlvdXREaWFsb2dCdXR0b25bXSA9PiBbXHJcbiAge1xyXG4gICAgdGV4dDogJ0Nsb3NlJyxcclxuICAgIHByb3BzOiB7IGNvbG9yOiAnb3V0bGluZScgfSxcclxuICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgaXNPcGVuLnZhbHVlID0gZmFsc2VcclxuICAgIH1cclxuICB9LFxyXG4gIC4uLihpc1B1YmxpY1Byb2plY3QudmFsdWUgfHwgKCFpc1B1YmxpY1Byb2plY3QudmFsdWUgJiYgY2FuQ3JlYXRlRW1iZWRUb2tlbnMudmFsdWUpXHJcbiAgICA/IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0ZXh0OiAnQ29weSBlbWJlZCBjb2RlJyxcclxuICAgICAgICAgIHByb3BzOiB7fSxcclxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgaGFuZGxlRW1iZWRDb2RlQ29weShpZnJhbWVDb2RlLnZhbHVlKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgXVxyXG4gICAgOiBbXSlcclxuXSlcclxuXHJcbmNvbnN0IHdvcmtzcGFjZVNsdWcgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgcmV0dXJuIHByb3BzLnByb2plY3Qud29ya3NwYWNlPy5zbHVnXHJcbn0pXHJcbmNvbnN0IGNhbkVkaXRFbWJlZE9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgcmV0dXJuIHByb3BzLnByb2plY3Qud29ya3NwYWNlPy5wZXJtaXNzaW9ucz8uY2FuRWRpdEVtYmVkT3B0aW9uc1xyXG59KVxyXG5jb25zdCBjYW5DcmVhdGVFbWJlZFRva2VucyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICByZXR1cm4gcHJvcHMucHJvamVjdC5wZXJtaXNzaW9ucz8uY2FuQ3JlYXRlRW1iZWRUb2tlbnM/LmF1dGhvcml6ZWRcclxufSlcclxuY29uc3QgcHJvamVjdFZpc2liaWxpdHkgPSBjb21wdXRlZCgoKSA9PlxyXG4gIGNhc3RUb1N1cHBvcnRlZFZpc2liaWxpdHkocHJvcHMucHJvamVjdC52aXNpYmlsaXR5KVxyXG4pXHJcbmNvbnN0IGlzUHVibGljUHJvamVjdCA9IGNvbXB1dGVkKFxyXG4gICgpID0+IHByb2plY3RWaXNpYmlsaXR5LnZhbHVlID09PSBTdXBwb3J0ZWRQcm9qZWN0VmlzaWJpbGl0eS5QdWJsaWNcclxuKVxyXG5jb25zdCB3b3Jrc3BhY2VIaWRlU3BlY2tsZUJyYW5kaW5nRW5hYmxlZCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBpZiAoIWlzV29ya3NwYWNlc0VuYWJsZWQudmFsdWUpIHJldHVybiBmYWxzZVxyXG4gIHJldHVybiBwcm9wcy5wcm9qZWN0LndvcmtzcGFjZT8uZW1iZWRPcHRpb25zPy5oaWRlU3BlY2tsZUJyYW5kaW5nXHJcbn0pXHJcbmNvbnN0IGhpZGVTcGVja2xlQnJhbmRpbmdUb29sdGlwID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGlmICghaXNXb3Jrc3BhY2VzRW5hYmxlZC52YWx1ZSkgcmV0dXJuICcnXHJcbiAgaWYgKHdvcmtzcGFjZUhpZGVTcGVja2xlQnJhbmRpbmdFbmFibGVkLnZhbHVlKSB7XHJcbiAgICByZXR1cm4gJ1NwZWNrbGUgYnJhbmRpbmcgaXMgZGlzYWJsZWQgZm9yIGFsbCBlbWJlZHMgaW4gdGhpcyB3b3Jrc3BhY2UnXHJcbiAgfVxyXG4gIHJldHVybiAnJ1xyXG59KVxyXG5jb25zdCBjYW5HZW5lcmF0ZUVtYmVkID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIHJldHVybiBpc1B1YmxpY1Byb2plY3QudmFsdWUgfHwgKCFpc1B1YmxpY1Byb2plY3QudmFsdWUgJiYgY2FuQ3JlYXRlRW1iZWRUb2tlbnMudmFsdWUpXHJcbn0pXHJcbmNvbnN0IGNhbnRHZW5lcmF0ZURpYWxvZ0Rlc2NyaXB0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xyXG4gIGlmIChcclxuICAgIHByb3BzLnByb2plY3QucGVybWlzc2lvbnM/LmNhbkNyZWF0ZUVtYmVkVG9rZW5zPy5jb2RlID09PSAnV29ya3NwYWNlTm9GZWF0dXJlQWNjZXNzJ1xyXG4gICkge1xyXG4gICAgcmV0dXJuIGBFbWJlZGRpbmcgJHtwcm9wcy5wcm9qZWN0LnZpc2liaWxpdHkudG9Mb3dlckNhc2UoKX0gcHJvamVjdHMgaXMgbm90IGF2YWlsYWJsZSBvbiB5b3VyIHBsYW4uIFVwZ3JhZGUgeW91ciB3b3Jrc3BhY2UgdG8gZ2V0IGFjY2VzcyB0byB0aGlzIGZlYXR1cmUuYFxyXG4gIH1cclxuICByZXR1cm4gYFRoZSB2aXNpYmlsaXR5IG9mIHRoaXMgcHJvamVjdCBpcyBzZXQgdG8gJyR7cHJvcHMucHJvamVjdC52aXNpYmlsaXR5LnRvTG93ZXJDYXNlKCl9Jy4gUGxlYXNlIGNvbnRhY3QgdGhlIHByb2plY3Qgb3duZXIgdG8gY2hhbmdlIHRoZSB2aXNpYmlsaXR5IG9yIGdlbmVyYXRlIGFuIGVtYmVkIGxpbmsuYFxyXG59KVxyXG5cclxuY29uc3QgaGFuZGxlRW1iZWRDb2RlQ29weSA9IGFzeW5jICh2YWx1ZTogc3RyaW5nKSA9PiB7XHJcbiAgYXdhaXQgY29weSh2YWx1ZSwge1xyXG4gICAgc3VjY2Vzc01lc3NhZ2U6ICdFbWJlZCBjb2RlIGNvcGllZCB0byBjbGlwYm9hcmQnLFxyXG4gICAgZmFpbHVyZU1lc3NhZ2U6ICdGYWlsZWQgdG8gY29weSBlbWJlZCBjb2RlIHRvIGNsaXBib2FyZCdcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCB1cGRhdGVPcHRpb24gPSAob3B0aW9uUmVmOiBSZWY8Ym9vbGVhbj4sIG5ld1ZhbHVlOiB1bmtub3duKSA9PiB7XHJcbiAgb3B0aW9uUmVmLnZhbHVlID0gbmV3VmFsdWUgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogISFuZXdWYWx1ZVxyXG59XHJcblxyXG5jb25zdCBlbWJlZERpYWxvZ09wdGlvbnMgPSBbXHJcbiAge1xyXG4gICAgaWQ6ICdpc1RyYW5zcGFyZW50JyxcclxuICAgIGxhYmVsOiAnVHJhbnNwYXJlbnQgYmFja2dyb3VuZCcsXHJcbiAgICB2YWx1ZTogdHJhbnNwYXJlbnRCYWNrZ3JvdW5kXHJcbiAgfSxcclxuICB7XHJcbiAgICBpZDogJ2hpZGVDb250cm9scycsXHJcbiAgICBsYWJlbDogJ0hpZGUgdmlld2VyIGNvbnRyb2xzJyxcclxuICAgIHZhbHVlOiBoaWRlVmlld2VyQ29udHJvbHNcclxuICB9LFxyXG4gIHtcclxuICAgIGlkOiAnaGlkZVNlbGVjdGlvbkluZm8nLFxyXG4gICAgbGFiZWw6ICdIaWRlIHRoZSBzZWxlY3Rpb24gaW5mbyBwYW5lbCcsXHJcbiAgICB2YWx1ZTogaGlkZVNlbGVjdGlvbkluZm9cclxuICB9LFxyXG4gIHtcclxuICAgIGlkOiAnZGlzYWJsZU1vZGVsTGluaycsXHJcbiAgICBsYWJlbDogJ05vIGxpbmsgYmFjayB0byB3ZWIgdmlld2VyJyxcclxuICAgIHZhbHVlOiBkaXNhYmxlTW9kZWxMaW5rXHJcbiAgfSxcclxuICB7XHJcbiAgICBpZDogJ25vU2Nyb2xsJyxcclxuICAgIGxhYmVsOiAnUHJldmVudCBzY3JvbGxpbmcgKHpvb21pbmcpJyxcclxuICAgIHZhbHVlOiBwcmV2ZW50U2Nyb2xsaW5nXHJcbiAgfSxcclxuICB7XHJcbiAgICBpZDogJ21hbnVhbExvYWQnLFxyXG4gICAgbGFiZWw6ICdMb2FkIG1vZGVsIG1hbnVhbGx5JyxcclxuICAgIHZhbHVlOiBtYW51YWxseUxvYWRNb2RlbFxyXG4gIH1cclxuXVxyXG5cclxud2F0Y2goXHJcbiAgKCkgPT4gcHJvcHMucHJvamVjdC53b3Jrc3BhY2U/LmVtYmVkT3B0aW9ucz8uaGlkZVNwZWNrbGVCcmFuZGluZyxcclxuICAoKSA9PiB7XHJcbiAgICBpZiAoaXNXb3Jrc3BhY2VzRW5hYmxlZC52YWx1ZSkge1xyXG4gICAgICBoaWRlU3BlY2tsZUJyYW5kaW5nLnZhbHVlID1cclxuICAgICAgICBwcm9wcy5wcm9qZWN0LndvcmtzcGFjZT8uZW1iZWRPcHRpb25zPy5oaWRlU3BlY2tsZUJyYW5kaW5nID8/IGZhbHNlXHJcbiAgICB9XHJcbiAgfSxcclxuICB7IGltbWVkaWF0ZTogdHJ1ZSB9XHJcbilcclxuXHJcbndhdGNoKFxyXG4gIGlzT3BlbixcclxuICBhc3luYyAobmV3VmFsdWUpID0+IHtcclxuICAgIGlmIChuZXdWYWx1ZSkge1xyXG4gICAgICBtaXhwYW5lbC50cmFjaygnRW1iZWQgRGlhbG9nIE9wZW5lZCcsIHtcclxuICAgICAgICBwcm9qZWN0SWQ6IHByb3BzLnByb2plY3QuaWQsXHJcbiAgICAgICAgdmlzaWJpbGl0eTogcHJvamVjdFZpc2liaWxpdHkudmFsdWVcclxuICAgICAgfSlcclxuXHJcbiAgICAgIGlmIChjYW5DcmVhdGVFbWJlZFRva2Vucy52YWx1ZSkge1xyXG4gICAgICAgIG1peHBhbmVsLnRyYWNrKCdFbWJlZCBUb2tlbiBDcmVhdGVkJywge1xyXG4gICAgICAgICAgcHJvamVjdElkOiBwcm9wcy5wcm9qZWN0LmlkLFxyXG4gICAgICAgICAgdmlzaWJpbGl0eTogcHJvamVjdFZpc2liaWxpdHkudmFsdWVcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBjb25zdCB0b2tlbiA9IGF3YWl0IGNyZWF0ZUVtYmVkVG9rZW4oe1xyXG4gICAgICAgICAgcHJvamVjdElkOiBwcm9wcy5wcm9qZWN0LmlkLFxyXG4gICAgICAgICAgcmVzb3VyY2VJZFN0cmluZzogcm91dGVNb2RlbElkLnZhbHVlXHJcbiAgICAgICAgfSlcclxuXHJcbiAgICAgICAgaWYgKHRva2VuKSB7XHJcbiAgICAgICAgICBlbWJlZFRva2VuLnZhbHVlID0gdG9rZW5cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9LFxyXG4gIHsgaW1tZWRpYXRlOiB0cnVlIH1cclxuKVxyXG5cclxud2F0Y2goZW1iZWRkZWRTYXZlZFZpZXcsIChuZXdWYWwsIG9sZFZhbCkgPT4ge1xyXG4gIGlmIChuZXdWYWwpIHtcclxuICAgIHNob3VsZEVtYmVkU2F2ZWRWaWV3LnZhbHVlID0gdHJ1ZVxyXG5cclxuICAgIGlmICghb2xkVmFsIHx8IG5ld1ZhbC5pZCAhPT0gb2xkVmFsLmlkKSB7XHJcbiAgICAgIGFyZU9wdGlvbnNFeHBhbmRlZC52YWx1ZSA9IHRydWVcclxuICAgIH1cclxuICB9XHJcbn0pXHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy9wcm9qZWN0L21vZGVsLXBhZ2UvZGlhbG9nL2VtYmVkL0VtYmVkLnZ1ZSJ9