import { decodeDefaultGroupId, formatResourceIdsForGroup, isUngroupedGroup } from "/_nuxt/@fs/D:/speckle-server/packages/shared/dist/esm/saved-views/index.js"; import { intersection } from "/_nuxt/node_modules/.cache/vite/client/deps/lodash-es.js?v=e4f18c29"; import { getCachedObjectKeys, getCacheKey, parseObjectKey } from "/_nuxt/lib/common/helpers/graphql.ts"; import { modifyObjectField, getCacheId, iterateObjectField } from "/_nuxt/utils/globals.ts"; export const filterKeys = [ "input.search", "input.onlyAuthored", "input.onlyVisibility", "filter.search", "filter.onlyAuthored", "filter.onlyVisibility" ]; const resolveCacheGroupKeys = (params) => { const { cache, projectId } = params; if ("group" in params) { const group = params.group; if (isUngroupedGroup(group.id)) { throw new Error("Ungrouped/default group ids are not allowed"); } return [ { key: getCacheKey("SavedViewGroup", group.id), id: group.id, metadata: { resourceIds: group.resourceIds }, isUngrouped: false } ]; } const viewResourceIds = params.view.resourceIds; const allGroupCacheKeys = getCachedObjectKeys(cache, "SavedViewGroup"); const ret = []; for (const groupKey of allGroupCacheKeys) { const { id } = parseObjectKey(groupKey); const defaultGroup = decodeDefaultGroupId(id); if (!defaultGroup) continue; if (defaultGroup.projectId !== projectId) continue; const groupResourceIds = defaultGroup.resourceIds; const viewGroupResourceIds = formatResourceIdsForGroup(viewResourceIds); const hasMatch = intersection(groupResourceIds, viewGroupResourceIds).length > 0; if (hasMatch) { ret.push({ key: groupKey, metadata: defaultGroup, id, isUngrouped: true }); } } return ret; }; export const onNewGroupViewCacheUpdates = (params) => { const { viewId, projectId, cache } = params; const groupKeys = resolveCacheGroupKeys(params); modifyObjectField( cache, getCacheId("Project", projectId), "savedViewGroups", ({ helpers: { createUpdatedValue, keyToRef, fromRef }, value, variables }) => { if (!value.items) return; const existingGroupKeys = value.items.map((i) => i.__ref); const hasUngroupedAlready = value.items.some( (i) => isUngroupedGroup(fromRef(i).id) ); const groupsResourceIds = formatResourceIdsForGroup( variables.input.resourceIdString ); const newGroupKeys = groupKeys.filter((k) => { if (k.isUngrouped && hasUngroupedAlready) return false; if (existingGroupKeys.includes(k.key)) return false; const hasMatch = intersection(groupsResourceIds, k.metadata.resourceIds).length > 0; if (!hasMatch) return false; return true; }).map((g) => g.key); if (!newGroupKeys.length) return; const newUngrouped = newGroupKeys.filter( (k) => isUngroupedGroup(parseObjectKey(k).id) ); const newGrouped = newGroupKeys.filter( (k) => !isUngroupedGroup(parseObjectKey(k).id) ); const extraCount = newGroupKeys.length; return createUpdatedValue(({ update }) => { update("totalCount", (count) => count + extraCount); update("items", (items) => [ ...newUngrouped.map((k) => keyToRef(k)), ...items, ...newGrouped.map((k) => keyToRef(k)) ]); }); }, { autoEvictFiltered: filterKeys } ); for (const { key: groupKey } of groupKeys) { modifyObjectField( cache, groupKey, "views", ({ helpers: { createUpdatedValue, ref, readField }, value }) => { const hasItemAlready = value.items?.some( (item) => readField(item, "id") === viewId ); if (hasItemAlready) return; return createUpdatedValue(({ update }) => { update("totalCount", (count) => count + 1); update("items", (items) => [ref("SavedView", viewId), ...items]); }); }, { autoEvictFiltered: filterKeys } ); } }; export const onGroupViewRemovalCacheUpdates = (params) => { const { viewId: id, projectId, cache } = params; const groupKeys = resolveCacheGroupKeys(params); for (const { key: groupKey, id: groupId, isUngrouped } of groupKeys) { const isDefaultGroup = isUngrouped; let shouldEvict; if (isDefaultGroup) { let viewsRemain = false; iterateObjectField( cache, groupKey, "views", ({ value, helpers: { fromRef } }) => { const otherItems = value?.items?.filter((item) => fromRef(item).id !== id); if (otherItems?.length) { viewsRemain = true; } } ); if (!viewsRemain) { shouldEvict = true; } } if (shouldEvict) { modifyObjectField( cache, getCacheId("Project", projectId), "savedViewGroups", ({ helpers: { createUpdatedValue, fromRef } }) => { return createUpdatedValue(({ update }) => { update("totalCount", (count) => count - 1); update( "items", (items) => items.filter((item) => fromRef(item).id !== groupId) ); }); }, { autoEvictFiltered: filterKeys } ); cache.evict({ id: getCacheId("SavedViewGroup", groupId) }); } else { modifyObjectField( cache, getCacheId("SavedViewGroup", groupId), "views", ({ helpers: { createUpdatedValue, fromRef } }) => { return createUpdatedValue(({ update }) => { update("totalCount", (count) => count - 1); update("items", (items) => items.filter((item) => fromRef(item).id !== id)); }); }, { autoEvictFiltered: filterKeys } ); } } }; //# sourceMappingURL=data:application/json;base64,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QUFNO0FBQ2hELGlCQUFPLG1CQUFtQixDQUFDLEVBQUUsT0FBTyxNQUFNO0FBQ3hDLG1CQUFPLGNBQWMsQ0FBQyxVQUFVLFFBQVEsQ0FBQztBQUN6QyxtQkFBTyxTQUFTLENBQUMsVUFBVSxNQUFNLE9BQU8sQ0FBQyxTQUFTLFFBQVEsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQUEsVUFDNUUsQ0FBQztBQUFBLFFBQ0g7QUFBQSxRQUNBLEVBQUUsbUJBQW1CLFdBQVc7QUFBQSxNQUNsQztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YiLCJuYW1lcyI6W10sImlnbm9yZUxpc3QiOltdLCJzb3VyY2VzIjpbImNhY2hlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXBvbGxvQ2FjaGUgfSBmcm9tICdAYXBvbGxvL2NsaWVudC9jYWNoZSdcclxuaW1wb3J0IHtcclxuICBkZWNvZGVEZWZhdWx0R3JvdXBJZCxcclxuICBmb3JtYXRSZXNvdXJjZUlkc0Zvckdyb3VwLFxyXG4gIGlzVW5ncm91cGVkR3JvdXBcclxufSBmcm9tICdAc3BlY2tsZS9zaGFyZWQvc2F2ZWQtdmlld3MnXHJcbmltcG9ydCB7IGludGVyc2VjdGlvbiB9IGZyb20gJ2xvZGFzaC1lcydcclxuaW1wb3J0IHtcclxuICBnZXRDYWNoZWRPYmplY3RLZXlzLFxyXG4gIGdldENhY2hlS2V5LFxyXG4gIHBhcnNlT2JqZWN0S2V5LFxyXG4gIHR5cGUgQXBvbGxvQ2FjaGVPYmplY3RLZXlcclxufSBmcm9tICd+L2xpYi9jb21tb24vaGVscGVycy9ncmFwaHFsJ1xyXG5cclxuZXhwb3J0IGNvbnN0IGZpbHRlcktleXMgPSBbXHJcbiAgJ2lucHV0LnNlYXJjaCcsXHJcbiAgJ2lucHV0Lm9ubHlBdXRob3JlZCcsXHJcbiAgJ2lucHV0Lm9ubHlWaXNpYmlsaXR5JyxcclxuICAnZmlsdGVyLnNlYXJjaCcsXHJcbiAgJ2ZpbHRlci5vbmx5QXV0aG9yZWQnLFxyXG4gICdmaWx0ZXIub25seVZpc2liaWxpdHknXHJcbl1cclxuXHJcbnR5cGUgR3JvdXBJZE9yVmlld0luZm8gPVxyXG4gIHwge1xyXG4gICAgICBncm91cDoge1xyXG4gICAgICAgIGlkOiBzdHJpbmdcclxuICAgICAgICByZXNvdXJjZUlkczogc3RyaW5nW11cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIHwge1xyXG4gICAgICB2aWV3OiB7XHJcbiAgICAgICAgcmVzb3VyY2VJZHM6IHN0cmluZ1tdXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbi8qKlxyXG4gKiBBIHJlYWwgZ3JvdXAgd2lsbCBvbmx5IGhhdmUgMSBpZCwgYnV0IGZvciBhIG51bGwgKHVuZ3JvdXBlZCkgZ3JvdXAgd2UgbmVlZCBleHRyYSBtZXRhZGF0YSBmcm9tIHRoZSB2aWV3XHJcbiAqIHRvIGZpbmQgb3V0IHJlbGV2YW50IG9uZXMsIHdoaWNoIG1heSBiZSBtdWx0aXBsZVxyXG4gKi9cclxuY29uc3QgcmVzb2x2ZUNhY2hlR3JvdXBLZXlzID0gKFxyXG4gIHBhcmFtczoge1xyXG4gICAgY2FjaGU6IEFwb2xsb0NhY2hlPHVua25vd24+XHJcbiAgICBwcm9qZWN0SWQ6IHN0cmluZ1xyXG4gIH0gJiBHcm91cElkT3JWaWV3SW5mb1xyXG4pOiBBcnJheTx7XHJcbiAga2V5OiBBcG9sbG9DYWNoZU9iamVjdEtleTwnU2F2ZWRWaWV3R3JvdXAnPlxyXG4gIGlkOiBzdHJpbmdcclxuICBtZXRhZGF0YToge1xyXG4gICAgcmVzb3VyY2VJZHM6IHN0cmluZ1tdXHJcbiAgfVxyXG4gIGlzVW5ncm91cGVkOiBib29sZWFuXHJcbn0+ID0+IHtcclxuICBjb25zdCB7IGNhY2hlLCBwcm9qZWN0SWQgfSA9IHBhcmFtc1xyXG4gIGlmICgnZ3JvdXAnIGluIHBhcmFtcykge1xyXG4gICAgY29uc3QgZ3JvdXAgPSBwYXJhbXMuZ3JvdXBcclxuICAgIGlmIChpc1VuZ3JvdXBlZEdyb3VwKGdyb3VwLmlkKSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZ3JvdXBlZC9kZWZhdWx0IGdyb3VwIGlkcyBhcmUgbm90IGFsbG93ZWQnKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIFtcclxuICAgICAge1xyXG4gICAgICAgIGtleTogZ2V0Q2FjaGVLZXkoJ1NhdmVkVmlld0dyb3VwJywgZ3JvdXAuaWQpLFxyXG4gICAgICAgIGlkOiBncm91cC5pZCxcclxuICAgICAgICBtZXRhZGF0YTogeyByZXNvdXJjZUlkczogZ3JvdXAucmVzb3VyY2VJZHMgfSxcclxuICAgICAgICBpc1VuZ3JvdXBlZDogZmFsc2VcclxuICAgICAgfVxyXG4gICAgXVxyXG4gIH1cclxuXHJcbiAgY29uc3Qgdmlld1Jlc291cmNlSWRzID0gcGFyYW1zLnZpZXcucmVzb3VyY2VJZHNcclxuICBjb25zdCBhbGxHcm91cENhY2hlS2V5cyA9IGdldENhY2hlZE9iamVjdEtleXMoY2FjaGUsICdTYXZlZFZpZXdHcm91cCcpXHJcbiAgY29uc3QgcmV0OiBBcnJheTx7XHJcbiAgICBrZXk6IEFwb2xsb0NhY2hlT2JqZWN0S2V5PCdTYXZlZFZpZXdHcm91cCc+XHJcbiAgICBpZDogc3RyaW5nXHJcbiAgICBtZXRhZGF0YToge1xyXG4gICAgICByZXNvdXJjZUlkczogc3RyaW5nW11cclxuICAgIH1cclxuICAgIGlzVW5ncm91cGVkOiBib29sZWFuXHJcbiAgfT4gPSBbXVxyXG4gIGZvciAoY29uc3QgZ3JvdXBLZXkgb2YgYWxsR3JvdXBDYWNoZUtleXMpIHtcclxuICAgIGNvbnN0IHsgaWQgfSA9IHBhcnNlT2JqZWN0S2V5KGdyb3VwS2V5KVxyXG4gICAgY29uc3QgZGVmYXVsdEdyb3VwID0gZGVjb2RlRGVmYXVsdEdyb3VwSWQoaWQpXHJcbiAgICBpZiAoIWRlZmF1bHRHcm91cCkgY29udGludWUgLy8gbm90IGRlZmF1bHQgZ3JvdXBcclxuICAgIGlmIChkZWZhdWx0R3JvdXAucHJvamVjdElkICE9PSBwcm9qZWN0SWQpIGNvbnRpbnVlIC8vIG5vdCBpbiB0aGlzIHByb2plY3RcclxuXHJcbiAgICAvLyBTZWUgaWYgcmVzb3VyY2VJZHMgbWF0Y2ggdXBcclxuICAgIGNvbnN0IGdyb3VwUmVzb3VyY2VJZHMgPSBkZWZhdWx0R3JvdXAucmVzb3VyY2VJZHNcclxuICAgIGNvbnN0IHZpZXdHcm91cFJlc291cmNlSWRzID0gZm9ybWF0UmVzb3VyY2VJZHNGb3JHcm91cCh2aWV3UmVzb3VyY2VJZHMpXHJcbiAgICBjb25zdCBoYXNNYXRjaCA9IGludGVyc2VjdGlvbihncm91cFJlc291cmNlSWRzLCB2aWV3R3JvdXBSZXNvdXJjZUlkcykubGVuZ3RoID4gMFxyXG4gICAgaWYgKGhhc01hdGNoKSB7XHJcbiAgICAgIHJldC5wdXNoKHsga2V5OiBncm91cEtleSwgbWV0YWRhdGE6IGRlZmF1bHRHcm91cCwgaWQsIGlzVW5ncm91cGVkOiB0cnVlIH0pXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4gcmV0XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBDYWNoZSBtdXRhdGlvbnMgZm9yIHdoZW4gYSBncm91cCBnZXRzIGEgbmV3IHZpZXc6XHJcbiAqIC0gSWYgbmV3IGdyb3VwLCBQcm9qZWN0LnNhdmVkVmlld0dyb3VwcyArIDFcclxuICogLSBTYXZlZFZpZXdHcm91cC52aWV3cyArIDFcclxuICovXHJcbmV4cG9ydCBjb25zdCBvbk5ld0dyb3VwVmlld0NhY2hlVXBkYXRlcyA9IChcclxuICBwYXJhbXM6IHtcclxuICAgIGNhY2hlOiBBcG9sbG9DYWNoZTx1bmtub3duPlxyXG4gICAgLyoqXHJcbiAgICAgKiBUaGUgSUQgb2YgdGhlIHZpZXcgYmVpbmcgYWRkZWRcclxuICAgICAqL1xyXG4gICAgdmlld0lkOiBzdHJpbmdcclxuICAgIHByb2plY3RJZDogc3RyaW5nXHJcbiAgfSAmIEdyb3VwSWRPclZpZXdJbmZvXHJcbikgPT4ge1xyXG4gIGNvbnN0IHsgdmlld0lkLCBwcm9qZWN0SWQsIGNhY2hlIH0gPSBwYXJhbXNcclxuICBjb25zdCBncm91cEtleXMgPSByZXNvbHZlQ2FjaGVHcm91cEtleXMocGFyYW1zKVxyXG5cclxuICAvLyBQcm9qZWN0LnNhdmVkVmlld0dyb3VwcyArIDEsIGlmIGl0IGlzIGEgbmV3IGdyb3VwXHJcbiAgbW9kaWZ5T2JqZWN0RmllbGQoXHJcbiAgICBjYWNoZSxcclxuICAgIGdldENhY2hlSWQoJ1Byb2plY3QnLCBwcm9qZWN0SWQpLFxyXG4gICAgJ3NhdmVkVmlld0dyb3VwcycsXHJcbiAgICAoeyBoZWxwZXJzOiB7IGNyZWF0ZVVwZGF0ZWRWYWx1ZSwga2V5VG9SZWYsIGZyb21SZWYgfSwgdmFsdWUsIHZhcmlhYmxlcyB9KSA9PiB7XHJcbiAgICAgIGlmICghdmFsdWUuaXRlbXMpIHJldHVybiAvLyBubyBncm91cHMgcXVlcnkgYXQgYWxsPyBza2lwXHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogLSAxLiBJZiBncm91cCBhbHJlYWR5IGluIHRoZSBsaXN0IC0gc2tpcFxyXG4gICAgICAgKiAtIDIuIElmIG5vdCBhbmQgdmFycy5yZXNvdXJjZUlkcyBtYXRjaCB3LyBuZXcgZ3JvdXAgcmVzb3VyY2VJZHMsIHRoZW4gYWRkXHJcbiAgICAgICAqL1xyXG4gICAgICBjb25zdCBleGlzdGluZ0dyb3VwS2V5cyA9IHZhbHVlLml0ZW1zIS5tYXAoKGkpID0+IGkuX19yZWYpXHJcbiAgICAgIGNvbnN0IGhhc1VuZ3JvdXBlZEFscmVhZHkgPSB2YWx1ZS5pdGVtcy5zb21lKChpKSA9PlxyXG4gICAgICAgIGlzVW5ncm91cGVkR3JvdXAoZnJvbVJlZihpKS5pZClcclxuICAgICAgKVxyXG4gICAgICBjb25zdCBncm91cHNSZXNvdXJjZUlkcyA9IGZvcm1hdFJlc291cmNlSWRzRm9yR3JvdXAoXHJcbiAgICAgICAgdmFyaWFibGVzLmlucHV0LnJlc291cmNlSWRTdHJpbmdcclxuICAgICAgKVxyXG5cclxuICAgICAgY29uc3QgbmV3R3JvdXBLZXlzID0gZ3JvdXBLZXlzXHJcbiAgICAgICAgLmZpbHRlcigoaykgPT4ge1xyXG4gICAgICAgICAgaWYgKGsuaXNVbmdyb3VwZWQgJiYgaGFzVW5ncm91cGVkQWxyZWFkeSkgcmV0dXJuIGZhbHNlIC8vIHVuZ3JvdXBlZCBhbHJlYWR5IGV4aXN0c1xyXG4gICAgICAgICAgaWYgKGV4aXN0aW5nR3JvdXBLZXlzLmluY2x1ZGVzKGsua2V5KSkgcmV0dXJuIGZhbHNlIC8vIGFscmVhZHkgZXhpc3RzXHJcbiAgICAgICAgICBjb25zdCBoYXNNYXRjaCA9XHJcbiAgICAgICAgICAgIGludGVyc2VjdGlvbihncm91cHNSZXNvdXJjZUlkcywgay5tZXRhZGF0YS5yZXNvdXJjZUlkcykubGVuZ3RoID4gMFxyXG4gICAgICAgICAgaWYgKCFoYXNNYXRjaCkgcmV0dXJuIGZhbHNlIC8vIHJlc291cmNlSWRzIGRvbid0IG1hdGNoXHJcblxyXG4gICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5tYXAoKGcpID0+IGcua2V5KVxyXG4gICAgICBpZiAoIW5ld0dyb3VwS2V5cy5sZW5ndGgpIHJldHVyblxyXG5cclxuICAgICAgY29uc3QgbmV3VW5ncm91cGVkID0gbmV3R3JvdXBLZXlzLmZpbHRlcigoaykgPT5cclxuICAgICAgICBpc1VuZ3JvdXBlZEdyb3VwKHBhcnNlT2JqZWN0S2V5KGspLmlkKVxyXG4gICAgICApXHJcbiAgICAgIGNvbnN0IG5ld0dyb3VwZWQgPSBuZXdHcm91cEtleXMuZmlsdGVyKFxyXG4gICAgICAgIChrKSA9PiAhaXNVbmdyb3VwZWRHcm91cChwYXJzZU9iamVjdEtleShrKS5pZClcclxuICAgICAgKVxyXG4gICAgICBjb25zdCBleHRyYUNvdW50ID0gbmV3R3JvdXBLZXlzLmxlbmd0aFxyXG5cclxuICAgICAgcmV0dXJuIGNyZWF0ZVVwZGF0ZWRWYWx1ZSgoeyB1cGRhdGUgfSkgPT4ge1xyXG4gICAgICAgIHVwZGF0ZSgndG90YWxDb3VudCcsIChjb3VudCkgPT4gY291bnQgKyBleHRyYUNvdW50KVxyXG4gICAgICAgIHVwZGF0ZSgnaXRlbXMnLCAoaXRlbXMpID0+IFtcclxuICAgICAgICAgIC4uLm5ld1VuZ3JvdXBlZC5tYXAoKGspID0+IGtleVRvUmVmKGspKSxcclxuICAgICAgICAgIC4uLml0ZW1zLFxyXG4gICAgICAgICAgLi4ubmV3R3JvdXBlZC5tYXAoKGspID0+IGtleVRvUmVmKGspKVxyXG4gICAgICAgIF0pXHJcbiAgICAgIH0pXHJcbiAgICB9LFxyXG4gICAgeyBhdXRvRXZpY3RGaWx0ZXJlZDogZmlsdGVyS2V5cyB9XHJcbiAgKVxyXG5cclxuICBmb3IgKGNvbnN0IHsga2V5OiBncm91cEtleSB9IG9mIGdyb3VwS2V5cykge1xyXG4gICAgLy8gU2F2ZWRWaWV3R3JvdXAudmlld3MgKyAxXHJcbiAgICBtb2RpZnlPYmplY3RGaWVsZChcclxuICAgICAgY2FjaGUsXHJcbiAgICAgIGdyb3VwS2V5LFxyXG4gICAgICAndmlld3MnLFxyXG4gICAgICAoeyBoZWxwZXJzOiB7IGNyZWF0ZVVwZGF0ZWRWYWx1ZSwgcmVmLCByZWFkRmllbGQgfSwgdmFsdWUgfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGhhc0l0ZW1BbHJlYWR5ID0gdmFsdWUuaXRlbXM/LnNvbWUoXHJcbiAgICAgICAgICAoaXRlbSkgPT4gcmVhZEZpZWxkKGl0ZW0sICdpZCcpID09PSB2aWV3SWRcclxuICAgICAgICApXHJcbiAgICAgICAgaWYgKGhhc0l0ZW1BbHJlYWR5KSByZXR1cm5cclxuXHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVVwZGF0ZWRWYWx1ZSgoeyB1cGRhdGUgfSkgPT4ge1xyXG4gICAgICAgICAgdXBkYXRlKCd0b3RhbENvdW50JywgKGNvdW50KSA9PiBjb3VudCArIDEpXHJcbiAgICAgICAgICB1cGRhdGUoJ2l0ZW1zJywgKGl0ZW1zKSA9PiBbcmVmKCdTYXZlZFZpZXcnLCB2aWV3SWQpLCAuLi5pdGVtc10pXHJcbiAgICAgICAgfSlcclxuICAgICAgfSxcclxuICAgICAgeyBhdXRvRXZpY3RGaWx0ZXJlZDogZmlsdGVyS2V5cyB9XHJcbiAgICApXHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICogQ2FjaGUgbXV0YXRpb25zIGZvciB3aGVuIGEgdmlldyBpcyByZW1vdmVkIGZyb20gYSBncm91cDpcclxuICogLSBJZiBkZWZhdWx0IGdyb3VwIGFuZCBpdCBpcyBub3cgZW1wdHksIHJlbW92ZSBpdCBlbnRpcmVseSAtIGV2aWN0IGFuZCByZW1vdmUgZnJvbSBQcm9qZWN0LnNhdmVkVmlld0dyb3Vwc1xyXG4gKiAtIE90aGVyd2lzZSBqdXN0OiBTYXZlZFZpZXdHcm91cC52aWV3cyAtIDFcclxuICovXHJcbmV4cG9ydCBjb25zdCBvbkdyb3VwVmlld1JlbW92YWxDYWNoZVVwZGF0ZXMgPSAoXHJcbiAgcGFyYW1zOiB7XHJcbiAgICBjYWNoZTogQXBvbGxvQ2FjaGU8dW5rbm93bj5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIElEIG9mIHRoZSB2aWV3IGJlaW5nIHJlbW92ZWRcclxuICAgICAqL1xyXG4gICAgdmlld0lkOiBzdHJpbmdcclxuICAgIHByb2plY3RJZDogc3RyaW5nXHJcbiAgfSAmIEdyb3VwSWRPclZpZXdJbmZvXHJcbikgPT4ge1xyXG4gIGNvbnN0IHsgdmlld0lkOiBpZCwgcHJvamVjdElkLCBjYWNoZSB9ID0gcGFyYW1zXHJcbiAgY29uc3QgZ3JvdXBLZXlzID0gcmVzb2x2ZUNhY2hlR3JvdXBLZXlzKHBhcmFtcylcclxuXHJcbiAgZm9yIChjb25zdCB7IGtleTogZ3JvdXBLZXksIGlkOiBncm91cElkLCBpc1VuZ3JvdXBlZCB9IG9mIGdyb3VwS2V5cykge1xyXG4gICAgLy8gQ2hlY2sgaWYgZGVmYXVsdC91bmdyb3VwZWQgZ3JvdXBcclxuICAgIGNvbnN0IGlzRGVmYXVsdEdyb3VwID0gaXNVbmdyb3VwZWRcclxuXHJcbiAgICAvLyBJZiBkZWZhdWx0IGdyb3VwIGFuZCBpdHMgbm93IGVtcHR5IC0gcmVtb3ZlIGl0IGFzIGl0IGRvZXNuJ3QgZXhpc3Qgb3RoZXJ3aXNlXHJcbiAgICBsZXQgc2hvdWxkRXZpY3RcclxuICAgIGlmIChpc0RlZmF1bHRHcm91cCkge1xyXG4gICAgICBsZXQgdmlld3NSZW1haW4gPSBmYWxzZVxyXG4gICAgICBpdGVyYXRlT2JqZWN0RmllbGQoXHJcbiAgICAgICAgY2FjaGUsXHJcbiAgICAgICAgZ3JvdXBLZXksXHJcbiAgICAgICAgJ3ZpZXdzJyxcclxuICAgICAgICAoeyB2YWx1ZSwgaGVscGVyczogeyBmcm9tUmVmIH0gfSkgPT4ge1xyXG4gICAgICAgICAgY29uc3Qgb3RoZXJJdGVtcyA9IHZhbHVlPy5pdGVtcz8uZmlsdGVyKChpdGVtKSA9PiBmcm9tUmVmKGl0ZW0pLmlkICE9PSBpZClcclxuXHJcbiAgICAgICAgICBpZiAob3RoZXJJdGVtcz8ubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZpZXdzUmVtYWluID0gdHJ1ZVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgKVxyXG5cclxuICAgICAgaWYgKCF2aWV3c1JlbWFpbikge1xyXG4gICAgICAgIHNob3VsZEV2aWN0ID0gdHJ1ZVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIGRlZmF1bHQgZ3JvdXAsIGlmIGl0cyBlbXB0eVxyXG4gICAgaWYgKHNob3VsZEV2aWN0KSB7XHJcbiAgICAgIC8vIFByb2plY3Quc2F2ZWRWaWV3R3JvdXBzIC0gMVxyXG4gICAgICBtb2RpZnlPYmplY3RGaWVsZChcclxuICAgICAgICBjYWNoZSxcclxuICAgICAgICBnZXRDYWNoZUlkKCdQcm9qZWN0JywgcHJvamVjdElkKSxcclxuICAgICAgICAnc2F2ZWRWaWV3R3JvdXBzJyxcclxuICAgICAgICAoeyBoZWxwZXJzOiB7IGNyZWF0ZVVwZGF0ZWRWYWx1ZSwgZnJvbVJlZiB9IH0pID0+IHtcclxuICAgICAgICAgIHJldHVybiBjcmVhdGVVcGRhdGVkVmFsdWUoKHsgdXBkYXRlIH0pID0+IHtcclxuICAgICAgICAgICAgdXBkYXRlKCd0b3RhbENvdW50JywgKGNvdW50KSA9PiBjb3VudCAtIDEpXHJcbiAgICAgICAgICAgIHVwZGF0ZSgnaXRlbXMnLCAoaXRlbXMpID0+XHJcbiAgICAgICAgICAgICAgaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBmcm9tUmVmKGl0ZW0pLmlkICE9PSBncm91cElkKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBhdXRvRXZpY3RGaWx0ZXJlZDogZmlsdGVyS2V5cyB9XHJcbiAgICAgIClcclxuXHJcbiAgICAgIC8vIEV2aWN0IGVudGlyZWx5XHJcbiAgICAgIGNhY2hlLmV2aWN0KHsgaWQ6IGdldENhY2hlSWQoJ1NhdmVkVmlld0dyb3VwJywgZ3JvdXBJZCkgfSlcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIFJlbW92ZSB2aWV3IGZyb20gdmlldyBsaXN0cyAoaW4gZ3JvdXBzKVxyXG4gICAgICAvLyBTYXZlZFZpZXdHcm91cC52aWV3cyAtIDFcclxuICAgICAgbW9kaWZ5T2JqZWN0RmllbGQoXHJcbiAgICAgICAgY2FjaGUsXHJcbiAgICAgICAgZ2V0Q2FjaGVJZCgnU2F2ZWRWaWV3R3JvdXAnLCBncm91cElkKSxcclxuICAgICAgICAndmlld3MnLFxyXG4gICAgICAgICh7IGhlbHBlcnM6IHsgY3JlYXRlVXBkYXRlZFZhbHVlLCBmcm9tUmVmIH0gfSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIGNyZWF0ZVVwZGF0ZWRWYWx1ZSgoeyB1cGRhdGUgfSkgPT4ge1xyXG4gICAgICAgICAgICB1cGRhdGUoJ3RvdGFsQ291bnQnLCAoY291bnQpID0+IGNvdW50IC0gMSlcclxuICAgICAgICAgICAgdXBkYXRlKCdpdGVtcycsIChpdGVtcykgPT4gaXRlbXMuZmlsdGVyKChpdGVtKSA9PiBmcm9tUmVmKGl0ZW0pLmlkICE9PSBpZCkpXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgeyBhdXRvRXZpY3RGaWx0ZXJlZDogZmlsdGVyS2V5cyB9XHJcbiAgICAgIClcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2xpYi92aWV3ZXIvaGVscGVycy9zYXZlZFZpZXdzL2NhY2hlLnRzIn0=