497 lines
45 KiB
Plaintext
497 lines
45 KiB
Plaintext
import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/viewer/saved-views/panel/View.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/global/icon/Home.vue";
|
|
import { FormButton as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
import { LayoutMenu as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
|
|
/* Injection by vite-plugin-vue-inspector Start */
|
|
import { createElementVNode as __createElementVNode,createVNode as __createVNode,createElementBlock as __createElementBlock,createBlock as __createBlock } 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 _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
|
|
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
|
|
function _createBlock(...args) { return _interopVNode(__createBlock(...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 {
|
|
StringEnum,
|
|
throwUncoveredError
|
|
} from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/index.js";
|
|
import { useMutationLoading } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29";
|
|
import { difference } from "/_nuxt/node_modules/.cache/vite/client/deps/lodash-es.js?v=e4f18c29";
|
|
import { Ellipsis, SquarePen, User } from "/_nuxt/node_modules/.cache/vite/client/deps/lucide-vue-next.js?v=e4f18c29";
|
|
import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts";
|
|
import {
|
|
SavedViewVisibility
|
|
} from "/_nuxt/lib/common/generated/gql/graphql.ts";
|
|
import { useMixpanel } from "/_nuxt/lib/core/composables/mp.ts";
|
|
import { useViewerSavedViewsUtils } from "/_nuxt/lib/viewer/composables/savedViews/general.ts";
|
|
import {
|
|
useCollectNewSavedViewViewerData,
|
|
useUpdateSavedView
|
|
} from "/_nuxt/lib/viewer/composables/savedViews/management.ts";
|
|
import {
|
|
useDraggableView,
|
|
useDraggableViewTargetView
|
|
} from "/_nuxt/lib/viewer/composables/savedViews/ui.ts";
|
|
import { useSavedViewValidationHelpers } from "/_nuxt/lib/viewer/composables/savedViews/validation.ts";
|
|
import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts";
|
|
|
|
import { useSmartTooltipDelay } from "/_nuxt/composables/tooltips.ts";
|
|
import { useEventBus } from "/_nuxt/composables/globals.ts";
|
|
import { useDateFormatters } from "/_nuxt/composables/dates.ts";
|
|
import { computed, ref, useId } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
import { ViewerEventBusKeys } from "/_nuxt/utils/globals.ts";
|
|
const _sfc_main = /* @__PURE__ */ _defineComponent({
|
|
__name: "ViewerSavedViewsPanelView",
|
|
props: {
|
|
view: { type: Object, required: true }
|
|
},
|
|
setup(__props, { expose: __expose }) {
|
|
__expose();
|
|
const MenuItems = StringEnum([
|
|
"Delete",
|
|
"LoadOriginalVersions",
|
|
"CopyLink",
|
|
"ChangeVisibility",
|
|
"ReplaceView",
|
|
"MoveToGroup",
|
|
"SetAsHomeView",
|
|
"Embed"
|
|
]);
|
|
const { getTooltipProps } = useSmartTooltipDelay();
|
|
graphql(`
|
|
fragment ViewerSavedViewsPanelView_SavedView on SavedView {
|
|
id
|
|
name
|
|
description
|
|
thumbnailUrl
|
|
visibility
|
|
isHomeView
|
|
resourceIds
|
|
author {
|
|
id
|
|
name
|
|
}
|
|
updatedAt
|
|
permissions {
|
|
canUpdate {
|
|
...FullPermissionCheckResult
|
|
}
|
|
}
|
|
...UseDeleteSavedView_SavedView
|
|
...UseUpdateSavedView_SavedView
|
|
...ViewerSavedViewsPanelViewEditDialog_SavedView
|
|
...UseSavedViewValidationHelpers_SavedView
|
|
...UseDraggableView_SavedView
|
|
}
|
|
`);
|
|
const props = __props;
|
|
const {
|
|
resources: {
|
|
response: { savedView, isFederatedView, resourceItemsIds, project }
|
|
}
|
|
} = useInjectedViewerState();
|
|
const { collect } = useCollectNewSavedViewViewerData();
|
|
const updateView = useUpdateSavedView();
|
|
const isLoading = useMutationLoading();
|
|
const { copyLink, applyView } = useViewerSavedViewsUtils();
|
|
const eventBus = useEventBus();
|
|
const { formattedRelativeDate, formattedFullDate } = useDateFormatters();
|
|
const {
|
|
canUpdate,
|
|
isOnlyVisibleToMe,
|
|
canSetHomeView,
|
|
isHomeView,
|
|
canToggleVisibility,
|
|
canMove,
|
|
canOpenEditDialog,
|
|
canEmbed
|
|
} = useSavedViewValidationHelpers({
|
|
view: computed(() => props.view)
|
|
});
|
|
const { classes: draggableClasses, on } = useDraggableView({
|
|
view: computed(() => props.view)
|
|
});
|
|
const { classes: draggableTargetClasses, on: targetOn } = useDraggableViewTargetView({
|
|
view: computed(() => props.view)
|
|
});
|
|
const mp = useMixpanel();
|
|
const showMenu = ref(false);
|
|
const menuId = useId();
|
|
const isActive = computed(() => props.view.id === savedView.value?.id);
|
|
const isOriginalVersionAlreadyLoaded = computed(() => {
|
|
const viewResources = props.view.resourceIds;
|
|
const currentlyLoadedResources = resourceItemsIds.value;
|
|
return difference(viewResources, currentlyLoadedResources).length === 0;
|
|
});
|
|
const canLoadOriginal = computed(
|
|
() => {
|
|
if (isOriginalVersionAlreadyLoaded.value) {
|
|
return { authorized: false, message: "Original version is already loaded" };
|
|
}
|
|
return { authorized: true, message: void 0 };
|
|
}
|
|
);
|
|
const menuItems = computed(() => [
|
|
[
|
|
{
|
|
id: MenuItems.MoveToGroup,
|
|
title: "Move to group",
|
|
disabled: !canMove.value?.authorized || isLoading.value,
|
|
disabledTooltip: canMove.value?.errorMessage
|
|
},
|
|
{
|
|
id: MenuItems.ReplaceView,
|
|
title: "Replace view",
|
|
disabled: !canUpdate.value?.authorized || isLoading.value,
|
|
disabledTooltip: canUpdate.value?.errorMessage
|
|
},
|
|
{
|
|
id: MenuItems.CopyLink,
|
|
title: "Copy link"
|
|
},
|
|
{
|
|
id: MenuItems.LoadOriginalVersions,
|
|
title: "Load with original model version",
|
|
disabled: !canLoadOriginal.value.authorized || isLoading.value,
|
|
disabledTooltip: canLoadOriginal.value.message
|
|
}
|
|
],
|
|
[
|
|
{
|
|
id: MenuItems.SetAsHomeView,
|
|
title: "Set as home view",
|
|
active: !!isHomeView.value,
|
|
disabled: !canSetHomeView.value.authorized,
|
|
disabledTooltip: canSetHomeView.value.message
|
|
},
|
|
{
|
|
id: MenuItems.ChangeVisibility,
|
|
title: isOnlyVisibleToMe.value ? "Make view shared" : "Make view private",
|
|
disabled: !canToggleVisibility.value.authorized,
|
|
disabledTooltip: canToggleVisibility.value.message
|
|
},
|
|
{
|
|
id: MenuItems.Embed,
|
|
title: "Embed view",
|
|
disabled: !canEmbed.value?.authorized,
|
|
disabledTooltip: canEmbed.value?.errorMessage
|
|
}
|
|
],
|
|
[
|
|
{
|
|
id: MenuItems.Delete,
|
|
title: "Delete view...",
|
|
disabled: !canUpdate.value?.authorized || isLoading.value,
|
|
disabledTooltip: canUpdate.value?.errorMessage
|
|
}
|
|
]
|
|
]);
|
|
const wrapperClasses = computed(() => {
|
|
const classParts = [
|
|
"flex items-center gap-2 p-2 w-full group rounded-md cursor-pointer relative transition-all"
|
|
];
|
|
if (isActive.value) {
|
|
classParts.push("bg-highlight-2 hover:bg-highlight-3");
|
|
} else {
|
|
classParts.push("hover:bg-highlight-1");
|
|
}
|
|
return classParts.join(" ");
|
|
});
|
|
const onActionChosen = async (item) => {
|
|
switch (item.id) {
|
|
case MenuItems.Delete:
|
|
eventBus.emit(ViewerEventBusKeys.MarkSavedViewForEdit, {
|
|
type: "delete",
|
|
view: props.view
|
|
});
|
|
break;
|
|
case MenuItems.CopyLink:
|
|
await copyLink({
|
|
settings: {
|
|
id: props.view.id
|
|
}
|
|
});
|
|
mp.track("Saved View Link Copied", {
|
|
viewId: props.view.id,
|
|
// eslint-disable-next-line camelcase
|
|
workspace_id: project.value?.workspaceId
|
|
});
|
|
break;
|
|
case MenuItems.LoadOriginalVersions:
|
|
applyView({
|
|
id: props.view.id,
|
|
loadOriginal: true
|
|
});
|
|
mp.track("Saved View Original Version Loaded", {
|
|
viewId: props.view.id,
|
|
// eslint-disable-next-line camelcase
|
|
workspace_id: project.value?.workspaceId
|
|
});
|
|
break;
|
|
case MenuItems.ChangeVisibility:
|
|
await updateView({
|
|
view: props.view,
|
|
input: {
|
|
id: props.view.id,
|
|
projectId: props.view.projectId,
|
|
visibility: isOnlyVisibleToMe.value ? SavedViewVisibility.Public : SavedViewVisibility.AuthorOnly
|
|
}
|
|
});
|
|
break;
|
|
case MenuItems.ReplaceView:
|
|
await updateView({
|
|
view: props.view,
|
|
input: {
|
|
id: props.view.id,
|
|
...await collect()
|
|
}
|
|
});
|
|
break;
|
|
case MenuItems.MoveToGroup:
|
|
eventBus.emit(ViewerEventBusKeys.MarkSavedViewForEdit, {
|
|
type: "move",
|
|
view: props.view
|
|
});
|
|
break;
|
|
case MenuItems.SetAsHomeView:
|
|
await updateView({
|
|
view: props.view,
|
|
input: {
|
|
id: props.view.id,
|
|
projectId: props.view.projectId,
|
|
isHomeView: !isHomeView.value
|
|
}
|
|
});
|
|
break;
|
|
case MenuItems.Embed:
|
|
eventBus.emit(ViewerEventBusKeys.MarkSavedViewForEmbed, {
|
|
view: props.view
|
|
});
|
|
break;
|
|
default:
|
|
throwUncoveredError(item.id);
|
|
}
|
|
};
|
|
const apply = async () => {
|
|
applyView({
|
|
id: props.view.id
|
|
});
|
|
};
|
|
const onEdit = () => {
|
|
eventBus.emit(ViewerEventBusKeys.MarkSavedViewForEdit, {
|
|
type: "edit",
|
|
view: props.view
|
|
});
|
|
};
|
|
const __returned__ = { MenuItems, getTooltipProps, props, savedView, isFederatedView, resourceItemsIds, project, collect, updateView, isLoading, copyLink, applyView, eventBus, formattedRelativeDate, formattedFullDate, canUpdate, isOnlyVisibleToMe, canSetHomeView, isHomeView, canToggleVisibility, canMove, canOpenEditDialog, canEmbed, draggableClasses, on, draggableTargetClasses, targetOn, mp, showMenu, menuId, isActive, isOriginalVersionAlreadyLoaded, canLoadOriginal, menuItems, wrapperClasses, onActionChosen, apply, onEdit, get Ellipsis() {
|
|
return Ellipsis;
|
|
}, get SquarePen() {
|
|
return SquarePen;
|
|
}, get User() {
|
|
return User;
|
|
} };
|
|
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
|
|
return __returned__;
|
|
}
|
|
});
|
|
import { resolveComponent as _resolveComponent, openBlock as _openBlock, createCommentVNode as _createCommentVNode, toDisplayString as _toDisplayString, resolveDirective as _resolveDirective, withDirectives as _withDirectives, createTextVNode as _createTextVNode, withCtx as _withCtx, withModifiers as _withModifiers, toHandlers as _toHandlers, mergeProps as _mergeProps } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
|
|
const _hoisted_1 = ["view-id"];
|
|
const _hoisted_2 = {
|
|
class: "flex items-center shrink-0",
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:12:5"
|
|
};
|
|
const _hoisted_3 = {
|
|
class: "relative",
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:13:7"
|
|
};
|
|
const _hoisted_4 = ["src"];
|
|
const _hoisted_5 = {
|
|
key: 0,
|
|
class: "absolute -top-1 -left-1 bg-orange-500 w-4 h-4 flex items-center justify-center rounded-[3px]",
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:19:9"
|
|
};
|
|
const _hoisted_6 = {
|
|
class: "flex flex-col min-w-0 grow gap-y-0.5",
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:27:5"
|
|
};
|
|
const _hoisted_7 = {
|
|
class: "text-body-2xs font-medium text-foreground truncate grow-0",
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:28:7"
|
|
};
|
|
const _hoisted_8 = {
|
|
class: "text-body-2xs text-foreground-3 truncate",
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:31:7"
|
|
};
|
|
const _hoisted_9 = {
|
|
class: "w-full flex items-center gap-1",
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:34:7"
|
|
};
|
|
const _hoisted_10 = {
|
|
class: "text-body-2xs text-foreground-3 truncate pr-1.5",
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:43:9"
|
|
};
|
|
const _hoisted_11 = {
|
|
class: "shrink-0 opacity-0 group-hover:opacity-100",
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:81:7"
|
|
};
|
|
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
|
const _component_IconHome = __nuxt_component_0;
|
|
const _component_FormButton = __nuxt_component_1;
|
|
const _component_LayoutMenu = __nuxt_component_2;
|
|
const _directive_tippy = _resolveDirective("tippy");
|
|
const _directive_keyboard_clickable = _resolveDirective("keyboard-clickable");
|
|
return _withDirectives((_openBlock(), _createElementBlock("div", _mergeProps({
|
|
class: [$setup.wrapperClasses, $setup.draggableClasses, $setup.draggableTargetClasses],
|
|
"view-id": $props.view.id,
|
|
draggable: "true"
|
|
}, _toHandlers({ ...$setup.on, ...$setup.targetOn }, true), {
|
|
onClick: $setup.apply,
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:4:3"
|
|
}), [
|
|
_createElementVNode("div", _hoisted_2, [
|
|
_createElementVNode("div", _hoisted_3, [
|
|
_createElementVNode("img", {
|
|
src: $props.view.thumbnailUrl,
|
|
alt: "View screenshot",
|
|
class: "w-20 h-[60px] object-cover rounded border border-outline-3 bg-foundation-page cursor-pointer",
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:14:9"
|
|
}, null, 8, _hoisted_4),
|
|
$setup.isHomeView && !$setup.isFederatedView ? (_openBlock(), _createElementBlock("div", _hoisted_5, [
|
|
_createVNode(_component_IconHome, {
|
|
class: "w-3 h-3",
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:23:11"
|
|
})
|
|
])) : _createCommentVNode("v-if", true)
|
|
])
|
|
]),
|
|
_createElementVNode("div", _hoisted_6, [
|
|
_createElementVNode(
|
|
"div",
|
|
_hoisted_7,
|
|
_toDisplayString($props.view.name),
|
|
1
|
|
/* TEXT */
|
|
),
|
|
_createElementVNode(
|
|
"div",
|
|
_hoisted_8,
|
|
_toDisplayString($props.view.author?.name),
|
|
1
|
|
/* TEXT */
|
|
),
|
|
_createElementVNode("div", _hoisted_9, [
|
|
$setup.isOnlyVisibleToMe ? _withDirectives((_openBlock(), _createBlock(
|
|
$setup["User"],
|
|
{
|
|
key: 0,
|
|
size: 12,
|
|
"stroke-width": 1.5,
|
|
"absolute-stroke-width": true,
|
|
class: "w-3 h-3 text-foreground-3 shrink-0",
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:35:9"
|
|
},
|
|
null,
|
|
512
|
|
/* NEED_PATCH */
|
|
)), [
|
|
[_directive_tippy, $setup.getTooltipProps("Only visible to you")]
|
|
]) : _createCommentVNode("v-if", true),
|
|
_withDirectives((_openBlock(), _createElementBlock("div", _hoisted_10, [
|
|
_createTextVNode(
|
|
_toDisplayString($setup.formattedRelativeDate($props.view.updatedAt, { capitalize: true })),
|
|
1
|
|
/* TEXT */
|
|
)
|
|
])), [
|
|
[_directive_tippy, {
|
|
content: $setup.formattedFullDate($props.view.updatedAt),
|
|
delay: [700, 100],
|
|
duration: [120, 150],
|
|
offset: [0, 2],
|
|
placement: "right"
|
|
}]
|
|
])
|
|
])
|
|
]),
|
|
_createElementVNode("div", {
|
|
class: "flex gap-0.5 items-center opacity-0 w-0 group-hover:opacity-100 group-hover:w-auto",
|
|
onClick: _cache[3] || (_cache[3] = _withModifiers(() => {
|
|
}, ["stop"])),
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:57:5"
|
|
}, [
|
|
_createVNode(_component_LayoutMenu, {
|
|
open: $setup.showMenu,
|
|
"onUpdate:open": _cache[1] || (_cache[1] = ($event) => $setup.showMenu = $event),
|
|
items: $setup.menuItems,
|
|
"menu-id": $setup.menuId,
|
|
"mount-menu-on-body": "",
|
|
"show-ticks": "right",
|
|
size: 230,
|
|
class: "shrink-0",
|
|
onChosen: _cache[2] || (_cache[2] = ({ item: actionItem }) => $setup.onActionChosen(actionItem)),
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:61:7"
|
|
}, {
|
|
default: _withCtx(() => [
|
|
_createVNode(_component_FormButton, {
|
|
size: "sm",
|
|
color: "subtle",
|
|
"icon-left": $setup.Ellipsis,
|
|
"hide-text": "",
|
|
name: "viewActions",
|
|
class: "shrink-0",
|
|
onClick: _cache[0] || (_cache[0] = ($event) => $setup.showMenu = !$setup.showMenu),
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:71:9"
|
|
}, null, 8, ["icon-left"])
|
|
]),
|
|
_: 1
|
|
/* STABLE */
|
|
}, 8, ["open", "items", "menu-id"]),
|
|
_withDirectives((_openBlock(), _createElementBlock("div", _hoisted_11, [
|
|
_createVNode(_component_FormButton, {
|
|
size: "sm",
|
|
color: "subtle",
|
|
"icon-left": $setup.SquarePen,
|
|
"hide-text": "",
|
|
name: "editView",
|
|
class: "shrink-0",
|
|
disabled: !$setup.canOpenEditDialog?.authorized,
|
|
onClick: $setup.onEdit,
|
|
"data-v-inspector": "components/viewer/saved-views/panel/View.vue:91:9"
|
|
}, null, 8, ["icon-left", "disabled"])
|
|
])), [
|
|
[
|
|
_directive_tippy,
|
|
$setup.getTooltipProps(
|
|
$setup.canOpenEditDialog?.authorized ? "Edit view" : $setup.canOpenEditDialog?.errorMessage
|
|
)
|
|
]
|
|
])
|
|
])
|
|
], 16, _hoisted_1)), [
|
|
[_directive_keyboard_clickable]
|
|
]);
|
|
}
|
|
_sfc_main.__hmrId = "26f14cc2";
|
|
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/viewer/saved-views/panel/View.vue"]]);
|
|
|
|
//# sourceMappingURL=data:application/json;base64,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LDBCQUFtQiwyQkFBeUQsMEJBQW1CO0FBQUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIlZpZXcudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlanMtYWNjZXNzaWJpbGl0eS9jbGljay1ldmVudHMtaGF2ZS1rZXktZXZlbnRzIC0tPlxyXG48IS0tIGVzbGludC1kaXNhYmxlIHZ1ZWpzLWFjY2Vzc2liaWxpdHkvbm8tc3RhdGljLWVsZW1lbnQtaW50ZXJhY3Rpb25zIC0tPlxyXG48dGVtcGxhdGU+XHJcbiAgPGRpdlxyXG4gICAgdi1rZXlib2FyZC1jbGlja2FibGVcclxuICAgIDpjbGFzcz1cIlt3cmFwcGVyQ2xhc3NlcywgZHJhZ2dhYmxlQ2xhc3NlcywgZHJhZ2dhYmxlVGFyZ2V0Q2xhc3Nlc11cIlxyXG4gICAgOnZpZXctaWQ9XCJ2aWV3LmlkXCJcclxuICAgIGRyYWdnYWJsZT1cInRydWVcIlxyXG4gICAgdi1vbj1cInsgLi4ub24sIC4uLnRhcmdldE9uIH1cIlxyXG4gICAgQGNsaWNrPVwiYXBwbHlcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvVmlldy52dWU6NDozXCJcclxuICA+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgc2hyaW5rLTBcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvVmlldy52dWU6MTI6NVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvVmlldy52dWU6MTM6N1wiPlxyXG4gICAgICAgIDxpbWdcclxuICAgICAgICAgIDpzcmM9XCJ2aWV3LnRodW1ibmFpbFVybFwiXHJcbiAgICAgICAgICBhbHQ9XCJWaWV3IHNjcmVlbnNob3RcIlxyXG4gICAgICAgICAgY2xhc3M9XCJ3LTIwIGgtWzYwcHhdIG9iamVjdC1jb3ZlciByb3VuZGVkIGJvcmRlciBib3JkZXItb3V0bGluZS0zIGJnLWZvdW5kYXRpb24tcGFnZSBjdXJzb3ItcG9pbnRlclwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9WaWV3LnZ1ZToxNDo5XCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIHYtaWY9XCJpc0hvbWVWaWV3ICYmICFpc0ZlZGVyYXRlZFZpZXdcIlxyXG4gICAgICAgICAgY2xhc3M9XCJhYnNvbHV0ZSAtdG9wLTEgLWxlZnQtMSBiZy1vcmFuZ2UtNTAwIHctNCBoLTQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZC1bM3B4XVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9WaWV3LnZ1ZToxOTo5XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8SWNvbkhvbWUgY2xhc3M9XCJ3LTMgaC0zXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL1ZpZXcudnVlOjIzOjExXCIgLz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIG1pbi13LTAgZ3JvdyBnYXAteS0wLjVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvVmlldy52dWU6Mjc6NVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ib2R5LTJ4cyBmb250LW1lZGl1bSB0ZXh0LWZvcmVncm91bmQgdHJ1bmNhdGUgZ3Jvdy0wXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL1ZpZXcudnVlOjI4OjdcIj5cclxuICAgICAgICB7eyB2aWV3Lm5hbWUgfX1cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJvZHktMnhzIHRleHQtZm9yZWdyb3VuZC0zIHRydW5jYXRlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL1ZpZXcudnVlOjMxOjdcIj5cclxuICAgICAgICB7eyB2aWV3LmF1dGhvcj8ubmFtZSB9fVxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9WaWV3LnZ1ZTozNDo3XCI+XHJcbiAgICAgICAgPFVzZXJcclxuICAgICAgICAgIHYtaWY9XCJpc09ubHlWaXNpYmxlVG9NZVwiXHJcbiAgICAgICAgICB2LXRpcHB5PVwiZ2V0VG9vbHRpcFByb3BzKCdPbmx5IHZpc2libGUgdG8geW91JylcIlxyXG4gICAgICAgICAgOnNpemU9XCIxMlwiXHJcbiAgICAgICAgICA6c3Ryb2tlLXdpZHRoPVwiMS41XCJcclxuICAgICAgICAgIDphYnNvbHV0ZS1zdHJva2Utd2lkdGg9XCJ0cnVlXCJcclxuICAgICAgICAgIGNsYXNzPVwidy0zIGgtMyB0ZXh0LWZvcmVncm91bmQtMyBzaHJpbmstMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9WaWV3LnZ1ZTozNTo5XCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxkaXZcclxuICAgICAgICAgIHYtdGlwcHk9XCJ7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IGZvcm1hdHRlZEZ1bGxEYXRlKHZpZXcudXBkYXRlZEF0KSxcclxuICAgICAgICAgICAgZGVsYXk6IFs3MDAsIDEwMF0sXHJcbiAgICAgICAgICAgIGR1cmF0aW9uOiBbMTIwLCAxNTBdLFxyXG4gICAgICAgICAgICBvZmZzZXQ6IFswLCAyXSxcclxuICAgICAgICAgICAgcGxhY2VtZW50OiAncmlnaHQnXHJcbiAgICAgICAgICB9XCJcclxuICAgICAgICAgIGNsYXNzPVwidGV4dC1ib2R5LTJ4cyB0ZXh0LWZvcmVncm91bmQtMyB0cnVuY2F0ZSBwci0xLjVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvVmlldy52dWU6NDM6OVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAge3sgZm9ybWF0dGVkUmVsYXRpdmVEYXRlKHZpZXcudXBkYXRlZEF0LCB7IGNhcGl0YWxpemU6IHRydWUgfSkgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXZcclxuICAgICAgY2xhc3M9XCJmbGV4IGdhcC0wLjUgaXRlbXMtY2VudGVyIG9wYWNpdHktMCB3LTAgZ3JvdXAtaG92ZXI6b3BhY2l0eS0xMDAgZ3JvdXAtaG92ZXI6dy1hdXRvXCJcclxuICAgICAgQGNsaWNrLnN0b3AgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL1ZpZXcudnVlOjU3OjVcIlxyXG4gICAgPlxyXG4gICAgICA8TGF5b3V0TWVudVxyXG4gICAgICAgIHYtbW9kZWw6b3Blbj1cInNob3dNZW51XCJcclxuICAgICAgICA6aXRlbXM9XCJtZW51SXRlbXNcIlxyXG4gICAgICAgIDptZW51LWlkPVwibWVudUlkXCJcclxuICAgICAgICBtb3VudC1tZW51LW9uLWJvZHlcclxuICAgICAgICBzaG93LXRpY2tzPVwicmlnaHRcIlxyXG4gICAgICAgIDpzaXplPVwiMjMwXCJcclxuICAgICAgICBjbGFzcz1cInNocmluay0wXCJcclxuICAgICAgICBAY2hvc2VuPVwiKHsgaXRlbTogYWN0aW9uSXRlbSB9KSA9PiBvbkFjdGlvbkNob3NlbihhY3Rpb25JdGVtKVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9WaWV3LnZ1ZTo2MTo3XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxGb3JtQnV0dG9uXHJcbiAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgY29sb3I9XCJzdWJ0bGVcIlxyXG4gICAgICAgICAgOmljb24tbGVmdD1cIkVsbGlwc2lzXCJcclxuICAgICAgICAgIGhpZGUtdGV4dFxyXG4gICAgICAgICAgbmFtZT1cInZpZXdBY3Rpb25zXCJcclxuICAgICAgICAgIGNsYXNzPVwic2hyaW5rLTBcIlxyXG4gICAgICAgICAgQGNsaWNrPVwic2hvd01lbnUgPSAhc2hvd01lbnVcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvVmlldy52dWU6NzE6OVwiXHJcbiAgICAgICAgLz5cclxuICAgICAgPC9MYXlvdXRNZW51PlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgdi10aXBweT1cIlxyXG4gICAgICAgICAgZ2V0VG9vbHRpcFByb3BzKFxyXG4gICAgICAgICAgICBjYW5PcGVuRWRpdERpYWxvZz8uYXV0aG9yaXplZFxyXG4gICAgICAgICAgICAgID8gJ0VkaXQgdmlldydcclxuICAgICAgICAgICAgICA6IGNhbk9wZW5FZGl0RGlhbG9nPy5lcnJvck1lc3NhZ2VcclxuICAgICAgICAgIClcclxuICAgICAgICBcIlxyXG4gICAgICAgIGNsYXNzPVwic2hyaW5rLTAgb3BhY2l0eS0wIGdyb3VwLWhvdmVyOm9wYWNpdHktMTAwXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvdmlld2VyL3NhdmVkLXZpZXdzL3BhbmVsL1ZpZXcudnVlOjgxOjdcIlxyXG4gICAgICA+XHJcbiAgICAgICAgPEZvcm1CdXR0b25cclxuICAgICAgICAgIHNpemU9XCJzbVwiXHJcbiAgICAgICAgICBjb2xvcj1cInN1YnRsZVwiXHJcbiAgICAgICAgICA6aWNvbi1sZWZ0PVwiU3F1YXJlUGVuXCJcclxuICAgICAgICAgIGhpZGUtdGV4dFxyXG4gICAgICAgICAgbmFtZT1cImVkaXRWaWV3XCJcclxuICAgICAgICAgIGNsYXNzPVwic2hyaW5rLTBcIlxyXG4gICAgICAgICAgOmRpc2FibGVkPVwiIWNhbk9wZW5FZGl0RGlhbG9nPy5hdXRob3JpemVkXCJcclxuICAgICAgICAgIEBjbGljaz1cIm9uRWRpdFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3ZpZXdlci9zYXZlZC12aWV3cy9wYW5lbC9WaWV3LnZ1ZTo5MTo5XCJcclxuICAgICAgICAvPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQge1xyXG4gIFN0cmluZ0VudW0sXHJcbiAgdGhyb3dVbmNvdmVyZWRFcnJvcixcclxuICB0eXBlIE9wdGlvbmFsLFxyXG4gIHR5cGUgU3RyaW5nRW51bVZhbHVlc1xyXG59IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHR5cGUgeyBMYXlvdXRNZW51SXRlbSB9IGZyb20gJ0BzcGVja2xlL3VpLWNvbXBvbmVudHMnXHJcbmltcG9ydCB7IHVzZU11dGF0aW9uTG9hZGluZyB9IGZyb20gJ0B2dWUvYXBvbGxvLWNvbXBvc2FibGUnXHJcbmltcG9ydCB7IGRpZmZlcmVuY2UgfSBmcm9tICdsb2Rhc2gtZXMnXHJcbmltcG9ydCB7IEVsbGlwc2lzLCBTcXVhcmVQZW4sIFVzZXIgfSBmcm9tICdsdWNpZGUtdnVlLW5leHQnXHJcbmltcG9ydCB7IGdyYXBocWwgfSBmcm9tICd+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbCdcclxuaW1wb3J0IHtcclxuICBTYXZlZFZpZXdWaXNpYmlsaXR5LFxyXG4gIHR5cGUgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXdGcmFnbWVudFxyXG59IGZyb20gJ34vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsL2dyYXBocWwnXHJcbmltcG9ydCB7IHVzZU1peHBhbmVsIH0gZnJvbSAnfi9saWIvY29yZS9jb21wb3NhYmxlcy9tcCdcclxuaW1wb3J0IHsgdXNlVmlld2VyU2F2ZWRWaWV3c1V0aWxzIH0gZnJvbSAnfi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3NhdmVkVmlld3MvZ2VuZXJhbCdcclxuaW1wb3J0IHtcclxuICB1c2VDb2xsZWN0TmV3U2F2ZWRWaWV3Vmlld2VyRGF0YSxcclxuICB1c2VVcGRhdGVTYXZlZFZpZXdcclxufSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2F2ZWRWaWV3cy9tYW5hZ2VtZW50J1xyXG5pbXBvcnQge1xyXG4gIHVzZURyYWdnYWJsZVZpZXcsXHJcbiAgdXNlRHJhZ2dhYmxlVmlld1RhcmdldFZpZXdcclxufSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2F2ZWRWaWV3cy91aSdcclxuaW1wb3J0IHsgdXNlU2F2ZWRWaWV3VmFsaWRhdGlvbkhlbHBlcnMgfSBmcm9tICd+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2F2ZWRWaWV3cy92YWxpZGF0aW9uJ1xyXG5pbXBvcnQgeyB1c2VJbmplY3RlZFZpZXdlclN0YXRlIH0gZnJvbSAnfi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3NldHVwJ1xyXG5cclxuY29uc3QgTWVudUl0ZW1zID0gU3RyaW5nRW51bShbXHJcbiAgJ0RlbGV0ZScsXHJcbiAgJ0xvYWRPcmlnaW5hbFZlcnNpb25zJyxcclxuICAnQ29weUxpbmsnLFxyXG4gICdDaGFuZ2VWaXNpYmlsaXR5JyxcclxuICAnUmVwbGFjZVZpZXcnLFxyXG4gICdNb3ZlVG9Hcm91cCcsXHJcbiAgJ1NldEFzSG9tZVZpZXcnLFxyXG4gICdFbWJlZCdcclxuXSlcclxudHlwZSBNZW51SXRlbXMgPSBTdHJpbmdFbnVtVmFsdWVzPHR5cGVvZiBNZW51SXRlbXM+XHJcblxyXG5jb25zdCB7IGdldFRvb2x0aXBQcm9wcyB9ID0gdXNlU21hcnRUb29sdGlwRGVsYXkoKVxyXG5cclxuZ3JhcGhxbChgXHJcbiAgZnJhZ21lbnQgVmlld2VyU2F2ZWRWaWV3c1BhbmVsVmlld19TYXZlZFZpZXcgb24gU2F2ZWRWaWV3IHtcclxuICAgIGlkXHJcbiAgICBuYW1lXHJcbiAgICBkZXNjcmlwdGlvblxyXG4gICAgdGh1bWJuYWlsVXJsXHJcbiAgICB2aXNpYmlsaXR5XHJcbiAgICBpc0hvbWVWaWV3XHJcbiAgICByZXNvdXJjZUlkc1xyXG4gICAgYXV0aG9yIHtcclxuICAgICAgaWRcclxuICAgICAgbmFtZVxyXG4gICAgfVxyXG4gICAgdXBkYXRlZEF0XHJcbiAgICBwZXJtaXNzaW9ucyB7XHJcbiAgICAgIGNhblVwZGF0ZSB7XHJcbiAgICAgICAgLi4uRnVsbFBlcm1pc3Npb25DaGVja1Jlc3VsdFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAuLi5Vc2VEZWxldGVTYXZlZFZpZXdfU2F2ZWRWaWV3XHJcbiAgICAuLi5Vc2VVcGRhdGVTYXZlZFZpZXdfU2F2ZWRWaWV3XHJcbiAgICAuLi5WaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3RWRpdERpYWxvZ19TYXZlZFZpZXdcclxuICAgIC4uLlVzZVNhdmVkVmlld1ZhbGlkYXRpb25IZWxwZXJzX1NhdmVkVmlld1xyXG4gICAgLi4uVXNlRHJhZ2dhYmxlVmlld19TYXZlZFZpZXdcclxuICB9XHJcbmApXHJcblxyXG5jb25zdCBwcm9wcyA9IGRlZmluZVByb3BzPHtcclxuICB2aWV3OiBWaWV3ZXJTYXZlZFZpZXdzUGFuZWxWaWV3X1NhdmVkVmlld0ZyYWdtZW50XHJcbn0+KClcclxuXHJcbmNvbnN0IHtcclxuICByZXNvdXJjZXM6IHtcclxuICAgIHJlc3BvbnNlOiB7IHNhdmVkVmlldywgaXNGZWRlcmF0ZWRWaWV3LCByZXNvdXJjZUl0ZW1zSWRzLCBwcm9qZWN0IH1cclxuICB9XHJcbn0gPSB1c2VJbmplY3RlZFZpZXdlclN0YXRlKClcclxuY29uc3QgeyBjb2xsZWN0IH0gPSB1c2VDb2xsZWN0TmV3U2F2ZWRWaWV3Vmlld2VyRGF0YSgpXHJcbmNvbnN0IHVwZGF0ZVZpZXcgPSB1c2VVcGRhdGVTYXZlZFZpZXcoKVxyXG5jb25zdCBpc0xvYWRpbmcgPSB1c2VNdXRhdGlvbkxvYWRpbmcoKVxyXG5jb25zdCB7IGNvcHlMaW5rLCBhcHBseVZpZXcgfSA9IHVzZVZpZXdlclNhdmVkVmlld3NVdGlscygpXHJcbmNvbnN0IGV2ZW50QnVzID0gdXNlRXZlbnRCdXMoKVxyXG5jb25zdCB7IGZvcm1hdHRlZFJlbGF0aXZlRGF0ZSwgZm9ybWF0dGVkRnVsbERhdGUgfSA9IHVzZURhdGVGb3JtYXR0ZXJzKClcclxuY29uc3Qge1xyXG4gIGNhblVwZGF0ZSxcclxuICBpc09ubHlWaXNpYmxlVG9NZSxcclxuICBjYW5TZXRIb21lVmlldyxcclxuICBpc0hvbWVWaWV3LFxyXG4gIGNhblRvZ2dsZVZpc2liaWxpdHksXHJcbiAgY2FuTW92ZSxcclxuICBjYW5PcGVuRWRpdERpYWxvZyxcclxuICBjYW5FbWJlZFxyXG59ID0gdXNlU2F2ZWRWaWV3VmFsaWRhdGlvbkhlbHBlcnMoe1xyXG4gIHZpZXc6IGNvbXB1dGVkKCgpID0+IHByb3BzLnZpZXcpXHJcbn0pXHJcbmNvbnN0IHsgY2xhc3NlczogZHJhZ2dhYmxlQ2xhc3Nlcywgb24gfSA9IHVzZURyYWdnYWJsZVZpZXcoe1xyXG4gIHZpZXc6IGNvbXB1dGVkKCgpID0+IHByb3BzLnZpZXcpXHJcbn0pXHJcbmNvbnN0IHsgY2xhc3NlczogZHJhZ2dhYmxlVGFyZ2V0Q2xhc3Nlcywgb246IHRhcmdldE9uIH0gPSB1c2VEcmFnZ2FibGVWaWV3VGFyZ2V0Vmlldyh7XHJcbiAgdmlldzogY29tcHV0ZWQoKCkgPT4gcHJvcHMudmlldylcclxufSlcclxuXHJcbmNvbnN0IG1wID0gdXNlTWl4cGFuZWwoKVxyXG5cclxuY29uc3Qgc2hvd01lbnUgPSByZWYoZmFsc2UpXHJcbmNvbnN0IG1lbnVJZCA9IHVzZUlkKClcclxuXHJcbmNvbnN0IGlzQWN0aXZlID0gY29tcHV0ZWQoKCkgPT4gcHJvcHMudmlldy5pZCA9PT0gc2F2ZWRWaWV3LnZhbHVlPy5pZClcclxuXHJcbmNvbnN0IGlzT3JpZ2luYWxWZXJzaW9uQWxyZWFkeUxvYWRlZCA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBjb25zdCB2aWV3UmVzb3VyY2VzID0gcHJvcHMudmlldy5yZXNvdXJjZUlkc1xyXG4gIGNvbnN0IGN1cnJlbnRseUxvYWRlZFJlc291cmNlcyA9IHJlc291cmNlSXRlbXNJZHMudmFsdWVcclxuICByZXR1cm4gZGlmZmVyZW5jZSh2aWV3UmVzb3VyY2VzLCBjdXJyZW50bHlMb2FkZWRSZXNvdXJjZXMpLmxlbmd0aCA9PT0gMFxyXG59KVxyXG5cclxuY29uc3QgY2FuTG9hZE9yaWdpbmFsID0gY29tcHV0ZWQoXHJcbiAgKCk6IHsgYXV0aG9yaXplZDogYm9vbGVhbjsgbWVzc2FnZTogT3B0aW9uYWw8c3RyaW5nPiB9ID0+IHtcclxuICAgIGlmIChpc09yaWdpbmFsVmVyc2lvbkFscmVhZHlMb2FkZWQudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHsgYXV0aG9yaXplZDogZmFsc2UsIG1lc3NhZ2U6ICdPcmlnaW5hbCB2ZXJzaW9uIGlzIGFscmVhZHkgbG9hZGVkJyB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHsgYXV0aG9yaXplZDogdHJ1ZSwgbWVzc2FnZTogdW5kZWZpbmVkIH1cclxuICB9XHJcbilcclxuXHJcbmNvbnN0IG1lbnVJdGVtcyA9IGNvbXB1dGVkKCgpOiBMYXlvdXRNZW51SXRlbTxNZW51SXRlbXM+W11bXSA9PiBbXHJcbiAgW1xyXG4gICAge1xyXG4gICAgICBpZDogTWVudUl0ZW1zLk1vdmVUb0dyb3VwLFxyXG4gICAgICB0aXRsZTogJ01vdmUgdG8gZ3JvdXAnLFxyXG4gICAgICBkaXNhYmxlZDogIWNhbk1vdmUudmFsdWU/LmF1dGhvcml6ZWQgfHwgaXNMb2FkaW5nLnZhbHVlLFxyXG4gICAgICBkaXNhYmxlZFRvb2x0aXA6IGNhbk1vdmUudmFsdWU/LmVycm9yTWVzc2FnZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IE1lbnVJdGVtcy5SZXBsYWNlVmlldyxcclxuICAgICAgdGl0bGU6ICdSZXBsYWNlIHZpZXcnLFxyXG4gICAgICBkaXNhYmxlZDogIWNhblVwZGF0ZS52YWx1ZT8uYXV0aG9yaXplZCB8fCBpc0xvYWRpbmcudmFsdWUsXHJcbiAgICAgIGRpc2FibGVkVG9vbHRpcDogY2FuVXBkYXRlLnZhbHVlPy5lcnJvck1lc3NhZ2VcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiBNZW51SXRlbXMuQ29weUxpbmssXHJcbiAgICAgIHRpdGxlOiAnQ29weSBsaW5rJ1xyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IE1lbnVJdGVtcy5Mb2FkT3JpZ2luYWxWZXJzaW9ucyxcclxuICAgICAgdGl0bGU6ICdMb2FkIHdpdGggb3JpZ2luYWwgbW9kZWwgdmVyc2lvbicsXHJcbiAgICAgIGRpc2FibGVkOiAhY2FuTG9hZE9yaWdpbmFsLnZhbHVlLmF1dGhvcml6ZWQgfHwgaXNMb2FkaW5nLnZhbHVlLFxyXG4gICAgICBkaXNhYmxlZFRvb2x0aXA6IGNhbkxvYWRPcmlnaW5hbC52YWx1ZS5tZXNzYWdlXHJcbiAgICB9XHJcbiAgXSxcclxuICBbXHJcbiAgICB7XHJcbiAgICAgIGlkOiBNZW51SXRlbXMuU2V0QXNIb21lVmlldyxcclxuICAgICAgdGl0bGU6ICdTZXQgYXMgaG9tZSB2aWV3JyxcclxuICAgICAgYWN0aXZlOiAhIWlzSG9tZVZpZXcudmFsdWUsXHJcbiAgICAgIGRpc2FibGVkOiAhY2FuU2V0SG9tZVZpZXcudmFsdWUuYXV0aG9yaXplZCxcclxuICAgICAgZGlzYWJsZWRUb29sdGlwOiBjYW5TZXRIb21lVmlldy52YWx1ZS5tZXNzYWdlXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogTWVudUl0ZW1zLkNoYW5nZVZpc2liaWxpdHksXHJcbiAgICAgIHRpdGxlOiBpc09ubHlWaXNpYmxlVG9NZS52YWx1ZSA/ICdNYWtlIHZpZXcgc2hhcmVkJyA6ICdNYWtlIHZpZXcgcHJpdmF0ZScsXHJcbiAgICAgIGRpc2FibGVkOiAhY2FuVG9nZ2xlVmlzaWJpbGl0eS52YWx1ZS5hdXRob3JpemVkLFxyXG4gICAgICBkaXNhYmxlZFRvb2x0aXA6IGNhblRvZ2dsZVZpc2liaWxpdHkudmFsdWUubWVzc2FnZVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6IE1lbnVJdGVtcy5FbWJlZCxcclxuICAgICAgdGl0bGU6ICdFbWJlZCB2aWV3JyxcclxuICAgICAgZGlzYWJsZWQ6ICFjYW5FbWJlZC52YWx1ZT8uYXV0aG9yaXplZCxcclxuICAgICAgZGlzYWJsZWRUb29sdGlwOiBjYW5FbWJlZC52YWx1ZT8uZXJyb3JNZXNzYWdlXHJcbiAgICB9XHJcbiAgXSxcclxuICBbXHJcbiAgICB7XHJcbiAgICAgIGlkOiBNZW51SXRlbXMuRGVsZXRlLFxyXG4gICAgICB0aXRsZTogJ0RlbGV0ZSB2aWV3Li4uJyxcclxuICAgICAgZGlzYWJsZWQ6ICFjYW5VcGRhdGUudmFsdWU/LmF1dGhvcml6ZWQgfHwgaXNMb2FkaW5nLnZhbHVlLFxyXG4gICAgICBkaXNhYmxlZFRvb2x0aXA6IGNhblVwZGF0ZS52YWx1ZT8uZXJyb3JNZXNzYWdlXHJcbiAgICB9XHJcbiAgXVxyXG5dKVxyXG5cclxuY29uc3Qgd3JhcHBlckNsYXNzZXMgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgY2xhc3NQYXJ0cyA9IFtcclxuICAgICdmbGV4IGl0ZW1zLWNlbnRlciBnYXAtMiBwLTIgdy1mdWxsIGdyb3VwIHJvdW5kZWQtbWQgY3Vyc29yLXBvaW50ZXIgcmVsYXRpdmUgdHJhbnNpdGlvbi1hbGwnXHJcbiAgXVxyXG5cclxuICBpZiAoaXNBY3RpdmUudmFsdWUpIHtcclxuICAgIGNsYXNzUGFydHMucHVzaCgnYmctaGlnaGxpZ2h0LTIgaG92ZXI6YmctaGlnaGxpZ2h0LTMnKVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjbGFzc1BhcnRzLnB1c2goJ2hvdmVyOmJnLWhpZ2hsaWdodC0xJylcclxuICB9XHJcblxyXG4gIHJldHVybiBjbGFzc1BhcnRzLmpvaW4oJyAnKVxyXG59KVxyXG5cclxuY29uc3Qgb25BY3Rpb25DaG9zZW4gPSBhc3luYyAoaXRlbTogTGF5b3V0TWVudUl0ZW08TWVudUl0ZW1zPikgPT4ge1xyXG4gIHN3aXRjaCAoaXRlbS5pZCkge1xyXG4gICAgY2FzZSBNZW51SXRlbXMuRGVsZXRlOlxyXG4gICAgICBldmVudEJ1cy5lbWl0KFZpZXdlckV2ZW50QnVzS2V5cy5NYXJrU2F2ZWRWaWV3Rm9yRWRpdCwge1xyXG4gICAgICAgIHR5cGU6ICdkZWxldGUnLFxyXG4gICAgICAgIHZpZXc6IHByb3BzLnZpZXdcclxuICAgICAgfSlcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgTWVudUl0ZW1zLkNvcHlMaW5rOlxyXG4gICAgICBhd2FpdCBjb3B5TGluayh7XHJcbiAgICAgICAgc2V0dGluZ3M6IHtcclxuICAgICAgICAgIGlkOiBwcm9wcy52aWV3LmlkXHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICBtcC50cmFjaygnU2F2ZWQgVmlldyBMaW5rIENvcGllZCcsIHtcclxuICAgICAgICB2aWV3SWQ6IHByb3BzLnZpZXcuaWQsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxyXG4gICAgICAgIHdvcmtzcGFjZV9pZDogcHJvamVjdC52YWx1ZT8ud29ya3NwYWNlSWRcclxuICAgICAgfSlcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgTWVudUl0ZW1zLkxvYWRPcmlnaW5hbFZlcnNpb25zOlxyXG4gICAgICBhcHBseVZpZXcoe1xyXG4gICAgICAgIGlkOiBwcm9wcy52aWV3LmlkLFxyXG4gICAgICAgIGxvYWRPcmlnaW5hbDogdHJ1ZVxyXG4gICAgICB9KVxyXG4gICAgICBtcC50cmFjaygnU2F2ZWQgVmlldyBPcmlnaW5hbCBWZXJzaW9uIExvYWRlZCcsIHtcclxuICAgICAgICB2aWV3SWQ6IHByb3BzLnZpZXcuaWQsXHJcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNhbWVsY2FzZVxyXG4gICAgICAgIHdvcmtzcGFjZV9pZDogcHJvamVjdC52YWx1ZT8ud29ya3NwYWNlSWRcclxuICAgICAgfSlcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgTWVudUl0ZW1zLkNoYW5nZVZpc2liaWxpdHk6XHJcbiAgICAgIGF3YWl0IHVwZGF0ZVZpZXcoe1xyXG4gICAgICAgIHZpZXc6IHByb3BzLnZpZXcsXHJcbiAgICAgICAgaW5wdXQ6IHtcclxuICAgICAgICAgIGlkOiBwcm9wcy52aWV3LmlkLFxyXG4gICAgICAgICAgcHJvamVjdElkOiBwcm9wcy52aWV3LnByb2plY3RJZCxcclxuICAgICAgICAgIHZpc2liaWxpdHk6IGlzT25seVZpc2libGVUb01lLnZhbHVlXHJcbiAgICAgICAgICAgID8gU2F2ZWRWaWV3VmlzaWJpbGl0eS5QdWJsaWNcclxuICAgICAgICAgICAgOiBTYXZlZFZpZXdWaXNpYmlsaXR5LkF1dGhvck9ubHlcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICAgIGJyZWFrXHJcbiAgICBjYXNlIE1lbnVJdGVtcy5SZXBsYWNlVmlldzpcclxuICAgICAgLy8gUmVwbGFjZSB2aWV3IHcvIGFjdGl2ZSBvbmVcclxuICAgICAgYXdhaXQgdXBkYXRlVmlldyh7XHJcbiAgICAgICAgdmlldzogcHJvcHMudmlldyxcclxuICAgICAgICBpbnB1dDoge1xyXG4gICAgICAgICAgaWQ6IHByb3BzLnZpZXcuaWQsXHJcbiAgICAgICAgICAuLi4oYXdhaXQgY29sbGVjdCgpKVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgTWVudUl0ZW1zLk1vdmVUb0dyb3VwOlxyXG4gICAgICBldmVudEJ1cy5lbWl0KFZpZXdlckV2ZW50QnVzS2V5cy5NYXJrU2F2ZWRWaWV3Rm9yRWRpdCwge1xyXG4gICAgICAgIHR5cGU6ICdtb3ZlJyxcclxuICAgICAgICB2aWV3OiBwcm9wcy52aWV3XHJcbiAgICAgIH0pXHJcbiAgICAgIGJyZWFrXHJcbiAgICBjYXNlIE1lbnVJdGVtcy5TZXRBc0hvbWVWaWV3OlxyXG4gICAgICBhd2FpdCB1cGRhdGVWaWV3KHtcclxuICAgICAgICB2aWV3OiBwcm9wcy52aWV3LFxyXG4gICAgICAgIGlucHV0OiB7XHJcbiAgICAgICAgICBpZDogcHJvcHMudmlldy5pZCxcclxuICAgICAgICAgIHByb2plY3RJZDogcHJvcHMudmlldy5wcm9qZWN0SWQsXHJcbiAgICAgICAgICBpc0hvbWVWaWV3OiAhaXNIb21lVmlldy52YWx1ZVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgYnJlYWtcclxuICAgIGNhc2UgTWVudUl0ZW1zLkVtYmVkOlxyXG4gICAgICBldmVudEJ1cy5lbWl0KFZpZXdlckV2ZW50QnVzS2V5cy5NYXJrU2F2ZWRWaWV3Rm9yRW1iZWQsIHtcclxuICAgICAgICB2aWV3OiBwcm9wcy52aWV3XHJcbiAgICAgIH0pXHJcbiAgICAgIGJyZWFrXHJcbiAgICBkZWZhdWx0OlxyXG4gICAgICB0aHJvd1VuY292ZXJlZEVycm9yKGl0ZW0uaWQpXHJcbiAgfVxyXG59XHJcblxyXG5jb25zdCBhcHBseSA9IGFzeW5jICgpID0+IHtcclxuICBhcHBseVZpZXcoe1xyXG4gICAgaWQ6IHByb3BzLnZpZXcuaWRcclxuICB9KVxyXG59XHJcblxyXG5jb25zdCBvbkVkaXQgPSAoKSA9PiB7XHJcbiAgZXZlbnRCdXMuZW1pdChWaWV3ZXJFdmVudEJ1c0tleXMuTWFya1NhdmVkVmlld0ZvckVkaXQsIHtcclxuICAgIHR5cGU6ICdlZGl0JyxcclxuICAgIHZpZXc6IHByb3BzLnZpZXdcclxuICB9KVxyXG59XHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy92aWV3ZXIvc2F2ZWQtdmlld3MvcGFuZWwvVmlldy52dWUifQ== |