import { createHotContext as __vite__createHotContext } from "/_nuxt/@vite/client";import.meta.hot = __vite__createHotContext("/components/automate/viewer/panel/FunctionRunRow.vue");import { default as __nuxt_component_0 } from "/_nuxt/components/automate/function/Logo.vue"; import { default as __nuxt_component_1 } from "/_nuxt/components/automate/runs/AttachmentButton.vue"; import { FormButton as __nuxt_component_2 } from "/_nuxt/@fs/D:/speckle-server/packages/ui-components/dist/lib.js"; import { default as __nuxt_component_3 } from "/_nuxt/components/automate/viewer/panel/FunctionRunRowObjectResult.vue"; /* Injection by vite-plugin-vue-inspector Start */ import { createBlock as __createBlock,createElementVNode as __createElementVNode,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 _createBlock(...args) { return _interopVNode(__createBlock(...args)) } function _createElementVNode(...args) { return _interopVNode(__createElementVNode(...args)) } function _createVNode(...args) { return _interopVNode(__createVNode(...args)) } function _createElementBlock(...args) { return _interopVNode(__createElementBlock(...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 { ChevronDownIcon } from "/_nuxt/node_modules/.cache/vite/client/deps/@heroicons_vue_24_outline.js?v=e4f18c29"; import { AutomateRunStatus } from "/_nuxt/lib/common/generated/gql/graphql.ts"; import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts"; import { graphql } from "/_nuxt/lib/common/generated/gql/index.ts"; import { useAutomationFunctionRunResults } from "/_nuxt/lib/automate/composables/runs.ts"; import { useRunStatusMetadata } from "/_nuxt/lib/automate/composables/runStatus.ts"; import { doesRouteFitTarget } from "/_nuxt/lib/common/helpers/route.ts"; import { computed, ref } 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"; const _sfc_main = /* @__PURE__ */ _defineComponent({ __name: "AutomateViewerPanelFunctionRunRow", props: { functionRun: { type: Object, required: true }, automationName: { type: String, required: true } }, setup(__props, { expose: __expose }) { __expose(); graphql(` fragment AutomateViewerPanelFunctionRunRow_AutomateFunctionRun on AutomateFunctionRun { id results status statusMessage contextView function { id logo name } createdAt updatedAt } `); const props = __props; const { projectId } = useInjectedViewerState(); const results = useAutomationFunctionRunResults({ results: computed(() => props.functionRun.results) }); const { metadata: statusMetaData } = useRunStatusMetadata({ status: computed(() => props.functionRun.status) }); const route = useRoute(); const pageRunLimit = ref(5); const expanded = ref(false); const attachments = computed( () => (results.value?.values.blobIds || []).filter((b) => !!b) ); const objectResults = computed(() => results.value?.values.objectResults ?? []); const hasValidContextView = computed(() => { const ctxView = props.functionRun.contextView; if (!ctxView?.length) return false; const currentPath = route.fullPath; return !doesRouteFitTarget(ctxView, currentPath); }); const statusMessage = computed(() => { const isFinished = ![ AutomateRunStatus.Initializing, AutomateRunStatus.Running, AutomateRunStatus.Pending ].includes(props.functionRun.status); return isFinished ? props.functionRun.statusMessage ?? "No status message" : `Function is ${props.functionRun.status.toLowerCase()}.`; }); const __returned__ = { props, projectId, results, statusMetaData, route, pageRunLimit, expanded, attachments, objectResults, hasValidContextView, statusMessage, get ChevronDownIcon() { return ChevronDownIcon; } }; Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); return __returned__; } }); import { resolveDynamicComponent as _resolveDynamicComponent, normalizeClass as _normalizeClass, resolveDirective as _resolveDirective, openBlock as _openBlock, withDirectives as _withDirectives, resolveComponent as _resolveComponent, toDisplayString as _toDisplayString, createCommentVNode as _createCommentVNode, renderList as _renderList, Fragment as _Fragment, createTextVNode as _createTextVNode, withCtx as _withCtx } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; const _hoisted_1 = { class: "border border-outline-2 rounded-md space-y-2 overflow-hidden bg-foundation shadow-sm", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:2:3" }; const _hoisted_2 = { "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:9:7" }; const _hoisted_3 = { class: "font-medium text-body-2xs truncate", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:17:7" }; const _hoisted_4 = { class: "h-full grow flex justify-end", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:22:7" }; const _hoisted_5 = { class: "hover:bg-primary-muted hover:text-primary flex h-full items-center justify-center rounded", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:23:9" }; const _hoisted_6 = { key: 0, class: "px-3 pb-2 space-y-4", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:32:5" }; const _hoisted_7 = { class: "space-y-1", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:34:7" }; const _hoisted_8 = { class: "text-body-2xs text-foreground-2 whitespace-pre-wrap", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:36:9" }; const _hoisted_9 = { key: 0, class: "border-t pt-2 border-outline-2 space-y-1", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:42:7" }; const _hoisted_10 = { class: "ml-[2px] justify-start", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:47:9" }; const _hoisted_11 = { key: 1, class: "border-t pt-2 border-outline-2", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:60:7" }; const _hoisted_12 = { "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:61:9" }; const _hoisted_13 = { key: 2, class: "border-t pt-2 border-outline-2", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:73:7" }; const _hoisted_14 = { class: "space-y-1", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:75:9" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_AutomateFunctionLogo = __nuxt_component_0; const _component_AutomateRunsAttachmentButton = __nuxt_component_1; const _component_FormButton = __nuxt_component_2; const _component_AutomateViewerPanelFunctionRunRowObjectResult = __nuxt_component_3; const _directive_tippy = _resolveDirective("tippy"); return _openBlock(), _createElementBlock("div", _hoisted_1, [ _createElementVNode("button", { class: "flex space-x-1.5 items-center max-w-full w-full px-2 py-1 h-8 transition hover:bg-primary-muted bg-foundation", onClick: _cache[0] || (_cache[0] = ($event) => $setup.expanded = !$setup.expanded), "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:5:5" }, [ _createElementVNode("div", _hoisted_2, [ _withDirectives((_openBlock(), _createBlock(_resolveDynamicComponent($setup.statusMetaData.icon), { class: _normalizeClass(["h-4 w-4 outline-none", $setup.statusMetaData.iconColor]), "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:10:9" }, null, 8, ["class"])), [ [_directive_tippy, $props.functionRun.status] ]) ]), _createVNode(_component_AutomateFunctionLogo, { logo: $props.functionRun.function?.logo, size: "xs", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:16:7" }, null, 8, ["logo"]), _createElementVNode( "div", _hoisted_3, _toDisplayString($props.automationName ? $props.automationName + " / " : "") + _toDisplayString($props.functionRun.function?.name || "Unknown function"), 1 /* TEXT */ ), _createElementVNode("div", _hoisted_4, [ _createElementVNode("button", _hoisted_5, [ _createVNode($setup["ChevronDownIcon"], { class: _normalizeClass(`h-3 w-3 transition ${!$setup.expanded ? "-rotate-90" : "rotate-0"}`), "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:26:11" }, null, 8, ["class"]) ]) ]) ]), $setup.expanded ? (_openBlock(), _createElementBlock("div", _hoisted_6, [ _createCommentVNode(" Status message "), _createElementVNode("div", _hoisted_7, [ _cache[2] || (_cache[2] = _createElementVNode( "div", { class: "text-body-2xs font-medium text-foreground", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:35:9" }, "Status", -1 /* CACHED */ )), _createElementVNode( "div", _hoisted_8, _toDisplayString($setup.statusMessage), 1 /* TEXT */ ) ]), _createCommentVNode(" Attachments "), $setup.attachments.length !== 0 ? (_openBlock(), _createElementBlock("div", _hoisted_9, [ _cache[3] || (_cache[3] = _createElementVNode( "div", { class: "text-body-2xs font-medium text-foreground-2", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:46:9" }, "Attachments", -1 /* CACHED */ )), _createElementVNode("div", _hoisted_10, [ (_openBlock(true), _createElementBlock( _Fragment, null, _renderList($setup.attachments, (id) => { return _openBlock(), _createBlock(_component_AutomateRunsAttachmentButton, { key: id, "blob-id": id, "project-id": $setup.projectId, size: "xs", link: "", class: "mr-2", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:48:11" }, null, 8, ["blob-id", "project-id"]); }), 128 /* KEYED_FRAGMENT */ )) ]) ])) : _createCommentVNode("v-if", true), _createCommentVNode(" Context view "), $setup.hasValidContextView ? (_openBlock(), _createElementBlock("div", _hoisted_11, [ _createElementVNode("div", _hoisted_12, [ _createVNode(_component_FormButton, { size: "sm", color: "outline", class: "truncate max-w-full", to: $props.functionRun.contextView || "", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:62:11" }, { default: _withCtx(() => [..._cache[4] || (_cache[4] = [ _createTextVNode( " Open view ", -1 /* CACHED */ ) ])]), _: 1 /* STABLE */ }, 8, ["to"]) ]) ])) : _createCommentVNode("v-if", true), _createCommentVNode(" Results "), !!$setup.objectResults.length ? (_openBlock(), _createElementBlock("div", _hoisted_13, [ _cache[5] || (_cache[5] = _createElementVNode( "div", { class: "text-body-2xs font-medium text-foreground-2 mb-2", "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:74:9" }, "Results", -1 /* CACHED */ )), _createElementVNode("div", _hoisted_14, [ (_openBlock(true), _createElementBlock( _Fragment, null, _renderList($setup.objectResults.slice(0, $setup.pageRunLimit), (result, index) => { return _openBlock(), _createBlock(_component_AutomateViewerPanelFunctionRunRowObjectResult, { key: index, "function-id": $props.functionRun.function?.id, result, "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:76:11" }, null, 8, ["function-id", "result"]); }), 128 /* KEYED_FRAGMENT */ )), $setup.pageRunLimit < $setup.objectResults.length ? (_openBlock(), _createBlock(_component_FormButton, { key: 0, size: "sm", color: "outline", class: "w-full", onClick: _cache[1] || (_cache[1] = ($event) => $setup.pageRunLimit += 10), "data-v-inspector": "components/automate/viewer/panel/FunctionRunRow.vue:82:11" }, { default: _withCtx(() => [ _createTextVNode( " Load more (" + _toDisplayString($setup.objectResults.length - $setup.pageRunLimit) + " hidden results) ", 1 /* TEXT */ ) ]), _: 1 /* STABLE */ })) : _createCommentVNode("v-if", true) ]) ])) : _createCommentVNode("v-if", true) ])) : _createCommentVNode("v-if", true) ]); } _sfc_main.__hmrId = "5b776507"; 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/automate/viewer/panel/FunctionRunRow.vue"]]); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpR0EsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUyx5QkFBeUI7QUFFbEMsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUyxlQUFlO0FBQ3hCLFNBQVMsdUNBQXVDO0FBQ2hELFNBQVMsNEJBQTRCO0FBQ3JDLFNBQVMsMEJBQTBCOzs7Ozs7Ozs7Ozs7QUFFbkMsWUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxDQWVQO0FBRUQsVUFBTSxRQUFRO0FBS2QsVUFBTSxFQUFFLFVBQVUsSUFBSSx1QkFBdUI7QUFDN0MsVUFBTSxVQUFVLGdDQUFnQztBQUFBLE1BQzlDLFNBQVMsU0FBUyxNQUFNLE1BQU0sWUFBWSxPQUFPO0FBQUEsSUFDbkQsQ0FBQztBQUNELFVBQU0sRUFBRSxVQUFVLGVBQWUsSUFBSSxxQkFBcUI7QUFBQSxNQUN4RCxRQUFRLFNBQVMsTUFBTSxNQUFNLFlBQVksTUFBTTtBQUFBLElBQ2pELENBQUM7QUFDRCxVQUFNLFFBQVEsU0FBUztBQUV2QixVQUFNLGVBQWUsSUFBSSxDQUFDO0FBQzFCLFVBQU0sV0FBVyxJQUFJLEtBQUs7QUFFMUIsVUFBTSxjQUFjO0FBQUEsTUFBUyxPQUMxQixRQUFRLE9BQU8sT0FBTyxXQUFXLENBQUMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUFBLElBQ3pEO0FBQ0EsVUFBTSxnQkFBZ0IsU0FBUyxNQUFNLFFBQVEsT0FBTyxPQUFPLGlCQUFpQixDQUFDLENBQUM7QUFDOUUsVUFBTSxzQkFBc0IsU0FBUyxNQUFNO0FBQ3pDLFlBQU0sVUFBVSxNQUFNLFlBQVk7QUFDbEMsVUFBSSxDQUFDLFNBQVMsT0FBUSxRQUFPO0FBRTdCLFlBQU0sY0FBYyxNQUFNO0FBQzFCLGFBQU8sQ0FBQyxtQkFBbUIsU0FBUyxXQUFXO0FBQUEsSUFDakQsQ0FBQztBQUVELFVBQU0sZ0JBQWdCLFNBQVMsTUFBTTtBQUNuQyxZQUFNLGFBQWEsQ0FDakI7QUFBQSxRQUNFLGtCQUFrQjtBQUFBLFFBQ2xCLGtCQUFrQjtBQUFBLFFBQ2xCLGtCQUFrQjtBQUFBLE1BQ3BCLEVBQ0EsU0FBUyxNQUFNLFlBQVksTUFBTTtBQUVuQyxhQUFPLGFBQ0gsTUFBTSxZQUFZLGlCQUFpQixzQkFDbkMsZUFBZSxNQUFNLFlBQVksT0FBTyxZQUFZLENBQUM7QUFBQSxJQUMzRCxDQUFDOzs7Ozs7Ozs7O0VBbEtHLE9BQU07QUFBQSxFQUF1RixvQkFBaUI7O3FCQU12RyxvQkFBaUIsMERBQXlEOztFQVExRSxPQUFNO0FBQUEsRUFBcUMsb0JBQWlCOzs7RUFLNUQsT0FBTTtBQUFBLEVBQStCLG9CQUFpQjs7O0VBRXZELE9BQU07QUFBQSxFQUE0RixvQkFBaUI7Ozs7RUFRcEcsT0FBTTtBQUFBLEVBQXNCLG9CQUFpQjs7O0VBRTNELE9BQU07QUFBQSxFQUFZLG9CQUFpQjs7O0VBRWpDLE9BQU07QUFBQSxFQUFzRCxvQkFBaUI7Ozs7RUFRbEYsT0FBTTtBQUFBLEVBQTJDLG9CQUFpQjs7O0VBRzdELE9BQU07QUFBQSxFQUF5QixvQkFBaUI7Ozs7RUFhdkIsT0FBTTtBQUFBLEVBQWlDLG9CQUFpQjs7c0JBQ2pGLG9CQUFpQiwyREFBMEQ7OztFQVkvQyxPQUFNO0FBQUEsRUFBaUMsb0JBQWlCOzs7RUFFcEYsT0FBTTtBQUFBLEVBQVksb0JBQWlCOzs7Ozs7Ozt1QkF6RTlDLG9CQTZGTSxPQTdGTixZQTZGTTtBQUFBLElBMUZKLG9CQTBCUztBQUFBLE1BekJQLE9BQU07QUFBQSxNQUNMLFNBQUssc0NBQUUsa0JBQVEsQ0FBSTtBQUFBLE1BQVUsb0JBQWlCO0FBQUE7TUFFL0Msb0JBTU0sT0FOTixZQU1NO0FBQUEsdUNBTEosYUFJRSx5QkFISyxzQkFBZSxJQUFJO0FBQUEsVUFFdkIsT0FBSyx5Q0FBMkIsc0JBQWUsU0FBUztBQUFBLFVBQUcsb0JBQWlCO0FBQUE7NkJBRHBFLG1CQUFZLE1BQU07QUFBQTs7TUFJL0IsYUFBaUo7QUFBQSxRQUExSCxNQUFNLG1CQUFZLFVBQVU7QUFBQSxRQUFNLE1BQUs7QUFBQSxRQUFLLG9CQUFpQjtBQUFBO01BQ3BGO0FBQUEsUUFHTTtBQUFBLFFBSE47QUFBQSxRQUdNLGlCQUZELHdCQUFpQix3QkFBYywrQkFDN0IsbUJBQVksVUFBVSxRQUFJO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFHakMsb0JBUU0sT0FSTixZQVFNO0FBQUEsUUFQSixvQkFNUyxVQU5ULFlBTVM7QUFBQSxVQUhQLGFBRUU7QUFBQSxZQURDLE9BQUssdUNBQXlCLGtCQUFRO0FBQUEsWUFBZ0Msb0JBQWlCO0FBQUE7Ozs7SUFLckYsaUNBQVgsb0JBOERNLE9BOUROLFlBOERNO0FBQUEsTUE3REo7QUFBQSxNQUNBLG9CQUtNLE9BTE4sWUFLTTtBQUFBLGtDQUpKO0FBQUEsVUFBK0k7QUFBQTtBQUFBLFlBQTFJLE9BQU07QUFBQSxZQUE0QyxvQkFBaUI7QUFBQTtVQUEyRDtBQUFBLFVBQU07QUFBQTtBQUFBO0FBQUEsUUFDekk7QUFBQSxVQUVNO0FBQUEsVUFGTjtBQUFBLFVBRU0saUJBREQsb0JBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTtNQUlwQjtBQUFBLE1BRVEsbUJBQVksV0FBTSxtQkFEMUIsb0JBZ0JNLE9BaEJOLFlBZ0JNO0FBQUEsa0NBWko7QUFBQSxVQUFzSjtBQUFBO0FBQUEsWUFBakosT0FBTTtBQUFBLFlBQThDLG9CQUFpQjtBQUFBO1VBQTJEO0FBQUEsVUFBVztBQUFBO0FBQUE7QUFBQSxRQUNoSixvQkFVTSxPQVZOLGFBVU07QUFBQSw2QkFUSjtBQUFBLFlBUUU7QUFBQTtBQUFBLHdCQVBhLG9CQUFXLENBQWpCLE9BQUU7bUNBRFgsYUFRRTtBQUFBLGdCQU5DLEtBQUs7QUFBQSxnQkFDTCxXQUFTO0FBQUEsZ0JBQ1QsY0FBWTtBQUFBLGdCQUNiLE1BQUs7QUFBQSxnQkFDTDtBQUFBLGdCQUNBLE9BQU07QUFBQSxnQkFBTyxvQkFBaUI7QUFBQTs7Ozs7OztNQUlwQztBQUFBLE1BQ1csNENBQVgsb0JBV00sT0FYTixhQVdNO0FBQUEsUUFWSixvQkFTTSxPQVROLGFBU007QUFBQSxVQVJKLGFBT2E7QUFBQSxZQU5YLE1BQUs7QUFBQSxZQUNMLE9BQU07QUFBQSxZQUNOLE9BQU07QUFBQSxZQUNMLElBQUksbUJBQVksZUFBVztBQUFBLFlBQVEsb0JBQWlCO0FBQUE7OEJBQ3RELE1BRUQ7QUFBQTtnQkFGQztBQUFBLGdCQUVEO0FBQUE7QUFBQTtBQUFBOzs7Ozs7TUFHSjtBQUFBLFFBQ2EscUJBQWMsd0JBQTNCLG9CQW9CTSxPQXBCTixhQW9CTTtBQUFBLGtDQW5CSjtBQUFBLFVBQXVKO0FBQUE7QUFBQSxZQUFsSixPQUFNO0FBQUEsWUFBbUQsb0JBQWlCO0FBQUE7VUFBMkQ7QUFBQSxVQUFPO0FBQUE7QUFBQTtBQUFBLFFBQ2pKLG9CQWlCTSxPQWpCTixhQWlCTTtBQUFBLDZCQWhCSjtBQUFBLFlBS0U7QUFBQTtBQUFBLHdCQUowQixxQkFBYyxNQUFLLEdBQUksbUJBQVksSUFBckQsUUFBUSxVQUFLO21DQUR2QixhQUtFO0FBQUEsZ0JBSEMsS0FBSztBQUFBLGdCQUNMLGVBQWEsbUJBQVksVUFBVTtBQUFBLGdCQUNuQztBQUFBLGdCQUFnQixvQkFBaUI7QUFBQTs7Ozs7VUFHNUIsc0JBQWUscUJBQWMsd0JBRHJDLGFBU2E7QUFBQTtZQVBYLE1BQUs7QUFBQSxZQUNMLE9BQU07QUFBQSxZQUNOLE9BQU07QUFBQSxZQUNMLFNBQUssc0NBQUUsdUJBQVk7QUFBQSxZQUFRLG9CQUFpQjtBQUFBOzhCQUM5QyxNQUNZO0FBQUE7Z0JBRFosaUJBQ1ksaUJBQUcscUJBQWMsU0FBUyxtQkFBWSxJQUFHO0FBQUEsZ0JBRXREO0FBQUE7QUFBQTtBQUFBIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJGdW5jdGlvblJ1blJvdy52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxyXG4gIDxkaXZcclxuICAgIGNsYXNzPVwiYm9yZGVyIGJvcmRlci1vdXRsaW5lLTIgcm91bmRlZC1tZCBzcGFjZS15LTIgb3ZlcmZsb3ctaGlkZGVuIGJnLWZvdW5kYXRpb24gc2hhZG93LXNtXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZToyOjNcIlxyXG4gID5cclxuICAgIDxidXR0b25cclxuICAgICAgY2xhc3M9XCJmbGV4IHNwYWNlLXgtMS41IGl0ZW1zLWNlbnRlciBtYXgtdy1mdWxsIHctZnVsbCBweC0yIHB5LTEgaC04IHRyYW5zaXRpb24gaG92ZXI6YmctcHJpbWFyeS1tdXRlZCBiZy1mb3VuZGF0aW9uXCJcclxuICAgICAgQGNsaWNrPVwiZXhwYW5kZWQgPSAhZXhwYW5kZWRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRvbWF0ZS92aWV3ZXIvcGFuZWwvRnVuY3Rpb25SdW5Sb3cudnVlOjU6NVwiXHJcbiAgICA+XHJcbiAgICAgIDxkaXYgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZTo5OjdcIj5cclxuICAgICAgICA8Q29tcG9uZW50XHJcbiAgICAgICAgICA6aXM9XCJzdGF0dXNNZXRhRGF0YS5pY29uXCJcclxuICAgICAgICAgIHYtdGlwcHk9XCJmdW5jdGlvblJ1bi5zdGF0dXNcIlxyXG4gICAgICAgICAgOmNsYXNzPVwiWydoLTQgdy00IG91dGxpbmUtbm9uZScsIHN0YXR1c01ldGFEYXRhLmljb25Db2xvcl1cIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRvbWF0ZS92aWV3ZXIvcGFuZWwvRnVuY3Rpb25SdW5Sb3cudnVlOjEwOjlcIlxyXG4gICAgICAgIC8+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8QXV0b21hdGVGdW5jdGlvbkxvZ28gOmxvZ289XCJmdW5jdGlvblJ1bi5mdW5jdGlvbj8ubG9nb1wiIHNpemU9XCJ4c1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6MTY6N1wiIC8+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJmb250LW1lZGl1bSB0ZXh0LWJvZHktMnhzIHRydW5jYXRlXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZToxNzo3XCI+XHJcbiAgICAgICAge3sgYXV0b21hdGlvbk5hbWUgPyBhdXRvbWF0aW9uTmFtZSArICcgLyAnIDogJydcclxuICAgICAgICB9fXt7IGZ1bmN0aW9uUnVuLmZ1bmN0aW9uPy5uYW1lIHx8ICdVbmtub3duIGZ1bmN0aW9uJyB9fVxyXG4gICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDxkaXYgY2xhc3M9XCJoLWZ1bGwgZ3JvdyBmbGV4IGp1c3RpZnktZW5kXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZToyMjo3XCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgY2xhc3M9XCJob3ZlcjpiZy1wcmltYXJ5LW11dGVkIGhvdmVyOnRleHQtcHJpbWFyeSBmbGV4IGgtZnVsbCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgcm91bmRlZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6MjM6OVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgPENoZXZyb25Eb3duSWNvblxyXG4gICAgICAgICAgICA6Y2xhc3M9XCJgaC0zIHctMyB0cmFuc2l0aW9uICR7IWV4cGFuZGVkID8gJy1yb3RhdGUtOTAnIDogJ3JvdGF0ZS0wJ31gXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZToyNjoxMVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvYnV0dG9uPlxyXG4gICAgPGRpdiB2LWlmPVwiZXhwYW5kZWRcIiBjbGFzcz1cInB4LTMgcGItMiBzcGFjZS15LTRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRvbWF0ZS92aWV3ZXIvcGFuZWwvRnVuY3Rpb25SdW5Sb3cudnVlOjMyOjVcIj5cclxuICAgICAgPCEtLSBTdGF0dXMgbWVzc2FnZSAtLT5cclxuICAgICAgPGRpdiBjbGFzcz1cInNwYWNlLXktMVwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6MzQ6N1wiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJvZHktMnhzIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6MzU6OVwiPlN0YXR1czwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJvZHktMnhzIHRleHQtZm9yZWdyb3VuZC0yIHdoaXRlc3BhY2UtcHJlLXdyYXBcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRvbWF0ZS92aWV3ZXIvcGFuZWwvRnVuY3Rpb25SdW5Sb3cudnVlOjM2OjlcIj5cclxuICAgICAgICAgIHt7IHN0YXR1c01lc3NhZ2UgfX1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcblxyXG4gICAgICA8IS0tIEF0dGFjaG1lbnRzIC0tPlxyXG4gICAgICA8ZGl2XHJcbiAgICAgICAgdi1pZj1cImF0dGFjaG1lbnRzLmxlbmd0aCAhPT0gMFwiXHJcbiAgICAgICAgY2xhc3M9XCJib3JkZXItdCBwdC0yIGJvcmRlci1vdXRsaW5lLTIgc3BhY2UteS0xXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZTo0Mjo3XCJcclxuICAgICAgPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJvZHktMnhzIGZvbnQtbWVkaXVtIHRleHQtZm9yZWdyb3VuZC0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZTo0Njo5XCI+QXR0YWNobWVudHM8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibWwtWzJweF0ganVzdGlmeS1zdGFydFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6NDc6OVwiPlxyXG4gICAgICAgICAgPEF1dG9tYXRlUnVuc0F0dGFjaG1lbnRCdXR0b25cclxuICAgICAgICAgICAgdi1mb3I9XCJpZCBpbiBhdHRhY2htZW50c1wiXHJcbiAgICAgICAgICAgIDprZXk9XCJpZFwiXHJcbiAgICAgICAgICAgIDpibG9iLWlkPVwiaWRcIlxyXG4gICAgICAgICAgICA6cHJvamVjdC1pZD1cInByb2plY3RJZFwiXHJcbiAgICAgICAgICAgIHNpemU9XCJ4c1wiXHJcbiAgICAgICAgICAgIGxpbmtcclxuICAgICAgICAgICAgY2xhc3M9XCJtci0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZTo0ODoxMVwiXHJcbiAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPCEtLSBDb250ZXh0IHZpZXcgLS0+XHJcbiAgICAgIDxkaXYgdi1pZj1cImhhc1ZhbGlkQ29udGV4dFZpZXdcIiBjbGFzcz1cImJvcmRlci10IHB0LTIgYm9yZGVyLW91dGxpbmUtMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6NjA6N1wiPlxyXG4gICAgICAgIDxkaXYgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZTo2MTo5XCI+XHJcbiAgICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgICBjb2xvcj1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInRydW5jYXRlIG1heC13LWZ1bGxcIlxyXG4gICAgICAgICAgICA6dG89XCJmdW5jdGlvblJ1bi5jb250ZXh0VmlldyB8fCAnJ1wiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6NjI6MTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBPcGVuIHZpZXdcclxuICAgICAgICAgIDwvRm9ybUJ1dHRvbj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDwhLS0gUmVzdWx0cyAtLT5cclxuICAgICAgPGRpdiB2LWlmPVwiISFvYmplY3RSZXN1bHRzLmxlbmd0aFwiIGNsYXNzPVwiYm9yZGVyLXQgcHQtMiBib3JkZXItb3V0bGluZS0yXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZTo3Mzo3XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYm9keS0yeHMgZm9udC1tZWRpdW0gdGV4dC1mb3JlZ3JvdW5kLTIgbWItMlwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6NzQ6OVwiPlJlc3VsdHM8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic3BhY2UteS0xXCIgZGF0YS12LWluc3BlY3Rvcj1cImNvbXBvbmVudHMvYXV0b21hdGUvdmlld2VyL3BhbmVsL0Z1bmN0aW9uUnVuUm93LnZ1ZTo3NTo5XCI+XHJcbiAgICAgICAgICA8QXV0b21hdGVWaWV3ZXJQYW5lbEZ1bmN0aW9uUnVuUm93T2JqZWN0UmVzdWx0XHJcbiAgICAgICAgICAgIHYtZm9yPVwiKHJlc3VsdCwgaW5kZXgpIGluIG9iamVjdFJlc3VsdHMuc2xpY2UoMCwgcGFnZVJ1bkxpbWl0KVwiXHJcbiAgICAgICAgICAgIDprZXk9XCJpbmRleFwiXHJcbiAgICAgICAgICAgIDpmdW5jdGlvbi1pZD1cImZ1bmN0aW9uUnVuLmZ1bmN0aW9uPy5pZFwiXHJcbiAgICAgICAgICAgIDpyZXN1bHQ9XCJyZXN1bHRcIiBkYXRhLXYtaW5zcGVjdG9yPVwiY29tcG9uZW50cy9hdXRvbWF0ZS92aWV3ZXIvcGFuZWwvRnVuY3Rpb25SdW5Sb3cudnVlOjc2OjExXCJcclxuICAgICAgICAgIC8+XHJcbiAgICAgICAgICA8Rm9ybUJ1dHRvblxyXG4gICAgICAgICAgICB2LWlmPVwicGFnZVJ1bkxpbWl0IDwgb2JqZWN0UmVzdWx0cy5sZW5ndGhcIlxyXG4gICAgICAgICAgICBzaXplPVwic21cIlxyXG4gICAgICAgICAgICBjb2xvcj1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInctZnVsbFwiXHJcbiAgICAgICAgICAgIEBjbGljaz1cInBhZ2VSdW5MaW1pdCArPSAxMFwiIGRhdGEtdi1pbnNwZWN0b3I9XCJjb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWU6ODI6MTFcIlxyXG4gICAgICAgICAgPlxyXG4gICAgICAgICAgICBMb2FkIG1vcmUgKHt7IG9iamVjdFJlc3VsdHMubGVuZ3RoIC0gcGFnZVJ1bkxpbWl0IH19XHJcbiAgICAgICAgICAgIGhpZGRlbiByZXN1bHRzKVxyXG4gICAgICAgICAgPC9Gb3JtQnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L3RlbXBsYXRlPlxyXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxyXG5pbXBvcnQgeyBDaGV2cm9uRG93bkljb24gfSBmcm9tICdAaGVyb2ljb25zL3Z1ZS8yNC9vdXRsaW5lJ1xyXG5pbXBvcnQgeyBBdXRvbWF0ZVJ1blN0YXR1cyB9IGZyb20gJ35+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbC9ncmFwaHFsJ1xyXG5pbXBvcnQgdHlwZSB7IEF1dG9tYXRlVmlld2VyUGFuZWxGdW5jdGlvblJ1blJvd19BdXRvbWF0ZUZ1bmN0aW9uUnVuRnJhZ21lbnQgfSBmcm9tICd+fi9saWIvY29tbW9uL2dlbmVyYXRlZC9ncWwvZ3JhcGhxbCdcclxuaW1wb3J0IHsgdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSB9IGZyb20gJ35+L2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvc2V0dXAnXHJcbmltcG9ydCB7IGdyYXBocWwgfSBmcm9tICd+L2xpYi9jb21tb24vZ2VuZXJhdGVkL2dxbCdcclxuaW1wb3J0IHsgdXNlQXV0b21hdGlvbkZ1bmN0aW9uUnVuUmVzdWx0cyB9IGZyb20gJ34vbGliL2F1dG9tYXRlL2NvbXBvc2FibGVzL3J1bnMnXHJcbmltcG9ydCB7IHVzZVJ1blN0YXR1c01ldGFkYXRhIH0gZnJvbSAnfi9saWIvYXV0b21hdGUvY29tcG9zYWJsZXMvcnVuU3RhdHVzJ1xyXG5pbXBvcnQgeyBkb2VzUm91dGVGaXRUYXJnZXQgfSBmcm9tICd+L2xpYi9jb21tb24vaGVscGVycy9yb3V0ZSdcclxuXHJcbmdyYXBocWwoYFxyXG4gIGZyYWdtZW50IEF1dG9tYXRlVmlld2VyUGFuZWxGdW5jdGlvblJ1blJvd19BdXRvbWF0ZUZ1bmN0aW9uUnVuIG9uIEF1dG9tYXRlRnVuY3Rpb25SdW4ge1xyXG4gICAgaWRcclxuICAgIHJlc3VsdHNcclxuICAgIHN0YXR1c1xyXG4gICAgc3RhdHVzTWVzc2FnZVxyXG4gICAgY29udGV4dFZpZXdcclxuICAgIGZ1bmN0aW9uIHtcclxuICAgICAgaWRcclxuICAgICAgbG9nb1xyXG4gICAgICBuYW1lXHJcbiAgICB9XHJcbiAgICBjcmVhdGVkQXRcclxuICAgIHVwZGF0ZWRBdFxyXG4gIH1cclxuYClcclxuXHJcbmNvbnN0IHByb3BzID0gZGVmaW5lUHJvcHM8e1xyXG4gIGZ1bmN0aW9uUnVuOiBBdXRvbWF0ZVZpZXdlclBhbmVsRnVuY3Rpb25SdW5Sb3dfQXV0b21hdGVGdW5jdGlvblJ1bkZyYWdtZW50XHJcbiAgYXV0b21hdGlvbk5hbWU6IHN0cmluZ1xyXG59PigpXHJcblxyXG5jb25zdCB7IHByb2plY3RJZCB9ID0gdXNlSW5qZWN0ZWRWaWV3ZXJTdGF0ZSgpXHJcbmNvbnN0IHJlc3VsdHMgPSB1c2VBdXRvbWF0aW9uRnVuY3Rpb25SdW5SZXN1bHRzKHtcclxuICByZXN1bHRzOiBjb21wdXRlZCgoKSA9PiBwcm9wcy5mdW5jdGlvblJ1bi5yZXN1bHRzKVxyXG59KVxyXG5jb25zdCB7IG1ldGFkYXRhOiBzdGF0dXNNZXRhRGF0YSB9ID0gdXNlUnVuU3RhdHVzTWV0YWRhdGEoe1xyXG4gIHN0YXR1czogY29tcHV0ZWQoKCkgPT4gcHJvcHMuZnVuY3Rpb25SdW4uc3RhdHVzKVxyXG59KVxyXG5jb25zdCByb3V0ZSA9IHVzZVJvdXRlKClcclxuXHJcbmNvbnN0IHBhZ2VSdW5MaW1pdCA9IHJlZig1KVxyXG5jb25zdCBleHBhbmRlZCA9IHJlZihmYWxzZSlcclxuXHJcbmNvbnN0IGF0dGFjaG1lbnRzID0gY29tcHV0ZWQoKCkgPT5cclxuICAocmVzdWx0cy52YWx1ZT8udmFsdWVzLmJsb2JJZHMgfHwgW10pLmZpbHRlcigoYikgPT4gISFiKVxyXG4pXHJcbmNvbnN0IG9iamVjdFJlc3VsdHMgPSBjb21wdXRlZCgoKSA9PiByZXN1bHRzLnZhbHVlPy52YWx1ZXMub2JqZWN0UmVzdWx0cyA/PyBbXSlcclxuY29uc3QgaGFzVmFsaWRDb250ZXh0VmlldyA9IGNvbXB1dGVkKCgpID0+IHtcclxuICBjb25zdCBjdHhWaWV3ID0gcHJvcHMuZnVuY3Rpb25SdW4uY29udGV4dFZpZXdcclxuICBpZiAoIWN0eFZpZXc/Lmxlbmd0aCkgcmV0dXJuIGZhbHNlXHJcblxyXG4gIGNvbnN0IGN1cnJlbnRQYXRoID0gcm91dGUuZnVsbFBhdGhcclxuICByZXR1cm4gIWRvZXNSb3V0ZUZpdFRhcmdldChjdHhWaWV3LCBjdXJyZW50UGF0aClcclxufSlcclxuXHJcbmNvbnN0IHN0YXR1c01lc3NhZ2UgPSBjb21wdXRlZCgoKSA9PiB7XHJcbiAgY29uc3QgaXNGaW5pc2hlZCA9ICEoXHJcbiAgICBbXHJcbiAgICAgIEF1dG9tYXRlUnVuU3RhdHVzLkluaXRpYWxpemluZyxcclxuICAgICAgQXV0b21hdGVSdW5TdGF0dXMuUnVubmluZyxcclxuICAgICAgQXV0b21hdGVSdW5TdGF0dXMuUGVuZGluZ1xyXG4gICAgXSBhcyBzdHJpbmdbXVxyXG4gICkuaW5jbHVkZXMocHJvcHMuZnVuY3Rpb25SdW4uc3RhdHVzKVxyXG5cclxuICByZXR1cm4gaXNGaW5pc2hlZFxyXG4gICAgPyBwcm9wcy5mdW5jdGlvblJ1bi5zdGF0dXNNZXNzYWdlID8/ICdObyBzdGF0dXMgbWVzc2FnZSdcclxuICAgIDogYEZ1bmN0aW9uIGlzICR7cHJvcHMuZnVuY3Rpb25SdW4uc3RhdHVzLnRvTG93ZXJDYXNlKCl9LmBcclxufSlcclxuPC9zY3JpcHQ+XHJcbiJdLCJmaWxlIjoiRDovc3BlY2tsZS1zZXJ2ZXIvcGFja2FnZXMvZnJvbnRlbmQtMi9jb21wb25lbnRzL2F1dG9tYXRlL3ZpZXdlci9wYW5lbC9GdW5jdGlvblJ1blJvdy52dWUifQ==