Files
speckle-server/scratch/edge-debug-selection/Default/Cache/Cache_Data/f_000173
T

281 lines
27 KiB
Plaintext

import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/workspace/moveProject/SelectProject.vue");import { FormButton as __nuxt_component_0 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { InfiniteLoading as __nuxt_component_1 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { default as __nuxt_component_2 } from "/_nuxt/components/workspace/plan/ProjectModelLimitReachedDialog.vue";
/* Injection by vite-plugin-vue-inspector Start */
import { createVNode as __createVNode,createElementBlock as __createElementBlock,createElementVNode as __createElementVNode,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 _createVNode(...args) { return _interopVNode(__createVNode(...args)) }
function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...args)) }
function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) }
function _createBlock(...args) { return _interopVNode(__createBlock(...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 {
CommonLoadingIcon,
FormTextInput,
useDebouncedTextInput
} from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js";
import { usePaginatedQuery } from "/_nuxt/lib/common/composables/graphql.ts";
import { workspaceMoveProjectManagerUserQuery } from "/_nuxt/lib/workspaces/graphql/queries.ts";
import {
ProjectNotEnoughPermissionsError,
WorkspaceLimitsReachedError
} from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/authz/index.js";
import { computed, ref } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _sfc_main = /* @__PURE__ */ _defineComponent({
__name: "WorkspaceMoveProjectSelectProject",
props: /* @__PURE__ */ _mergeModels({
workspace: { type: Object, required: false },
projectPermissions: { type: Object, required: false },
workspaceId: { type: String, required: false }
}, {
"search": { type: String },
"searchModifiers": {}
}),
emits: /* @__PURE__ */ _mergeModels(["project-selected"], ["update:search"]),
setup(__props, { expose: __expose, emit: __emit }) {
__expose();
const search = _useModel(__props, "search");
const { on, bind } = useDebouncedTextInput({ model: search });
const emit = __emit;
const props = __props;
const {
query: { result, loading },
identifier,
onInfiniteLoad
} = usePaginatedQuery({
query: workspaceMoveProjectManagerUserQuery,
baseVariables: computed(() => ({
cursor: null,
sortBy: "role",
filter: {
search: search.value?.length ? search.value : null,
personalOnly: true
},
workspaceId: props.workspaceId || ""
})),
resolveKey: (vars) => [vars.filter?.search || ""],
resolveCurrentResult: (res) => res?.activeUser?.projects,
resolveNextPageVariables: (baseVars, cursor) => ({
...baseVars,
cursor
}),
resolveCursorFromVariables: (vars) => vars.cursor
});
const showLimitDialog = ref(false);
const userProjects = computed(() => result.value?.activeUser?.projects.items || []);
const moveableProjects = computed(() => userProjects.value);
const hasMoveableProjects = computed(() => moveableProjects.value.length > 0);
const isProjectDisabled = computed(
() => (project) => {
if (project.permissions.canMoveToWorkspace.authorized || project.permissions.canMoveToWorkspace.code === WorkspaceLimitsReachedError.code) {
return false;
}
return true;
}
);
const getProjectTooltip = computed(
() => (project) => {
if (project.permissions.canMoveToWorkspace.authorized || project.permissions.canMoveToWorkspace.code === WorkspaceLimitsReachedError.code) {
return void 0;
}
if (project.permissions.canMoveToWorkspace.code === ProjectNotEnoughPermissionsError.code) {
return "Only the project owner can move this project";
}
return project.permissions.canMoveToWorkspace.message;
}
);
const handleProjectClick = (project) => {
const permission = project.permissions?.canMoveToWorkspace;
if (permission?.code === WorkspaceLimitsReachedError.code) {
showLimitDialog.value = true;
return;
}
if (permission?.authorized) {
emit("project-selected", project);
}
};
const showLoading = computed(() => loading.value && userProjects.value.length === 0);
const __returned__ = { search, on, bind, emit, props, result, loading, identifier, onInfiniteLoad, showLimitDialog, userProjects, moveableProjects, hasMoveableProjects, isProjectDisabled, getProjectTooltip, handleProjectClick, showLoading, get CommonLoadingIcon() {
return CommonLoadingIcon;
}, get FormTextInput() {
return FormTextInput;
} };
Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true });
return __returned__;
}
});
import { toHandlers as _toHandlers, mergeProps as _mergeProps, openBlock as _openBlock, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, toDisplayString as _toDisplayString, createTextVNode as _createTextVNode, resolveComponent as _resolveComponent, withCtx as _withCtx, resolveDirective as _resolveDirective, withDirectives as _withDirectives, } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
const _hoisted_1 = { "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:2:3" };
const _hoisted_2 = {
key: 0,
class: "py-4 flex items-center justify-center w-full h-32",
"data-v-inspector": "components/workspace/moveProject/SelectProject.vue:14:5"
};
const _hoisted_3 = {
key: 0,
class: "flex flex-col mt-2 border rounded-md border-outline-3",
"data-v-inspector": "components/workspace/moveProject/SelectProject.vue:18:7"
};
const _hoisted_4 = {
class: "flex flex-col flex-1 truncate text-body-xs",
"data-v-inspector": "components/workspace/moveProject/SelectProject.vue:27:11"
};
const _hoisted_5 = {
class: "font-medium text-foreground truncate",
"data-v-inspector": "components/workspace/moveProject/SelectProject.vue:28:13"
};
const _hoisted_6 = {
class: "flex items-center gap-x-1",
"data-v-inspector": "components/workspace/moveProject/SelectProject.vue:31:13"
};
const _hoisted_7 = {
class: "text-foreground-3 truncate",
"data-v-inspector": "components/workspace/moveProject/SelectProject.vue:32:15"
};
const _hoisted_8 = {
key: 1,
class: "py-4 text-body-xs text-foreground-2",
"data-v-inspector": "components/workspace/moveProject/SelectProject.vue:54:7"
};
const _hoisted_9 = {
key: 2,
class: "py-4 text-body-xs text-foreground-2",
"data-v-inspector": "components/workspace/moveProject/SelectProject.vue:58:7"
};
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
const _component_FormButton = __nuxt_component_0;
const _component_InfiniteLoading = __nuxt_component_1;
const _component_WorkspacePlanProjectModelLimitReachedDialog = __nuxt_component_2;
const _directive_tippy = _resolveDirective("tippy");
return _openBlock(), _createElementBlock("div", _hoisted_1, [
_createVNode(
$setup["FormTextInput"],
_mergeProps($setup.bind, {
label: "Move projects",
name: "search",
color: "foundation",
placeholder: "Search projects...",
"show-clear": "",
"full-width": "",
class: "mb-2"
}, _toHandlers($setup.on), { "data-v-inspector": "components/workspace/moveProject/SelectProject.vue:3:5" }),
null,
16
/* FULL_PROPS */
),
$setup.showLoading ? (_openBlock(), _createElementBlock("div", _hoisted_2, [
_createVNode($setup["CommonLoadingIcon"], {
size: "sm",
"data-v-inspector": "components/workspace/moveProject/SelectProject.vue:15:7"
})
])) : (_openBlock(), _createElementBlock(
_Fragment,
{ key: 1 },
[
$setup.hasMoveableProjects ? (_openBlock(), _createElementBlock("div", _hoisted_3, [
(_openBlock(true), _createElementBlock(
_Fragment,
null,
_renderList($setup.moveableProjects, (project) => {
return _openBlock(), _createElementBlock("div", {
key: project.id,
class: "flex px-4 py-3 items-center space-x-2 justify-between border-b last:border-0 border-outline-3",
"data-v-inspector": "components/workspace/moveProject/SelectProject.vue:22:9"
}, [
_createElementVNode("div", _hoisted_4, [
_createElementVNode(
"span",
_hoisted_5,
_toDisplayString(project.name),
1
/* TEXT */
),
_createElementVNode("div", _hoisted_6, [
_createElementVNode(
"span",
_hoisted_7,
_toDisplayString(project.modelCount.totalCount) + " model" + _toDisplayString(project.modelCount.totalCount !== 1 ? "s" : ""),
1
/* TEXT */
)
])
]),
_withDirectives((_openBlock(), _createElementBlock("div", {
key: `${project.id}-${project.permissions.canMoveToWorkspace.code}`,
"data-v-inspector": "components/workspace/moveProject/SelectProject.vue:39:11"
}, [
_createVNode(_component_FormButton, {
size: "sm",
color: "outline",
disabled: $setup.isProjectDisabled(project),
onClick: ($event) => $setup.handleProjectClick(project),
"data-v-inspector": "components/workspace/moveProject/SelectProject.vue:43:13"
}, {
default: _withCtx(() => [..._cache[1] || (_cache[1] = [
_createTextVNode(
" Move... ",
-1
/* CACHED */
)
])]),
_: 2
/* DYNAMIC */
}, 1032, ["disabled", "onClick"])
])), [
[_directive_tippy, $setup.getProjectTooltip(project)]
])
]);
}),
128
/* KEYED_FRAGMENT */
))
])) : !$setup.search?.length ? (_openBlock(), _createElementBlock("p", _hoisted_8, " You don't have any projects that can be moved into this workspace. Only projects you own and that aren't in another workspace can be moved. ")) : (_openBlock(), _createElementBlock("p", _hoisted_9, " No projects match your search. "))
],
64
/* STABLE_FRAGMENT */
)),
!$setup.search?.length ? (_openBlock(), _createBlock(_component_InfiniteLoading, {
key: 2,
settings: { identifier: $setup.identifier },
onInfinite: $setup.onInfiniteLoad,
"data-v-inspector": "components/workspace/moveProject/SelectProject.vue:62:5"
}, null, 8, ["settings", "onInfinite"])) : _createCommentVNode("v-if", true),
_createVNode(_component_WorkspacePlanProjectModelLimitReachedDialog, {
open: $setup.showLimitDialog,
"onUpdate:open": _cache[0] || (_cache[0] = ($event) => $setup.showLimitDialog = $event),
"workspace-name": $props.workspace?.name,
plan: $props.workspace?.plan?.name,
"workspace-role": $props.workspace?.role,
"workspace-slug": $props.workspace?.slug || "",
location: "move_project_dialog",
"data-v-inspector": "components/workspace/moveProject/SelectProject.vue:67:5"
}, null, 8, ["open", "workspace-name", "plan", "workspace-role", "workspace-slug"])
]);
}
_sfc_main.__hmrId = "c503121f";
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/workspace/moveProject/SelectProject.vue"]]);
//# sourceMappingURL=data:application/json;base64,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QUFFLElBQUksUUFBUSxZQUFZLG1CQUFtQixJQUFJO0FBQUEsa0JBQzdCLG9CQUFpQjtBQUFBO2tCQUV0RCxhQU9hO0FBQUEsb0JBTlgsTUFBSztBQUFBLG9CQUNMLE9BQU07QUFBQSxvQkFDTCxVQUFVLHlCQUFrQixPQUFPO0FBQUEsb0JBQ25DLFNBQUssWUFBRSwwQkFBbUIsT0FBTztBQUFBLG9CQUFHLG9CQUFpQjtBQUFBO3NDQUN2RCxNQUVEO0FBQUE7d0JBRkM7QUFBQSx3QkFFRDtBQUFBO0FBQUE7QUFBQTs7Ozs7cUNBVFMseUJBQWtCLE9BQU87QUFBQTs7Ozs7O2VBYXpCLGVBQVEsd0JBQXZCLG9CQUdJLEtBSEosWUFBc0osK0lBR3RKLG9CQUNBLG9CQUVJLEtBRkosWUFBaUksa0NBRWpJO0FBQUE7Ozs7S0FHTyxlQUFRLHdCQURqQixhQUlFO0FBQUE7TUFGQyxVQUFRLGNBQUksa0JBQVU7QUFBQSxNQUN0QixZQUFVO0FBQUEsTUFBZ0Isb0JBQWlCO0FBQUE7SUFFOUMsYUFPRTtBQUFBLE1BTlEsTUFBTTtBQUFBLHNGQUFlO0FBQUEsTUFDNUIsa0JBQWdCLGtCQUFXO0FBQUEsTUFDM0IsTUFBTSxrQkFBVyxNQUFNO0FBQUEsTUFDdkIsa0JBQWdCLGtCQUFXO0FBQUEsTUFDM0Isa0JBQWdCLGtCQUFXLFFBQUk7QUFBQSxNQUNoQyxVQUFTO0FBQUEsTUFBc0Isb0JBQWlCO0FBQUEiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbIlNlbGVjdFByb2plY3QudnVlIl0sInNvdXJjZXNDb250ZW50IjpbIjx0ZW1wbGF0ZT5cclxuICA8ZGl2IGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9TZWxlY3RQcm9qZWN0LnZ1ZToyOjNcIj5cclxuICAgIDxGb3JtVGV4dElucHV0XHJcbiAgICAgIHYtYmluZD1cImJpbmRcIlxyXG4gICAgICBsYWJlbD1cIk1vdmUgcHJvamVjdHNcIlxyXG4gICAgICBuYW1lPVwic2VhcmNoXCJcclxuICAgICAgY29sb3I9XCJmb3VuZGF0aW9uXCJcclxuICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggcHJvamVjdHMuLi5cIlxyXG4gICAgICBzaG93LWNsZWFyXHJcbiAgICAgIGZ1bGwtd2lkdGhcclxuICAgICAgY2xhc3M9XCJtYi0yXCJcclxuICAgICAgdi1vbj1cIm9uXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjM6NVwiXHJcbiAgICAvPlxyXG4gICAgPGRpdiB2LWlmPVwic2hvd0xvYWRpbmdcIiBjbGFzcz1cInB5LTQgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdy1mdWxsIGgtMzJcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvU2VsZWN0UHJvamVjdC52dWU6MTQ6NVwiPlxyXG4gICAgICA8Q29tbW9uTG9hZGluZ0ljb24gc2l6ZT1cInNtXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjE1OjdcIiAvPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8dGVtcGxhdGUgdi1lbHNlPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgdi1pZj1cImhhc01vdmVhYmxlUHJvamVjdHNcIlxyXG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBtdC0yIGJvcmRlciByb3VuZGVkLW1kIGJvcmRlci1vdXRsaW5lLTNcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvU2VsZWN0UHJvamVjdC52dWU6MTg6N1wiXHJcbiAgICAgID5cclxuICAgICAgICA8ZGl2XHJcbiAgICAgICAgICB2LWZvcj1cInByb2plY3QgaW4gbW92ZWFibGVQcm9qZWN0c1wiXHJcbiAgICAgICAgICA6a2V5PVwicHJvamVjdC5pZFwiXHJcbiAgICAgICAgICBjbGFzcz1cImZsZXggcHgtNCBweS0zIGl0ZW1zLWNlbnRlciBzcGFjZS14LTIganVzdGlmeS1iZXR3ZWVuIGJvcmRlci1iIGxhc3Q6Ym9yZGVyLTAgYm9yZGVyLW91dGxpbmUtM1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9TZWxlY3RQcm9qZWN0LnZ1ZToyMjo5XCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LWNvbCBmbGV4LTEgdHJ1bmNhdGUgdGV4dC1ib2R5LXhzXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjI3OjExXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kIHRydW5jYXRlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjI4OjEzXCI+XHJcbiAgICAgICAgICAgICAge3sgcHJvamVjdC5uYW1lIH19XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC14LTFcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvU2VsZWN0UHJvamVjdC52dWU6MzE6MTNcIj5cclxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtZm9yZWdyb3VuZC0zIHRydW5jYXRlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjMyOjE1XCI+XHJcbiAgICAgICAgICAgICAgICB7eyBwcm9qZWN0Lm1vZGVsQ291bnQudG90YWxDb3VudCB9fSBtb2RlbHt7XHJcbiAgICAgICAgICAgICAgICAgIHByb2plY3QubW9kZWxDb3VudC50b3RhbENvdW50ICE9PSAxID8gJ3MnIDogJydcclxuICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICA6a2V5PVwiYCR7cHJvamVjdC5pZH0tJHtwcm9qZWN0LnBlcm1pc3Npb25zLmNhbk1vdmVUb1dvcmtzcGFjZS5jb2RlfWBcIlxyXG4gICAgICAgICAgICB2LXRpcHB5PVwiZ2V0UHJvamVjdFRvb2x0aXAocHJvamVjdClcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvU2VsZWN0UHJvamVjdC52dWU6Mzk6MTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgICAgIHNpemU9XCJzbVwiXHJcbiAgICAgICAgICAgICAgY29sb3I9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJpc1Byb2plY3REaXNhYmxlZChwcm9qZWN0KVwiXHJcbiAgICAgICAgICAgICAgQGNsaWNrPVwiaGFuZGxlUHJvamVjdENsaWNrKHByb2plY3QpXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjQzOjEzXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgIE1vdmUuLi5cclxuICAgICAgICAgICAgPC9Gb3JtQnV0dG9uPlxyXG4gICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8cCB2LWVsc2UtaWY9XCIhc2VhcmNoPy5sZW5ndGhcIiBjbGFzcz1cInB5LTQgdGV4dC1ib2R5LXhzIHRleHQtZm9yZWdyb3VuZC0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjU0OjdcIj5cclxuICAgICAgICBZb3UgZG9uJ3QgaGF2ZSBhbnkgcHJvamVjdHMgdGhhdCBjYW4gYmUgbW92ZWQgaW50byB0aGlzIHdvcmtzcGFjZS4gT25seSBwcm9qZWN0c1xyXG4gICAgICAgIHlvdSBvd24gYW5kIHRoYXQgYXJlbid0IGluIGFub3RoZXIgd29ya3NwYWNlIGNhbiBiZSBtb3ZlZC5cclxuICAgICAgPC9wPlxyXG4gICAgICA8cCB2LWVsc2UgY2xhc3M9XCJweS00IHRleHQtYm9keS14cyB0ZXh0LWZvcmVncm91bmQtMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL3dvcmtzcGFjZS9tb3ZlUHJvamVjdC9TZWxlY3RQcm9qZWN0LnZ1ZTo1ODo3XCI+XHJcbiAgICAgICAgTm8gcHJvamVjdHMgbWF0Y2ggeW91ciBzZWFyY2guXHJcbiAgICAgIDwvcD5cclxuICAgIDwvdGVtcGxhdGU+XHJcbiAgICA8SW5maW5pdGVMb2FkaW5nXHJcbiAgICAgIHYtaWY9XCIhc2VhcmNoPy5sZW5ndGhcIlxyXG4gICAgICA6c2V0dGluZ3M9XCJ7IGlkZW50aWZpZXIgfVwiXHJcbiAgICAgIEBpbmZpbml0ZT1cIm9uSW5maW5pdGVMb2FkXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjYyOjVcIlxyXG4gICAgLz5cclxuICAgIDxXb3Jrc3BhY2VQbGFuUHJvamVjdE1vZGVsTGltaXRSZWFjaGVkRGlhbG9nXHJcbiAgICAgIHYtbW9kZWw6b3Blbj1cInNob3dMaW1pdERpYWxvZ1wiXHJcbiAgICAgIDp3b3Jrc3BhY2UtbmFtZT1cIndvcmtzcGFjZT8ubmFtZVwiXHJcbiAgICAgIDpwbGFuPVwid29ya3NwYWNlPy5wbGFuPy5uYW1lXCJcclxuICAgICAgOndvcmtzcGFjZS1yb2xlPVwid29ya3NwYWNlPy5yb2xlXCJcclxuICAgICAgOndvcmtzcGFjZS1zbHVnPVwid29ya3NwYWNlPy5zbHVnIHx8ICcnXCJcclxuICAgICAgbG9jYXRpb249XCJtb3ZlX3Byb2plY3RfZGlhbG9nXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvd29ya3NwYWNlL21vdmVQcm9qZWN0L1NlbGVjdFByb2plY3QudnVlOjY3OjVcIlxyXG4gICAgLz5cclxuICA8L2Rpdj5cclxuPC90ZW1wbGF0ZT5cclxuXHJcbjxzY3JpcHQgc2V0dXAgbGFuZz1cInRzXCI+XHJcbmltcG9ydCB7XHJcbiAgQ29tbW9uTG9hZGluZ0ljb24sXHJcbiAgRm9ybVRleHRJbnB1dCxcclxuICB1c2VEZWJvdW5jZWRUZXh0SW5wdXRcclxufSBmcm9tICdAc3BlY2tsZS91aS1jb21wb25lbnRzJ1xyXG5pbXBvcnQgdHlwZSB7XHJcbiAgUGVybWlzc2lvbkNoZWNrUmVzdWx0LFxyXG4gIFdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlcl9Qcm9qZWN0RnJhZ21lbnQsXHJcbiAgV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1dvcmtzcGFjZUZyYWdtZW50XHJcbn0gZnJvbSAnfn4vbGliL2NvbW1vbi9nZW5lcmF0ZWQvZ3FsL2dyYXBocWwnXHJcbmltcG9ydCB7IHVzZVBhZ2luYXRlZFF1ZXJ5IH0gZnJvbSAnfi9saWIvY29tbW9uL2NvbXBvc2FibGVzL2dyYXBocWwnXHJcbmltcG9ydCB7IHdvcmtzcGFjZU1vdmVQcm9qZWN0TWFuYWdlclVzZXJRdWVyeSB9IGZyb20gJ34vbGliL3dvcmtzcGFjZXMvZ3JhcGhxbC9xdWVyaWVzJ1xyXG5pbXBvcnQge1xyXG4gIFByb2plY3ROb3RFbm91Z2hQZXJtaXNzaW9uc0Vycm9yLFxyXG4gIFdvcmtzcGFjZUxpbWl0c1JlYWNoZWRFcnJvclxyXG59IGZyb20gJ0BzcGVja2xlL3NoYXJlZC9hdXRoeidcclxuXHJcbmNvbnN0IHNlYXJjaCA9IGRlZmluZU1vZGVsPHN0cmluZz4oJ3NlYXJjaCcpXHJcbmNvbnN0IHsgb24sIGJpbmQgfSA9IHVzZURlYm91bmNlZFRleHRJbnB1dCh7IG1vZGVsOiBzZWFyY2ggfSlcclxuXHJcbmNvbnN0IGVtaXQgPSBkZWZpbmVFbWl0czx7XHJcbiAgKGU6ICdwcm9qZWN0LXNlbGVjdGVkJywgcHJvamVjdDogV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RGcmFnbWVudCk6IHZvaWRcclxufT4oKVxyXG5cclxuY29uc3QgcHJvcHMgPSBkZWZpbmVQcm9wczx7XHJcbiAgd29ya3NwYWNlPzogV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1dvcmtzcGFjZUZyYWdtZW50XHJcbiAgcHJvamVjdFBlcm1pc3Npb25zPzogUGVybWlzc2lvbkNoZWNrUmVzdWx0XHJcbiAgd29ya3NwYWNlSWQ/OiBzdHJpbmdcclxufT4oKVxyXG5cclxuY29uc3Qge1xyXG4gIHF1ZXJ5OiB7IHJlc3VsdCwgbG9hZGluZyB9LFxyXG4gIGlkZW50aWZpZXIsXHJcbiAgb25JbmZpbml0ZUxvYWRcclxufSA9IHVzZVBhZ2luYXRlZFF1ZXJ5KHtcclxuICBxdWVyeTogd29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyVXNlclF1ZXJ5LFxyXG4gIGJhc2VWYXJpYWJsZXM6IGNvbXB1dGVkKCgpID0+ICh7XHJcbiAgICBjdXJzb3I6IG51bGwgYXMgc3RyaW5nIHwgbnVsbCxcclxuICAgIHNvcnRCeTogJ3JvbGUnLFxyXG4gICAgZmlsdGVyOiB7XHJcbiAgICAgIHNlYXJjaDogc2VhcmNoLnZhbHVlPy5sZW5ndGggPyBzZWFyY2gudmFsdWUgOiBudWxsLFxyXG4gICAgICBwZXJzb25hbE9ubHk6IHRydWVcclxuICAgIH0sXHJcbiAgICB3b3Jrc3BhY2VJZDogcHJvcHMud29ya3NwYWNlSWQgfHwgJydcclxuICB9KSksXHJcbiAgcmVzb2x2ZUtleTogKHZhcnMpID0+IFt2YXJzLmZpbHRlcj8uc2VhcmNoIHx8ICcnXSxcclxuICByZXNvbHZlQ3VycmVudFJlc3VsdDogKHJlcykgPT4gcmVzPy5hY3RpdmVVc2VyPy5wcm9qZWN0cyxcclxuICByZXNvbHZlTmV4dFBhZ2VWYXJpYWJsZXM6IChiYXNlVmFycywgY3Vyc29yKSA9PiAoe1xyXG4gICAgLi4uYmFzZVZhcnMsXHJcbiAgICBjdXJzb3JcclxuICB9KSxcclxuICByZXNvbHZlQ3Vyc29yRnJvbVZhcmlhYmxlczogKHZhcnMpID0+IHZhcnMuY3Vyc29yXHJcbn0pXHJcblxyXG5jb25zdCBzaG93TGltaXREaWFsb2cgPSByZWYoZmFsc2UpXHJcblxyXG5jb25zdCB1c2VyUHJvamVjdHMgPSBjb21wdXRlZCgoKSA9PiByZXN1bHQudmFsdWU/LmFjdGl2ZVVzZXI/LnByb2plY3RzLml0ZW1zIHx8IFtdKVxyXG5jb25zdCBtb3ZlYWJsZVByb2plY3RzID0gY29tcHV0ZWQoKCkgPT4gdXNlclByb2plY3RzLnZhbHVlKVxyXG5jb25zdCBoYXNNb3ZlYWJsZVByb2plY3RzID0gY29tcHV0ZWQoKCkgPT4gbW92ZWFibGVQcm9qZWN0cy52YWx1ZS5sZW5ndGggPiAwKVxyXG5cclxuY29uc3QgaXNQcm9qZWN0RGlzYWJsZWQgPSBjb21wdXRlZChcclxuICAoKSA9PiAocHJvamVjdDogV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RGcmFnbWVudCkgPT4ge1xyXG4gICAgaWYgKFxyXG4gICAgICBwcm9qZWN0LnBlcm1pc3Npb25zLmNhbk1vdmVUb1dvcmtzcGFjZS5hdXRob3JpemVkIHx8XHJcbiAgICAgIHByb2plY3QucGVybWlzc2lvbnMuY2FuTW92ZVRvV29ya3NwYWNlLmNvZGUgPT09IFdvcmtzcGFjZUxpbWl0c1JlYWNoZWRFcnJvci5jb2RlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZVxyXG4gIH1cclxuKVxyXG5cclxuY29uc3QgZ2V0UHJvamVjdFRvb2x0aXAgPSBjb21wdXRlZChcclxuICAoKSA9PiAocHJvamVjdDogV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RGcmFnbWVudCkgPT4ge1xyXG4gICAgaWYgKFxyXG4gICAgICBwcm9qZWN0LnBlcm1pc3Npb25zLmNhbk1vdmVUb1dvcmtzcGFjZS5hdXRob3JpemVkIHx8XHJcbiAgICAgIHByb2plY3QucGVybWlzc2lvbnMuY2FuTW92ZVRvV29ya3NwYWNlLmNvZGUgPT09IFdvcmtzcGFjZUxpbWl0c1JlYWNoZWRFcnJvci5jb2RlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgfVxyXG4gICAgaWYgKFxyXG4gICAgICBwcm9qZWN0LnBlcm1pc3Npb25zLmNhbk1vdmVUb1dvcmtzcGFjZS5jb2RlID09PVxyXG4gICAgICBQcm9qZWN0Tm90RW5vdWdoUGVybWlzc2lvbnNFcnJvci5jb2RlXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuICdPbmx5IHRoZSBwcm9qZWN0IG93bmVyIGNhbiBtb3ZlIHRoaXMgcHJvamVjdCdcclxuICAgIH1cclxuICAgIHJldHVybiBwcm9qZWN0LnBlcm1pc3Npb25zLmNhbk1vdmVUb1dvcmtzcGFjZS5tZXNzYWdlXHJcbiAgfVxyXG4pXHJcblxyXG5jb25zdCBoYW5kbGVQcm9qZWN0Q2xpY2sgPSAocHJvamVjdDogV29ya3NwYWNlTW92ZVByb2plY3RNYW5hZ2VyX1Byb2plY3RGcmFnbWVudCkgPT4ge1xyXG4gIGNvbnN0IHBlcm1pc3Npb24gPSBwcm9qZWN0LnBlcm1pc3Npb25zPy5jYW5Nb3ZlVG9Xb3Jrc3BhY2VcclxuICBpZiAocGVybWlzc2lvbj8uY29kZSA9PT0gV29ya3NwYWNlTGltaXRzUmVhY2hlZEVycm9yLmNvZGUpIHtcclxuICAgIHNob3dMaW1pdERpYWxvZy52YWx1ZSA9IHRydWVcclxuICAgIHJldHVyblxyXG4gIH1cclxuXHJcbiAgaWYgKHBlcm1pc3Npb24/LmF1dGhvcml6ZWQpIHtcclxuICAgIGVtaXQoJ3Byb2plY3Qtc2VsZWN0ZWQnLCBwcm9qZWN0KVxyXG4gIH1cclxufVxyXG5cclxuY29uc3Qgc2hvd0xvYWRpbmcgPSBjb21wdXRlZCgoKSA9PiBsb2FkaW5nLnZhbHVlICYmIHVzZXJQcm9qZWN0cy52YWx1ZS5sZW5ndGggPT09IDApXHJcbjwvc2NyaXB0PlxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvY29tcG9uZW50cy93b3Jrc3BhY2UvbW92ZVByb2plY3QvU2VsZWN0UHJvamVjdC52dWUifQ==