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

154 lines
22 KiB
Plaintext

import {
NetworkStatus
} from "/_nuxt/node_modules/.cache/vite/client/deps/@apollo_client_core.js?v=e4f18c29";
import { useQuery } from "/_nuxt/node_modules/@vue/apollo-composable/dist/index.mjs?v=e4f18c29";
import { convertThrowIntoFetchResult } from "/_nuxt/lib/common/helpers/graphql.ts";
import { isUndefined } from "/_nuxt/node_modules/.cache/vite/client/deps/lodash-es.js?v=e4f18c29";
import { useScopedState } from "/_nuxt/lib/common/composables/scopedState.ts";
import { useNuxtApp } from "/_nuxt/node_modules/nuxt/dist/app/nuxt.js?v=e4f18c29";
import { ref, computed, shallowRef } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29";
import { useLogger } from "/_nuxt/composables/logging.ts";
import { useRouter } from "/_nuxt/node_modules/nuxt/dist/app/composables/router.js?v=e4f18c29";
export const useApolloClientIfAvailable = () => {
const nuxt = useNuxtApp();
const getClient = () => nuxt.$apollo?.default ? nuxt.$apollo.default : void 0;
return getClient;
};
export const useApolloClientFromNuxt = () => {
const getClient = useApolloClientIfAvailable();
const client = getClient();
if (!client) {
throw new Error("Apollo Client can't be resolved from NuxtApp yet");
}
return client;
};
export const usePreloadApolloQueries = () => {
const client = useApolloClientFromNuxt();
return async (params) => {
const { queries } = params;
const promises = queries.map(
(q) => client.query({
...q,
errorPolicy: "all"
}).catch(convertThrowIntoFetchResult)
);
return await Promise.all(promises);
};
};
export const useQueryLoaded = (params) => {
const { onResult } = params;
const loaded = ref(false);
onResult(() => {
loaded.value = true;
});
return loaded;
};
export const usePaginatedQuery = (params) => {
const logger = useLogger();
const {
query,
baseVariables,
resolveKey,
options,
resolveCurrentResult,
resolveNextPageVariables,
resolveInitialResult
} = params;
const cacheBusterKey = ref(0);
const loadingCompleted = ref(false);
const hasMoreToLoad = (result) => {
if (isUndefined(result)) return true;
const itemCount = result.items.length;
const totalCount = result.totalCount;
const hasMoreItemsAccordingToCount = itemCount < totalCount;
const hasEmptyResponse = !result.items.length && !result.cursor?.length;
return hasMoreItemsAccordingToCount && !hasEmptyResponse;
};
const useQueryReturn = useQuery(query, baseVariables, options || {});
const queryKey = computed(
() => `key-${JSON.stringify(resolveKey(baseVariables.value))}-${cacheBusterKey.value}`
);
const currentResult = computed(
() => resolveCurrentResult(useQueryReturn.result.value)
);
const isVeryFirstLoading = computed(
() => useQueryReturn.loading.value && !currentResult.value?.items.length
);
const getCursorForNextPage = () => {
const currRes = currentResult.value;
const initRes = resolveInitialResult?.();
if (currRes?.cursor) return currRes.cursor;
if (initRes?.cursor) return initRes.cursor;
return null;
};
const onInfiniteLoad = async (state) => {
const loadComplete = () => {
state.complete();
loadingCompleted.value = true;
};
const cursor = getCursorForNextPage();
let loadMore = hasMoreToLoad(currentResult.value);
if (!loadMore || !cursor) return loadComplete();
try {
const res = await useQueryReturn.fetchMore({
variables: resolveNextPageVariables(baseVariables.value, cursor)
});
loadMore = hasMoreToLoad(resolveCurrentResult(res?.data));
} catch (e) {
logger.error(e);
state.error();
return;
}
state.loaded();
if (!loadMore) {
loadComplete();
}
};
const bustCache = () => {
cacheBusterKey.value++;
loadingCompleted.value = false;
};
useQueryReturn.onResult((res) => {
if (res.loading) return;
const moreToLoad = hasMoreToLoad(resolveCurrentResult(res?.data));
if (moreToLoad && loadingCompleted.value) {
bustCache();
}
});
return {
query: useQueryReturn,
identifier: queryKey,
onInfiniteLoad,
bustCache,
isVeryFirstLoading
};
};
export const usePageQueryStandardFetchPolicy = () => {
if (false) return computed(() => void 0);
const router = useRouter();
const hasNavigatedInCSR = useScopedState(
"usePageQueryStandardFetchPolicy-state",
() => ref(false)
);
const quitTracking = router.beforeEach((to, from) => {
if (!from || !to) return;
hasNavigatedInCSR.value = true;
quitTracking();
});
return computed(() => {
return hasNavigatedInCSR.value ? "cache-and-network" : void 0;
});
};
export const useQueryResultVariables = (useQueryRet) => {
const { variables, onResult } = useQueryRet;
const currentVariables = shallowRef();
onResult((res) => {
if (res.networkStatus !== NetworkStatus.ready) return;
currentVariables.value = variables.value;
});
const resultVariables = computed(() => currentVariables.value);
return resultVariables;
};
//# sourceMappingURL=data:application/json;base64,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QUFRLHNCQUFzQjtBQUFBLEVBQ3pELENBQUM7QUFDSDtBQU1PLGFBQU0sMEJBQTBCLENBSXJDLGdCQUNHO0FBQ0gsUUFBTSxFQUFFLFdBQVcsU0FBUyxJQUFJO0FBRWhDLFFBQU0sbUJBQW1CLFdBQXdDO0FBQ2pFLFdBQVMsQ0FBQyxRQUFRO0FBQ2hCLFFBQUksSUFBSSxrQkFBa0IsY0FBYyxNQUFPO0FBQy9DLHFCQUFpQixRQUFRLFVBQVU7QUFBQSxFQUNyQyxDQUFDO0FBRUQsUUFBTSxrQkFBa0IsU0FBUyxNQUFNLGlCQUFpQixLQUFLO0FBRTdELFNBQU87QUFDVCIsIm5hbWVzIjpbXSwiaWdub3JlTGlzdCI6W10sInNvdXJjZXMiOlsiZ3JhcGhxbC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXHJcbmltcG9ydCB7XHJcbiAgTmV0d29ya1N0YXR1cyxcclxuICB0eXBlIE9wZXJhdGlvblZhcmlhYmxlcyxcclxuICB0eXBlIFF1ZXJ5T3B0aW9ucyxcclxuICB0eXBlIFdhdGNoUXVlcnlGZXRjaFBvbGljeVxyXG59IGZyb20gJ0BhcG9sbG8vY2xpZW50L2NvcmUnXHJcbmltcG9ydCB0eXBlIHtcclxuICBEb2N1bWVudFBhcmFtZXRlcixcclxuICBPcHRpb25zUGFyYW1ldGVyXHJcbn0gZnJvbSAnQHZ1ZS9hcG9sbG8tY29tcG9zYWJsZS9kaXN0L3VzZVF1ZXJ5LmpzJ1xyXG5pbXBvcnQgeyB1c2VRdWVyeSB9IGZyb20gJ0B2dWUvYXBvbGxvLWNvbXBvc2FibGUnXHJcbmltcG9ydCB7IGNvbnZlcnRUaHJvd0ludG9GZXRjaFJlc3VsdCB9IGZyb20gJ34vbGliL2NvbW1vbi9oZWxwZXJzL2dyYXBocWwnXHJcbmltcG9ydCB0eXBlIHsgSW5maW5pdGVMb2FkZXJTdGF0ZSB9IGZyb20gJ0BzcGVja2xlL3VpLWNvbXBvbmVudHMnXHJcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoLWVzJ1xyXG5pbXBvcnQgdHlwZSB7IE1heWJlTnVsbE9yVW5kZWZpbmVkLCBPcHRpb25hbCB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHsgdXNlU2NvcGVkU3RhdGUgfSBmcm9tICd+L2xpYi9jb21tb24vY29tcG9zYWJsZXMvc2NvcGVkU3RhdGUnXHJcblxyXG5leHBvcnQgY29uc3QgdXNlQXBvbGxvQ2xpZW50SWZBdmFpbGFibGUgPSAoKSA9PiB7XHJcbiAgY29uc3QgbnV4dCA9IHVzZU51eHRBcHAoKVxyXG4gIGNvbnN0IGdldENsaWVudCA9ICgpID0+IChudXh0LiRhcG9sbG8/LmRlZmF1bHQgPyBudXh0LiRhcG9sbG8uZGVmYXVsdCA6IHVuZGVmaW5lZClcclxuICByZXR1cm4gZ2V0Q2xpZW50XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCB1c2VBcG9sbG9DbGllbnRGcm9tTnV4dCA9ICgpID0+IHtcclxuICBjb25zdCBnZXRDbGllbnQgPSB1c2VBcG9sbG9DbGllbnRJZkF2YWlsYWJsZSgpXHJcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50KClcclxuICBpZiAoIWNsaWVudCkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQXBvbGxvIENsaWVudCBjYW4ndCBiZSByZXNvbHZlZCBmcm9tIE51eHRBcHAgeWV0XCIpXHJcbiAgfVxyXG5cclxuICByZXR1cm4gY2xpZW50XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCB1c2VQcmVsb2FkQXBvbGxvUXVlcmllcyA9ICgpID0+IHtcclxuICBjb25zdCBjbGllbnQgPSB1c2VBcG9sbG9DbGllbnRGcm9tTnV4dCgpXHJcbiAgcmV0dXJuIGFzeW5jIChwYXJhbXM6IHsgcXVlcmllczogUXVlcnlPcHRpb25zW10gfSkgPT4ge1xyXG4gICAgY29uc3QgeyBxdWVyaWVzIH0gPSBwYXJhbXNcclxuXHJcbiAgICBjb25zdCBwcm9taXNlcyA9IHF1ZXJpZXMubWFwKChxKSA9PlxyXG4gICAgICBjbGllbnRcclxuICAgICAgICAucXVlcnkoe1xyXG4gICAgICAgICAgLi4ucSxcclxuICAgICAgICAgIGVycm9yUG9saWN5OiAnYWxsJ1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmNhdGNoKGNvbnZlcnRUaHJvd0ludG9GZXRjaFJlc3VsdClcclxuICAgIClcclxuICAgIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcylcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVc2VmdWwgaW4gU1NSIHRvIHRyYWNrIHdoZW4gYSB1c2VRdWVyeSBjYWxsIGhhcyBsb2FkZWQuIEp1c3QgcGFzcyBpbiB0aGUgdXNlUXVlcnkgY2FsbCdzXHJcbiAqIG9uUmVzdWx0IGNhbGxiYWNrXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgdXNlUXVlcnlMb2FkZWQgPSAocGFyYW1zOiB7XHJcbiAgb25SZXN1bHQ6IChsb2FkZWRDYjogKCkgPT4gdW5rbm93bikgPT4gdW5rbm93blxyXG59KSA9PiB7XHJcbiAgY29uc3QgeyBvblJlc3VsdCB9ID0gcGFyYW1zXHJcblxyXG4gIGNvbnN0IGxvYWRlZCA9IHJlZihmYWxzZSlcclxuICBvblJlc3VsdCgoKSA9PiB7XHJcbiAgICBsb2FkZWQudmFsdWUgPSB0cnVlXHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIGxvYWRlZFxyXG59XHJcblxyXG4vLyBDcmVhdGUgVFMgdHlwZSBmb3Igb2JqZWN0IHdpdGggc2VyaWFsaXphYmxlIHByb3BlcnRpZXNcclxudHlwZSBTZXJpYWxpemFibGVWYWx1ZSA9IHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBudWxsXHJcbnR5cGUgU2VyaWFsaXphYmxlT2JqZWN0ID0ge1xyXG4gIFtrZXk6IHN0cmluZ106XHJcbiAgICB8IFNlcmlhbGl6YWJsZVZhbHVlXHJcbiAgICB8IFNlcmlhbGl6YWJsZU9iamVjdFxyXG4gICAgfCBTZXJpYWxpemFibGVWYWx1ZVtdXHJcbiAgICB8IFNlcmlhbGl6YWJsZU9iamVjdFtdXHJcbiAgICB8IEFycmF5PFNlcmlhbGl6YWJsZVZhbHVlIHwgU2VyaWFsaXphYmxlT2JqZWN0PlxyXG4gICAgfCB1bmRlZmluZWRcclxuICAgIHwgbnVsbFxyXG59XHJcblxyXG50eXBlIEJhc2ljQ3Vyc29yQ29udGFpbmVyID0ge1xyXG4gIGN1cnNvcj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWRcclxufVxyXG5cclxudHlwZSBCYXNpY1BhZ2luYXRlZFJlc3VsdCA9IEJhc2ljQ3Vyc29yQ29udGFpbmVyICYge1xyXG4gIHRvdGFsQ291bnQ6IG51bWJlclxyXG4gIGl0ZW1zOiB1bmtub3duW11cclxufVxyXG5cclxuLyoqXHJcbiAqIFNpbXBsaWZpZXMgc2V0dGluZyB1cCBwYWdpbmF0aW9uIGJldHdlZW4gYW4gQXBvbGxvIENsaWVudCBxdWVyeSBhbmQgdGhlIFZ1ZSBJbmZpbml0ZUxvYWRlciBjb21wb25lbnQuIE1hbmFnZXMgbG9hZGluZyBuZXh0IHBhZ2VzLFxyXG4gKiByZXNldGluZyBzdGF0ZSBvbiByZWZldGNoLCBhbmQgbW9yZS5cclxuICpcclxuICogQWxsIHlvdSBuZWVkIHRvIGRvIGlzIHNldCB1cCBhbGwgb2YgdGhlIHBhcmFtcywgZXNwZWNpYWxseSB0aGUgdmFyaW91cyByZXNvbHV0aW9uIHByZWRpY2F0ZXNcclxuICovXHJcbmV4cG9ydCBjb25zdCB1c2VQYWdpbmF0ZWRRdWVyeSA9IDxcclxuICBUUmVzdWx0ID0gYW55LFxyXG4gIFRWYXJpYWJsZXMgZXh0ZW5kcyBPcGVyYXRpb25WYXJpYWJsZXMgPSBPcGVyYXRpb25WYXJpYWJsZXNcclxuPihwYXJhbXM6IHtcclxuICBxdWVyeTogRG9jdW1lbnRQYXJhbWV0ZXI8VFJlc3VsdCwgVFZhcmlhYmxlcz5cclxuICBiYXNlVmFyaWFibGVzOiBDb21wdXRlZFJlZjxUVmFyaWFibGVzPlxyXG4gIG9wdGlvbnM/OiBPcHRpb25zUGFyYW1ldGVyPFRSZXN1bHQsIFRWYXJpYWJsZXM+XHJcbiAgLyoqXHJcbiAgICogVXNlZCB0byBnZW5lcmF0ZSBhIHVuaXF1ZSBrZXkgZm9yIHRoZSBxdWVyeSBiYXNlZCBvbiB2YXJpYWJsZXMuIFRoZSBrZXkgc2hvdWxkIHN0YXkgdGhlIHNhbWUgZm9yXHJcbiAgICogYWxsIHBhZ2VzIG9mIHRoZSBxdWVyeSwgc28gbWFrZSBzdXJlIHRvIGJ1aWxkIGl0IG9ubHkgb3V0IGZyb20gbWVhbmluZ2Z1bCB2YXJpYWJsZXMgdGhhdCB3b3VsZFxyXG4gICAqIHJlcXVpcmUgYSBuZXcgcXVlcnkgJiBuZXcgcGFnaW5hdGlvbiBzdGF0ZSBpZiBjaGFuZ2VkLlxyXG4gICAqXHJcbiAgICogRXhhbXBsZTogRG9uJ3QgaW5jbHVkZSBcImN1cnNvclwiLCBiZWNhdXNlIG11bHRpcGxlIHBhZ2VzIG9mIHRoZSBzYW1lIHF1ZXJ5IHdpbGwgaGF2ZSBkaWZmZXJlbnQgY3Vyc29yc1xyXG4gICAqL1xyXG4gIHJlc29sdmVLZXk6IChcclxuICAgIHZhcnM6IFRWYXJpYWJsZXNcclxuICApID0+XHJcbiAgICB8IFNlcmlhbGl6YWJsZVZhbHVlXHJcbiAgICB8IFNlcmlhbGl6YWJsZU9iamVjdFxyXG4gICAgfCBTZXJpYWxpemFibGVWYWx1ZVtdXHJcbiAgICB8IFNlcmlhbGl6YWJsZU9iamVjdFtdXHJcbiAgICB8IEFycmF5PFNlcmlhbGl6YWJsZVZhbHVlIHwgU2VyaWFsaXphYmxlT2JqZWN0PlxyXG5cclxuICAvKipcclxuICAgKiBQcmVkaWNhdGUgZm9yIHJlc29sdmluZyB0aGUgY3VycmVudCBwYWdpbmF0ZWQgcmVzdWx0IGZyb20gdGhlIHF1ZXJ5IHJlc3VsdC4gUmV0dXJuIHVuZGVmaW5lZFxyXG4gICAqIGlmIHF1ZXJ5IGhhc24ndCBmaW5pc2hlZCBsb2FkaW5nIHlldC5cclxuICAgKi9cclxuICByZXNvbHZlQ3VycmVudFJlc3VsdDogKFxyXG4gICAgcmVzdWx0OiBUUmVzdWx0IHwgdW5kZWZpbmVkXHJcbiAgKSA9PiBCYXNpY1BhZ2luYXRlZFJlc3VsdCB8IHVuZGVmaW5lZFxyXG4gIC8qKlxyXG4gICAqIFVzZSB0aGlzIHRvIHJlc29sdmUgdGhlIGluaXRpYWwgY3Vyc29yIHRoYXQgbWF5IGhhdmUgY29tZSBmcm9tIGEgcHJldmlvdXMgbm9uLXBhZ2luYXRlZCBxdWVyeS4gSWYgdW5kZWZpbmVkLFxyXG4gICAqIG9yIHJldHVybnMgdW5kZWZpbmVkIC0gd2UgZXhwZWN0IHRoYXQgdGhlcmUncyBubyBpbml0aWFsIHJlc3VsdFxyXG4gICAqL1xyXG4gIHJlc29sdmVJbml0aWFsUmVzdWx0PzogKCkgPT4gQmFzaWNDdXJzb3JDb250YWluZXIgfCB1bmRlZmluZWRcclxuICAvKipcclxuICAgKiBQcmVkaWNhdGUgZm9yIHJlc29sdmluZyB0aGUgdmFyaWFibGVzIHRvIHVzZSBmb3IgbmV4dCBwYWdlIG9mIGl0ZW1zXHJcbiAgICovXHJcbiAgcmVzb2x2ZU5leHRQYWdlVmFyaWFibGVzOiAoYmFzZVZhcmlhYmxlczogVFZhcmlhYmxlcywgbmV3Q3Vyc29yOiBzdHJpbmcpID0+IFRWYXJpYWJsZXNcclxuICAvKipcclxuICAgKiBSZXNvbHZlIGN1cnNvciBmcm9tIHZhcmlhYmxlcyBvYmplY3QuIElmIG5vdCBhdmFpbGFibGUsIHJldHVybiBudWxsIG9yIHVuZGVmaW5lZFxyXG4gICAqL1xyXG4gIHJlc29sdmVDdXJzb3JGcm9tVmFyaWFibGVzOiAodmFyczogVFZhcmlhYmxlcykgPT4gTWF5YmVOdWxsT3JVbmRlZmluZWQ8c3RyaW5nPlxyXG59KSA9PiB7XHJcbiAgY29uc3QgbG9nZ2VyID0gdXNlTG9nZ2VyKClcclxuXHJcbiAgY29uc3Qge1xyXG4gICAgcXVlcnksXHJcbiAgICBiYXNlVmFyaWFibGVzLFxyXG4gICAgcmVzb2x2ZUtleSxcclxuICAgIG9wdGlvbnMsXHJcbiAgICByZXNvbHZlQ3VycmVudFJlc3VsdCxcclxuICAgIHJlc29sdmVOZXh0UGFnZVZhcmlhYmxlcyxcclxuICAgIHJlc29sdmVJbml0aWFsUmVzdWx0XHJcbiAgfSA9IHBhcmFtc1xyXG4gIGNvbnN0IGNhY2hlQnVzdGVyS2V5ID0gcmVmKDApXHJcbiAgY29uc3QgbG9hZGluZ0NvbXBsZXRlZCA9IHJlZihmYWxzZSlcclxuXHJcbiAgLy8gY2FuJ3QgYmUgYSBjb21wdXRlZCwgYmVjYXVzZSB3ZSBoYXZlIHRvIGludm9rZSBpdCBvbiB0aGUgcmVzdWx0IG9mIHRoZSBmZXRjaE1vcmUgY2FsbCxcclxuICAvLyBiZWZvcmUgdGhlIHJlc3VsdCBoYXMgYmVlbiBtZXJnZWQgaW50byB0aGUgY2FjaGUgYW5kIHRoZSByZXN1bHRzIGJlY29tZSBtZXJnZWQgd2l0aCByZXN1bHRzXHJcbiAgLy8gb2YgcHJldmlvdXMgcGFnZXNcclxuICBjb25zdCBoYXNNb3JlVG9Mb2FkID0gKHJlc3VsdDogQmFzaWNQYWdpbmF0ZWRSZXN1bHQgfCB1bmRlZmluZWQpID0+IHtcclxuICAgIGlmIChpc1VuZGVmaW5lZChyZXN1bHQpKSByZXR1cm4gdHJ1ZVxyXG5cclxuICAgIGNvbnN0IGl0ZW1Db3VudCA9IHJlc3VsdC5pdGVtcy5sZW5ndGhcclxuICAgIGNvbnN0IHRvdGFsQ291bnQgPSByZXN1bHQudG90YWxDb3VudFxyXG4gICAgY29uc3QgaGFzTW9yZUl0ZW1zQWNjb3JkaW5nVG9Db3VudCA9IGl0ZW1Db3VudCA8IHRvdGFsQ291bnRcclxuICAgIGNvbnN0IGhhc0VtcHR5UmVzcG9uc2UgPSAhcmVzdWx0Lml0ZW1zLmxlbmd0aCAmJiAhcmVzdWx0LmN1cnNvcj8ubGVuZ3RoXHJcblxyXG4gICAgcmV0dXJuIGhhc01vcmVJdGVtc0FjY29yZGluZ1RvQ291bnQgJiYgIWhhc0VtcHR5UmVzcG9uc2VcclxuICB9XHJcblxyXG4gIGNvbnN0IHVzZVF1ZXJ5UmV0dXJuID0gdXNlUXVlcnkocXVlcnksIGJhc2VWYXJpYWJsZXMsIG9wdGlvbnMgfHwge30pXHJcbiAgY29uc3QgcXVlcnlLZXkgPSBjb21wdXRlZChcclxuICAgICgpID0+XHJcbiAgICAgIGBrZXktJHtKU09OLnN0cmluZ2lmeShyZXNvbHZlS2V5KGJhc2VWYXJpYWJsZXMudmFsdWUpKX0tJHtjYWNoZUJ1c3RlcktleS52YWx1ZX1gXHJcbiAgKVxyXG4gIGNvbnN0IGN1cnJlbnRSZXN1bHQgPSBjb21wdXRlZCgoKSA9PlxyXG4gICAgcmVzb2x2ZUN1cnJlbnRSZXN1bHQodXNlUXVlcnlSZXR1cm4ucmVzdWx0LnZhbHVlKVxyXG4gIClcclxuXHJcbiAgY29uc3QgaXNWZXJ5Rmlyc3RMb2FkaW5nID0gY29tcHV0ZWQoXHJcbiAgICAoKSA9PiB1c2VRdWVyeVJldHVybi5sb2FkaW5nLnZhbHVlICYmICFjdXJyZW50UmVzdWx0LnZhbHVlPy5pdGVtcy5sZW5ndGhcclxuICApXHJcblxyXG4gIGNvbnN0IGdldEN1cnNvckZvck5leHRQYWdlID0gKCkgPT4ge1xyXG4gICAgY29uc3QgY3VyclJlcyA9IGN1cnJlbnRSZXN1bHQudmFsdWVcclxuICAgIGNvbnN0IGluaXRSZXMgPSByZXNvbHZlSW5pdGlhbFJlc3VsdD8uKClcclxuXHJcbiAgICBpZiAoY3VyclJlcz8uY3Vyc29yKSByZXR1cm4gY3VyclJlcy5jdXJzb3JcclxuICAgIGlmIChpbml0UmVzPy5jdXJzb3IpIHJldHVybiBpbml0UmVzLmN1cnNvclxyXG4gICAgcmV0dXJuIG51bGxcclxuICB9XHJcblxyXG4gIGNvbnN0IG9uSW5maW5pdGVMb2FkID0gYXN5bmMgKHN0YXRlOiBJbmZpbml0ZUxvYWRlclN0YXRlKSA9PiB7XHJcbiAgICBjb25zdCBsb2FkQ29tcGxldGUgPSAoKSA9PiB7XHJcbiAgICAgIHN0YXRlLmNvbXBsZXRlKClcclxuICAgICAgbG9hZGluZ0NvbXBsZXRlZC52YWx1ZSA9IHRydWVcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjdXJzb3IgPSBnZXRDdXJzb3JGb3JOZXh0UGFnZSgpXHJcbiAgICBsZXQgbG9hZE1vcmUgPSBoYXNNb3JlVG9Mb2FkKGN1cnJlbnRSZXN1bHQudmFsdWUpXHJcbiAgICBpZiAoIWxvYWRNb3JlIHx8ICFjdXJzb3IpIHJldHVybiBsb2FkQ29tcGxldGUoKVxyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHVzZVF1ZXJ5UmV0dXJuLmZldGNoTW9yZSh7XHJcbiAgICAgICAgdmFyaWFibGVzOiByZXNvbHZlTmV4dFBhZ2VWYXJpYWJsZXMoYmFzZVZhcmlhYmxlcy52YWx1ZSwgY3Vyc29yKVxyXG4gICAgICB9KVxyXG4gICAgICBsb2FkTW9yZSA9IGhhc01vcmVUb0xvYWQocmVzb2x2ZUN1cnJlbnRSZXN1bHQocmVzPy5kYXRhKSlcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgbG9nZ2VyLmVycm9yKGUpXHJcbiAgICAgIHN0YXRlLmVycm9yKClcclxuICAgICAgcmV0dXJuXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGUubG9hZGVkKClcclxuICAgIGlmICghbG9hZE1vcmUpIHtcclxuICAgICAgbG9hZENvbXBsZXRlKClcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0IGJ1c3RDYWNoZSA9ICgpID0+IHtcclxuICAgIGNhY2hlQnVzdGVyS2V5LnZhbHVlKytcclxuICAgIGxvYWRpbmdDb21wbGV0ZWQudmFsdWUgPSBmYWxzZVxyXG4gIH1cclxuXHJcbiAgLy8gSWYgYWZ0ZXIgdGhlIHF1ZXJ5IHJ1bnMgdGhlcmUgaXMgc3RpbGwgbW9yZSB0byBsb2FkLCBidXQgbG9hZGluZyBpcyBtYXJrZWQgYXMgY29tcGxldGUgKHdoaWNoIGNhbiBoYXBwZW5cclxuICAvLyBpZiBjYWNoZSBpcyBldmljdGVkIGFuZCBpbml0aWFsIHF1ZXJ5IHJlcnVucykgLSB3ZSBzaG91bGQgYnVzdCB0aGUgY2FjaGUsXHJcbiAgLy8gJiByZXNldCBsb2FkZXIgc3RhdGUsIHNvIGluZmluaXRlIGxvYWRlciByZXN0YXJ0c1xyXG4gIHVzZVF1ZXJ5UmV0dXJuLm9uUmVzdWx0KChyZXMpID0+IHtcclxuICAgIGlmIChyZXMubG9hZGluZykgcmV0dXJuXHJcblxyXG4gICAgLy8gSWYgbW9yZSB0byBsb2FkICYgbG9hZGluZyBjb21wbGV0ZWQsIGJ1c3QgY2FjaGVcclxuICAgIGNvbnN0IG1vcmVUb0xvYWQgPSBoYXNNb3JlVG9Mb2FkKHJlc29sdmVDdXJyZW50UmVzdWx0KHJlcz8uZGF0YSkpXHJcbiAgICBpZiAobW9yZVRvTG9hZCAmJiBsb2FkaW5nQ29tcGxldGVkLnZhbHVlKSB7XHJcbiAgICAgIGJ1c3RDYWNoZSgpXHJcbiAgICB9XHJcbiAgfSlcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHF1ZXJ5OiB1c2VRdWVyeVJldHVybixcclxuICAgIGlkZW50aWZpZXI6IHF1ZXJ5S2V5LFxyXG4gICAgb25JbmZpbml0ZUxvYWQsXHJcbiAgICBidXN0Q2FjaGUsXHJcbiAgICBpc1ZlcnlGaXJzdExvYWRpbmdcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBXZSB3YW50IG91ciBwYWdlIHF1ZXJpZXMgdG8gaGF2ZSB0aGUgY2FjaGUtYW5kLW5ldHdvcmsgZmV0Y2ggcG9saWN5LCBzbyB0aGF0IHdoZW4geW91IHN3aXRjaCB0byBhIG5ldyBwYWdlLCB0aGUgZGF0YVxyXG4gKiBnZXRzIHJlZnJlc2hlZCwgYnV0IGluIHRoZSBiYWNrZ3JvdW5kIC0gd2hpbGUgdGhlIG9sZCBkYXRhIGlzIHN0aWxsIHNob3duLlxyXG4gKlxyXG4gKiBUaGlzLCBob3dldmVyLCBpcyB1bm5lY2Vzc2FyeSB3aGVuIGh5ZHJhdGluZyB0aGUgU1NSIHBhZ2UgaW4gQ1NSIGZvciB0aGUgZmlyc3QgdGltZSwgYW5kIGFsc29cclxuICogY2F1c2VzIHdlaXJkIGh5ZHJhdGlvbiBtaXNtYXRjaGVzLlxyXG4gKlxyXG4gKiBTbyB0aGlzIHNldHMgdGhlIGNvcnJlY3QgZmV0Y2ggcG9saWN5IGJhc2VkIG9uIHdoZXRoZXIgdGhpcyBpcyBhIENTUi0+Q1NSIG5hdmlnYXRpb25cclxuICovXHJcbmV4cG9ydCBjb25zdCB1c2VQYWdlUXVlcnlTdGFuZGFyZEZldGNoUG9saWN5ID0gKCkgPT4ge1xyXG4gIGlmIChpbXBvcnQubWV0YS5zZXJ2ZXIpIHJldHVybiBjb21wdXRlZCgoKSA9PiB1bmRlZmluZWQpXHJcblxyXG4gIGNvbnN0IHJvdXRlciA9IHVzZVJvdXRlcigpXHJcbiAgY29uc3QgaGFzTmF2aWdhdGVkSW5DU1IgPSB1c2VTY29wZWRTdGF0ZShcclxuICAgICd1c2VQYWdlUXVlcnlTdGFuZGFyZEZldGNoUG9saWN5LXN0YXRlJyxcclxuICAgICgpID0+IHJlZihmYWxzZSlcclxuICApXHJcbiAgY29uc3QgcXVpdFRyYWNraW5nID0gcm91dGVyLmJlZm9yZUVhY2goKHRvLCBmcm9tKSA9PiB7XHJcbiAgICBpZiAoIWZyb20gfHwgIXRvKSByZXR1cm5cclxuICAgIGhhc05hdmlnYXRlZEluQ1NSLnZhbHVlID0gdHJ1ZVxyXG4gICAgcXVpdFRyYWNraW5nKClcclxuICB9KVxyXG5cclxuICByZXR1cm4gY29tcHV0ZWQoKCk6IE9wdGlvbmFsPFdhdGNoUXVlcnlGZXRjaFBvbGljeT4gPT4ge1xyXG4gICAgLy8gdXNlIGNhY2hlLCBidXQgcmVsb2FkIGluIGJhY2tncm91bmRcclxuICAgIC8vIHdlIG9ubHkgd2FubmEgZG8gdGhpcyB3aGVuIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBDU1Igcm91dGVzXHJcbiAgICByZXR1cm4gaGFzTmF2aWdhdGVkSW5DU1IudmFsdWUgPyAnY2FjaGUtYW5kLW5ldHdvcmsnIDogdW5kZWZpbmVkXHJcbiAgfSlcclxufVxyXG5cclxuLyoqXHJcbiAqIEJ5IGRlZmF1bHQgJ3ZhcmlhYmxlcycgb2ZmIHVzZVF1ZXJ5IHVwZGF0ZXMgdGhlIG1vbWVudCB2YXJpYWJsZXMgYXJlIHVwZGF0ZWQuIFRoaXMgcmV0dXJucyB0aGUgdmFyaWFibGVzXHJcbiAqIGFzc29jaWF0ZWQgd2l0aCB0aGUgYWN0aXZlIHJlc3VsdC4gU28gaWYgdGhlIHJlc3VsdCBpcyBzdGlsbCBsb2FkaW5nLCB0aGUgdmFyaWFibGVzIGFyZSBnb25uYSBiZSB1bmRlZmluZWQgdG9vLlxyXG4gKi9cclxuZXhwb3J0IGNvbnN0IHVzZVF1ZXJ5UmVzdWx0VmFyaWFibGVzID0gPFxyXG4gIFRSZXN1bHQgPSBhbnksXHJcbiAgVFZhcmlhYmxlcyBleHRlbmRzIE9wZXJhdGlvblZhcmlhYmxlcyA9IE9wZXJhdGlvblZhcmlhYmxlc1xyXG4+KFxyXG4gIHVzZVF1ZXJ5UmV0OiBSZXR1cm5UeXBlPHR5cGVvZiB1c2VRdWVyeTxUUmVzdWx0LCBUVmFyaWFibGVzPj5cclxuKSA9PiB7XHJcbiAgY29uc3QgeyB2YXJpYWJsZXMsIG9uUmVzdWx0IH0gPSB1c2VRdWVyeVJldFxyXG5cclxuICBjb25zdCBjdXJyZW50VmFyaWFibGVzID0gc2hhbGxvd1JlZjwodHlwZW9mIHZhcmlhYmxlcylbJ3ZhbHVlJ10+KClcclxuICBvblJlc3VsdCgocmVzKSA9PiB7XHJcbiAgICBpZiAocmVzLm5ldHdvcmtTdGF0dXMgIT09IE5ldHdvcmtTdGF0dXMucmVhZHkpIHJldHVyblxyXG4gICAgY3VycmVudFZhcmlhYmxlcy52YWx1ZSA9IHZhcmlhYmxlcy52YWx1ZVxyXG4gIH0pXHJcblxyXG4gIGNvbnN0IHJlc3VsdFZhcmlhYmxlcyA9IGNvbXB1dGVkKCgpID0+IGN1cnJlbnRWYXJpYWJsZXMudmFsdWUpXHJcblxyXG4gIHJldHVybiByZXN1bHRWYXJpYWJsZXNcclxufVxyXG4iXSwiZmlsZSI6IkQ6L3NwZWNrbGUtc2VydmVyL3BhY2thZ2VzL2Zyb250ZW5kLTIvbGliL2NvbW1vbi9jb21wb3NhYmxlcy9ncmFwaHFsLnRzIn0=