import { useInjectedViewerState } from "/_nuxt/lib/viewer/composables/setup.ts"; import { isArray, round } from "/_nuxt/node_modules/.cache/vite/client/deps/lodash-es.js?v=e4f18c29"; import { useViewerCameraTracker, useOnViewerLoadComplete } from "/_nuxt/lib/viewer/composables/viewer.ts"; import { useWindowResizeHandler } from "/_nuxt/lib/common/composables/window.ts"; import { watch } from "/_nuxt/node_modules/vue/dist/vue.runtime.esm-bundler.js?v=e4f18c29"; export function useViewerAnchoredPointCalculator(params) { const { parentEl } = params; const { viewer: { instance: viewer } } = useInjectedViewerState(); const calculate = (target) => { let targetLoc = null; let inFrustum = false; if (parentEl.value) { const targetProjectionResult = viewer.query({ point: target, operation: "Project" }); inFrustum ||= targetProjectionResult.inFrustum; if (inFrustum) targetLoc = viewer.Utils.NDCToScreen( targetProjectionResult.x, targetProjectionResult.y, parentEl.value.clientWidth, parentEl.value.clientHeight ); if (targetLoc) { targetLoc.x = round(targetLoc.x); targetLoc.y = round(targetLoc.y); } } let isOccluded = true; if (inFrustum) { const targetOcclusionRes = viewer.query({ point: target, tolerance: 1e-3, operation: "Occlusion" }); isOccluded = !!targetOcclusionRes.objects?.length; } return { screenLocation: targetLoc?.x && targetLoc?.y ? targetLoc : null, isOccluded, style: { ...targetLoc?.x && targetLoc?.y ? { transform: `translate(${targetLoc.x}px,${targetLoc.y}px)`, // transform: `translate(-50%, -50%) translate(${targetLoc.x}px,${targetLoc.y}px)`, transformOrigin: "center", x: targetLoc.x, y: targetLoc.y, display: "block" } : { display: "none" } } }; }; return { calculate }; } export function useViewerAnchoredPoints(params) { const { parentEl, points, pointLocationGetter, updatePositionCallback } = params; const { calculate } = useViewerAnchoredPointCalculator({ parentEl }); const updatePositions = (options) => { const pointsArray = isArray(points.value) ? points.value : [points.value]; for (const point of pointsArray) { const location = pointLocationGetter(point); if (!location) continue; const result = calculate(location); updatePositionCallback(point, result, options); } }; useViewerCameraTracker(() => updatePositions(), { throttleWait: 0 }); useWindowResizeHandler(() => updatePositions(), { wait: 0 }); useOnViewerLoadComplete( () => { updatePositions(); }, { initialOnly: true, waitForLoadingOver: true } ); watch( points, () => { updatePositions(); }, { immediate: true } ); return { updatePositions, calculate }; } export function useGetScreenCenterObjectId() { const { viewer: { instance, metadata: { filteringState } } } = useInjectedViewerState(); return () => { const res = instance.query({ point: { x: 0, y: 0 }, operation: "Pick" }); const obj = (res?.objects || []).find((o) => { const oid = o.object?.id; if (!oid) return false; const hasHiddenObjects = (filteringState.value?.hiddenObjects || []).length !== 0; const hasIsolatedObjects = !!filteringState.value?.isolatedObjects && filteringState.value?.isolatedObjects.length !== 0; if (hasHiddenObjects && filteringState.value?.hiddenObjects?.includes(oid)) return false; if (hasIsolatedObjects && !filteringState.value?.isolatedObjects?.includes(oid)) return false; return true; }); return obj ? obj.object?.id : null; }; } //# sourceMappingURL=data:application/json;base64,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RUFDRjtBQUNGO0FBRU8sZ0JBQVMsNkJBQTZCO0FBQzNDLFFBQU07QUFBQSxJQUNKLFFBQVE7QUFBQSxNQUNOO0FBQUEsTUFDQSxVQUFVLEVBQUUsZUFBZTtBQUFBLElBQzdCO0FBQUEsRUFDRixJQUFJLHVCQUF1QjtBQUUzQixTQUFPLE1BQU07QUFDWCxVQUFNLE1BQU0sU0FBUyxNQUF5QjtBQUFBLE1BQzVDLE9BQU8sRUFBRSxHQUFHLEdBQUcsR0FBRyxFQUFFO0FBQUEsTUFDcEIsV0FBVztBQUFBLElBQ2IsQ0FBQztBQUNELFVBQU0sT0FBTyxLQUFLLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNO0FBQzNDLFlBQU0sTUFBTSxFQUFFLFFBQVE7QUFDdEIsVUFBSSxDQUFDLElBQUssUUFBTztBQUVqQixZQUFNLG9CQUFvQixlQUFlLE9BQU8saUJBQWlCLENBQUMsR0FBRyxXQUFXO0FBQ2hGLFlBQU0scUJBQ0osQ0FBQyxDQUFDLGVBQWUsT0FBTyxtQkFDeEIsZUFBZSxPQUFPLGdCQUFnQixXQUFXO0FBRW5ELFVBQUksb0JBQW9CLGVBQWUsT0FBTyxlQUFlLFNBQVMsR0FBRztBQUN2RSxlQUFPO0FBQ1QsVUFBSSxzQkFBc0IsQ0FBQyxlQUFlLE9BQU8saUJBQWlCLFNBQVMsR0FBRztBQUM1RSxlQUFPO0FBRVQsYUFBTztBQUFBLElBQ1QsQ0FBQztBQUVELFdBQU8sTUFBTyxJQUFJLFFBQVEsS0FBZ0I7QUFBQSxFQUM1QztBQUNGIiwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlcyI6WyJhbmNob3JQb2ludHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDU1NQcm9wZXJ0aWVzLCBSZWYgfSBmcm9tICd2dWUnXHJcbmltcG9ydCB0eXBlIHsgTWF5YmVOdWxsT3JVbmRlZmluZWQsIE51bGxhYmxlLCBPcHRpb25hbCB9IGZyb20gJ0BzcGVja2xlL3NoYXJlZCdcclxuaW1wb3J0IHR5cGUgeyBWZWN0b3IzIH0gZnJvbSAndGhyZWUnXHJcbmltcG9ydCB7IHVzZUluamVjdGVkVmlld2VyU3RhdGUgfSBmcm9tICd+fi9saWIvdmlld2VyL2NvbXBvc2FibGVzL3NldHVwJ1xyXG5pbXBvcnQgdHlwZSB7IEludGVyc2VjdGlvblF1ZXJ5LCBQb2ludFF1ZXJ5IH0gZnJvbSAnQHNwZWNrbGUvdmlld2VyJ1xyXG5pbXBvcnQgeyBpc0FycmF5LCByb3VuZCB9IGZyb20gJ2xvZGFzaC1lcydcclxuaW1wb3J0IHtcclxuICB1c2VWaWV3ZXJDYW1lcmFUcmFja2VyLFxyXG4gIHVzZU9uVmlld2VyTG9hZENvbXBsZXRlXHJcbn0gZnJvbSAnfn4vbGliL3ZpZXdlci9jb21wb3NhYmxlcy92aWV3ZXInXHJcbmltcG9ydCB7IHVzZVdpbmRvd1Jlc2l6ZUhhbmRsZXIgfSBmcm9tICd+fi9saWIvY29tbW9uL2NvbXBvc2FibGVzL3dpbmRvdydcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1c2VWaWV3ZXJBbmNob3JlZFBvaW50Q2FsY3VsYXRvcihwYXJhbXM6IHtcclxuICAvKipcclxuICAgKiBWaWV3ZXIgYW5jaG9yIHBvaW50IHBhcmVudCBlbGVtZW50IHRoYXQgaGFzIHRvIGhhdmUgdGhlIHNhbWUgZXhhY3QgZGltZW5zaW9ucyBhcyB0aGUgZnVsbFxyXG4gICAqIHZpZXdlciB2aWV3cG9ydFxyXG4gICAqL1xyXG4gIHBhcmVudEVsOiBSZWY8TnVsbGFibGU8SFRNTEVsZW1lbnQ+PlxyXG59KSB7XHJcbiAgY29uc3QgeyBwYXJlbnRFbCB9ID0gcGFyYW1zXHJcbiAgY29uc3Qge1xyXG4gICAgdmlld2VyOiB7IGluc3RhbmNlOiB2aWV3ZXIgfVxyXG4gIH0gPSB1c2VJbmplY3RlZFZpZXdlclN0YXRlKClcclxuXHJcbiAgLyoqXHJcbiAgICogQ2FsY3VsYXRlIGN1cnJlbnQgc2NyZWVuIGNvb3JkaW5hdGVzIG9mIGEgbG9jYXRpb24gaW4gdGhlIDNEIHNwYWNlIG9mIHRoZSB2aWV3ZXIsXHJcbiAgICogd2hldGhlciBvciBub3QgdGhhdCBwb2ludCBpcyBvY2NsdWRlZCBieSBzb21ldGhpbmcgYW5kIENTUyBzdHlsZXMgZm9yIHRoZSBET00gZWxlbWVudFxyXG4gICAqIHRvIHBvc2l0aW9uIGl0IGNvcnJlY3RseSB3aXRoaW4gdGhlIHBhcmVudCBlbGVtZW50LlxyXG4gICAqXHJcbiAgICogTm90ZTogU2NyZWVuIGNvb3JkaW5hdGUgbG9jYXRpb24gd2lsbCBiZSBudWxsIGlmIGBwYXJlbnRFbGAgaXMgbnVsbC5cclxuICAgKi9cclxuICBjb25zdCBjYWxjdWxhdGUgPSAodGFyZ2V0OiBWZWN0b3IzKSA9PiB7XHJcbiAgICBsZXQgdGFyZ2V0TG9jOiBOdWxsYWJsZTx7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0+ID0gbnVsbFxyXG4gICAgbGV0IGluRnJ1c3R1bTogYm9vbGVhbiB8IHVuZGVmaW5lZCA9IGZhbHNlXHJcbiAgICBpZiAocGFyZW50RWwudmFsdWUpIHtcclxuICAgICAgY29uc3QgdGFyZ2V0UHJvamVjdGlvblJlc3VsdCA9IHZpZXdlci5xdWVyeTxQb2ludFF1ZXJ5Pih7XHJcbiAgICAgICAgcG9pbnQ6IHRhcmdldCxcclxuICAgICAgICBvcGVyYXRpb246ICdQcm9qZWN0J1xyXG4gICAgICB9KVxyXG4gICAgICBpbkZydXN0dW0gfHw9IHRhcmdldFByb2plY3Rpb25SZXN1bHQuaW5GcnVzdHVtXHJcbiAgICAgIC8qKiBJZiBub3QgaW4gY2FtZXJhJ3MgZnJ1c3R1bSwgZG9uJ3QgYm90aGVyIHByb2plY3RpbmcgKi9cclxuICAgICAgaWYgKGluRnJ1c3R1bSlcclxuICAgICAgICB0YXJnZXRMb2MgPSB2aWV3ZXIuVXRpbHMuTkRDVG9TY3JlZW4oXHJcbiAgICAgICAgICB0YXJnZXRQcm9qZWN0aW9uUmVzdWx0LngsXHJcbiAgICAgICAgICB0YXJnZXRQcm9qZWN0aW9uUmVzdWx0LnksXHJcbiAgICAgICAgICBwYXJlbnRFbC52YWx1ZS5jbGllbnRXaWR0aCxcclxuICAgICAgICAgIHBhcmVudEVsLnZhbHVlLmNsaWVudEhlaWdodFxyXG4gICAgICAgIClcclxuXHJcbiAgICAgIC8vIHJvdW5kIGl0IG91dFxyXG4gICAgICBpZiAodGFyZ2V0TG9jKSB7XHJcbiAgICAgICAgdGFyZ2V0TG9jLnggPSByb3VuZCh0YXJnZXRMb2MueClcclxuICAgICAgICB0YXJnZXRMb2MueSA9IHJvdW5kKHRhcmdldExvYy55KVxyXG4gICAgICB9XHJcbiAgICAgIC8vIGxvZ2dlci5kZWJ1Zyh0YXJnZXRMb2MsIHRhcmdldFByb2plY3Rpb25SZXN1bHQsIHRhcmdldCwgbmV3IERhdGUoKS50b0lTT1N0cmluZygpKVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBpc09jY2x1ZGVkOiBib29sZWFuIHwgdW5kZWZpbmVkID0gdHJ1ZVxyXG4gICAgLyoqIElmIG5vdCBpbiBjYW1lcmEncyBmcnVzdHVtIGRvbid0IGJvdGhlciBpbnRlcnNlY3RpbmcgKi9cclxuICAgIGlmIChpbkZydXN0dW0pIHtcclxuICAgICAgY29uc3QgdGFyZ2V0T2NjbHVzaW9uUmVzID0gdmlld2VyLnF1ZXJ5PEludGVyc2VjdGlvblF1ZXJ5Pih7XHJcbiAgICAgICAgcG9pbnQ6IHRhcmdldCxcclxuICAgICAgICB0b2xlcmFuY2U6IDAuMDAxLFxyXG4gICAgICAgIG9wZXJhdGlvbjogJ09jY2x1c2lvbidcclxuICAgICAgfSlcclxuICAgICAgaXNPY2NsdWRlZCA9ICEhdGFyZ2V0T2NjbHVzaW9uUmVzLm9iamVjdHM/Lmxlbmd0aFxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHNjcmVlbkxvY2F0aW9uOiB0YXJnZXRMb2M/LnggJiYgdGFyZ2V0TG9jPy55ID8gdGFyZ2V0TG9jIDogbnVsbCxcclxuICAgICAgaXNPY2NsdWRlZCxcclxuICAgICAgc3R5bGU6IDxQYXJ0aWFsPENTU1Byb3BlcnRpZXM+PntcclxuICAgICAgICAuLi4odGFyZ2V0TG9jPy54ICYmIHRhcmdldExvYz8ueVxyXG4gICAgICAgICAgPyB7XHJcbiAgICAgICAgICAgICAgdHJhbnNmb3JtOiBgdHJhbnNsYXRlKCR7dGFyZ2V0TG9jLnh9cHgsJHt0YXJnZXRMb2MueX1weClgLFxyXG4gICAgICAgICAgICAgIC8vIHRyYW5zZm9ybTogYHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSB0cmFuc2xhdGUoJHt0YXJnZXRMb2MueH1weCwke3RhcmdldExvYy55fXB4KWAsXHJcbiAgICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnY2VudGVyJyxcclxuICAgICAgICAgICAgICB4OiB0YXJnZXRMb2MueCxcclxuICAgICAgICAgICAgICB5OiB0YXJnZXRMb2MueSxcclxuICAgICAgICAgICAgICBkaXNwbGF5OiAnYmxvY2snXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIDoge1xyXG4gICAgICAgICAgICAgIGRpc3BsYXk6ICdub25lJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXR1cm4ge1xyXG4gICAgY2FsY3VsYXRlXHJcbiAgfVxyXG59XHJcblxyXG50eXBlIEFuY2hvcmVkUG9pbnRDYWxjdWxhdGVSZXN1bHQgPSBSZXR1cm5UeXBlPFxyXG4gIFJldHVyblR5cGU8dHlwZW9mIHVzZVZpZXdlckFuY2hvcmVkUG9pbnRDYWxjdWxhdG9yPlsnY2FsY3VsYXRlJ11cclxuPlxyXG5cclxuLyoqXHJcbiAqIEF1dG9tYXRpY2FsbHkgcmVjYWxjdWxhdGVzIHNjcmVlbiBwb3NpdGlvbnMgJiBvY2NsdXNpb24gb2YgdGhlIHByb3ZpZGVkIGFycmF5IG9mIHBvaW50cywgYW5kXHJcbiAqIGFkZGl0aW9uYWxseSBleHBvc2VzIGZ1bmN0aW9ucyBmb3IgbWFudWFsIChyZS0pY2FsY3VsYXRpb25cclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB1c2VWaWV3ZXJBbmNob3JlZFBvaW50czxcclxuICBPIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXHJcbiAgQSBleHRlbmRzIE9wdGlvbmFsPFJlY29yZDxzdHJpbmcsIHVua25vd24+PlxyXG4+KHBhcmFtczoge1xyXG4gIC8qKlxyXG4gICAqIFZpZXdlciBhbmNob3IgcG9pbnQgcGFyZW50IGVsZW1lbnQgdGhhdCBoYXMgdG8gaGF2ZSB0aGUgc2FtZSBleGFjdCBkaW1lbnNpb25zIGFzIHRoZSBmdWxsXHJcbiAgICogdmlld2VyIHZpZXdwb3J0XHJcbiAgICovXHJcbiAgcGFyZW50RWw6IFJlZjxOdWxsYWJsZTxIVE1MRWxlbWVudD4+XHJcbiAgLyoqXHJcbiAgICogT2JqZWN0cyB0aGF0IGNvbnRhaW4gcG9pbnRzIGluIHZpZXdlcidzIDNEIHNwYWNlIHRoYXQgbmVlZCB0byBiZSBhbmNob3JlZCBhY2NvcmRpbmdseSBvbiB0aGUgc2NyZWVuLlxyXG4gICAqIENhbiBiZSBhbiBhcnJheSBvciBhIHNpbmdsZSBwb2ludC5cclxuICAgKi9cclxuICBwb2ludHM6IFJlZjxPW10gfCBPPlxyXG4gIC8qKlxyXG4gICAqIFVzZSB0aGlzIHRvIHB1bGwgb3V0IHRoZSBhY3R1YWwgaW5pdGlhbCBsb2NhdGlvbiBWZWN0b3IzIG91dCBmcm9tIGEgc3BlY2lmaWMgcG9pbnQgb2JqZWN0LiBJdFxyXG4gICAqIGNhbiBhbHNvIHJldHVybiBudWxsIG9yIHVuZGVmaW5lZCBpbiB3aGljaCBjYXNlIGNhbGN1bGF0aW9uIHdpbGwgYmUgc2tpcHBlZC5cclxuICAgKi9cclxuICBwb2ludExvY2F0aW9uR2V0dGVyOiAob2JqOiBPKSA9PiBNYXliZU51bGxPclVuZGVmaW5lZDxWZWN0b3IzPlxyXG4gIC8qKlxyXG4gICAqIENhbGxiYWNrIGZvciBlYWNoIHBvc2l0aW9uIHVwZGF0ZSBvcGVyYXRpb24gZm9yIG9wdGlvbmFsbHkgZG9pbmcgZXh0cmEgc3R1ZmYgd2l0aCB0aGUgcG9pbnQgb2JqZWN0XHJcbiAgICovXHJcbiAgdXBkYXRlUG9zaXRpb25DYWxsYmFjazogKFxyXG4gICAgb2JqOiBPLFxyXG4gICAgcmVzdWx0OiBBbmNob3JlZFBvaW50Q2FsY3VsYXRlUmVzdWx0LFxyXG4gICAgb3B0aW9ucz86IEFcclxuICApID0+IHZvaWRcclxufSkge1xyXG4gIGNvbnN0IHsgcGFyZW50RWwsIHBvaW50cywgcG9pbnRMb2NhdGlvbkdldHRlciwgdXBkYXRlUG9zaXRpb25DYWxsYmFjayB9ID0gcGFyYW1zXHJcbiAgY29uc3QgeyBjYWxjdWxhdGUgfSA9IHVzZVZpZXdlckFuY2hvcmVkUG9pbnRDYWxjdWxhdG9yKHsgcGFyZW50RWwgfSlcclxuXHJcbiAgLyoqXHJcbiAgICogUmUtY2FsY3VsYXRlIHBvc2l0aW9ucyBmb3IgYWxsIHBvaW50cy4gT3B0aW9uYWxseSBwYXNzIGluIGFyYml0cmFyeSBvcHRpb25zXHJcbiAgICogdGhhdCB5b3Ugd2lsbCBhbHNvIHJlY2VpdmUgaW4gYHVwZGF0ZVBvc2l0aW9uQ2FsbGJhY2tgIGZvciBtYWtpbmcgY2hhbmdlcyBhY2NvcmRpbmdseSxcclxuICAgKiBlLmcuIGBzbW9vdGhUcmFuc2xhdGlvbnNgIHRvIGVuYWJsZSBzbW9vdGhlZCB0cmFuc2xhdGlvbiBiZXR3ZWVuIHBvc2l0aW9ucy5cclxuICAgKi9cclxuICBjb25zdCB1cGRhdGVQb3NpdGlvbnMgPSAob3B0aW9ucz86IEEpID0+IHtcclxuICAgIGNvbnN0IHBvaW50c0FycmF5ID0gaXNBcnJheShwb2ludHMudmFsdWUpID8gcG9pbnRzLnZhbHVlIDogW3BvaW50cy52YWx1ZV1cclxuICAgIGZvciAoY29uc3QgcG9pbnQgb2YgcG9pbnRzQXJyYXkpIHtcclxuICAgICAgY29uc3QgbG9jYXRpb24gPSBwb2ludExvY2F0aW9uR2V0dGVyKHBvaW50KVxyXG4gICAgICBpZiAoIWxvY2F0aW9uKSBjb250aW51ZVxyXG5cclxuICAgICAgY29uc3QgcmVzdWx0ID0gY2FsY3VsYXRlKGxvY2F0aW9uKVxyXG4gICAgICB1cGRhdGVQb3NpdGlvbkNhbGxiYWNrKHBvaW50LCByZXN1bHQsIG9wdGlvbnMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBUT0RPOiBkaXNhYmxpbmcgdGhyb3R0bGUgY2F1c2Ugb2Ygaml0dGVyaW5lc3MgY2F1c2VkIGJ5ICg/KSB2aWV3ZXIgcXVlcmllcywgdGhpcyBuZWVkcyB0byBiZSBsb29rZWQgYXRcclxuICB1c2VWaWV3ZXJDYW1lcmFUcmFja2VyKCgpID0+IHVwZGF0ZVBvc2l0aW9ucygpLCB7IHRocm90dGxlV2FpdDogMCB9KVxyXG4gIHVzZVdpbmRvd1Jlc2l6ZUhhbmRsZXIoKCkgPT4gdXBkYXRlUG9zaXRpb25zKCksIHsgd2FpdDogMCB9KVxyXG5cclxuICB1c2VPblZpZXdlckxvYWRDb21wbGV0ZShcclxuICAgICgpID0+IHtcclxuICAgICAgdXBkYXRlUG9zaXRpb25zKClcclxuICAgIH0sXHJcbiAgICB7IGluaXRpYWxPbmx5OiB0cnVlLCB3YWl0Rm9yTG9hZGluZ092ZXI6IHRydWUgfVxyXG4gIClcclxuXHJcbiAgd2F0Y2goXHJcbiAgICBwb2ludHMsXHJcbiAgICAoKSA9PiB7XHJcbiAgICAgIHVwZGF0ZVBvc2l0aW9ucygpXHJcbiAgICB9LFxyXG4gICAgeyBpbW1lZGlhdGU6IHRydWUgfVxyXG4gIClcclxuXHJcbiAgcmV0dXJuIHtcclxuICAgIHVwZGF0ZVBvc2l0aW9ucyxcclxuICAgIGNhbGN1bGF0ZVxyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVzZUdldFNjcmVlbkNlbnRlck9iamVjdElkKCkge1xyXG4gIGNvbnN0IHtcclxuICAgIHZpZXdlcjoge1xyXG4gICAgICBpbnN0YW5jZSxcclxuICAgICAgbWV0YWRhdGE6IHsgZmlsdGVyaW5nU3RhdGUgfVxyXG4gICAgfVxyXG4gIH0gPSB1c2VJbmplY3RlZFZpZXdlclN0YXRlKClcclxuXHJcbiAgcmV0dXJuICgpID0+IHtcclxuICAgIGNvbnN0IHJlcyA9IGluc3RhbmNlLnF1ZXJ5PEludGVyc2VjdGlvblF1ZXJ5Pih7XHJcbiAgICAgIHBvaW50OiB7IHg6IDAsIHk6IDAgfSxcclxuICAgICAgb3BlcmF0aW9uOiAnUGljaydcclxuICAgIH0pXHJcbiAgICBjb25zdCBvYmogPSAocmVzPy5vYmplY3RzIHx8IFtdKS5maW5kKChvKSA9PiB7XHJcbiAgICAgIGNvbnN0IG9pZCA9IG8ub2JqZWN0Py5pZCBhcyBPcHRpb25hbDxzdHJpbmc+XHJcbiAgICAgIGlmICghb2lkKSByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgIGNvbnN0IGhhc0hpZGRlbk9iamVjdHMgPSAoZmlsdGVyaW5nU3RhdGUudmFsdWU/LmhpZGRlbk9iamVjdHMgfHwgW10pLmxlbmd0aCAhPT0gMFxyXG4gICAgICBjb25zdCBoYXNJc29sYXRlZE9iamVjdHMgPVxyXG4gICAgICAgICEhZmlsdGVyaW5nU3RhdGUudmFsdWU/Lmlzb2xhdGVkT2JqZWN0cyAmJlxyXG4gICAgICAgIGZpbHRlcmluZ1N0YXRlLnZhbHVlPy5pc29sYXRlZE9iamVjdHMubGVuZ3RoICE9PSAwXHJcblxyXG4gICAgICBpZiAoaGFzSGlkZGVuT2JqZWN0cyAmJiBmaWx0ZXJpbmdTdGF0ZS52YWx1ZT8uaGlkZGVuT2JqZWN0cz8uaW5jbHVkZXMob2lkKSlcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuICAgICAgaWYgKGhhc0lzb2xhdGVkT2JqZWN0cyAmJiAhZmlsdGVyaW5nU3RhdGUudmFsdWU/Lmlzb2xhdGVkT2JqZWN0cz8uaW5jbHVkZXMob2lkKSlcclxuICAgICAgICByZXR1cm4gZmFsc2VcclxuXHJcbiAgICAgIHJldHVybiB0cnVlXHJcbiAgICB9KVxyXG5cclxuICAgIHJldHVybiBvYmogPyAob2JqLm9iamVjdD8uaWQgYXMgc3RyaW5nKSA6IG51bGxcclxuICB9XHJcbn1cclxuIl0sImZpbGUiOiJEOi9zcGVja2xlLXNlcnZlci9wYWNrYWdlcy9mcm9udGVuZC0yL2xpYi92aWV3ZXIvY29tcG9zYWJsZXMvYW5jaG9yUG9pbnRzLnRzIn0=