UNPKG

ng-cornerstone

Version:

[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier) [![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.git

155 lines 22.1 kB
import { Enums as csCoreEnum } from '@cornerstonejs/core'; export var LayoutEnum; (function (LayoutEnum) { LayoutEnum[LayoutEnum["LAYOUT_1x1"] = 0] = "LAYOUT_1x1"; LayoutEnum[LayoutEnum["LAYOUT_1x2"] = 1] = "LAYOUT_1x2"; LayoutEnum[LayoutEnum["LAYOUT_1x3"] = 2] = "LAYOUT_1x3"; LayoutEnum[LayoutEnum["LAYOUT_2x2"] = 3] = "LAYOUT_2x2"; })(LayoutEnum || (LayoutEnum = {})); export const STACK_VIEWPORT_INPUTS = [ { viewportId: 'viewport-stack', type: csCoreEnum.ViewportType.STACK, defaultOptions: { background: [0, 0, 0], }, }, ]; export const SAGITTAL_VIEWPORT_INPUTS = [ { viewportId: 'viewport-mpr-sagittal', type: csCoreEnum.ViewportType.ORTHOGRAPHIC, defaultOptions: { background: [0, 0, 0], orientation: csCoreEnum.OrientationAxis.SAGITTAL, }, }, ]; export const CORONAL_VIEWPORT_INPUTS = [ { viewportId: 'viewport-mpr-coronal', type: csCoreEnum.ViewportType.ORTHOGRAPHIC, defaultOptions: { background: [0, 0, 0], orientation: csCoreEnum.OrientationAxis.CORONAL, }, }, ]; export const AXIAL_VIEWPORT_INPUTS = [ { viewportId: 'viewport-mpr-axial', type: csCoreEnum.ViewportType.ORTHOGRAPHIC, defaultOptions: { background: [0, 0, 0], orientation: csCoreEnum.OrientationAxis.AXIAL, }, }, ]; export const VOLUME_3D_VIEWPORT_INPUTS = [ { viewportId: 'viewport-volume', type: csCoreEnum.ViewportType.VOLUME_3D, defaultOptions: { background: [0.2, 0, 0.2], }, }, ]; export function generateViewportInputs(layout, suffix, imageInfo) { const viewportType = imageInfo?.viewportType || csCoreEnum.ViewportType.STACK; const isStack = viewportType === csCoreEnum.ViewportType.STACK; const result = []; switch (layout) { case LayoutEnum.LAYOUT_1x1: // 1x1 layout: set viewportType according to imageType if (viewportType === csCoreEnum.ViewportType.STACK) { const viewportInput = structuredClone(STACK_VIEWPORT_INPUTS[0]); viewportInput.viewportId = `viewport-stack-${suffix}`; result.push(viewportInput); } else if (viewportType === csCoreEnum.ViewportType.VOLUME_3D) { const viewportInput = structuredClone(VOLUME_3D_VIEWPORT_INPUTS[0]); viewportInput.viewportId = `viewport-volume-${suffix}`; result.push(viewportInput); } else { const viewportInput = structuredClone(SAGITTAL_VIEWPORT_INPUTS[0]); viewportInput.viewportId = `viewport-sagittal-${suffix}`; result.push(viewportInput); } break; case LayoutEnum.LAYOUT_1x2: // 1x2 layout: all stack when imageType is stack, otherwise one volume3D one sagittal if (isStack) { for (let i = 0; i < 2; i++) { const viewportInput = structuredClone(STACK_VIEWPORT_INPUTS[0]); viewportInput.viewportId = `viewport-stack-${i + 1}${suffix}`; result.push(viewportInput); } } else { const sagittalViewport = structuredClone(SAGITTAL_VIEWPORT_INPUTS[0]); sagittalViewport.viewportId = `viewport-sagittal-${suffix}`; result.push(sagittalViewport); const volumeViewport = structuredClone(VOLUME_3D_VIEWPORT_INPUTS[0]); volumeViewport.viewportId = `viewport-volume-${suffix}`; result.push(volumeViewport); } break; case LayoutEnum.LAYOUT_1x3: // 1x3 layout: all stack when imageType is stack, otherwise one volume3D one sagittal one axial if (isStack) { for (let i = 0; i < 3; i++) { const viewportInput = structuredClone(STACK_VIEWPORT_INPUTS[0]); viewportInput.viewportId = `viewport-stack-${i + 1}${suffix}`; result.push(viewportInput); } } else { const sagittalViewport = structuredClone(SAGITTAL_VIEWPORT_INPUTS[0]); sagittalViewport.viewportId = `viewport-sagittal-${suffix}`; result.push(sagittalViewport); const axialViewport = structuredClone(AXIAL_VIEWPORT_INPUTS[0]); axialViewport.viewportId = `viewport-axial-${suffix}`; result.push(axialViewport); const volumeViewport = structuredClone(VOLUME_3D_VIEWPORT_INPUTS[0]); volumeViewport.viewportId = `viewport-volume-${suffix}`; result.push(volumeViewport); } break; case LayoutEnum.LAYOUT_2x2: // 2x2 layout: all stack when imageType is stack, otherwise one volume3D one sagittal one axial one coronal if (isStack) { for (let i = 0; i < 4; i++) { const viewportInput = structuredClone(STACK_VIEWPORT_INPUTS[0]); viewportInput.viewportId = `viewport-stack-${i + 1}${suffix}`; result.push(viewportInput); } } else { const sagittalViewport = structuredClone(SAGITTAL_VIEWPORT_INPUTS[0]); sagittalViewport.viewportId = `viewport-sagittal-${suffix}`; result.push(sagittalViewport); const axialViewport = structuredClone(AXIAL_VIEWPORT_INPUTS[0]); axialViewport.viewportId = `viewport-axial-${suffix}`; result.push(axialViewport); const coronalViewport = structuredClone(CORONAL_VIEWPORT_INPUTS[0]); coronalViewport.viewportId = `viewport-coronal-${suffix}`; result.push(coronalViewport); const volumeViewport = structuredClone(VOLUME_3D_VIEWPORT_INPUTS[0]); volumeViewport.viewportId = `viewport-volume-${suffix}`; result.push(volumeViewport); } break; } return result; } export function generateRandomString(length = 6) { const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; let result = ''; for (let i = 0; i < length; i++) { const randomIndex = Math.floor(Math.random() * characters.length); result += characters[randomIndex]; } return '-' + result; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5b3V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29ybmVyc3RvbmUvc3JjL2xpYi9jb3JlL2NvbmZpZy9sYXlvdXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssSUFBSSxVQUFVLEVBQVMsTUFBTSxxQkFBcUIsQ0FBQztBQUdqRSxNQUFNLENBQU4sSUFBWSxVQUtYO0FBTEQsV0FBWSxVQUFVO0lBQ3BCLHVEQUFVLENBQUE7SUFDVix1REFBVSxDQUFBO0lBQ1YsdURBQVUsQ0FBQTtJQUNWLHVEQUFVLENBQUE7QUFDWixDQUFDLEVBTFcsVUFBVSxLQUFWLFVBQVUsUUFLckI7QUFFRCxNQUFNLENBQUMsTUFBTSxxQkFBcUIsR0FBeUM7SUFDekU7UUFDRSxVQUFVLEVBQUUsZ0JBQWdCO1FBQzVCLElBQUksRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDLEtBQUs7UUFDbkMsY0FBYyxFQUFFO1lBQ2QsVUFBVSxFQUFnQixDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQ3BDO0tBQ0Y7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQXlDO0lBQzVFO1FBQ0UsVUFBVSxFQUFFLHVCQUF1QjtRQUNuQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxZQUFZO1FBQzFDLGNBQWMsRUFBRTtZQUNkLFVBQVUsRUFBZ0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuQyxXQUFXLEVBQUUsVUFBVSxDQUFDLGVBQWUsQ0FBQyxRQUFRO1NBQ2pEO0tBQ0Y7Q0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQXlDO0lBQzNFO1FBQ0UsVUFBVSxFQUFFLHNCQUFzQjtRQUNsQyxJQUFJLEVBQUUsVUFBVSxDQUFDLFlBQVksQ0FBQyxZQUFZO1FBQzFDLGNBQWMsRUFBRTtZQUNkLFVBQVUs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QUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBRTNCLE1BQU0sZUFBZSxHQUFHLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNwRSxlQUFlLENBQUMsVUFBVSxHQUFHLG9CQUFvQixNQUFNLEVBQUUsQ0FBQztnQkFDMUQsTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFFN0IsTUFBTSxjQUFjLEdBQUcsZUFBZSxDQUFDLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JFLGNBQWMsQ0FBQyxVQUFVLEdBQUcsbUJBQW1CLE1BQU0sRUFBRSxDQUFDO2dCQUN4RCxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1lBQzlCLENBQUM7WUFDRCxNQUFNO0lBQ1YsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUM7SUFDN0MsTUFBTSxVQUFVLEdBQUcsZ0VBQWdFLENBQUM7SUFDcEYsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO0lBQ2hCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNoQyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEUsTUFBTSxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQ0QsT0FBTyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3RCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbnVtcyBhcyBjc0NvcmVFbnVtLCBUeXBlcyB9IGZyb20gJ0Bjb3JuZXJzdG9uZWpzL2NvcmUnO1xuaW1wb3J0IHsgSW1hZ2VJbmZvIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBlbnVtIExheW91dEVudW0ge1xuICBMQVlPVVRfMXgxLCAvLyBTaW5nbGUgdmlld3BvcnQgbGF5b3V0XG4gIExBWU9VVF8xeDIsIC8vIDEgcm93IDIgY29sdW1ucyBsYXlvdXRcbiAgTEFZT1VUXzF4MywgLy8gMSByb3cgMyBjb2x1bW5zIGxheW91dFxuICBMQVlPVVRfMngyLCAvLyAyIHJvd3MgMiBjb2x1bW5zIGxheW91dFxufVxuXG5leHBvcnQgY29uc3QgU1RBQ0tfVklFV1BPUlRfSU5QVVRTOiBQYXJ0aWFsPFR5cGVzLlB1YmxpY1ZpZXdwb3J0SW5wdXQ+W10gPSBbXG4gIHtcbiAgICB2aWV3cG9ydElkOiAndmlld3BvcnQtc3RhY2snLFxuICAgIHR5cGU6IGNzQ29yZUVudW0uVmlld3BvcnRUeXBlLlNUQUNLLFxuICAgIGRlZmF1bHRPcHRpb25zOiB7XG4gICAgICBiYWNrZ3JvdW5kOiA8VHlwZXMuUG9pbnQzPlswLCAwLCAwXSxcbiAgICB9LFxuICB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IFNBR0lUVEFMX1ZJRVdQT1JUX0lOUFVUUzogUGFydGlhbDxUeXBlcy5QdWJsaWNWaWV3cG9ydElucHV0PltdID0gW1xuICB7XG4gICAgdmlld3BvcnRJZDogJ3ZpZXdwb3J0LW1wci1zYWdpdHRhbCcsXG4gICAgdHlwZTogY3NDb3JlRW51bS5WaWV3cG9ydFR5cGUuT1JUSE9HUkFQSElDLFxuICAgIGRlZmF1bHRPcHRpb25zOiB7XG4gICAgICBiYWNrZ3JvdW5kOiA8VHlwZXMuUG9pbnQzPlswLCAwLCAwXSxcbiAgICAgIG9yaWVudGF0aW9uOiBjc0NvcmVFbnVtLk9yaWVudGF0aW9uQXhpcy5TQUdJVFRBTCxcbiAgICB9LFxuICB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IENPUk9OQUxfVklFV1BPUlRfSU5QVVRTOiBQYXJ0aWFsPFR5cGVzLlB1YmxpY1ZpZXdwb3J0SW5wdXQ+W10gPSBbXG4gIHtcbiAgICB2aWV3cG9ydElkOiAndmlld3BvcnQtbXByLWNvcm9uYWwnLFxuICAgIHR5cGU6IGNzQ29yZUVudW0uVmlld3BvcnRUeXBlLk9SVEhPR1JBUEhJQyxcbiAgICBkZWZhdWx0T3B0aW9uczoge1xuICAgICAgYmFja2dyb3VuZDogPFR5cGVzLlBvaW50Mz5bMCwgMCwgMF0sXG4gICAgICBvcmllbnRhdGlvbjogY3NDb3JlRW51bS5PcmllbnRhdGlvbkF4aXMuQ09ST05BTCxcbiAgICB9LFxuICB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IEFYSUFMX1ZJRVdQT1JUX0lOUFVUUzogUGFydGlhbDxUeXBlcy5QdWJsaWNWaWV3cG9ydElucHV0PltdID0gW1xuICB7XG4gICAgdmlld3BvcnRJZDogJ3ZpZXdwb3J0LW1wci1heGlhbCcsXG4gICAgdHlwZTogY3NDb3JlRW51bS5WaWV3cG9ydFR5cGUuT1JUSE9HUkFQSElDLFxuICAgIGRlZmF1bHRPcHRpb25zOiB7XG4gICAgICBiYWNrZ3JvdW5kOiA8VHlwZXMuUG9pbnQzPlswLCAwLCAwXSxcbiAgICAgIG9yaWVudGF0aW9uOiBjc0NvcmVFbnVtLk9yaWVudGF0aW9uQXhpcy5BWElBTCxcbiAgICB9LFxuICB9LFxuXTtcblxuZXhwb3J0IGNvbnN0IFZPTFVNRV8zRF9WSUVXUE9SVF9JTlBVVFM6IFBhcnRpYWw8VHlwZXMuUHVibGljVmlld3BvcnRJbnB1dD5bXSA9IFtcbiAge1xuICAgIHZpZXdwb3J0SWQ6ICd2aWV3cG9ydC12b2x1bWUnLFxuICAgIHR5cGU6IGNzQ29yZUVudW0uVmlld3BvcnRUeXBlLlZPTFVNRV8zRCxcbiAgICBkZWZhdWx0T3B0aW9uczoge1xuICAgICAgYmFja2dyb3VuZDogPFR5cGVzLlBvaW50Mz5bMC4yLCAwLCAwLjJdLFxuICAgIH0sXG4gIH0sXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVWaWV3cG9ydElucHV0cyhcbiAgbGF5b3V0OiBMYXlvdXRFbnVtLFxuICBzdWZmaXg6IHN0cmluZyxcbiAgaW1hZ2VJbmZvPzogSW1hZ2VJbmZvLFxuKTogUGFydGlhbDxUeXBlcy5QdWJsaWNWaWV3cG9ydElucHV0PltdIHtcbiAgY29uc3Qgdmlld3BvcnRUeXBlID0gaW1hZ2VJbmZvPy52aWV3cG9ydFR5cGUgfHwgY3NDb3JlRW51bS5WaWV3cG9ydFR5cGUuU1RBQ0s7XG4gIGNvbnN0IGlzU3RhY2sgPSB2aWV3cG9ydFR5cGUgPT09IGNzQ29yZUVudW0uVmlld3BvcnRUeXBlLlNUQUNLO1xuICBjb25zdCByZXN1bHQ6IFBhcnRpYWw8VHlwZXMuUHVibGljVmlld3BvcnRJbnB1dD5bXSA9IFtdO1xuXG4gIHN3aXRjaCAobGF5b3V0KSB7XG4gICAgY2FzZSBMYXlvdXRFbnVtLkxBWU9VVF8xeDE6XG4gICAgICAvLyAxeDEgbGF5b3V0OiBzZXQgdmlld3BvcnRUeXBlIGFjY29yZGluZyB0byBpbWFnZVR5cGVcbiAgICAgIGlmICh2aWV3cG9ydFR5cGUgPT09IGNzQ29yZUVudW0uVmlld3BvcnRUeXBlLlNUQUNLKSB7XG4gICAgICAgIGNvbnN0IHZpZXdwb3J0SW5wdXQgPSBzdHJ1Y3R1cmVkQ2xvbmUoU1RBQ0tfVklFV1BPUlRfSU5QVVRTWzBdKTtcbiAgICAgICAgdmlld3BvcnRJbnB1dC52aWV3cG9ydElkID0gYHZpZXdwb3J0LXN0YWNrLSR7c3VmZml4fWA7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZpZXdwb3J0SW5wdXQpO1xuICAgICAgfSBlbHNlIGlmICh2aWV3cG9ydFR5cGUgPT09IGNzQ29yZUVudW0uVmlld3BvcnRUeXBlLlZPTFVNRV8zRCkge1xuICAgICAgICBjb25zdCB2aWV3cG9ydElucHV0ID0gc3RydWN0dXJlZENsb25lKFZPTFVNRV8zRF9WSUVXUE9SVF9JTlBVVFNbMF0pO1xuICAgICAgICB2aWV3cG9ydElucHV0LnZpZXdwb3J0SWQgPSBgdmlld3BvcnQtdm9sdW1lLSR7c3VmZml4fWA7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZpZXdwb3J0SW5wdXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRJbnB1dCA9IHN0cnVjdHVyZWRDbG9uZShTQUdJVFRBTF9WSUVXUE9SVF9JTlBVVFNbMF0pO1xuICAgICAgICB2aWV3cG9ydElucHV0LnZpZXdwb3J0SWQgPSBgdmlld3BvcnQtc2FnaXR0YWwtJHtzdWZmaXh9YDtcbiAgICAgICAgcmVzdWx0LnB1c2godmlld3BvcnRJbnB1dCk7XG4gICAgICB9XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgTGF5b3V0RW51bS5MQVlPVVRfMXgyOlxuICAgICAgLy8gMXgyIGxheW91dDogYWxsIHN0YWNrIHdoZW4gaW1hZ2VUeXBlIGlzIHN0YWNrLCBvdGhlcndpc2Ugb25lIHZvbHVtZTNEIG9uZSBzYWdpdHRhbFxuICAgICAgaWYgKGlzU3RhY2spIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB2aWV3cG9ydElucHV0ID0gc3RydWN0dXJlZENsb25lKFNUQUNLX1ZJRVdQT1JUX0lOUFVUU1swXSk7XG4gICAgICAgICAgdmlld3BvcnRJbnB1dC52aWV3cG9ydElkID0gYHZpZXdwb3J0LXN0YWNrLSR7aSArIDF9JHtzdWZmaXh9YDtcbiAgICAgICAgICByZXN1bHQucHVzaCh2aWV3cG9ydElucHV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2FnaXR0YWxWaWV3cG9ydCA9IHN0cnVjdHVyZWRDbG9uZShTQUdJVFRBTF9WSUVXUE9SVF9JTlBVVFNbMF0pO1xuICAgICAgICBzYWdpdHRhbFZpZXdwb3J0LnZpZXdwb3J0SWQgPSBgdmlld3BvcnQtc2FnaXR0YWwtJHtzdWZmaXh9YDtcbiAgICAgICAgcmVzdWx0LnB1c2goc2FnaXR0YWxWaWV3cG9ydCk7XG5cbiAgICAgICAgY29uc3Qgdm9sdW1lVmlld3BvcnQgPSBzdHJ1Y3R1cmVkQ2xvbmUoVk9MVU1FXzNEX1ZJRVdQT1JUX0lOUFVUU1swXSk7XG4gICAgICAgIHZvbHVtZVZpZXdwb3J0LnZpZXdwb3J0SWQgPSBgdmlld3BvcnQtdm9sdW1lLSR7c3VmZml4fWA7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZvbHVtZVZpZXdwb3J0KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBMYXlvdXRFbnVtLkxBWU9VVF8xeDM6XG4gICAgICAvLyAxeDMgbGF5b3V0OiBhbGwgc3RhY2sgd2hlbiBpbWFnZVR5cGUgaXMgc3RhY2ssIG90aGVyd2lzZSBvbmUgdm9sdW1lM0Qgb25lIHNhZ2l0dGFsIG9uZSBheGlhbFxuICAgICAgaWYgKGlzU3RhY2spIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpKyspIHtcbiAgICAgICAgICBjb25zdCB2aWV3cG9ydElucHV0ID0gc3RydWN0dXJlZENsb25lKFNUQUNLX1ZJRVdQT1JUX0lOUFVUU1swXSk7XG4gICAgICAgICAgdmlld3BvcnRJbnB1dC52aWV3cG9ydElkID0gYHZpZXdwb3J0LXN0YWNrLSR7aSArIDF9JHtzdWZmaXh9YDtcbiAgICAgICAgICByZXN1bHQucHVzaCh2aWV3cG9ydElucHV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2FnaXR0YWxWaWV3cG9ydCA9IHN0cnVjdHVyZWRDbG9uZShTQUdJVFRBTF9WSUVXUE9SVF9JTlBVVFNbMF0pO1xuICAgICAgICBzYWdpdHRhbFZpZXdwb3J0LnZpZXdwb3J0SWQgPSBgdmlld3BvcnQtc2FnaXR0YWwtJHtzdWZmaXh9YDtcbiAgICAgICAgcmVzdWx0LnB1c2goc2FnaXR0YWxWaWV3cG9ydCk7XG5cbiAgICAgICAgY29uc3QgYXhpYWxWaWV3cG9ydCA9IHN0cnVjdHVyZWRDbG9uZShBWElBTF9WSUVXUE9SVF9JTlBVVFNbMF0pO1xuICAgICAgICBheGlhbFZpZXdwb3J0LnZpZXdwb3J0SWQgPSBgdmlld3BvcnQtYXhpYWwtJHtzdWZmaXh9YDtcbiAgICAgICAgcmVzdWx0LnB1c2goYXhpYWxWaWV3cG9ydCk7XG5cbiAgICAgICAgY29uc3Qgdm9sdW1lVmlld3BvcnQgPSBzdHJ1Y3R1cmVkQ2xvbmUoVk9MVU1FXzNEX1ZJRVdQT1JUX0lOUFVUU1swXSk7XG4gICAgICAgIHZvbHVtZVZpZXdwb3J0LnZpZXdwb3J0SWQgPSBgdmlld3BvcnQtdm9sdW1lLSR7c3VmZml4fWA7XG4gICAgICAgIHJlc3VsdC5wdXNoKHZvbHVtZVZpZXdwb3J0KTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBMYXlvdXRFbnVtLkxBWU9VVF8yeDI6XG4gICAgICAvLyAyeDIgbGF5b3V0OiBhbGwgc3RhY2sgd2hlbiBpbWFnZVR5cGUgaXMgc3RhY2ssIG90aGVyd2lzZSBvbmUgdm9sdW1lM0Qgb25lIHNhZ2l0dGFsIG9uZSBheGlhbCBvbmUgY29yb25hbFxuICAgICAgaWYgKGlzU3RhY2spIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICAgICAgICBjb25zdCB2aWV3cG9ydElucHV0ID0gc3RydWN0dXJlZENsb25lKFNUQUNLX1ZJRVdQT1JUX0lOUFVUU1swXSk7XG4gICAgICAgICAgdmlld3BvcnRJbnB1dC52aWV3cG9ydElkID0gYHZpZXdwb3J0LXN0YWNrLSR7aSArIDF9JHtzdWZmaXh9YDtcbiAgICAgICAgICByZXN1bHQucHVzaCh2aWV3cG9ydElucHV0KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgc2FnaXR0YWxWaWV3cG9ydCA9IHN0cnVjdHVyZWRDbG9uZShTQUdJVFRBTF9WSUVXUE9SVF9JTlBVVFNbMF0pO1xuICAgICAgICBzYWdpdHRhbFZpZXdwb3J0LnZpZXdwb3J0SWQgPSBgdmlld3BvcnQtc2FnaXR0YWwtJHtzdWZmaXh9YDtcbiAgICAgICAgcmVzdWx0LnB1c2goc2FnaXR0YWxWaWV3cG9ydCk7XG5cbiAgICAgICAgY29uc3QgYXhpYWxWaWV3cG9ydCA9IHN0cnVjdHVyZWRDbG9uZShBWElBTF9WSUVXUE9SVF9JTlBVVFNbMF0pO1xuICAgICAgICBheGlhbFZpZXdwb3J0LnZpZXdwb3J0SWQgPSBgdmlld3BvcnQtYXhpYWwtJHtzdWZmaXh9YDtcbiAgICAgICAgcmVzdWx0LnB1c2goYXhpYWxWaWV3cG9ydCk7XG5cbiAgICAgICAgY29uc3QgY29yb25hbFZpZXdwb3J0ID0gc3RydWN0dXJlZENsb25lKENPUk9OQUxfVklFV1BPUlRfSU5QVVRTWzBdKTtcbiAgICAgICAgY29yb25hbFZpZXdwb3J0LnZpZXdwb3J0SWQgPSBgdmlld3BvcnQtY29yb25hbC0ke3N1ZmZpeH1gO1xuICAgICAgICByZXN1bHQucHVzaChjb3JvbmFsVmlld3BvcnQpO1xuXG4gICAgICAgIGNvbnN0IHZvbHVtZVZpZXdwb3J0ID0gc3RydWN0dXJlZENsb25lKFZPTFVNRV8zRF9WSUVXUE9SVF9JTlBVVFNbMF0pO1xuICAgICAgICB2b2x1bWVWaWV3cG9ydC52aWV3cG9ydElkID0gYHZpZXdwb3J0LXZvbHVtZS0ke3N1ZmZpeH1gO1xuICAgICAgICByZXN1bHQucHVzaCh2b2x1bWVWaWV3cG9ydCk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZVJhbmRvbVN0cmluZyhsZW5ndGggPSA2KSB7XG4gIGNvbnN0IGNoYXJhY3RlcnMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODknO1xuICBsZXQgcmVzdWx0ID0gJyc7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCByYW5kb21JbmRleCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJhY3RlcnMubGVuZ3RoKTtcbiAgICByZXN1bHQgKz0gY2hhcmFjdGVyc1tyYW5kb21JbmRleF07XG4gIH1cbiAgcmV0dXJuICctJyArIHJlc3VsdDtcbn1cbiJdfQ==